<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: tonsky</title><link>https://news.ycombinator.com/user?id=tonsky</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 22 Oct 2026 12:47:28 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=tonsky" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by tonsky in "We shouldn't have needed lockfiles"]]></title><description><![CDATA[
<p>Maven's version resolution mechanism determines which version of a dependency to use when multiple versions are specified in a project's dependency tree. Here's how it works:<p>- Nearest Definition Wins: When multiple versions of the same dependency appear in the dependency tree, the version closest to your project in the tree will be used.<p>- First Declaration Wins: If two versions of the same dependency are at the same depth in the tree, the first one declared in the POM will be used.</p>
]]></description><pubDate>Wed, 06 Aug 2025 16:47:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=44814475</link><dc:creator>tonsky</dc:creator><comments>https://news.ycombinator.com/item?id=44814475</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44814475</guid></item><item><title><![CDATA[New comment by tonsky in "We shouldn't have needed lockfiles"]]></title><description><![CDATA[
<p>> I’d love to lock my library to numpy 2.3.4, but if the developers of another library pin theirs to 2.3.5 then game over.<p>Why? Can’t you specify which version to use?</p>
]]></description><pubDate>Wed, 06 Aug 2025 16:45:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=44814447</link><dc:creator>tonsky</dc:creator><comments>https://news.ycombinator.com/item?id=44814447</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44814447</guid></item><item><title><![CDATA[New comment by tonsky in "We shouldn't have needed lockfiles"]]></title><description><![CDATA[
<p>> would fail in languages like Python where dependencies are shared<p>And yet Java and Maven exist...</p>
]]></description><pubDate>Wed, 06 Aug 2025 16:45:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=44814427</link><dc:creator>tonsky</dc:creator><comments>https://news.ycombinator.com/item?id=44814427</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44814427</guid></item><item><title><![CDATA[New comment by tonsky in "We shouldn't have needed lockfiles"]]></title><description><![CDATA[
<p>I updated the post, see near the bottom</p>
]]></description><pubDate>Wed, 06 Aug 2025 16:41:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=44814383</link><dc:creator>tonsky</dc:creator><comments>https://news.ycombinator.com/item?id=44814383</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44814383</guid></item><item><title><![CDATA[New comment by tonsky in "We shouldn't have needed lockfiles"]]></title><description><![CDATA[
<p>Yeah but version ranges are fiction. Some says: we require libpupa 0.2.0+. Sure you can find a version in that range. But what if it doesn’t work? How can you know that your library will work with all the future libpupa releases in advance?</p>
]]></description><pubDate>Wed, 06 Aug 2025 16:41:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=44814370</link><dc:creator>tonsky</dc:creator><comments>https://news.ycombinator.com/item?id=44814370</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44814370</guid></item><item><title><![CDATA[New comment by tonsky in "We shouldn't have needed lockfiles"]]></title><description><![CDATA[
<p>I worked for 20 years in an ecosystem that didn’t have lockfiles and had reproducible builds before the term was invented, and now you come and tell me that it couldn’t be?</p>
]]></description><pubDate>Wed, 06 Aug 2025 16:38:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=44814333</link><dc:creator>tonsky</dc:creator><comments>https://news.ycombinator.com/item?id=44814333</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44814333</guid></item><item><title><![CDATA[New comment by tonsky in "We shouldn't have needed lockfiles"]]></title><description><![CDATA[
<p>> Lockfiles are essential for somewhat reproducible builds.<p>No they are not. Fully reproducible builds have existed without lockfiles for decades</p>
]]></description><pubDate>Wed, 06 Aug 2025 16:23:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=44814145</link><dc:creator>tonsky</dc:creator><comments>https://news.ycombinator.com/item?id=44814145</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44814145</guid></item><item><title><![CDATA[New comment by tonsky in "We shouldn't have needed lockfiles"]]></title><description><![CDATA[
<p>One of the versions will be picked up. If that version doesn’t work, you can try another one. The process is exactly the same</p>
]]></description><pubDate>Wed, 06 Aug 2025 16:20:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=44814092</link><dc:creator>tonsky</dc:creator><comments>https://news.ycombinator.com/item?id=44814092</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44814092</guid></item><item><title><![CDATA[New comment by tonsky in "We shouldn't have needed lockfiles"]]></title><description><![CDATA[
<p>It’s totally fine in Maven, no need to rebuild or repackage anything. You just override version of libinsecure in your pom.xml and it uses the version you told it to</p>
]]></description><pubDate>Wed, 06 Aug 2025 16:17:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=44814050</link><dc:creator>tonsky</dc:creator><comments>https://news.ycombinator.com/item?id=44814050</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44814050</guid></item><item><title><![CDATA[New comment by tonsky in "Sync Engines Are the Future"]]></title><description><![CDATA[
<p>Clojure Electric is different. It’s not really a sync, it’s more of a thin client. It relies of having fast connection to server at all times, and re-fetches everything all the time. They innovation is that they found a really, really ergonomic way to do it</p>
]]></description><pubDate>Fri, 21 Mar 2025 11:34:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=43434411</link><dc:creator>tonsky</dc:creator><comments>https://news.ycombinator.com/item?id=43434411</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43434411</guid></item><item><title><![CDATA[New comment by tonsky in "Sync Engines Are the Future"]]></title><description><![CDATA[
<p>If you think of an existing database, like Postgres, sure. It’s not very convenient.<p>What I am saying is, in a perfect world, database and server will be the one and run code _and_ data at the same time. There’s really no good reason why they are separated, and it causes a lot of inconveniences right now.</p>
]]></description><pubDate>Fri, 21 Mar 2025 11:24:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=43434338</link><dc:creator>tonsky</dc:creator><comments>https://news.ycombinator.com/item?id=43434338</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43434338</guid></item><item><title><![CDATA[New comment by tonsky in "Sync Engines Are the Future"]]></title><description><![CDATA[
<p>Ah, no. Not really. People sometimes think about conflict resolution as a problem that needs to be solved. But it’s not solvable, not really. It’s part of the domain, it’s not going anywhere, it’s irreducible complexity.<p>You _will_ have conflicts (because your app is distributed and there are concurrent writes). They will happen on semantic level, so only you (app developer) _will_ be able to solve them. Database (or any other magical tool) can’t do it for you.<p>Another misconception is that conflict resolution needs to be “solved” perfectly before any progress can be made. That is not true as well. You might have unhandled conflicts in your system and still have a working, useful, successful product. Conflicts might be rare, insignificant, or people (your users) will just correct for/work around them.<p>I am not saying “drop data on the floor”, of course, if you can help it. But try not to overthink it, either.</p>
]]></description><pubDate>Fri, 21 Mar 2025 11:22:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=43434324</link><dc:creator>tonsky</dc:creator><comments>https://news.ycombinator.com/item?id=43434324</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43434324</guid></item><item><title><![CDATA[New comment by tonsky in "Sync Engines Are the Future"]]></title><description><![CDATA[
<p>> There's no such thing as reliable network in the world<p>I’m not saying there is</p>
]]></description><pubDate>Fri, 21 Mar 2025 11:10:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=43434243</link><dc:creator>tonsky</dc:creator><comments>https://news.ycombinator.com/item?id=43434243</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43434243</guid></item><item><title><![CDATA[New comment by tonsky in "Sync Engines Are the Future"]]></title><description><![CDATA[
<p>- You can have many sync engines<p>- Sync engines might only solve small and medium scale, that would be a huge win even without large scale</p>
]]></description><pubDate>Fri, 21 Mar 2025 11:09:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=43434240</link><dc:creator>tonsky</dc:creator><comments>https://news.ycombinator.com/item?id=43434240</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43434240</guid></item><item><title><![CDATA[New comment by tonsky in "Sync Engines Are the Future"]]></title><description><![CDATA[
<p>It’s not as simple as you make it sound:<p>- Reliable communication is hard
- Optimistic writes should on client are hard
- Tracking subsets of data is hard (you don't want the entirety of Datomic on the client, do you?)
- Permissions are hard in this model<p>Why didn't I implement it? Mostly comes down to free time. It's a hobby project and it's hard to find time for it. I also stopped writing web apps so immediate pressure for this went away.</p>
]]></description><pubDate>Fri, 21 Mar 2025 11:06:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=43434213</link><dc:creator>tonsky</dc:creator><comments>https://news.ycombinator.com/item?id=43434213</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43434213</guid></item><item><title><![CDATA[New comment by tonsky in "Clojure Desktop UI Framework"]]></title><description><![CDATA[
<p>That’s two perfect examples! Racket seems to try to use native widgets, and looks horrible as a result, at least on macOS<p>JavaFX uses the same approach as Humble UI: they draw all the widgets themselves and have custom cross-platform look and feel.<p>We aim to be better quality version of JavaFX</p>
]]></description><pubDate>Wed, 28 Aug 2024 08:13:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=41377209</link><dc:creator>tonsky</dc:creator><comments>https://news.ycombinator.com/item?id=41377209</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41377209</guid></item><item><title><![CDATA[New comment by tonsky in "Clojure Desktop UI Framework"]]></title><description><![CDATA[
<p>If they use native widgets, they usually look really bad
If they just “imitate” look and feel, they usually fall very short of the real thing<p>Either way, it’s bad experience for the end user</p>
]]></description><pubDate>Tue, 27 Aug 2024 17:12:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=41370056</link><dc:creator>tonsky</dc:creator><comments>https://news.ycombinator.com/item?id=41370056</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41370056</guid></item><item><title><![CDATA[New comment by tonsky in "Clojure Desktop UI Framework"]]></title><description><![CDATA[
<p>It’s a tradeoff. You either make your app native but only for one platform, or you make it look “universal” and run on all three.</p>
]]></description><pubDate>Tue, 27 Aug 2024 15:41:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=41368786</link><dc:creator>tonsky</dc:creator><comments>https://news.ycombinator.com/item?id=41368786</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41368786</guid></item><item><title><![CDATA[New comment by tonsky in "Clojure Desktop UI Framework"]]></title><description><![CDATA[
<p>All good points, all true. But what’s also true is that current trend is to come up with arbitrary-looking controls even on apps made by Apple themselves. Nobody knows what native is supposed to look like. I’m not saying it’s good, it’s just what is happening.</p>
]]></description><pubDate>Tue, 27 Aug 2024 15:38:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=41368764</link><dc:creator>tonsky</dc:creator><comments>https://news.ycombinator.com/item?id=41368764</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41368764</guid></item><item><title><![CDATA[New comment by tonsky in "Clojure Desktop UI Framework"]]></title><description><![CDATA[
<p>Not yet, but in theory, sure</p>
]]></description><pubDate>Tue, 27 Aug 2024 15:34:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=41368715</link><dc:creator>tonsky</dc:creator><comments>https://news.ycombinator.com/item?id=41368715</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41368715</guid></item></channel></rss>