<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: swannodette</title><link>https://news.ycombinator.com/user?id=swannodette</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 08 Oct 2026 06:18:28 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=swannodette" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by swannodette in "The Early History of Smalltalk (1993)"]]></title><description><![CDATA[
<p>Interface Builder was originally a Lisp project<p><a href="https://www.inria.fr/en/jean-marie-hullot-visionary-computer-scientist-and-tech-expert" rel="nofollow">https://www.inria.fr/en/jean-marie-hullot-visionary-computer...</a></p>
]]></description><pubDate>Tue, 06 Oct 2026 21:26:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=49984389</link><dc:creator>swannodette</dc:creator><comments>https://news.ycombinator.com/item?id=49984389</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49984389</guid></item><item><title><![CDATA[Show HN: Direct SQL Access to Your QuickBooks Data]]></title><description><![CDATA[
<p>Hey guys, I dunno about you but if you have a business and use QuickBooks, the normal API access is pretty cumbersome.<p>So we built a direct SQL layer to a simple model of the ledger. It's nice to have easy fast programmatic access to your books for building internal apps and stuff, not to mention giving agents access. (Agents are really good at SQL, read-only of course.)<p>Along the way, this made us wonder: when does an app or service really need a custom API at all, rather than just exposing data as SQL, which is sorta the lingua franca of data querying.  Will more services do this in the future?<p>Curious what you think!</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=49703551">https://news.ycombinator.com/item?id=49703551</a></p>
<p>Points: 5</p>
<p># Comments: 2</p>
]]></description><pubDate>Mon, 14 Sep 2026 20:34:33 +0000</pubDate><link>https://instabooks.io/docs/db</link><dc:creator>swannodette</dc:creator><comments>https://news.ycombinator.com/item?id=49703551</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49703551</guid></item><item><title><![CDATA[New comment by swannodette in "Clojure 1.13 adds support for checked keys"]]></title><description><![CDATA[
<p>Honestly what's mostly at the forefront of my mind is greatly improving the documentation around ClojureScript as well as our fork of Google Closure Library (GCL). At work we've switched to DataStar (a single JS include) and coupled that with ClojureScript/GCL - we no longer rely on anything from NPM, to call this a simplification would be a gross understatement. Bundle size is 30K gzipped and we spend no time thinking about our build or JS tooling/dependency tomfoolery.<p>So less about ClojureScript specifically, and more generally how I think we're well situated for people looking for a way out. The current mainstream practice dead end is bigger than the one that made React (also originally just a script tag include) appealing to me back in 2013. There are of course many ways forward that don't involve CLJS, but I think ClojureScript/GCL and the new crop of NPM-dep free pure CLJS solutions like Replicant are well situated for folks who can see that accepted practices are not delivering enough value even with AI assistance.</p>
]]></description><pubDate>Mon, 06 Jul 2026 16:28:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=48806917</link><dc:creator>swannodette</dc:creator><comments>https://news.ycombinator.com/item?id=48806917</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48806917</guid></item><item><title><![CDATA[New comment by swannodette in "Clojure 1.13 adds support for checked keys"]]></title><description><![CDATA[
<p>Working on it :)</p>
]]></description><pubDate>Mon, 06 Jul 2026 15:59:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=48806501</link><dc:creator>swannodette</dc:creator><comments>https://news.ycombinator.com/item?id=48806501</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48806501</guid></item><item><title><![CDATA[New comment by swannodette in "Permacomputing Principles"]]></title><description><![CDATA[
<p>The original article on permacomputing by viznut <a href="https://viznut.fi/texts-en/permacomputing.html" rel="nofollow">https://viznut.fi/texts-en/permacomputing.html</a></p>
]]></description><pubDate>Thu, 07 May 2026 10:59:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=48047917</link><dc:creator>swannodette</dc:creator><comments>https://news.ycombinator.com/item?id=48047917</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48047917</guid></item><item><title><![CDATA[New comment by swannodette in "Understanding Clojure's Persistent Vectors, pt. 1 (2013)"]]></title><description><![CDATA[
<p>That's a big contribution, also the original HAMTs are not a functional data structure. See Section 3.4.1 in <a href="https://docdrop.org/download_annotation_doc/3386321-trk2f.pdf" rel="nofollow">https://docdrop.org/download_annotation_doc/3386321-trk2f.pd...</a></p>
]]></description><pubDate>Wed, 15 Apr 2026 10:58:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=47777354</link><dc:creator>swannodette</dc:creator><comments>https://news.ycombinator.com/item?id=47777354</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47777354</guid></item><item><title><![CDATA[New comment by swannodette in "Understanding Clojure's Persistent Vectors, pt. 1 (2013)"]]></title><description><![CDATA[
<p>Clarifying Clojure had them in 2007. Scala implementations were inspired by Clojure’s. Both Odersky and Bagwell have given credit to Hickey.</p>
]]></description><pubDate>Wed, 15 Apr 2026 03:39:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=47774436</link><dc:creator>swannodette</dc:creator><comments>https://news.ycombinator.com/item?id=47774436</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47774436</guid></item><item><title><![CDATA[New comment by swannodette in "Monosketch"]]></title><description><![CDATA[
<p>If you use Emacs, there's a pretty nifty package <a href="https://github.com/tbanel/uniline" rel="nofollow">https://github.com/tbanel/uniline</a></p>
]]></description><pubDate>Fri, 13 Feb 2026 16:48:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=47004771</link><dc:creator>swannodette</dc:creator><comments>https://news.ycombinator.com/item?id=47004771</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47004771</guid></item><item><title><![CDATA[New comment by swannodette in "Offpunk 3.0"]]></title><description><![CDATA[
<p>I don't think Gnus is that bad once you spend some time setting it up. For groups with a ton of content where I mostly want to search, I found it was better to just download the whole group and index into notmuch. I could query 20 years of the Smalltalk USENET group or the Supercollider mailing list instantly.</p>
]]></description><pubDate>Mon, 09 Feb 2026 14:28:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=46945572</link><dc:creator>swannodette</dc:creator><comments>https://news.ycombinator.com/item?id=46945572</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46945572</guid></item><item><title><![CDATA[Preserving Human Voices and Faces]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.vatican.va/content/leo-xiv/en/messages/communications/documents/20260124-messaggio-comunicazioni-sociali.html">https://www.vatican.va/content/leo-xiv/en/messages/communications/documents/20260124-messaggio-comunicazioni-sociali.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46825214">https://news.ycombinator.com/item?id=46825214</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 30 Jan 2026 15:05:39 +0000</pubDate><link>https://www.vatican.va/content/leo-xiv/en/messages/communications/documents/20260124-messaggio-comunicazioni-sociali.html</link><dc:creator>swannodette</dc:creator><comments>https://news.ycombinator.com/item?id=46825214</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46825214</guid></item><item><title><![CDATA[New comment by swannodette in "Claude wrote a functional NES emulator using my engine's API"]]></title><description><![CDATA[
<p>WASM and the performance seems catastrophically bad (45ms to render a frame on an M4 laptop)? It would be much more impressive if Claude could optimize it into something that someone would actually want to play? Compare this to a random hit from Google, <a href="https://jsnes.org/" rel="nofollow">https://jsnes.org/</a> which has sound, much smaller payload, and runs really fast (<1ms to render a frame).<p>The cost of slop is >40X drop in performance? Pick any metric that you care about for your domain perhaps that's what you're going to lose and is the effort to recover that practical with current vibe-coding strategies?</p>
]]></description><pubDate>Wed, 31 Dec 2025 15:13:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=46444804</link><dc:creator>swannodette</dc:creator><comments>https://news.ycombinator.com/item?id=46444804</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46444804</guid></item><item><title><![CDATA[New comment by swannodette in "Homeschooling hits record numbers"]]></title><description><![CDATA[
<p>If you can afford it! "Grass-roots segregation hits records numbers" would be an equally fitting title.</p>
]]></description><pubDate>Fri, 21 Nov 2025 19:51:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=46008204</link><dc:creator>swannodette</dc:creator><comments>https://news.ycombinator.com/item?id=46008204</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46008204</guid></item><item><title><![CDATA[New comment by swannodette in "One Handed Keyboard"]]></title><description><![CDATA[
<p>Some research on this topic <a href="http://edgarmatias.com/papers/hci96/" rel="nofollow">http://edgarmatias.com/papers/hci96/</a><p>On OS X you can achieve this with Keyb, Karabiner Elements, etc. It's also easy to do with a programmable keyboard with ZMK/QMK. I've set up my Kinesis 360 Pro this way, being symmetrical means I can access every key easily. Hardware support for sticky keys also helps quite a bit.</p>
]]></description><pubDate>Sat, 15 Nov 2025 10:59:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=45936600</link><dc:creator>swannodette</dc:creator><comments>https://news.ycombinator.com/item?id=45936600</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45936600</guid></item><item><title><![CDATA[New comment by swannodette in "Mathematical exploration and discovery at scale"]]></title><description><![CDATA[
<p>I don't see how anything about what's presented here that refutes such claims. This mostly confirms that LLM based approaches need some serious baby-sitting from experts and those experts can derive some value from them but generally with non-trivial levels of effort and non-LLM supported thinking.</p>
]]></description><pubDate>Thu, 06 Nov 2025 13:45:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=45835171</link><dc:creator>swannodette</dc:creator><comments>https://news.ycombinator.com/item?id=45835171</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45835171</guid></item><item><title><![CDATA[New comment by swannodette in "GHC now runs in the browser"]]></title><description><![CDATA[
<p>Loading 50mb of WASM is a big tradeoff just to run code on a website.</p>
]]></description><pubDate>Sat, 01 Nov 2025 17:16:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=45783396</link><dc:creator>swannodette</dc:creator><comments>https://news.ycombinator.com/item?id=45783396</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45783396</guid></item><item><title><![CDATA[New comment by swannodette in "Learn to play Go"]]></title><description><![CDATA[
<p>Blitz format is reasonably popular on KGS (once you get to a certain level) usually 10+0. Blitz is harder to find on Pandanet - but you can easily blitz on Fox.</p>
]]></description><pubDate>Sun, 28 Sep 2025 12:58:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=45404013</link><dc:creator>swannodette</dc:creator><comments>https://news.ycombinator.com/item?id=45404013</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45404013</guid></item><item><title><![CDATA[New comment by swannodette in "Learn to play Go"]]></title><description><![CDATA[
<p>It's easier to get games on Pandanet <a href="https://pandanet-igs.com/communities/pandanet" rel="nofollow">https://pandanet-igs.com/communities/pandanet</a> and Fox Weiqi <a href="https://www.foxwq.com" rel="nofollow">https://www.foxwq.com</a>. You can run Fox on OS X w/ Parallels or Crossover. It supposedly possible with Wine but I could never get it to work.</p>
]]></description><pubDate>Sun, 28 Sep 2025 11:05:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=45403445</link><dc:creator>swannodette</dc:creator><comments>https://news.ycombinator.com/item?id=45403445</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45403445</guid></item><item><title><![CDATA[New comment by swannodette in "I used standard Emacs extension-points to extend org-mode"]]></title><description><![CDATA[
<p>Yes! Recent personal hacks with advice interactively programmed with the help of Claude 4.1 chat session running in Emacs.<p><pre><code>  - popping the global mark to travel backwards to previous edit points would reuse the same Emacs window instead of using a window that is already showing the buffer. Fixed
  - I would accidentally destroy my window configuration w/ C-x 1. Fixed, use advice to automatically save the window configuration into a register if I invoke the command to remove all other windows. Now I can easily recover if I make that mistake.
  - I want to be able to select and then scroll any other open window w/o leaving the current one. Fixed
  - A crazy one. I collect note w/ links or whatever for reading/watching later, these are marked w/ a timestamp. My notes file is not an agenda file, i.e. not filled with todos / tasks. I made a hack to temporarily include the current non-agenda org-mode buffer in the agenda list and then show inactive timestamps. Now I can scan a day/week/month for interesting notes I took. This doesn't interact at all with my real agenda.
  - org-agenda opens items in weird places, use advice to fix it so that it always appears where I like.
  - fix inf-clojure so that it uses dep.edn as project root over .git
