<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: JeanPierre</title><link>https://news.ycombinator.com/user?id=JeanPierre</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 16 Apr 2026 05:26:57 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=JeanPierre" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[Swearjure is Turing Complete]]></title><description><![CDATA[
<p>Article URL: <a href="http://hypirion.com/musings/swearjure-is-turing-complete">http://hypirion.com/musings/swearjure-is-turing-complete</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=8991535">https://news.ycombinator.com/item?id=8991535</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 03 Feb 2015 17:08:51 +0000</pubDate><link>http://hypirion.com/musings/swearjure-is-turing-complete</link><dc:creator>JeanPierre</dc:creator><comments>https://news.ycombinator.com/item?id=8991535</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=8991535</guid></item><item><title><![CDATA[New comment by JeanPierre in "Understanding Clojure's Persistent Vectors, Pt. 3"]]></title><description><![CDATA[
<p>Agreed on the benchmarks – that's the next (and last) part on the list I'm going to do with this series.<p>And yes, of course, at some point, constant factors break into applications. Would it be better if add in a short comment on "practically O(1) for non-HPC applications", or would you phrase it differently to give it better context?</p>
]]></description><pubDate>Sat, 25 Oct 2014 00:14:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=8506631</link><dc:creator>JeanPierre</dc:creator><comments>https://news.ycombinator.com/item?id=8506631</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=8506631</guid></item><item><title><![CDATA[New comment by JeanPierre in "Understanding Clojure's Persistent Vectors, Pt. 3"]]></title><description><![CDATA[
<p>I understand your concern, but I don't really think the problem is within Clojure people: When I started out explaining the structure to other people and that most operations have O(log n) runtime, people dismissed Clojure as being too slow for practical purposes. Part of this is because programmers, not Clojure devs in particular, connotate O(log n) with "much slower than O(1)". However, this data structure is incredibly much faster than the "O(log n)" people are generally used to.<p>And this is the problem. As you yourself say, most programmers usually associate/assume "Big-O notation is intended to describe <i>how the time required for an operation grows</i> as the number of items being handled gets large".<p>But formally, this is not the case at all. O(g(x)) tells you the that the <i>worst case</i> input to the algorithm will require less operations (usually operations, sometimes memory or other things) than the function g multiplied by some positive constant. g is usually determined by the size of the input. (This definition is also simplified somewhat, but it illustrates the problem)<p>We can say that ArrayLists.add have O(n) runtime and that quicksort have O(n²) runtime, but they both also have O(n³) and O(n!) runtime.<p>In addition, Big-O does not describe how the algorithm runs in the average case, or how frequent the worst case is. In and of itself, the Big-O notation tells us almost nothing about an algorithm – you barely conclude anything from it. I guess that is part of why it has become this very simplified term with a very wibbly-wobbly definition from time to time.<p>So when you're saying that calling it "practically O(1)" is lying, I agree <i>if this was in an academic context</i>. But for the average programmer (regardless of language!), O(g(x)) is usually thought of as the "worst case runtime for an algorithm". Since the actual runtime is – well – effectively constant, I considered it okay.<p>---<p>That being said, I have formally explained the persistent vector if you're interested in the academic version. The background chapter in <a href="http://hypirion.com/thesis.pdf" rel="nofollow">http://hypirion.com/thesis.pdf</a> should cover it.</p>
]]></description><pubDate>Fri, 24 Oct 2014 19:25:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=8505443</link><dc:creator>JeanPierre</dc:creator><comments>https://news.ycombinator.com/item?id=8505443</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=8505443</guid></item><item><title><![CDATA[Riak 2.0 released]]></title><description><![CDATA[
<p>Article URL: <a href="http://lists.basho.com/pipermail/riak-users_lists.basho.com/2014-September/015879.html">http://lists.basho.com/pipermail/riak-users_lists.basho.com/2014-September/015879.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=8260329">https://news.ycombinator.com/item?id=8260329</a></p>
<p>Points: 15</p>
<p># Comments: 1</p>
]]></description><pubDate>Tue, 02 Sep 2014 21:39:34 +0000</pubDate><link>http://lists.basho.com/pipermail/riak-users_lists.basho.com/2014-September/015879.html</link><dc:creator>JeanPierre</dc:creator><comments>https://news.ycombinator.com/item?id=8260329</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=8260329</guid></item><item><title><![CDATA[New comment by JeanPierre in "“Mostly functional” programming does not work"]]></title><description><![CDATA[
<p>That's a red herring: You're asking <i>why</i> the majority of software is written in imperative languages instead of functional ones, which is a very complex question with very many factors. It is not an argument which invalidates nor counters the author's claim: Namely that "mostly functional languages" is unfeasible and only increases the bugs caused by side effects.</p>
]]></description><pubDate>Fri, 25 Jul 2014 10:15:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=8084454</link><dc:creator>JeanPierre</dc:creator><comments>https://news.ycombinator.com/item?id=8084454</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=8084454</guid></item><item><title><![CDATA[New comment by JeanPierre in "Elm 0.12.1: Fast immutable arrays"]]></title><description><![CDATA[
<p>Mori doesn't implement RRB-trees, thus doesn't support logarithmic concatenation.</p>
]]></description><pubDate>Fri, 02 May 2014 16:41:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=7686701</link><dc:creator>JeanPierre</dc:creator><comments>https://news.ycombinator.com/item?id=7686701</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=7686701</guid></item><item><title><![CDATA[New comment by JeanPierre in "Elm 0.12.1: Fast immutable arrays"]]></title><description><![CDATA[
<p>Constant time <i>in practise</i> is a notable difference from saying constant time.<p>I can always sort a 32-bit int array in worst case linear time using counting sort, which in theory is better than the worst case runtime of quicksort, O(n²). Is it better <i>in practise</i>? Of course not, the constant factor is just too high, both for time and memory.</p>
]]></description><pubDate>Fri, 02 May 2014 16:36:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=7686669</link><dc:creator>JeanPierre</dc:creator><comments>https://news.ycombinator.com/item?id=7686669</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=7686669</guid></item><item><title><![CDATA[New comment by JeanPierre in "Trapperkeeper is a new Clojure framework for long-running applications, services"]]></title><description><![CDATA[
<p>I've managed to do the opposite: Scala didn't stick, Clojure did. I guess there's some subjective reason why or why not Clojure/Scala would stick with someone.<p>However, it's false that Clojure doesn't have a company behind it: Cognitect is certainly backing up Clojure by developing ClojureScript and Clojure itself, Clojure consulting, the Datomic database and the Pedestal "framework".</p>
]]></description><pubDate>Sun, 13 Apr 2014 15:30:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=7581594</link><dc:creator>JeanPierre</dc:creator><comments>https://news.ycombinator.com/item?id=7581594</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=7581594</guid></item><item><title><![CDATA[New comment by JeanPierre in "Where Lisp Fits"]]></title><description><![CDATA[
<p><p><pre><code>    And if you ask me, its just so good that we haven't needed a revision in 20 years.
</code></pre>
What about threading and/or concurrency? CLTL doesn't mention it, yet it is something which is now considered a requirement for real, general purpose programming languages.</p>
]]></description><pubDate>Mon, 03 Feb 2014 19:26:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=7172879</link><dc:creator>JeanPierre</dc:creator><comments>https://news.ycombinator.com/item?id=7172879</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=7172879</guid></item><item><title><![CDATA[New comment by JeanPierre in "Go by Example"]]></title><description><![CDATA[
<p>Could you elaborate on how generics makes code less safe? In my experience, the lack of generics is much more type unsafe, as you often have to do casts at runtime (and handle them) when you have to implement your own data structures. In contrast, languages with generics handle those at compile time.</p>
]]></description><pubDate>Fri, 17 Jan 2014 14:47:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=7075987</link><dc:creator>JeanPierre</dc:creator><comments>https://news.ycombinator.com/item?id=7075987</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=7075987</guid></item><item><title><![CDATA[New comment by JeanPierre in "Show HN: LINQ for Go"]]></title><description><![CDATA[
<p>Just for reference, a single goroutine has a 8 kb stack size. Having one million of these things in memory at once would require 8 Gb of memory. Obviously, the scheduler kicks in, but 8 kb chunks of memory still has to be assigned and freed for every routine started and stopped.</p>
]]></description><pubDate>Sat, 04 Jan 2014 12:34:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=7010868</link><dc:creator>JeanPierre</dc:creator><comments>https://news.ycombinator.com/item?id=7010868</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=7010868</guid></item><item><title><![CDATA[Russ Olsen - To the Moon!]]></title><description><![CDATA[
<p>Article URL: <a href="http://www.youtube.com/watch?v=4Sso4HtvJsw">http://www.youtube.com/watch?v=4Sso4HtvJsw</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=6968545">https://news.ycombinator.com/item?id=6968545</a></p>
<p>Points: 4</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 26 Dec 2013 23:06:55 +0000</pubDate><link>http://www.youtube.com/watch?v=4Sso4HtvJsw</link><dc:creator>JeanPierre</dc:creator><comments>https://news.ycombinator.com/item?id=6968545</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6968545</guid></item><item><title><![CDATA[New comment by JeanPierre in "Clojure vs. Scala"]]></title><description><![CDATA[
<p>Using <i>val King = 13; val Queen = 12;</i> in Scala is not equivalent with using Clojure keywords, as their printed variant will be 13 and 12, not :king and :queen. Reading debugging output or logs would force you to manually convert those values.<p>Ordering for free is valuable, I guess, but it sort of depends on the situation. Sometimes face cards are worth 10, other times they are worth 11, 12, 13. If you use <i>val King = 10;</i>, then it suddenly is impossible to distinguish between face cards and tens.</p>
]]></description><pubDate>Tue, 24 Dec 2013 13:00:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=6959223</link><dc:creator>JeanPierre</dc:creator><comments>https://news.ycombinator.com/item?id=6959223</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6959223</guid></item><item><title><![CDATA[New comment by JeanPierre in "Understanding Clojure's Persistent Vectors, Part 1"]]></title><description><![CDATA[
<p>I do agree that the structure is influenced by the paper, so I've added that in. I don't agree that they are "virtually identical" however, because there are significant differences leading to a lot of performance improvements (never any hash collisions, insertion and removal only at the end, resulting in perfect balancing, etc) and, as swanodette mentioned, Bagwell himself mentioned that they were pioneered by Hickey.<p>> Rich goes through this in one of his talks but I don't recall which.<p>If you figure out which, I'd love to know! :)</p>
]]></description><pubDate>Wed, 25 Sep 2013 19:08:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=6446615</link><dc:creator>JeanPierre</dc:creator><comments>https://news.ycombinator.com/item?id=6446615</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6446615</guid></item><item><title><![CDATA[New comment by JeanPierre in "Understanding Clojure's Persistent Vectors, Part 1"]]></title><description><![CDATA[
<p>Author here: I think you talk about the persistent hashmaps, not the persistent vectors. I've been looking for papers explaining Clojure's persistent collections, and Bagwell seems to cover the hash maps and hash sets quite well. However, I've not seen a paper on the persistent vectors, which was quite a bummer, and that was the reason I started explaining them in the first place.<p>If you have a reference to a paper explaining something similar (or the actual implementation), I'd love to put it in the post for others.</p>
]]></description><pubDate>Wed, 25 Sep 2013 17:24:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=6445929</link><dc:creator>JeanPierre</dc:creator><comments>https://news.ycombinator.com/item?id=6445929</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6445929</guid></item><item><title><![CDATA[Read RFC Documents in Their HTML Versions]]></title><description><![CDATA[
<p>Article URL: <a href="http://hypirion.com/musings/read-rfcs-in-html">http://hypirion.com/musings/read-rfcs-in-html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=6269125">https://news.ycombinator.com/item?id=6269125</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Sat, 24 Aug 2013 17:01:12 +0000</pubDate><link>http://hypirion.com/musings/read-rfcs-in-html</link><dc:creator>JeanPierre</dc:creator><comments>https://news.ycombinator.com/item?id=6269125</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6269125</guid></item><item><title><![CDATA[New comment by JeanPierre in "Who Says C is Simple?"]]></title><description><![CDATA[
<p>To get an even better explanation on what the word "simple" means and what it derives from, I would recommend "Simplicity Ain't Easy" by Stuart Halloway[1]. While it is very similar to "Simple made Easy", it focuses a lot more on the etymology of the words "simple" and "complex" and how people misuse the word.<p>[1]: <a href="http://www.youtube.com/watch?v=cidchWg74Y4" rel="nofollow">http://www.youtube.com/watch?v=cidchWg74Y4</a></p>
]]></description><pubDate>Wed, 17 Jul 2013 19:34:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=6059735</link><dc:creator>JeanPierre</dc:creator><comments>https://news.ycombinator.com/item?id=6059735</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6059735</guid></item><item><title><![CDATA[New comment by JeanPierre in "LINQ Ruined My Favorite Interview Question"]]></title><description><![CDATA[
<p>sort-by takes an optional comparator, so doing (comp - val) is a bit unneeded. Just add in > as an argument to sort-by:<p><pre><code>  (->> (string/split s #"\s+")
       frequencies
       (sort-by val >)
       (take 10))
</code></pre>
Just mentioning it here because I find it vastly more readable than (comp - val).</p>
]]></description><pubDate>Thu, 11 Jul 2013 18:20:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=6027992</link><dc:creator>JeanPierre</dc:creator><comments>https://news.ycombinator.com/item?id=6027992</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6027992</guid></item><item><title><![CDATA[New comment by JeanPierre in "Replacing Clever Code with Unremarkable Code in Go"]]></title><description><![CDATA[
<p>I would like to add on to this:<p>Generics may not be the correct solution, but I would really like a way to make collections which are general enough to be used by any datatype. As of now, I cannot do that without doing the typical `interface{}` approach.<p>The built-in data structures + channels are able to handle this, but if I just want a set of elements, what do I do? Make a `map[foo] bool`? If I see such a piece of code in an unfamiliar code base, I have no idea whether to test for key existence or whether I have to test whether the bool is true. A generic set would leave me puzzled and type unsafe[1]: What types could possibly exist in this set? A set of foos is not that hard to comprehend, and is in fact very much more straightforward to understand than a generic set, which in unfamiliar code may contain anything, or a mapping from foos to bools.<p>[1]: Rob Pike mentions in <a href="http://www.youtube.com/watch?feature=player_detailpage&v=rKnDgT73v8s#t=465s" rel="nofollow">http://www.youtube.com/watch?feature=player_detailpage&v...</a> that type safety is of high importance for Golang, but how does one achieve that if all the different datatypes I implement/need  use `interface {}` where I have to cast all values afterwards? That seems very type unsafe, from where I stand.</p>
]]></description><pubDate>Tue, 04 Jun 2013 18:15:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=5821150</link><dc:creator>JeanPierre</dc:creator><comments>https://news.ycombinator.com/item?id=5821150</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=5821150</guid></item><item><title><![CDATA[New comment by JeanPierre in "Skycraft: Minecraft clone in WebGL"]]></title><description><![CDATA[
<p>Well, there are some comments just about that in the "coming soon" part, and it seems that the selling point is about making multiplayer easier for you compared to Minecraft.<p>Whereas you have to host a Minecraft server yourself (or host a world on a LAN) in order to play multiplayer, Skycraft doesn't require you to do that. All you have to do is share a link with your friends. In addition, you can "[i]nvite anyone to fly or walk around in your world in spectator-mode", which I optimistically intepret as "walk around in my world without buying the game". (Of course, that's my take on it.)</p>
]]></description><pubDate>Tue, 04 Jun 2013 00:49:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=5817059</link><dc:creator>JeanPierre</dc:creator><comments>https://news.ycombinator.com/item?id=5817059</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=5817059</guid></item></channel></rss>