<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: aaroniba</title><link>https://news.ycombinator.com/user?id=aaroniba</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sat, 11 Apr 2026 11:21:13 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=aaroniba" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by aaroniba in "The Four Styles of Confidence on a Team"]]></title><description><![CDATA[
<p>To what extent do tight-knit teams adjust their interpretation of confidence levels on an individual basis to reflect their ratio?  Like, "Overconfident Oscar expressed a tiny bit of doubt, so he must not really have high conviction at all."  Or, "Underconfident Uma expressed slightly more conviction than usual, so we should pay attention."<p>Also, from my experience, it seems like (and this isn't a strong opinion) doing competitive high school debate teams turns people into Overconfident Oscars.</p>
]]></description><pubDate>Thu, 28 Aug 2025 21:45:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=45057411</link><dc:creator>aaroniba</dc:creator><comments>https://news.ycombinator.com/item?id=45057411</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45057411</guid></item><item><title><![CDATA[New comment by aaroniba in "Jepsen: Datomic Pro 1.0.7075"]]></title><description><![CDATA[
<p>Yes.  Perhaps this is a performance choice for DataScript since DataScript does not keep a complete transaction history the way Datomic does?  I would guess this helps DataScript process transactions faster.  There is a github issue about it here: <a href="https://github.com/tonsky/datascript/issues/366">https://github.com/tonsky/datascript/issues/366</a></p>
]]></description><pubDate>Thu, 16 May 2024 17:54:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=40381241</link><dc:creator>aaroniba</dc:creator><comments>https://news.ycombinator.com/item?id=40381241</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40381241</guid></item><item><title><![CDATA[New comment by aaroniba in "Jepsen: Datomic Pro 1.0.7075"]]></title><description><![CDATA[
<p>Yeah, I've used a transaction functions a few times but never had a case where two transaction functions within the same d/transaction ever interacted with each other.  If I did encounter that case, I would probably just write one new transaction function to handle it.</p>
]]></description><pubDate>Thu, 16 May 2024 17:43:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=40381119</link><dc:creator>aaroniba</dc:creator><comments>https://news.ycombinator.com/item?id=40381119</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40381119</guid></item><item><title><![CDATA[New comment by aaroniba in "Jepsen: Datomic Pro 1.0.7075"]]></title><description><![CDATA[
<p>I think the article answers your question at the end of section 3.1:<p>> "This behavior may be surprising, but it is generally consistent with Datomic’s documentation. Nubank does not intend to alter this behavior, and we do not consider it a bug."<p>When you say, "situations leading to invariant violations" -- that sounds like some kind of bug in Datomic, which this is not.  One just has to understand how datomic processes transactions, and code accordingly.<p>I am unaffiliated with Nubank, but in my experience using Datomic as a general-purpose database, I have not encountered a situation where this was a problem.</p>
]]></description><pubDate>Thu, 16 May 2024 05:10:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=40375386</link><dc:creator>aaroniba</dc:creator><comments>https://news.ycombinator.com/item?id=40375386</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40375386</guid></item><item><title><![CDATA[New comment by aaroniba in "Weird Languages"]]></title><description><![CDATA[
<p>That's a good point.  Even though this would weaken my argument (slightly), I now wonder if modern JITs can completely optimize debug.log(someExpensiveFunction()) into a NOOP if they realize that the argument won't end up being used inside the log function.<p>The javadoc for slf4j's Logger.debug implies that the JIT cannot be relied on for this:<p><a href="http://slf4j.org/apidocs/org/slf4j/Logger.html#debug(java.lang.String,java.lang.Object" rel="nofollow">http://slf4j.org/apidocs/org/slf4j/Logger.html#debug(java.la...</a>...)<p>"This form avoids superfluous string concatenation when the logger is disabled for the DEBUG level"<p>I think that means if you call Logger.debug("a"+"b"), the string concatenation happens even if DEBUG logging is disabled.  But maybe JITs have improved since that javadoc was written, or the author was not aware of how smart JITs are.<p>I would be curious to know if there is a JIT expert who could weigh in on this question.</p>
]]></description><pubDate>Sat, 28 Aug 2021 18:32:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=28340351</link><dc:creator>aaroniba</dc:creator><comments>https://news.ycombinator.com/item?id=28340351</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28340351</guid></item><item><title><![CDATA[New comment by aaroniba in "Weird Languages"]]></title><description><![CDATA[
<p>Yes lots of programming consists of gluing together libraries, but in my experience languages vary dramatically at how well they do even this.<p>For example, consider logging libraries.  It's useful to have statements like log.debug(someSlowFunction()) in your code.  In LISPs it's really easy to create a (debug) macro that generates empty code when you don't want debug logging turned on.  In other languages, you have to wrap the arguments in a function to avoid extra runtime costs, and even then you can't avoid the "if debug" conditional at runtime.  All those anonymous function wraps add clutter, and that clutter accumulates.  There are many other cases where having advanced language features greatly helps gluing together libraries.<p>Another aspect is the tooling.  When I am considering a new library, I like to try it out in the REPL.  In Clojure I can quickly start calling library functions, and use the (time) macro to get a sense of how long they take to evaluate.  Not all popular languages are amenable to this kind of REPL-driven experimentation with libraries.<p>Not only does the language impact how you use libraries, but it also impacts what libraries may exist.  Some libraries are simply not possible to write in less powerful programming languages.  In LISP this would include any library that uses a macro.  For example, Clojure was able to introduce core.async as a library, providing an async facility similar to what golang offers.  But in most languages you wouldn't be able to implement that as a library.<p>Another major example is reagent vs. react.  The concise hiccup representation supported by Reagent is only possible because of design decisions that went into Clojure.  JavaScript users are stuck with JSX, which is less concise, and in my opinion far less good.<p>Another issue that arises when using libraries is whether or not the language has a static type system.  Without getting into the age-old flamewar about static vs dynamic typing, I'll just note that popular languages differ in this dimension, and this has a big impact on what it's like to glue together libraries.<p>So overall, I think this essay undersells the benefits of LISP.  Even if you spend all day gluing together libraries, LISP makes that much better by improving how you can call libraries, how you can quickly experiment with them, and even what kinds of libraries can exist.</p>
]]></description><pubDate>Sat, 28 Aug 2021 16:51:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=28339478</link><dc:creator>aaroniba</dc:creator><comments>https://news.ycombinator.com/item?id=28339478</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28339478</guid></item><item><title><![CDATA[New comment by aaroniba in "The Rise of the Electric Scooter"]]></title><description><![CDATA[
<p>I have a Boosted Rev and live in Nob Hill in SF with some steep hills.  It zooms up all the hills pretty easily.</p>
]]></description><pubDate>Thu, 12 Sep 2019 19:11:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=20955196</link><dc:creator>aaroniba</dc:creator><comments>https://news.ycombinator.com/item?id=20955196</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=20955196</guid></item><item><title><![CDATA[New comment by aaroniba in "Show HN: We made a real-time editor for web database apps"]]></title><description><![CDATA[
<p>Like others, it took me a while to understand what this actually does.  Even coming from a Clojure+Datomic background.<p>As best I can tell, this is like phpMyAdmin for Datomic.  But the cool and unique thing about Hyperfiddle is that in addition to writing queries and seeing the results, you can customize the result display using markdown or even arbitrary clojurescript code.  Then you can generate forms to input new data (based on the schema of the database), connect it to more clojurescript, and before you know it you've built a web app.  Because the whole thing is web based, you can send a link to your "fiddle" (web app) to other people, and they can use it without knowing anything about programming.  This is all without git, editing text files, or even thinking about deployment or hosting.  I think that's all pretty cool.<p>In most situations, this would be dangerously powerful, especially running on a production database.  But Datomic has unique facilities for speculating "what if I transacted this" (which is how the hyperfiddle staging area works).  Datomic also has powerful undo and time-travel options, which makes it much less terrifying to hyperfiddle it.<p>It's also cool that hyperfiddle queries/views/code are all stored in Datomic, so you get a sort of version control type layer built-in.<p>I think this is a cool vision for making it much quicker to develop lightweight database-backed web apps.  Obviously the current state of hyperfiddle needs a lot of work on the UI and home page to explain this all.</p>
]]></description><pubDate>Mon, 01 Oct 2018 21:07:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=18116818</link><dc:creator>aaroniba</dc:creator><comments>https://news.ycombinator.com/item?id=18116818</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=18116818</guid></item><item><title><![CDATA[New comment by aaroniba in "A Gambler Who Cracked the Horse-Racing Code"]]></title><description><![CDATA[
<p>I know that algorithmic betting on horse racing is popular in the UK via exchanges like Betfair.  Does anyone know if there is an exchange/API for Hong Kong horse racing?</p>
]]></description><pubDate>Thu, 03 May 2018 15:03:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=16986649</link><dc:creator>aaroniba</dc:creator><comments>https://news.ycombinator.com/item?id=16986649</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=16986649</guid></item><item><title><![CDATA[New comment by aaroniba in "ClojureScript beginners' home page"]]></title><description><![CDATA[
<p>You might think from the URL or logo that this is some kind of official ClojureScript page, but it's not.  The official page is clojurescript.org (no hyphen).<p>I don't speak in any official way for ClojureScript, but as an enthusiast, I wish this author had chosen a different URL to make that more clear.<p>Other ideas to mitigate the confusion: using a different logo in the corner; prefixing the html <title> with "unofficial"; and adding a more prominent link to clojurescript.org titled "Official ClojureScript Page".</p>
]]></description><pubDate>Wed, 18 Apr 2018 14:38:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=16867722</link><dc:creator>aaroniba</dc:creator><comments>https://news.ycombinator.com/item?id=16867722</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=16867722</guid></item><item><title><![CDATA[New comment by aaroniba in "The Assignment Problem and the Hungarian Method (2005) [pdf]"]]></title><description><![CDATA[
<p>I recently used this algorithm in a project.  For anyone looking for a high-quality Java or Clojure implementation, I would recommend:<p><a href="https://github.com/timothypratley/munkres" rel="nofollow">https://github.com/timothypratley/munkres</a> (Clojure)<p>Which wraps:<p><a href="https://github.com/kevin-wayne/algs4" rel="nofollow">https://github.com/kevin-wayne/algs4</a> (Java)</p>
]]></description><pubDate>Sat, 16 Dec 2017 16:27:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=15940188</link><dc:creator>aaroniba</dc:creator><comments>https://news.ycombinator.com/item?id=15940188</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=15940188</guid></item><item><title><![CDATA[New comment by aaroniba in "Counting Clojure Code"]]></title><description><![CDATA[
<p>I agree there are many considerations when choosing a library, but conciseness does come up.  For example, I was recently impressed with how concise http-kit is.  The author seems proud of it too:<p><a href="http://www.http-kit.org/http-kit-clean-small.html" rel="nofollow">http://www.http-kit.org/http-kit-clean-small.html</a><p>You and I probably just have different values on this matter.  Your comment implies that conciseness is merely "nice", so I'm guessing you just don't value that aspect of code as highly as I do.</p>
]]></description><pubDate>Wed, 31 May 2017 04:06:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=14450355</link><dc:creator>aaroniba</dc:creator><comments>https://news.ycombinator.com/item?id=14450355</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=14450355</guid></item><item><title><![CDATA[New comment by aaroniba in "Counting Clojure Code"]]></title><description><![CDATA[
<p>Yes.  You put it better than I did.</p>
]]></description><pubDate>Tue, 30 May 2017 21:42:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=14448778</link><dc:creator>aaroniba</dc:creator><comments>https://news.ycombinator.com/item?id=14448778</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=14448778</guid></item><item><title><![CDATA[Counting Clojure Code]]></title><description><![CDATA[
<p>Article URL: <a href="http://aaroniba.net/counting-clojure-code">http://aaroniba.net/counting-clojure-code</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=14445597">https://news.ycombinator.com/item?id=14445597</a></p>
<p>Points: 119</p>
<p># Comments: 12</p>
]]></description><pubDate>Tue, 30 May 2017 14:27:46 +0000</pubDate><link>http://aaroniba.net/counting-clojure-code</link><dc:creator>aaroniba</dc:creator><comments>https://news.ycombinator.com/item?id=14445597</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=14445597</guid></item><item><title><![CDATA[Symmetric Key Chording on a MacBook]]></title><description><![CDATA[
<p>Article URL: <a href="http://aaroniba.net/symmetric-key-chording">http://aaroniba.net/symmetric-key-chording</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=14368350">https://news.ycombinator.com/item?id=14368350</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 18 May 2017 15:59:33 +0000</pubDate><link>http://aaroniba.net/symmetric-key-chording</link><dc:creator>aaroniba</dc:creator><comments>https://news.ycombinator.com/item?id=14368350</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=14368350</guid></item><item><title><![CDATA[New comment by aaroniba in "Show HN: CLJS Fiddle – ClojureScript"]]></title><description><![CDATA[
<p>This is great.  I wish I had this when I was learning reagent.</p>
]]></description><pubDate>Wed, 02 Mar 2016 17:32:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=11211457</link><dc:creator>aaroniba</dc:creator><comments>https://news.ycombinator.com/item?id=11211457</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=11211457</guid></item><item><title><![CDATA[New comment by aaroniba in "Clojure 1.5"]]></title><description><![CDATA[
<p>I've been using Swiss Arrows.
<a href="https://github.com/rplevy/swiss-arrows" rel="nofollow">https://github.com/rplevy/swiss-arrows</a></p>
]]></description><pubDate>Sat, 02 Mar 2013 00:51:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=5307911</link><dc:creator>aaroniba</dc:creator><comments>https://news.ycombinator.com/item?id=5307911</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=5307911</guid></item><item><title><![CDATA[New comment by aaroniba in "Crafting Code in Clojure"]]></title><description><![CDATA[
<p>The equivalent clojure code would be:<p><pre><code>    (defn f [a b]
      (let [res (join "," (sort (distinct (mapcat keys [a b]))))]
        (if (empty? res) "<none>" res)))