</code></pre>
I used IntelliJ happily for 10 years (I was a heavy Emacs user for 10 years before that). While it's true that some things are a little less convenient (I don't use LSP), knowing that I can tailor things exactly to my tastes is a serious breath of fresh air.<p>It used to be I mostly used IntelliJ for work/OSS and Emacs for org-mode. Now the situation is likely reversed. Emacs for work/OSS and IntelliJ only if I need step debugging/global refactoring.</p>
]]></description><pubDate>Sat, 13 Sep 2025 12:51:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=45231669</link><dc:creator>swannodette</dc:creator><comments>https://news.ycombinator.com/item?id=45231669</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45231669</guid></item><item><title><![CDATA[New comment by swannodette in "A beginner's guide to extending Emacs"]]></title><description><![CDATA[
<p>Yes. gptel supports two output modes out of the box, markdown (meh), and org-mode. I make an org-mode heading with my question, then I press `C-c <enter>`. Claude will use the area bellow the heading for its answer. It will make sub-headings, code blocks, lists, tables, etc. If I have another question then I make a new top level org-mode heading.<p>I started doing this because I got fed-up with Claude Desktop for my StackOverflow style programming questions - and then stumbled upon using it to configure Emacs.</p>
]]></description><pubDate>Fri, 12 Sep 2025 17:57:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=45224747</link><dc:creator>swannodette</dc:creator><comments>https://news.ycombinator.com/item?id=45224747</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45224747</guid></item><item><title><![CDATA[New comment by swannodette in "A beginner's guide to extending Emacs"]]></title><description><![CDATA[
<p><p><pre><code>  > My experience extending a core emacs function was an instructive and 
  > interesting exercise. I don't know what the future of emacs looks like in an
  > increasingly LLM-crazed world, but I hope that future  includes an open and
  > powerful way to extend and customize the tools we use to write software.
