<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: lavp</title><link>https://news.ycombinator.com/user?id=lavp</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 29 Jul 2026 05:37:27 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=lavp" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by lavp in "The West forgot how to make things, now it’s forgetting how to code"]]></title><description><![CDATA[
<p>Documentation should serve as a general overview of the system (purpose, architecture, etc.), and elaborate on the interface of that system. Other than documenting historical relics like ADRs, I see it as a net negative in being very granular.<p>It quickly becomes outdated and at some point you just need to accept that only the code will be the most accurate source of truth.</p>
]]></description><pubDate>Mon, 27 Apr 2026 21:42:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=47927743</link><dc:creator>lavp</dc:creator><comments>https://news.ycombinator.com/item?id=47927743</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47927743</guid></item><item><title><![CDATA[New comment by lavp in "Git commands I run before reading any code"]]></title><description><![CDATA[
<p>I made a bash function to turn these commands into a one page diagnostics report so that you can use this in your `.bashrc`:<p>Diagnostics function, colorized (I tried to add guards so it is portable with terminals that do not support color):<p><pre><code>  git_diag() {
    local since="${1:-1 year ago}"
    local root repo branch

    # --- patterns ---
    local pattern="${GIT_DIAG_PATTERN:-fix|bug|broken|hotfix|incident|issue|patch}"
    local firefight_pattern="revert|hotfix|emergency|rollback"

    # --- colors ---
    local GREP_COLOR_MODE='never'
    if [[ -z "${NO_COLOR:-}" ]] && [[ -t 1 ]] && [[ "${TERM:-}" != "dumb" ]] && [[ "$(tput colors 2>/dev/null || echo 0)" -ge 8 ]]; then
      local BLACK=$(tput setaf 0)
      local RED=$(tput setaf 1)
      local GREEN=$(tput setaf 2)
      local YELLOW=$(tput setaf 3)
      local BLUE=$(tput setaf 4)
      local MAGENTA=$(tput setaf 5)
      local CYAN=$(tput setaf 6)
      local WHITE=$(tput setaf 7)
      local BOLD=$(tput bold)
      local DIM=$(tput dim 2>/dev/null || true)
      local RESET=$(tput sgr0)
      GREP_COLOR_MODE='always'
    else
      local BLACK='' RED='' GREEN='' YELLOW='' BLUE='' MAGENTA='' CYAN='' WHITE=''
      local BOLD='' DIM='' RESET=''
    fi

    local TITLE="$CYAN"
    local COLOR_COUNT="$CYAN"
    local COLOR_FILE="$YELLOW"

    if ! root="$(git rev-parse --show-toplevel 2>/dev/null)"; then
      printf 'git_diag: not inside a Git repository\n' >&2
      return 1
    fi

    repo="${root##*/}"
    branch="$(git branch --show-current 2>/dev/null)"
    branch="${branch:-DETACHED}"

    _git_diag_fmt_count() {
      local count_color="$1"
      local text_color="$2"

      awk -v count_color="$count_color" -v text_color="$text_color" -v reset="$RESET" '{
        c=$1
        $1=""
        sub(/^ +/, "")
        printf "  %s%10d%s  %s%s%s\n", count_color, c, reset, text_color, $0, reset
      }'
    }

    printf '%s%sGit repo diagnostics%s\n' "$BOLD" "$TITLE" "$RESET"
    printf '%s%-11s%s %s\n' "$BOLD" "Repo:"      "$RESET" "$repo"
    printf '%s%-11s%s %s\n' "$BOLD" "Branch:"    "$RESET" "$branch"
    printf '%s%-11s%s %s\n' "$BOLD" "Timeframe:" "$RESET" "$since → now"
    printf '\n\n'

    printf '%s%s1) Most changed files%s\n' "$BOLD" "$TITLE" "$RESET"
    git log --since="$since" --format='' --name-only \
      | awk 'NF' \
      | sort \
      | uniq -c \
      | sort -nr \
      | head -n 10 \
      | _git_diag_fmt_count "$COLOR_COUNT" "$COLOR_FILE"

    printf '\n%s%s2) Top contributors%s\n' "$BOLD" "$TITLE" "$RESET"
    git shortlog -sn --no-merges --since="$since" \
      | head -n 10 \
      | awk -v count_color="$COLOR_COUNT" -v reset="$RESET" '{
          printf "  %s%10d%s  %s\n", count_color, $1, reset, substr($0, index($0,$2))
        }'

    printf '\n%s%s3) Bug/fix hotspots%s %s(pattern: %s)%s\n' "$BOLD" "$TITLE" "$RESET" "$DIM" "$pattern" "$RESET"
    git log --since="$since" --format='' --name-only -i -E --grep="$pattern" \
      | awk 'NF' \
      | sort \
      | uniq -c \
      | sort -nr \
      | head -n 10 \
      | _git_diag_fmt_count "$COLOR_COUNT" "$COLOR_FILE"

    printf '\n%s%s4) Commit count by month%s\n' "$BOLD" "$TITLE" "$RESET"
    git log --since="$since" --format='%ad' --date=format:'%Y-%m' \
      | sort \
      | uniq -c \
      | sort -k2r \
      | awk -v count_color="$COLOR_COUNT" -v mag="$MAGENTA" -v reset="$RESET" '
        {
          data[NR,1] = $2
          data[NR,2] = $1
          if (length($1) > max) max = length($1)
        }
        END {
          for (i = 1; i <= NR; i++) {
            printf "  %s%10s%s  %s%*d commits%s\n",
              mag, data[i,1], reset,
              count_color, max, data[i,2], reset
          }
        }
      '

    printf '\n%s%s5) Firefighting commits%s %s(pattern: %s)%s\n' "$BOLD" "$TITLE" "$RESET" "$DIM" "$firefight_pattern" "$RESET"
    git log --since="$since" -i -E \
      --grep="$firefight_pattern" \
      --date=short \
      --pretty=format:'%ad %h %s' \
      | head -n 10 \
      | awk -v mag="$MAGENTA" -v dim="$DIM" -v reset="$RESET" '{
          date=$1
          hash=$2
          $1=$2=""
          sub(/^  */, "")
          printf "  %s%-10s%s  %s%-12s%s  %s\n",
            mag, date, reset,
            dim, hash, reset,
            $0
        }' \
      | GREP_COLORS='ms=01;31' grep --color="$GREP_COLOR_MODE" -i -E "$firefight_pattern"
  }
