<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: AndrewHampton</title><link>https://news.ycombinator.com/user?id=AndrewHampton</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sat, 18 Apr 2026 03:36:06 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=AndrewHampton" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by AndrewHampton in "Many SWE-bench-Passing PRs would not be merged"]]></title><description><![CDATA[
<p>This seems like an important caveat to the SWE-bench, but the trend is still clearly AI becoming more and more capable.</p>
]]></description><pubDate>Wed, 11 Mar 2026 23:53:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=47344261</link><dc:creator>AndrewHampton</dc:creator><comments>https://news.ycombinator.com/item?id=47344261</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47344261</guid></item><item><title><![CDATA[New comment by AndrewHampton in "Web Components: The Framework-Free Renaissance"]]></title><description><![CDATA[
<p>I love web components. The one thing I really wish browsers supported though was a per-site custom element registry that persisted across page loads.<p>Give me 10mb and an API like service workers have to manage a library of custom elements that can be used on my site as soon as the page loads.</p>
]]></description><pubDate>Fri, 20 Feb 2026 17:53:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=47091346</link><dc:creator>AndrewHampton</dc:creator><comments>https://news.ycombinator.com/item?id=47091346</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47091346</guid></item><item><title><![CDATA[New comment by AndrewHampton in "Ruby Prism Skill – CLI skill for understanding Ruby files"]]></title><description><![CDATA[
<p>We've been experimenting with various skills and MCPs in our day-to-day Ruby development at Poll Everywhere. This is the internal skill that's been most useful for preserving the context window while letting agents explore Ruby code.<p>It's a CLI wrapper around Ruby's Prism gem that lets the agent do this:<p><pre><code>  $ prism -o app/models/user.rb

  User < ApplicationRecord [1-75]
    includes Agreeable
    includes Auditable
    has_many :polls
    has_many :questions, through: :polls
    has_many :votes
    has_many :reports, dependent: :destroy
    #audit_create [41-43]
    #allowed_to_participate_in?(poll) [45-66]
    #restricted_from_participation_in?(poll) [68-70]
    #recently_created? [72-74]

  $ prism -m 'recently_created?' app/models/user.rb

  === METHOD: recently_created? ===
  Lines 72-74:
    def recently_created?
      created_at.after?(5.minutes.ago)
    end