</code></pre>
I have gptel configured with Claude 4.1 via API. Claude generates an org-mode file. I ask it questions about Emacs packages, Emacs configuration, and Emacs customization. It responds w/ Elisp snippets that I can eval immediately and see the effect. Claude knows a lot about Emacs. All these chats are version controlled into git so I can easily pull, consult-ripgrep, and pickup where I left off from any of my machines.<p>I can add my `.emacs` to the Claude context to get more precise answers. If it falls over on some package I can `M-x find-library` to add that library's source to the context. If the code it wrote doesn't work, I add the `<i>Messages</i>` buffer and the `<i>Backtrace</i>` buffer for errors. I eval the snippet, reprompt, rinse and repeat.<p>With this fast feedback loop (no restarting Emacs, just live coding), I've added a ton of customizations that in my twenty years of using Emacs previously just never felt like I had the time or enthusiasm for given higher priorities:<p>* Boring stuff: managing where modes open buffers in which windows<p>* More ambitious stuff: standard org-remark behavior isn't that natural for highlighting and making notes so I made a nicer Transient based thing for it.<p>* Stuff for work: a fast logging minor mode that font locks incrementally, disables all the save prompting, and handles ASCII color codes. Later I intend to linkify stack traces, linkify data so that they open pretty printed in a different buffer, collect errors and show an unobtrusive notification in the active window, etc. etc.<p>In two weeks, I've learned more Emacs than I did the 10 years prior. Most of all, this is a usage of LLMs that I can say I honestly love - improving my own day-to-day tools. Because Emacs is a text-oriented live programming environment - LLM integration just feels like it's on a completely different level.<p>Claude (or any good LLM) + Emacs is a killer app.</p>
]]></description><pubDate>Fri, 12 Sep 2025 17:19:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=45224392</link><dc:creator>swannodette</dc:creator><comments>https://news.ycombinator.com/item?id=45224392</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45224392</guid></item></channel></rss>