</code></pre>
Uncolorized diagnostics function (same, but without the colors):<p><pre><code>  git_diag() {
    local since="${1:-1 year ago}"
    local pattern="${GIT_DIAG_PATTERN:-fix|bug|broken|hotfix|incident|issue|patch}"
    local root repo branch

    if ! root="$(git rev-parse --show-toplevel 2>/dev/null)"; then
      printf 'git_diag: not inside a Git repository\n' >&2
      return 1
    fi

    repo="${root##*/}"
    branch="$(git branch --show-current 2>/dev/null)"
    branch="${branch:-DETACHED}"

    _git_diag_fmt_count() {
      awk '{
        c=$1
        $1=""
        sub(/^ +/, "")
        printf "  %10d  %s\n", c, $0
      }'
    }

    printf '============================================================\n'
    printf 'Git repo diagnostics\n'
    printf '%-11s%as\n' 'Repo:'      "$repo"
    printf '%-11s%s\n' 'Branch:'    "$branch"
    printf '%-11s%s\n' 'Timeframe:' "$since"
    printf '============================================================\n\n'

    printf '1) Most changed files (top 10)\n'
    git log --since="$since" --format='' --name-only \
      | awk 'NF' \
      | sort \
      | uniq -c \
      | sort -nr \
      | head -n 10 \
      | _git_diag_fmt_count

    printf '\n2) Top 10 contributors (no merges, since %s)\n' "$since"
    git shortlog -sn --no-merges --since="$since" \
      | head -n 10 \
      | _git_diag_fmt_count

    printf '\n3) Bug/fix hotspots (top 10, matching: %s)\n' "$pattern"
    git log --since="$since" --format='' --name-only -i -E --grep="$pattern" \
      | awk 'NF' \
      | sort \
      | uniq -c \
      | sort -nr \
      | head -n 10 \
      | _git_diag_fmt_count

    printf '\n4) Commit count by month (since %s)\n' "$since"
    git log --since="$since" --format='%ad' --date=format:'%Y-%m' \
      | sort \
      | uniq -c \
      | sort -k2r \
      | awk '
        {
          data[NR,1] = $2
          data[NR,2] = $1
          if (length($1) > max) max = length($1)
        }
        END {
          for (i = 1; i <= NR; i++) {
            printf "  %10s  %*d commits\n", data[i,1], max, data[i,2]
          }
        }
      '

    printf '\n5) 10 most recent firefighting commits (revert|hotfix|emergency|rollback)\n'
    git log --since="$since" -i -E \
      --grep='revert|hotfix|emergency|rollback' \
      --date=short \
      --pretty=format:'%ad %h %s' \
      | head -n 10 \
      | awk '{
          date=$1
          hash=$2
          $1=$2=""
          sub(/^  */, "")
          printf "  %-10s  %-12s  %s\n", date, hash, $0
        }' \
      | GREP_COLORS='ms=01;31' grep --color=always -i -E 'revert|hotfix|emergency|rollback'
  }</code></pre></p>
]]></description><pubDate>Wed, 08 Apr 2026 23:13:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=47697392</link><dc:creator>lavp</dc:creator><comments>https://news.ycombinator.com/item?id=47697392</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47697392</guid></item><item><title><![CDATA[New comment by lavp in "Airport wait times are longest in TSA history, agency says"]]></title><description><![CDATA[
<p>Airport security used to be handled by private companies. Then 9/11 happened and that's the whole reason TSA even exists.</p>
]]></description><pubDate>Thu, 26 Mar 2026 19:25:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=47534565</link><dc:creator>lavp</dc:creator><comments>https://news.ycombinator.com/item?id=47534565</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47534565</guid></item><item><title><![CDATA[The United States and Israel have launched a major attack on Iran]]></title><description><![CDATA[
<p><a href="https://archive.ph/VqSqj" rel="nofollow">https://archive.ph/VqSqj</a></p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47191232">https://news.ycombinator.com/item?id=47191232</a></p>
<p>Points: 1207</p>
<p># Comments: 2651</p>
]]></description><pubDate>Sat, 28 Feb 2026 06:34:07 +0000</pubDate><link>https://www.cnn.com/2026/02/28/middleeast/israel-attack-iran-intl-hnk</link><dc:creator>lavp</dc:creator><comments>https://news.ycombinator.com/item?id=47191232</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47191232</guid></item><item><title><![CDATA[New comment by lavp in "You Need to Ditch VS Code"]]></title><description><![CDATA[
<p>`rm` is a destructive operation, but you can always alias it to move it to a trash folder.<p>File managers have nowhere near the flexibility available in the terminal.</p>
]]></description><pubDate>Tue, 30 Dec 2025 18:29:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=46436340</link><dc:creator>lavp</dc:creator><comments>https://news.ycombinator.com/item?id=46436340</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46436340</guid></item><item><title><![CDATA[Jeffrey Epstein Court Records]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.justice.gov/epstein/court-records">https://www.justice.gov/epstein/court-records</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46330860">https://news.ycombinator.com/item?id=46330860</a></p>
<p>Points: 35</p>
<p># Comments: 13</p>
]]></description><pubDate>Fri, 19 Dec 2025 21:00:40 +0000</pubDate><link>https://www.justice.gov/epstein/court-records</link><dc:creator>lavp</dc:creator><comments>https://news.ycombinator.com/item?id=46330860</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46330860</guid></item><item><title><![CDATA[New comment by lavp in "Git 3.0 will use main as the default branch"]]></title><description><![CDATA[
<p>I feel very uncomfortable with Chess players holding 'Grandmaster' titles. Would much prefer 'Grandmain'.</p>
]]></description><pubDate>Mon, 24 Nov 2025 17:41:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=46036768</link><dc:creator>lavp</dc:creator><comments>https://news.ycombinator.com/item?id=46036768</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46036768</guid></item><item><title><![CDATA[New comment by lavp in "M5 MacBook Pro"]]></title><description><![CDATA[
<p>I’ve found Macs to be good for most dev stuff with the exception of non-Dockerized C++.<p>Unfortunately I do a lot of C++… I hate the hoops you have to go through to not use the Apple Clang compiler.</p>
]]></description><pubDate>Wed, 15 Oct 2025 18:14:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=45596445</link><dc:creator>lavp</dc:creator><comments>https://news.ycombinator.com/item?id=45596445</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45596445</guid></item><item><title><![CDATA[New comment by lavp in "Blunder Free Chess – visualize which squares are attacked"]]></title><description><![CDATA[
<p>When you are delivering mate in 1, the square still gets highlighted as being attacked by the king.</p>
]]></description><pubDate>Tue, 25 Feb 2025 17:52:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=43175075</link><dc:creator>lavp</dc:creator><comments>https://news.ycombinator.com/item?id=43175075</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43175075</guid></item><item><title><![CDATA[New comment by lavp in "What is theoretical computer science?"]]></title><description><![CDATA[
<p>What you described is syntax differences. `=` is assignment, not equivalence.</p>
]]></description><pubDate>Sat, 19 Oct 2024 01:41:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=41884990</link><dc:creator>lavp</dc:creator><comments>https://news.ycombinator.com/item?id=41884990</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41884990</guid></item><item><title><![CDATA[New comment by lavp in "McKinsey Under Criminal Investigation over Opioid-Related Consulting"]]></title><description><![CDATA[
<p><a href="https://archive.md/7Fk72" rel="nofollow">https://archive.md/7Fk72</a></p>
]]></description><pubDate>Thu, 25 Apr 2024 06:33:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=40154170</link><dc:creator>lavp</dc:creator><comments>https://news.ycombinator.com/item?id=40154170</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40154170</guid></item><item><title><![CDATA[New comment by lavp in "Racket Language"]]></title><description><![CDATA[
<p>I also TA'd 110 and I firmly disagree. CPSC110 teaches you to view a particular problem as a series of different possible states, and solving for those states (while placing an emphasis on seeing base cases and working up from there). Students learn about data structures like binary trees by the fifth week, and the ninth week they're already able to solve sudoku puzzles using generative recursion. We even touched on the n-queens problem towards the end of the course.<p>Racket serves its purpose well as a simple and fast to learn educational language; it's easy to see and understand recursion. It's also easy to see what the execution order of statements in your program.<p>I will say though that some problem sets were a bit brutal in terms of time taken to complete them.</p>
]]></description><pubDate>Sun, 21 Apr 2024 06:24:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=40103567</link><dc:creator>lavp</dc:creator><comments>https://news.ycombinator.com/item?id=40103567</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40103567</guid></item><item><title><![CDATA[New comment by lavp in "Racket Language"]]></title><description><![CDATA[
<p>Good ol' Gregory Kiczales</p>
]]></description><pubDate>Sun, 21 Apr 2024 06:06:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=40103498</link><dc:creator>lavp</dc:creator><comments>https://news.ycombinator.com/item?id=40103498</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40103498</guid></item><item><title><![CDATA[A Brief History of 2D Programming Languages (2016)]]></title><description><![CDATA[
<p>Article URL: <a href="https://codegolf.stackexchange.com/questions/94810/when-was-this-language-released">https://codegolf.stackexchange.com/questions/94810/when-was-this-language-released</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=39854813">https://news.ycombinator.com/item?id=39854813</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 28 Mar 2024 17:31:36 +0000</pubDate><link>https://codegolf.stackexchange.com/questions/94810/when-was-this-language-released</link><dc:creator>lavp</dc:creator><comments>https://news.ycombinator.com/item?id=39854813</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39854813</guid></item><item><title><![CDATA[New comment by lavp in "The Era of 1-bit LLMs: ternary parameters for cost-effective computing"]]></title><description><![CDATA[
<p>What does “perform slightly better than Llama” mean exactly? A model like this needs to be trained from scratch right?</p>
]]></description><pubDate>Thu, 29 Feb 2024 06:33:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=39546900</link><dc:creator>lavp</dc:creator><comments>https://news.ycombinator.com/item?id=39546900</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39546900</guid></item><item><title><![CDATA[New comment by lavp in "OpenAI's board has fired Sam Altman"]]></title><description><![CDATA[
<p>Sam Altman’s latest tweet 9 minutes ago:<p>i loved my time at openai. it was transformative for me personally, and hopefully the world a little bit. most of all i loved working with such talented people.<p>will have more to say about what’s next later.</p>
]]></description><pubDate>Fri, 17 Nov 2023 21:56:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=38311025</link><dc:creator>lavp</dc:creator><comments>https://news.ycombinator.com/item?id=38311025</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38311025</guid></item><item><title><![CDATA[New comment by lavp in "Emacs is my new window manager"]]></title><description><![CDATA[
<p>I loved every minute of my neovim + i3 setup on Arch. Was sad to let that go when I moved into Apple’s ecosystem (their laptop hardware is too good).<p>I’ve begun switching my to Emacs + evil mode and I thoroughly enjoy it, it fulfills this ‘customization’ gap I’ve wanted for years.<p>If you want to just jump in and try out Emacs, use Doom Emacs. If you want to go on the journey of making your own config, take a look at “Emacs from Scratch” [1]. It’s been great for me so far.<p>[1]: <a href="https://youtube.com/playlist?list=PLEoMzSkcN8oPH1au7H6B7bBJ4ZO7BXjSZ">https://youtube.com/playlist?list=PLEoMzSkcN8oPH1au7H6B7bBJ4...</a></p>
]]></description><pubDate>Wed, 02 Aug 2023 18:51:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=36975266</link><dc:creator>lavp</dc:creator><comments>https://news.ycombinator.com/item?id=36975266</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36975266</guid></item><item><title><![CDATA[New comment by lavp in "Emacs is my new window manager"]]></title><description><![CDATA[
<p>You can use evil-mode and you’ll have the Vim key bindings in emacs. I use this and it’s great.<p>Also, an ergonomic keyboard can help with pain; I had pains on my right wrist and using the Kinesis Advantage has helped me tremendously.</p>
]]></description><pubDate>Wed, 02 Aug 2023 18:39:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=36975082</link><dc:creator>lavp</dc:creator><comments>https://news.ycombinator.com/item?id=36975082</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36975082</guid></item><item><title><![CDATA[New comment by lavp in "Young people are flocking to astrology"]]></title><description><![CDATA[
<p>Using an unfalsifiable framework is not a good way of trying to understand the universe.</p>
]]></description><pubDate>Mon, 24 Jul 2023 14:50:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=36848979</link><dc:creator>lavp</dc:creator><comments>https://news.ycombinator.com/item?id=36848979</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36848979</guid></item><item><title><![CDATA[New comment by lavp in "FedNow Is Live"]]></title><description><![CDATA[
<p>What is it about CBDCs you find concerning compared to cash?</p>
]]></description><pubDate>Thu, 20 Jul 2023 15:21:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=36801828</link><dc:creator>lavp</dc:creator><comments>https://news.ycombinator.com/item?id=36801828</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36801828</guid></item></channel></rss>