</code></pre>
Also I'm not a Scala expert, but I think you want .keySet instead of .keys, otherwise they won't be unique, right?</p>
]]></description><pubDate>Sat, 02 Feb 2013 00:45:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=5154533</link><dc:creator>aaroniba</dc:creator><comments>https://news.ycombinator.com/item?id=5154533</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=5154533</guid></item><item><title><![CDATA[New comment by aaroniba in "Battlecode: MIT's longest-running hardcore programming competition"]]></title><description><![CDATA[
<p>BattleCode was the best thing I did while at MIT, and one of the most unique and rewarding experiences of my life.<p>The way David and I were able to win it in 2003: at that time, robot positions were stored as two doubles (x,y).  You could move yourself by a precise amount or read the precise x,y position of another robot, each in only 1 bytecode.  So instead of using broadcastMessage(String), checking that no other team was trying to screw with our messages, all of which took lots of bytecodes to get right.  Instead of that, our robots communicated through the low bits of double values in their positions.  Kind of like bees dancing for each other.  This gave us enough of an edge to beat out all the other players.  This was 100% David Greenspan's idea, by the way.  I just worked hard to help code it up.<p>MIT classes are supposedly a lot of hard work, but at that point I had never worked as hard on anything as I did on our BattleCode player.</p>
]]></description><pubDate>Mon, 07 Jan 2013 19:27:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=5022666</link><dc:creator>aaroniba</dc:creator><comments>https://news.ycombinator.com/item?id=5022666</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=5022666</guid></item><item><title><![CDATA[New comment by aaroniba in "Fast JVM launching without the hassle of persistent JVMs"]]></title><description><![CDATA[
<p>It looks like drip does not automatically work with lein:<p><a href="https://github.com/flatland/drip/issues/36" rel="nofollow">https://github.com/flatland/drip/issues/36</a><p>Here's my workaround to use drip to start up lein repls instantly:<p><a href="https://gist.github.com/4103370" rel="nofollow">https://gist.github.com/4103370</a><p>Should work with lein1 & lein2.</p>
]]></description><pubDate>Sun, 18 Nov 2012 02:31:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=4799645</link><dc:creator>aaroniba</dc:creator><comments>https://news.ycombinator.com/item?id=4799645</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=4799645</guid></item></channel></rss>