</code></pre>
The idea is to give the agent a token-efficient way to understand what's going on in Ruby code.</p>
]]></description><pubDate>Tue, 10 Feb 2026 13:09:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=46959241</link><dc:creator>AndrewHampton</dc:creator><comments>https://news.ycombinator.com/item?id=46959241</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46959241</guid></item><item><title><![CDATA[Ruby Prism Skill – CLI skill for understanding Ruby files]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/polleverywhere/ruby-prism-skill">https://github.com/polleverywhere/ruby-prism-skill</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46959240">https://news.ycombinator.com/item?id=46959240</a></p>
<p>Points: 3</p>
<p># Comments: 1</p>
]]></description><pubDate>Tue, 10 Feb 2026 13:09:36 +0000</pubDate><link>https://github.com/polleverywhere/ruby-prism-skill</link><dc:creator>AndrewHampton</dc:creator><comments>https://news.ycombinator.com/item?id=46959240</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46959240</guid></item><item><title><![CDATA[New comment by AndrewHampton in "Ian's Shoelace Site"]]></title><description><![CDATA[
<p>Back in 2004, while bored in my college dorm, I learned the Ian Knot from this site. I've used it ever since. A few weeks ago, my 10 year old decided it was time to learn how to tie his shoes "dad's way". I was pleasantly surprised to see the site was still up, so I used it to help teach him how to do it.</p>
]]></description><pubDate>Mon, 02 Feb 2026 12:52:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=46855443</link><dc:creator>AndrewHampton</dc:creator><comments>https://news.ycombinator.com/item?id=46855443</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46855443</guid></item><item><title><![CDATA[New comment by AndrewHampton in "Jujutsu for everyone"]]></title><description><![CDATA[
<p>Is `jj split` a good option?</p>
]]></description><pubDate>Sun, 31 Aug 2025 17:24:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=45084985</link><dc:creator>AndrewHampton</dc:creator><comments>https://news.ycombinator.com/item?id=45084985</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45084985</guid></item><item><title><![CDATA[New comment by AndrewHampton in "Terence Tao's NSF grants suspended"]]></title><description><![CDATA[
<p>Tangle has a great breakdown of what this means in their article yesterday: <a href="https://www.readtangle.com/emil-bove-trump-lawyer-federal-judge/#your-questions-answered" rel="nofollow">https://www.readtangle.com/emil-bove-trump-lawyer-federal-ju...</a><p>Turns out, it's complicated.</p>
]]></description><pubDate>Fri, 01 Aug 2025 12:21:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=44755724</link><dc:creator>AndrewHampton</dc:creator><comments>https://news.ycombinator.com/item?id=44755724</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44755724</guid></item><item><title><![CDATA[New comment by AndrewHampton in "The Physicians Are Healing Themselves, with Ozempic"]]></title><description><![CDATA[
<p>Part of me wonders if I should be on ozempic since I have a family history of several of the issues it's reported to help with.<p>Another part of me wonders if all the ozempic headlines I've seen over the past few months are just an incredibly effective and well orchestrated ad campaign.</p>
]]></description><pubDate>Mon, 10 Feb 2025 17:32:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=43002827</link><dc:creator>AndrewHampton</dc:creator><comments>https://news.ycombinator.com/item?id=43002827</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43002827</guid></item><item><title><![CDATA[New comment by AndrewHampton in "Cosmos Keyboard: Scan your hand, build a keyboard"]]></title><description><![CDATA[
<p>I used this to build my current keyboard a few months ago. It was my first hand-wired keyboard, and this made it much more approachable. Thanks for creating it!</p>
]]></description><pubDate>Tue, 14 Jan 2025 21:12:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=42703940</link><dc:creator>AndrewHampton</dc:creator><comments>https://news.ycombinator.com/item?id=42703940</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42703940</guid></item><item><title><![CDATA[New comment by AndrewHampton in "Triptych Proposals"]]></title><description><![CDATA[
<p>What HTTP method would you expect the second example to use? `GET /users/delete?id=354`?<p>The first has the advantage of being a little clearer at the HTTP level with `DELETE /users/354`.</p>
]]></description><pubDate>Mon, 06 Jan 2025 21:46:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=42616301</link><dc:creator>AndrewHampton</dc:creator><comments>https://news.ycombinator.com/item?id=42616301</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42616301</guid></item><item><title><![CDATA[New comment by AndrewHampton in "Git-absorb: Git commit –fixup, but automatic"]]></title><description><![CDATA[
<p>Yeah, I use about a dozen git aliases in my normal workflow. In case it's helpful, here are the relevant ones for this flow:<p><pre><code>  alias git_main_branch='git rev-parse --abbrev-ref origin/HEAD | cut -d/ -f2'
  alias gapa='git add --patch'
  alias grbm='git rebase -i --autosquash $(git_main_branch)'
  alias gfx='git commit --fixup $(git log $(git_main_branch)..HEAD --oneline| fzf| cut -d" " -f1)'
