<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: tomconnors</title><link>https://news.ycombinator.com/user?id=tomconnors</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 02 Jul 2026 16:52:29 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=tomconnors" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by tomconnors in "Building Gin: Simple over Easy"]]></title><description><![CDATA[
<p>> You write the same plumbing for route params, request parsing, validation, and responses in handler after handler. None of it is hard. Enough of it becomes noise.<p>As a human, I would have written something like:
> You write the same plumbing for route params, request parsing, validation, and responses in handler after handler. None of it is hard, but it makes the code noisy.<p>Whether or not an LLM wrote this, it's a writing style that sounds like a politician or a sophist, and it sucks.</p>
]]></description><pubDate>Wed, 01 Jul 2026 19:17:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=48751817</link><dc:creator>tomconnors</dc:creator><comments>https://news.ycombinator.com/item?id=48751817</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48751817</guid></item><item><title><![CDATA[New comment by tomconnors in "100k TPS over a billion rows: the unreasonable effectiveness of SQLite"]]></title><description><![CDATA[
<p>Cool stuff as usual, Anders. One of the nice things about running a networked DB is that it makes redeploying the application a bit simpler. You can spin up a new EC2 instance or whatever and once it's online kill the old one. That gets 0 or close to 0 downtime. If the DB is on the same instance, replacing it requires loading up the DB onto the new instance, which seems more error prone than just restarting the app on the original instance, but in my experience that typically incurs downtime or some complicated handoff logic. Have you had to deal with anything like that running sqlite in prd?</p>
]]></description><pubDate>Tue, 02 Dec 2025 19:45:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=46125807</link><dc:creator>tomconnors</dc:creator><comments>https://news.ycombinator.com/item?id=46125807</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46125807</guid></item><item><title><![CDATA[New comment by tomconnors in "Clojure Async Flow Guide"]]></title><description><![CDATA[
<p>I recently used c.a.flow for a program that reads files from s3, massages the data a bit, and writes to a database. The code came out very easy to understand. The challenges were:<p>- getting back pressure right. You need to tune the buffers for the input chans correctly, which takes some thinking, and in my case, some blowing up in prd.<p>- flow monitor (the UI for debugging flows) can't handle large process states, which makes it pretty much useless for my program.<p>- understanding the flow as a whole (rather than specific processes, which are easy to understand in isolation). For example, answering questions like "why hasn't this process received a message for a while?" was tricky.</p>
]]></description><pubDate>Mon, 18 Aug 2025 14:30:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=44941055</link><dc:creator>tomconnors</dc:creator><comments>https://news.ycombinator.com/item?id=44941055</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44941055</guid></item><item><title><![CDATA[New comment by tomconnors in "Shouldn't FROM come before SELECT in SQL? (2011)"]]></title><description><![CDATA[
<p>It's always frustrating to me that the order matters at all. I understand SQL can be complex to parse, but surely we are smart enough to come up with a parser that doesn't care whether FROM is before or after SELECT?<p>HoneySQL lets us define queries with maps, like {:select [:col1 :col2] :from :table}, and turns that into SQL. In a better world, SQL would be structured data like HoneySQL, and the strange SQL syntax we know and love would be a layer on top of that, or wouldn't exist.</p>
]]></description><pubDate>Thu, 25 Jan 2024 15:06:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=39130279</link><dc:creator>tomconnors</dc:creator><comments>https://news.ycombinator.com/item?id=39130279</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39130279</guid></item><item><title><![CDATA[New comment by tomconnors in "The Great Boston Molasses Flood of 1919 (2018)"]]></title><description><![CDATA[
<p>The band Protest the Hero has a song about this event: <a href="https://www.youtube.com/watch?v=sNcGbAQgZIg" rel="nofollow">https://www.youtube.com/watch?v=sNcGbAQgZIg</a></p>
]]></description><pubDate>Wed, 08 Sep 2021 13:41:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=28456805</link><dc:creator>tomconnors</dc:creator><comments>https://news.ycombinator.com/item?id=28456805</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28456805</guid></item><item><title><![CDATA[New comment by tomconnors in "REPL vs CLI: IDE wars"]]></title><description><![CDATA[
<p>This post could be summarized as "write as much of your project's tooling as you can in the project's main programming language and the project's main programming language should be Clojure" and I agree wholeheartedly.</p>
]]></description><pubDate>Thu, 01 Jul 2021 14:22:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=27699319</link><dc:creator>tomconnors</dc:creator><comments>https://news.ycombinator.com/item?id=27699319</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27699319</guid></item><item><title><![CDATA[New comment by tomconnors in "Clj-3DF: Clojure(Script) Client for Declarative Dataflow"]]></title><description><![CDATA[
<p>Long ago, when Datomic was only recently released, I saw blog posts (not from Cognitect) claiming that Datomic's transaction log could be used to create a subscription system for arbitrary datalog queries. Basically "tell me when the result of this query changes". In practice, I've yet to find a general way to do that, except for wildly inefficient stuff like keeping query results in memory, requerying on each transaction, and comparing. How does 3DF handle a query like this?:<p><pre><code>  [:find (max ?num) :where [_ :attr ?num]]
</code></pre>
It seems like Datomic's transaction log can only tell us that the result of this query <i>might</i> have changed. Does differential dataflow solve that problem?</p>
]]></description><pubDate>Mon, 08 Feb 2021 14:59:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=26065328</link><dc:creator>tomconnors</dc:creator><comments>https://news.ycombinator.com/item?id=26065328</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26065328</guid></item><item><title><![CDATA[New comment by tomconnors in "Scrollbar Blindness"]]></title><description><![CDATA[
<p>I've been guilty of this. Normally I like to blame CSS for all of my personal failures, but I think the definition of "overflow" is intuitive enough. I was hesitant to turn on visible scrollbars system-wide because I thought it might be ugly. I did and it's not, so I second the author's suggestion to do that.</p>
]]></description><pubDate>Thu, 27 Aug 2020 13:59:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=24293764</link><dc:creator>tomconnors</dc:creator><comments>https://news.ycombinator.com/item?id=24293764</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=24293764</guid></item><item><title><![CDATA[New comment by tomconnors in "Unofficial Guide to Datomic Internals (2014)"]]></title><description><![CDATA[
<p>Fair enough, hitting that bug would have pissed me off too.<p>On your last point, I agree that it still has a way to go. It's good for some (many?) production use cases now, as Nubank's success demonstrates, and hopefully with Nubank's resources it'll start to live up more to its promise.</p>
]]></description><pubDate>Fri, 24 Jul 2020 18:29:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=23942937</link><dc:creator>tomconnors</dc:creator><comments>https://news.ycombinator.com/item?id=23942937</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=23942937</guid></item><item><title><![CDATA[New comment by tomconnors in "Unofficial Guide to Datomic Internals (2014)"]]></title><description><![CDATA[
<p>This seems like an excessively uncharitable read of the situation. I've never used Nubank's software, but I have used (on-prem) Datomic and I certainly wouldn't say it has bugs everywhere. In fact, in my (admittedly low-volume and simple) usage of the system I haven't come across any bugs I can remember. Calling Cognitect a "burnout" company is inaccurate and rude.<p>I agree with you that the Datomic cloud stuff comes across as being frighteningly complex. I think they probably just need to work on the documentation, like making it more obvious what the differences and tradeoffs are between the deployment scenarios.<p>Did you inherit a Datomic system that was previously developed by a small team or a small company? Because inheriting a system that's hard to understand and change transcends languages and databases. It is the tie that binds us all as software developers.</p>
]]></description><pubDate>Fri, 24 Jul 2020 18:11:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=23942696</link><dc:creator>tomconnors</dc:creator><comments>https://news.ycombinator.com/item?id=23942696</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=23942696</guid></item><item><title><![CDATA[New comment by tomconnors in "Nubank acquires Cognitect"]]></title><description><![CDATA[
<p>It sounds like Nubank might have the biggest Datomic installation in the world (2000 servers). This is exciting news for people like me who think Datomic is the most interesting database out there. Putting more resources behind Datomic might finally allow it to go mainstream.</p>
]]></description><pubDate>Thu, 23 Jul 2020 13:29:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=23927149</link><dc:creator>tomconnors</dc:creator><comments>https://news.ycombinator.com/item?id=23927149</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=23927149</guid></item><item><title><![CDATA[New comment by tomconnors in "Picardy Third"]]></title><description><![CDATA[
<p>A Picardy third can be heard at the end of Avengers Infinity War as Thanos watches the sun rise on a grateful universe.</p>
]]></description><pubDate>Tue, 28 Jan 2020 18:36:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=22172567</link><dc:creator>tomconnors</dc:creator><comments>https://news.ycombinator.com/item?id=22172567</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=22172567</guid></item><item><title><![CDATA[New comment by tomconnors in "Commanding infinite streaming storage with Apache Kafka and Pyrostore"]]></title><description><![CDATA[
<p>Everything Distributed Masonry does is very interesting. Wish I had more excuses to use your stuff at work.<p>Storing all data forever in a single source of truth is awesome until regulation like GDPR comes along. Do you have plans to support excision or is your guidance on personal data to avoid putting it into a system like Kafka/Pyrostore?</p>
]]></description><pubDate>Thu, 10 May 2018 20:21:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=17042596</link><dc:creator>tomconnors</dc:creator><comments>https://news.ycombinator.com/item?id=17042596</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=17042596</guid></item><item><title><![CDATA[How I Structured a Clojure(+Script) Application]]></title><description><![CDATA[
<p>Article URL: <a href="http://tomconnors.github.io/blog/2013/12/03/how-i-structured-a-clojure-plus-script-web-app/">http://tomconnors.github.io/blog/2013/12/03/how-i-structured-a-clojure-plus-script-web-app/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=6880681">https://news.ycombinator.com/item?id=6880681</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 10 Dec 2013 13:54:37 +0000</pubDate><link>http://tomconnors.github.io/blog/2013/12/03/how-i-structured-a-clojure-plus-script-web-app/</link><dc:creator>tomconnors</dc:creator><comments>https://news.ycombinator.com/item?id=6880681</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6880681</guid></item></channel></rss>