<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: jacobobryant</title><link>https://news.ycombinator.com/user?id=jacobobryant</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 15 Jun 2026 16:50:23 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=jacobobryant" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by jacobobryant in "Biff.core: system composition for Clojure web apps"]]></title><description><![CDATA[
<p>hehe yes. There are plenty of other languages with dominant frameworks etc; I like being in a community of experimenters.</p>
]]></description><pubDate>Wed, 10 Jun 2026 02:29:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=48470603</link><dc:creator>jacobobryant</dc:creator><comments>https://news.ycombinator.com/item?id=48470603</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48470603</guid></item><item><title><![CDATA[New comment by jacobobryant in "Biff.core: system composition for Clojure web apps"]]></title><description><![CDATA[
<p>If everyone wants to move to biff.core that's fine with me!</p>
]]></description><pubDate>Tue, 09 Jun 2026 21:35:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=48468082</link><dc:creator>jacobobryant</dc:creator><comments>https://news.ycombinator.com/item?id=48468082</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48468082</guid></item><item><title><![CDATA[New comment by jacobobryant in "Biff.core: system composition for Clojure web apps"]]></title><description><![CDATA[
<p>AI has been working out well for me writing Clojure, both in personal projects and at work. Documentation, not so much... I write all that by hand.<p>For Biff I've been using AI to generate a rough draft of all the code and then I take a manual pass over things before releasing. Seems to be a good middle ground.</p>
]]></description><pubDate>Tue, 09 Jun 2026 16:22:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=48463180</link><dc:creator>jacobobryant</dc:creator><comments>https://news.ycombinator.com/item?id=48463180</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48463180</guid></item><item><title><![CDATA[Biff.core: system composition for Clojure web apps]]></title><description><![CDATA[
<p>Article URL: <a href="https://biffweb.com/p/core/">https://biffweb.com/p/core/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48463018">https://news.ycombinator.com/item?id=48463018</a></p>
<p>Points: 138</p>
<p># Comments: 33</p>
]]></description><pubDate>Tue, 09 Jun 2026 16:12:52 +0000</pubDate><link>https://biffweb.com/p/core/</link><dc:creator>jacobobryant</dc:creator><comments>https://news.ycombinator.com/item?id=48463018</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48463018</guid></item><item><title><![CDATA[New comment by jacobobryant in "Bttf is a command line datetime Swiss army knife"]]></title><description><![CDATA[
<p>As the author of a different project also named Biff, I do have to warn you that half the comments on your HN posts will be people quoting back to the future--though I haven't decided yet if that's annoying or an engagement hack!<p>[1] <a href="https://github.com/jacobobryant/biff" rel="nofollow">https://github.com/jacobobryant/biff</a></p>
]]></description><pubDate>Thu, 28 May 2026 14:48:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=48309746</link><dc:creator>jacobobryant</dc:creator><comments>https://news.ycombinator.com/item?id=48309746</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48309746</guid></item><item><title><![CDATA[Biff 2.0 sneak peak: Clojure web framework]]></title><description><![CDATA[
<p>Article URL: <a href="https://biffweb.com/p/biff2/">https://biffweb.com/p/biff2/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47837882">https://news.ycombinator.com/item?id=47837882</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 20 Apr 2026 17:41:30 +0000</pubDate><link>https://biffweb.com/p/biff2/</link><dc:creator>jacobobryant</dc:creator><comments>https://news.ycombinator.com/item?id=47837882</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47837882</guid></item><item><title><![CDATA[Isolating AI Coding Agents on Bare Metal]]></title><description><![CDATA[
<p>Article URL: <a href="https://blog.singlr.ai/isolating-ai-coding-agents-bare-metal-incus-podman/">https://blog.singlr.ai/isolating-ai-coding-agents-bare-metal-incus-podman/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47800623">https://news.ycombinator.com/item?id=47800623</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 16 Apr 2026 23:01:17 +0000</pubDate><link>https://blog.singlr.ai/isolating-ai-coding-agents-bare-metal-incus-podman/</link><dc:creator>jacobobryant</dc:creator><comments>https://news.ycombinator.com/item?id=47800623</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47800623</guid></item><item><title><![CDATA[New comment by jacobobryant in "Many Small Queries Are Efficient in SQLite"]]></title><description><![CDATA[
<p>In some informal benchmarks I wrote using queries + data from a web app I develop, sqlite queries were about 5x faster than postgres.</p>
]]></description><pubDate>Sat, 24 Jan 2026 19:00:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=46746441</link><dc:creator>jacobobryant</dc:creator><comments>https://news.ycombinator.com/item?id=46746441</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46746441</guid></item><item><title><![CDATA[Relaunching Yakread: an algorithmic reading app]]></title><description><![CDATA[
<p>Article URL: <a href="https://biffweb.com/p/yakread-relaunch/">https://biffweb.com/p/yakread-relaunch/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45150303">https://news.ycombinator.com/item?id=45150303</a></p>
<p>Points: 4</p>
<p># Comments: 0</p>
]]></description><pubDate>Sat, 06 Sep 2025 15:46:55 +0000</pubDate><link>https://biffweb.com/p/yakread-relaunch/</link><dc:creator>jacobobryant</dc:creator><comments>https://news.ycombinator.com/item?id=45150303</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45150303</guid></item><item><title><![CDATA[New comment by jacobobryant in "Libre – An anonymous social experiment without likes, followers, or ads"]]></title><description><![CDATA[
<p>Thanks for the feedback. I've structured Yakread (and its predecessors) as a daily email newsletter because it increases user retention tremendously. It's much less work for users if Yakread can show up in a place they already check regularly (their email inbox) rather than trying to get users right away to build a habit of visiting a new website regularly. The most common approach to this problem for consumer products is to make a mobile app so you can send push notifications; I like email a lot more since it's a bit more decentralized and is/can be less pushy (no pun intended).<p>But yeah, I wouldn't be opposed to trying out an alternate landing page that shows you article recommendations up front with a signup box somewhere. Could be interesting to see how both approaches perform in an A/B test. Especially if I ever made a concerted effort to get traffic from HN; then structuring the site a bit more like HN would probably be great. Maybe even aggregate comments from bluesky/mastodon? Once I get through the mountain of other TODO items that's been piling up :).</p>
]]></description><pubDate>Mon, 25 Aug 2025 05:17:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=45010459</link><dc:creator>jacobobryant</dc:creator><comments>https://news.ycombinator.com/item?id=45010459</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45010459</guid></item><item><title><![CDATA[New comment by jacobobryant in "Libre – An anonymous social experiment without likes, followers, or ads"]]></title><description><![CDATA[
<p>I've been working on this kind of thing over the past several years (for a while full time as an attempted entrepreneur, now on the side for the past couple years). The latest iteration is <a href="https://yakread.com" rel="nofollow">https://yakread.com</a> -- hit "take a look around" and you can see the "home page"/a list of recommendations without signing up. The recommendations are personalized, i.e. the probability you'll see any particular post depends on your individual interactions with past posts, if you've signed up. (it does collaborative filtering with spark mllib). So that may be a bit different from what you had in mind, since your comment sounds more like an unpersonalized system, but with some extra exploration thrown in. However in practice I suspect the biggest thing the collaborative filtering is doing at Yakread's current scale (not much) is learning which items are good/bad in general.<p>I also do have some methods baked in for doing exploration. "Epsilon greedy" is a common simple approach where x% of the recommendations are purely random. I do a bit more of a linear thing where I rank all the posts by how many times they've been recommended, then I pick a percentage 0 - 100, then I throw out the top x% most popular (previously recommended) items. that also gives you some flexibility to try out different distributions for the x% variable.<p>The source is at <a href="https://github.com/jacobobryant/yakread" rel="nofollow">https://github.com/jacobobryant/yakread</a></p>
]]></description><pubDate>Sun, 24 Aug 2025 03:34:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=45001120</link><dc:creator>jacobobryant</dc:creator><comments>https://news.ycombinator.com/item?id=45001120</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45001120</guid></item><item><title><![CDATA[New comment by jacobobryant in "Structuring large Clojure codebases with Biff"]]></title><description><![CDATA[
<p>You can do that, it's just slow if there are a lot of results.<p>Agreed you want to keep data in your main database normalized since it's easier to reason about and avoid bugs/inconsistencies in the data. The inherent trade-off is just that it's more computationally expensive to get the denormalized data.<p>The idea of materialized views is to get the best of both worlds: your main database stays normalized, and you have a secondary data store (or certain tables/whatever inside your main database, depends on the implementation) that get automatically precomputed from your normalized data. So you can get fast queries without needing to introduce a bunch of logic for maintaining the denormalized data.<p>The hard part is how do you actually keep those materialized views up to date. e.g. if you're ok with stale data, you can do a daily batch job to update your views. If you want to the materialized views to be always up-to-date then things get harder; the solution described in the article is one attempt at addressing that problem.</p>
]]></description><pubDate>Wed, 30 Jul 2025 21:43:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=44739861</link><dc:creator>jacobobryant</dc:creator><comments>https://news.ycombinator.com/item?id=44739861</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44739861</guid></item><item><title><![CDATA[New comment by jacobobryant in "Structuring large Clojure codebases with Biff"]]></title><description><![CDATA[
<p>Thanks! It's all from scratch.</p>
]]></description><pubDate>Wed, 30 Jul 2025 04:02:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=44730804</link><dc:creator>jacobobryant</dc:creator><comments>https://news.ycombinator.com/item?id=44730804</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44730804</guid></item><item><title><![CDATA[New comment by jacobobryant in "Structuring large Clojure codebases with Biff"]]></title><description><![CDATA[
<p>yes, that's part of it.</p>
]]></description><pubDate>Tue, 29 Jul 2025 16:49:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=44725633</link><dc:creator>jacobobryant</dc:creator><comments>https://news.ycombinator.com/item?id=44725633</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44725633</guid></item><item><title><![CDATA[New comment by jacobobryant in "Writing your Clojure tests in EDN files"]]></title><description><![CDATA[
<p>Agreed, thanks for sharing that post. Good read.</p>
]]></description><pubDate>Sat, 19 Jul 2025 20:11:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=44618928</link><dc:creator>jacobobryant</dc:creator><comments>https://news.ycombinator.com/item?id=44618928</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44618928</guid></item><item><title><![CDATA[Writing your Clojure tests in EDN files]]></title><description><![CDATA[
<p>Article URL: <a href="https://biffweb.com/p/edn-tests/">https://biffweb.com/p/edn-tests/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=44616405">https://news.ycombinator.com/item?id=44616405</a></p>
<p>Points: 67</p>
<p># Comments: 4</p>
]]></description><pubDate>Sat, 19 Jul 2025 15:36:59 +0000</pubDate><link>https://biffweb.com/p/edn-tests/</link><dc:creator>jacobobryant</dc:creator><comments>https://news.ycombinator.com/item?id=44616405</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44616405</guid></item><item><title><![CDATA[New comment by jacobobryant in "Biff – a batteries-included web framework for Clojure"]]></title><description><![CDATA[
<p>Glad to hear it!</p>
]]></description><pubDate>Wed, 21 May 2025 06:34:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=44048855</link><dc:creator>jacobobryant</dc:creator><comments>https://news.ycombinator.com/item?id=44048855</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44048855</guid></item><item><title><![CDATA[New comment by jacobobryant in "Biff – a batteries-included web framework for Clojure"]]></title><description><![CDATA[
<p>You can use Selmer: <a href="https://github.com/yogthos/Selmer">https://github.com/yogthos/Selmer</a></p>
]]></description><pubDate>Tue, 20 May 2025 13:36:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=44041493</link><dc:creator>jacobobryant</dc:creator><comments>https://news.ycombinator.com/item?id=44041493</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44041493</guid></item><item><title><![CDATA[New comment by jacobobryant in "Biff – a batteries-included web framework for Clojure"]]></title><description><![CDATA[
<p>Hey HN. Since this has showed up here maybe a status update would be interesting? This continues to be my main side project--amusingly it's had more traction than any of the startups I tried to build with it. Over the past year I've been working on some experimental features for Biff that are meant to help with medium-to-large codebases[1] (I've been doing this as I rewrite one of my Biff apps from scratch). There haven't been many code releases in that time, so I've got a decently sized backlog of things I'd really like to get to. E.g. XTDB v2 is almost out of beta; once I finish the app rewrite, that's next on my list.<p>[1] <a href="https://biffweb.com/p/structuring-large-codebases/" rel="nofollow">https://biffweb.com/p/structuring-large-codebases/</a></p>
]]></description><pubDate>Tue, 20 May 2025 05:59:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=44038231</link><dc:creator>jacobobryant</dc:creator><comments>https://news.ycombinator.com/item?id=44038231</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44038231</guid></item><item><title><![CDATA[New comment by jacobobryant in "JSX over the Wire"]]></title><description><![CDATA[
<p>The framework checklist[1] makes me think of Fulcro: <a href="https://fulcro.fulcrologic.com/" rel="nofollow">https://fulcro.fulcrologic.com/</a>. To a first approximation you could think of it like defining a GraphQL query alongside each of your UI components. When you load data for one component (e.g. a top-level page component), it combines its own query with the queries from its children UI components.<p>[1] <a href="https://overreacted.io/jsx-over-the-wire/#dans-async-ui-framework-checklist" rel="nofollow">https://overreacted.io/jsx-over-the-wire/#dans-async-ui-fram...</a></p>
]]></description><pubDate>Tue, 15 Apr 2025 18:17:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=43696546</link><dc:creator>jacobobryant</dc:creator><comments>https://news.ycombinator.com/item?id=43696546</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43696546</guid></item></channel></rss>