<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: graue</title><link>https://news.ycombinator.com/user?id=graue</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Fri, 24 Apr 2026 18:32:46 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=graue" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[Measured in Wats]]></title><description><![CDATA[
<p>Article URL: <a href="http://rose.github.io/posts/measured-in-wats/">http://rose.github.io/posts/measured-in-wats/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=8600336">https://news.ycombinator.com/item?id=8600336</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 13 Nov 2014 07:16:56 +0000</pubDate><link>http://rose.github.io/posts/measured-in-wats/</link><dc:creator>graue</dc:creator><comments>https://news.ycombinator.com/item?id=8600336</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=8600336</guid></item><item><title><![CDATA[New comment by graue in "How to take over the computer of a Maven Central user"]]></title><description><![CDATA[
<p>I do it. I always thought, "What's the harm? Everything important is over SSL these days". Apparently not!</p>
]]></description><pubDate>Tue, 29 Jul 2014 03:51:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=8100591</link><dc:creator>graue</dc:creator><comments>https://news.ycombinator.com/item?id=8100591</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=8100591</guid></item><item><title><![CDATA[Reference types: separating identities and values]]></title><description><![CDATA[
<p>Article URL: <a href="https://scott.mn/2014/01/20/reference_types_separate_identities_and_values/">https://scott.mn/2014/01/20/reference_types_separate_identities_and_values/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=7090822">https://news.ycombinator.com/item?id=7090822</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 20 Jan 2014 17:59:09 +0000</pubDate><link>https://scott.mn/2014/01/20/reference_types_separate_identities_and_values/</link><dc:creator>graue</dc:creator><comments>https://news.ycombinator.com/item?id=7090822</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=7090822</guid></item><item><title><![CDATA[New comment by graue in "Durr: A shivering unisex bracelet that investigates our perception of 5 minutes"]]></title><description><![CDATA[
<p>Pebble has a timer app that meets all your requirements. I use it for pomodoros, laundry, steeping tea, cooking rice, etc. Unbelievably handy.</p>
]]></description><pubDate>Fri, 03 Jan 2014 23:07:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=7008894</link><dc:creator>graue</dc:creator><comments>https://news.ycombinator.com/item?id=7008894</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=7008894</guid></item><item><title><![CDATA[New comment by graue in "The Future of JavaScript MVCs"]]></title><description><![CDATA[
<p>Think of strings in JavaScript. Those are already immutable:<p><pre><code>    var fooString = "foo";
    var secondFooString = fooString;
    secondFooString;  // => "foo"
    
    fooString = "bar";
    secondFooString;  // => "foo"
</code></pre>
We set the variable fooString to point to a different string, but the original, underlying string <i>hasn't changed</i>. In JavaScript, we can think of a string as a <i>value</i>.<p>This is not the case with arrays in JavaScript:<p><pre><code>    var firstArray = [1, 2, 3];
    var secondArray = firstArray;
    
    firstArray[0] = 100;
    firstArray;  // => [100, 2, 3]
    secondArray;  // => also [100, 2, 3]
</code></pre>
Because we can change the underlying contents of the array, an array in JavaScript isn't a value. It's a <i>place</i>: a reference to a location in memory. The underlying value could be changed at any time.<p>But, using Mori, collections are values, just like strings:<p><pre><code>    var firstVec = m.vector(1, 2, 3);
    var secondVec = firstVec;
    
    firstVec = m.assoc(firstVec, 0, 100);
    firstVec;  // => [100, 2, 3]
    secondVec;  // => still [1, 2, 3]