</code></pre>
Another favorite is:<p><pre><code>  alias gmru="git for-each-ref --sort=-committerdate --count=50 refs/heads/ --format='%(HEAD) %(refname:short) | %(committerdate:relative) | %(contents:subject)'| fzf | sed -e 's/^[^[[:alnum:]]]*[[:space:]]*//' | cut -d' ' -f1| xargs -I _ git checkout _"
</code></pre>
gmru (git most recently used) will show you the branches you've been working on recently and let you use fzf to select one to check out.</p>
]]></description><pubDate>Thu, 26 Sep 2024 14:13:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=41658649</link><dc:creator>AndrewHampton</dc:creator><comments>https://news.ycombinator.com/item?id=41658649</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41658649</guid></item><item><title><![CDATA[New comment by AndrewHampton in "Git-absorb: Git commit –fixup, but automatic"]]></title><description><![CDATA[
<p>This was 100% my inspiration. I used emacs+magit for years. After switching away from emacs for dev work, I still cracked it open for git interactions for another year or so. Eventually, I moved entirely to the shell with a bunch of aliases to replicate my magit workflow.</p>
]]></description><pubDate>Thu, 26 Sep 2024 11:38:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=41657176</link><dc:creator>AndrewHampton</dc:creator><comments>https://news.ycombinator.com/item?id=41657176</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41657176</guid></item><item><title><![CDATA[New comment by AndrewHampton in "Git-absorb: Git commit –fixup, but automatic"]]></title><description><![CDATA[
<p>Yeah, it's definitely less powerful that what absorb is doing. I wasn't trying to argue that it was equivalent. I just wanted to share a bash one-liner that I've had success with in case others find it helpful.<p>> What if I want some parts of it into one commit and another parts into another?<p>Looks like absorb will automatically break out every hunk into a separate fixup commit. My one-liner will create 1 fixup commit for everything that's staged. That's typically what I need, but on the occasions it's not, I use `git add -p`, as kadoban mentioned, to stage exactly what I want for each commit.</p>
]]></description><pubDate>Thu, 26 Sep 2024 11:30:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=41657120</link><dc:creator>AndrewHampton</dc:creator><comments>https://news.ycombinator.com/item?id=41657120</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41657120</guid></item><item><title><![CDATA[New comment by AndrewHampton in "Git-absorb: Git commit –fixup, but automatic"]]></title><description><![CDATA[
<p>FWIW, I've been using this alias for the past couple years for fixup commits, and I've been happy with it:<p>> gfx='git commit --fixup $(git log $(git merge-base main HEAD)..HEAD --oneline| fzf| cut -d" " -f1)'<p>It shows you the commits on the current branch and lets you select one via fzf. It then creates the fixup commit based on the commit you selected.</p>
]]></description><pubDate>Thu, 26 Sep 2024 00:50:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=41653389</link><dc:creator>AndrewHampton</dc:creator><comments>https://news.ycombinator.com/item?id=41653389</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41653389</guid></item><item><title><![CDATA[New comment by AndrewHampton in "A $10k stipend is available for anyone moving to Cumberland, MD"]]></title><description><![CDATA[
<p>A similar program exists for 4 towns in West Virginia: <a href="https://ascendwv.com" rel="nofollow">https://ascendwv.com</a></p>
]]></description><pubDate>Sat, 24 Aug 2024 14:09:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=41338431</link><dc:creator>AndrewHampton</dc:creator><comments>https://news.ycombinator.com/item?id=41338431</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41338431</guid></item><item><title><![CDATA[New comment by AndrewHampton in "Distributed Authorization"]]></title><description><![CDATA[
<p>> A team I worked with in the past came to the same conclusion - turning authorization rules into WHERE clauses is a very efficient way to solve this problem, if you can figure out a clean way to do it.<p>For rails specifically, <a href="https://github.com/polleverywhere/moat">https://github.com/polleverywhere/moat</a> was built with this in mind. It's heavily inspired by Pundit, but let's you write policies at the `ActiveRecord::Relation` level. So `policy_filter(Article).find_by!(id: params[:id])` would run something like `select * from articles where id = ? and id in (select id from articles where owner_id = ?);`.</p>
]]></description><pubDate>Tue, 16 Apr 2024 20:48:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=40056996</link><dc:creator>AndrewHampton</dc:creator><comments>https://news.ycombinator.com/item?id=40056996</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40056996</guid></item><item><title><![CDATA[New comment by AndrewHampton in "Htmx and Web Components: A Perfect Match"]]></title><description><![CDATA[
<p>Another option would be for the B to dispatch a `CustomEvent` on itself. That event will bubble up the DOM until it hits A. A would then need an event listener that would probably stop propagation and do whatever bookkeeping is necessary.</p>
]]></description><pubDate>Thu, 18 Jan 2024 13:17:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=39041297</link><dc:creator>AndrewHampton</dc:creator><comments>https://news.ycombinator.com/item?id=39041297</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39041297</guid></item><item><title><![CDATA[Content Security Policy (CSP): What Every Web Developer Must Know]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.akshaykhot.com/content-security-policy/">https://www.akshaykhot.com/content-security-policy/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=36998849">https://news.ycombinator.com/item?id=36998849</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 04 Aug 2023 12:11:08 +0000</pubDate><link>https://www.akshaykhot.com/content-security-policy/</link><dc:creator>AndrewHampton</dc:creator><comments>https://news.ycombinator.com/item?id=36998849</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36998849</guid></item><item><title><![CDATA[New comment by AndrewHampton in "Kitty – A fast, featureful, GPU based terminal emulator"]]></title><description><![CDATA[
<p>Thanks for the correction, good to know.</p>
]]></description><pubDate>Thu, 01 Oct 2020 00:49:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=24645993</link><dc:creator>AndrewHampton</dc:creator><comments>https://news.ycombinator.com/item?id=24645993</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=24645993</guid></item><item><title><![CDATA[New comment by AndrewHampton in "Kitty – A fast, featureful, GPU based terminal emulator"]]></title><description><![CDATA[
<p>This Kitty terminal isn't new. Going by the history on GitHub, this terminal predates the one you linked by a couple years.</p>
]]></description><pubDate>Wed, 30 Sep 2020 23:32:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=24645363</link><dc:creator>AndrewHampton</dc:creator><comments>https://news.ycombinator.com/item?id=24645363</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=24645363</guid></item></channel></rss>