</code></pre>
Instead of modifying firstVec in place, mori.assoc creates a new vector that is identical to firstVec except for the change we want. We then assign the result to firstVec. secondVec is unchanged. We are unable to go in and change the underlying values because a vector is a value, not a place.<p>The most obvious way to build this would be to deep-copy the entire collection when it's changed, but that would of course be way too slow and wasteful — imagine copying a one-million-long array just to change one element. Clojure, ClojureScript and Mori minimize unnecessary copying using a very thoughtfully designed data structure you can read about here: <a href="http://hypirion.com/musings/understanding-persistent-vector-pt-1" rel="nofollow">http://hypirion.com/musings/understanding-persistent-vector-...</a> The short story is that, surprisingly, you get "effectively O(1)" copying when you use assoc.</p>
]]></description><pubDate>Mon, 23 Dec 2013 07:22:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=6953443</link><dc:creator>graue</dc:creator><comments>https://news.ycombinator.com/item?id=6953443</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6953443</guid></item><item><title><![CDATA[New comment by graue in "The React tutorial rewritten in Om"]]></title><description><![CDATA[
<p>Looks like Sablono, which provides a Hiccup-style syntax you can use with Om, is your best bet there: <a href="https://github.com/r0man/sablono" rel="nofollow">https://github.com/r0man/sablono</a></p>
]]></description><pubDate>Mon, 23 Dec 2013 06:46:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=6953381</link><dc:creator>graue</dc:creator><comments>https://news.ycombinator.com/item?id=6953381</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6953381</guid></item><item><title><![CDATA[New comment by graue in "Web Framework Benchmarks - Round 8"]]></title><description><![CDATA[
<p>Interesting perspective, thanks. I suspect it depends on whether you're more used to langs like Ruby, Python, JavaScript (which are more like Clojure) or Java (which is more like Scala). Coming from Python and JavaScript, and with minimal Java experience, I find Clojure more approachable... but then, Java-style OO is utterly vexing to me.</p>
]]></description><pubDate>Thu, 19 Dec 2013 01:00:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=6932195</link><dc:creator>graue</dc:creator><comments>https://news.ycombinator.com/item?id=6932195</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6932195</guid></item><item><title><![CDATA[New comment by graue in "Web Framework Benchmarks - Round 8"]]></title><description><![CDATA[
<p>Did you ever look at Clojure? If not, why not? If so, what didn't you like?<p>While Clojure surely has a bigger learning curve than Go, it's much simpler and more approachable than Scala. I've learned it recently and am an absolute convert. It seems perfect for your use case and you could even skip writing the prototype in Rails because you'll be just as productive in Clojure.<p>Note that I'm not trying to convince you to change; you obviously found something that works for you. But I am curious if there were obstacles to using Clojure (missing libraries? poor tutorials?) and if so, how that could be fixed.</p>
]]></description><pubDate>Tue, 17 Dec 2013 20:30:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=6923717</link><dc:creator>graue</dc:creator><comments>https://news.ycombinator.com/item?id=6923717</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6923717</guid></item><item><title><![CDATA[Using React components as Backbone views]]></title><description><![CDATA[
<p>Article URL: <a href="http://www.thomasboyt.com/2013/12/17/using-reactjs-as-a-backbone-view.html">http://www.thomasboyt.com/2013/12/17/using-reactjs-as-a-backbone-view.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=6922935">https://news.ycombinator.com/item?id=6922935</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 17 Dec 2013 18:49:02 +0000</pubDate><link>http://www.thomasboyt.com/2013/12/17/using-reactjs-as-a-backbone-view.html</link><dc:creator>graue</dc:creator><comments>https://news.ycombinator.com/item?id=6922935</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6922935</guid></item><item><title><![CDATA[New comment by graue in "We work a 4-day week and just raised $4.75m (2012)"]]></title><description><![CDATA[
<p>Congrats on your company's success!<p>However, I'm surprised that you single out a 40-hour work week as though it's something exceptional. Isn't that the standard? I would never consider joining a company that expected me to work weekends. I hope that's not as common as you imply.</p>
]]></description><pubDate>Tue, 17 Dec 2013 18:33:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=6922817</link><dc:creator>graue</dc:creator><comments>https://news.ycombinator.com/item?id=6922817</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6922817</guid></item><item><title><![CDATA[New comment by graue in "Turn O(n^2) reverse into O(n)"]]></title><description><![CDATA[
<p>As a fellow Clojurist, I agree with the substance of what you're saying here but wish you could express it in a more friendly manner. Both your comments essentially say "you're wrong" without educating or adding value. I don't feel that reflects well on the Clojure community, and I'd like us to do better.</p>
]]></description><pubDate>Mon, 16 Dec 2013 09:18:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=6913644</link><dc:creator>graue</dc:creator><comments>https://news.ycombinator.com/item?id=6913644</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6913644</guid></item><item><title><![CDATA[New comment by graue in "Turn O(n^2) reverse into O(n)"]]></title><description><![CDATA[
<p>> <i>Immutable arrays, where the entire array must be copied with the change of one element, are an example of that.</i><p>Only in a naive implementation. Clojure, for example, has a persistent vector that only requires O(log32 n) copying, which grows so slowly as to be effectively O(1).<p>See: <a href="http://hypirion.com/musings/understanding-persistent-vector-pt-1" rel="nofollow">http://hypirion.com/musings/understanding-persistent-vector-...</a></p>
]]></description><pubDate>Mon, 16 Dec 2013 04:54:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=6912983</link><dc:creator>graue</dc:creator><comments>https://news.ycombinator.com/item?id=6912983</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6912983</guid></item><item><title><![CDATA[New comment by graue in "Millennial women have seriously narrowed the wage gap with men"]]></title><description><![CDATA[
<p>Music. You can have hundreds of thousands of fans and still not be able to quit your day job.</p>
]]></description><pubDate>Fri, 13 Dec 2013 04:17:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=6899045</link><dc:creator>graue</dc:creator><comments>https://news.ycombinator.com/item?id=6899045</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6899045</guid></item><item><title><![CDATA[New comment by graue in "Beatport “Bloodbath” As Dance Music Startup Lays Off Engineers"]]></title><description><![CDATA[
<p>It suddenly occurs to me that "startup" is the new "indie", or "viral". It's become a genre rather than a descriptor of the source of the content.</p>
]]></description><pubDate>Mon, 09 Dec 2013 04:32:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=6872822</link><dc:creator>graue</dc:creator><comments>https://news.ycombinator.com/item?id=6872822</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6872822</guid></item><item><title><![CDATA[New comment by graue in "Collaboration not Derision in the Node Community"]]></title><description><![CDATA[
<p>It's true that historically "he" has often been used a generic pronoun, but singular "they" also has a long history. I'd start with this Wikipedia article:<p><a href="https://en.wikipedia.org/wiki/Singular_they" rel="nofollow">https://en.wikipedia.org/wiki/Singular_they</a><p>Some object to the usage because:<p>> <i>Proponents of gender-neutral language argue that the use of gender-specific language often implies male superiority or reflects an unequal state of society. According to The Handbook of English Linguistics, generic masculine pronouns and gender-specific job titles are instances "where English linguistic convention has historically treated men as prototypical of the human species." Words that refer to women often devolve in meaning, frequently taking on sexual overtones.</i><p>> <i>These differences in usage are criticized on two grounds: one, that they reflect a biased state of society, and two, that they help to uphold that state. Studies of children, for instance, indicate that the words children hear affect their perceptions of the gender-appropriateness of certain careers. Other research has demonstrated that men and women apply for jobs in more equal proportions when gender-neutral language is used in the advertisement, as opposed to the generic he or man.</i><p><a href="https://en.wikipedia.org/wiki/Gender-neutral_language_in_English#Rationale" rel="nofollow">https://en.wikipedia.org/wiki/Gender-neutral_language_in_Eng...</a><p>Many years ago, I would have agreed with you that using "he" as neuter was correct and therefore preferable to singular "they". I no longer feel that way. I'd attribute that change in opinion to two causes:<p>One, I'm less concerned with by-the-book "correctness" and pedantry, and more concerned with the real-world effect my words have on people.<p>Two, I now realize that English is a living, evolving language, and there is no one authority on what is or is not correct usage. What is widely held to be proper English at a given time is a product of who happened to have influence in society at that time, no more, no less.<p>Also, although this is not what changed my opinion, I find it interesting to note that many of the same people who call the matter trivial will also expend considerable time and effort defending generic "he". If you find it so trivial, why not humor the people who think gender-neutral language is important?</p>
]]></description><pubDate>Sun, 01 Dec 2013 05:31:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=6826263</link><dc:creator>graue</dc:creator><comments>https://news.ycombinator.com/item?id=6826263</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6826263</guid></item><item><title><![CDATA[New comment by graue in "Namecoin, A Replacement For SSL"]]></title><description><![CDATA[
<p>Cryptocat was and is open source too:<p><a href="https://github.com/cryptocat/cryptocat" rel="nofollow">https://github.com/cryptocat/cryptocat</a><p>That doesn't solve the problem. No one is going to manually view source and compare it every time they use the damn thing.<p>> <i>To address your points 1 and 4: Since all data is encrypted BEFORE leaving your browser (this was NOT the case with lavabit) even if our servers were compromised your data would still be secure.</i><p>At rest. Yes, at rest it's fine, like I said, but if someone logs in while the server is compromised, it would be trivial to decrypt anything they post or access during that session. Same as Lavabit.<p>> <i>We'll be releasing [..] a browser-extension, that will help confirm that the code you've received on the site is the same as that in the repository.</i><p>So it'll download two copies of the code, one from your servers and one from GitHub, and check that they match? Doesn't seem to me that that buys you much. And unless it's mandatory, you'll be leaving the users that don't install the extension unprotected.<p>See here for a long list of other reasons in-browser crypto is problematic: <a href="http://www.matasano.com/articles/javascript-cryptography/" rel="nofollow">http://www.matasano.com/articles/javascript-cryptography/</a></p>
]]></description><pubDate>Sat, 23 Nov 2013 20:58:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=6787403</link><dc:creator>graue</dc:creator><comments>https://news.ycombinator.com/item?id=6787403</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6787403</guid></item><item><title><![CDATA[New comment by graue in "Namecoin, A Replacement For SSL"]]></title><description><![CDATA[
<p>> <i>we are creating a client-side, in-browser encryption system where a user can upload their already encrypted content to our storage system and be 100% confident that their data can never be decrypted by anyone but them.</i><p>This concept may sound clever at first but gives you as the user no additional confidence compared to encrypting data on the server side upon arrival. Either way, you're trusting the host.<p>The threat model for server-side encryption is essentially:<p>1) the host has an unethical employee who wants to read your content.<p>2) the host's servers are insecure and get compromised.<p>3) someone successfully MITMs your connection to the host (possibly due to the SSL problems being discussed here).<p>4) the government compels the host to provide your data (i.e. what happened with Lavabit).<p>The threat model for browser-based client-side encryption is the same! In any of these cases, the attacker (or the host, in case of #1 or #4) simply sends JavaScript encryption code to your browser with a backdoor in it.<p>Cryptocat originally worked the same way: all chats were encrypted on the client side, but with JS code sent from the server, in which a backdoor could be inserted at any time. After much criticism, this is why Cryptocat is now a browser add-on, with discrete releases made available from a central source (Chrome Store/Mozilla addons site), which can be audited.</p>
]]></description><pubDate>Sat, 23 Nov 2013 16:38:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=6786473</link><dc:creator>graue</dc:creator><comments>https://news.ycombinator.com/item?id=6786473</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6786473</guid></item><item><title><![CDATA[New comment by graue in "ClojureScript Koans: Learn ClojureScript from inside your browser"]]></title><description><![CDATA[
<p>Same here. After checking in a local ClojureScript REPL, I just changed the URL to sequence-comprehensions/6 and went on.</p>
]]></description><pubDate>Fri, 22 Nov 2013 20:24:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=6783470</link><dc:creator>graue</dc:creator><comments>https://news.ycombinator.com/item?id=6783470</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6783470</guid></item><item><title><![CDATA[New comment by graue in "ClojureScript Koans: Learn ClojureScript from inside your browser"]]></title><description><![CDATA[
<p>Awesome site!<p>Having done a few Clojure projects lately, I got most of these right immediately, but there were a few I messed up. It would be cool if you could go through these flashcard-style: one try for each koan in a category, then re-show the ones you got wrong, and repeat until you get them all right.</p>
]]></description><pubDate>Fri, 22 Nov 2013 19:01:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=6782927</link><dc:creator>graue</dc:creator><comments>https://news.ycombinator.com/item?id=6782927</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6782927</guid></item><item><title><![CDATA[New comment by graue in "MediaCrush – A website for serving media super fast "]]></title><description><![CDATA[
<p>Hmm... did this site get served a secret warrant last week? Or did they just forget to update their warrant canary?<p><a href="https://mediacru.sh/transparency/warrant-canary.txt" rel="nofollow">https://mediacru.sh/transparency/warrant-canary.txt</a><p>(Note: the date 08/11 is written European style meaning November 8th, as you can see if you go up a directory.)</p>
]]></description><pubDate>Thu, 21 Nov 2013 05:48:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=6773261</link><dc:creator>graue</dc:creator><comments>https://news.ycombinator.com/item?id=6773261</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=6773261</guid></item></channel></rss>