<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: snprbob86</title><link>https://news.ycombinator.com/user?id=snprbob86</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 16 Jun 2026 20:38:30 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=snprbob86" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by snprbob86 in "Clojure core.async Channels"]]></title><description><![CDATA[
<p>I took a crack at this, if you're still interested:<p><a href="https://github.com/brandonbloom/asyncx" rel="nofollow">https://github.com/brandonbloom/asyncx</a></p>
]]></description><pubDate>Mon, 01 Jul 2013 19:17:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=5972936</link><dc:creator>snprbob86</dc:creator><comments>https://news.ycombinator.com/item?id=5972936</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=5972936</guid></item><item><title><![CDATA[New comment by snprbob86 in "Clojure core.async Channels"]]></title><description><![CDATA[
<p>You can mimic selective receive using a router process. Essentially, you could generate one channel for every branch of the pattern match, then generate a process which reads from the input channel and deals the message to the appropriate branching channel.</p>
]]></description><pubDate>Sat, 29 Jun 2013 20:51:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=5963694</link><dc:creator>snprbob86</dc:creator><comments>https://news.ycombinator.com/item?id=5963694</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=5963694</guid></item><item><title><![CDATA[New comment by snprbob86 in "Clojure core.async Channels"]]></title><description><![CDATA[
<p>In fact, that seems <i>preferable</i> to me.</p>
]]></description><pubDate>Sat, 29 Jun 2013 20:47:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=5963686</link><dc:creator>snprbob86</dc:creator><comments>https://news.ycombinator.com/item?id=5963686</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=5963686</guid></item><item><title><![CDATA[New comment by snprbob86 in "Clojure core.async Channels"]]></title><description><![CDATA[
<p>It's not quite clear what patterns will emerge with respect to UI event handlers, so there really isn't an ELI5 answer yet in the View layer. The backend advantages are well covered by the Go language community, so check out Rob Pike's talk [1]. As for other parts of the frontend, like the model layer, channels can lead to a major simplification for the callback hell involving multiple coordinated network requests or for transforming and processing events off a message socket, like that of Socket.io.<p>[1]: <a href="http://talks.golang.org/2012/concurrency.slide#1" rel="nofollow">http://talks.golang.org/2012/concurrency.slide#1</a></p>
]]></description><pubDate>Sat, 29 Jun 2013 03:31:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=5961417</link><dc:creator>snprbob86</dc:creator><comments>https://news.ycombinator.com/item?id=5961417</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=5961417</guid></item><item><title><![CDATA[New comment by snprbob86 in "Clojure core.async Channels"]]></title><description><![CDATA[
<p>The IoC threads work by converting park-able functions into  Single-Static Assignment (SSA) form [1] and then compiled to a state machine. Essentially, each time a function is "parked", it returns a value indicating where to resume from. These little state machine functions are basically big switch statements that you don't need to write by hand. This design is inspired by C#'s async compilation strategy. See the EduAsync Series [2] on John Skeet's blog, and the compilation post [3] in particular. Once you have these little state machines, you just need some external code to turn the crank.<p>[1]: <a href="http://en.wikipedia.org/wiki/Static_single_assignment_form" rel="nofollow">http://en.wikipedia.org/wiki/Static_single_assignment_form</a><p>[2]: <a href="http://msmvps.com/blogs/jon_skeet/archive/tags/Eduasync/default.aspx" rel="nofollow">http://msmvps.com/blogs/jon_skeet/archive/tags/Eduasync/defa...</a><p>[3]: <a href="http://msmvps.com/blogs/jon_skeet/archive/2011/05/20/eduasync-part-7-generated-code-from-a-simple-async-method.aspx" rel="nofollow">http://msmvps.com/blogs/jon_skeet/archive/2011/05/20/eduasyn...</a></p>
]]></description><pubDate>Sat, 29 Jun 2013 03:23:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=5961407</link><dc:creator>snprbob86</dc:creator><comments>https://news.ycombinator.com/item?id=5961407</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=5961407</guid></item><item><title><![CDATA[New comment by snprbob86 in "Clojure core.async Channels"]]></title><description><![CDATA[
<p>You can build analogous versions of map/filter/etc on top of channels. The core.async team is still focused on the primitives, but surely some higher order operations will follow in the not too distant future. I suspect we'll need to wait and see what patterns develop, since they will surely differ from Go a little bit, due to the functional emphasis on Clojure.<p>I should also mention a key difference between channels and Rx/Observables: The fundamental operations for observable sequences are subscribe & unsubscribe. The fundamental operations for channels are put and take. In the push sequence model, the consumer must give a pointer to itself to the publisher, which couples the two processes and introduces resource management burdon (ie IDisposable).<p>You can think of a pipeline from A to B in the following ways:<p>Sequences: B pulls from A<p>Observables: A pushes to B<p>Channels: Some process pulls from A and pushes to B<p>That extra process enables some critical decoupling!</p>
]]></description><pubDate>Fri, 28 Jun 2013 21:16:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=5960392</link><dc:creator>snprbob86</dc:creator><comments>https://news.ycombinator.com/item?id=5960392</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=5960392</guid></item><item><title><![CDATA[New comment by snprbob86 in "IE11 to support WebGL"]]></title><description><![CDATA[
<p>Mutually incompatible, vendor-specific, proprietary <i>anything</i> is an inevitability. #1 isn't about that. That's what #2 and #3 are about.<p>#1 is about planning for extensibility. Just look at the hackery with JS where lonely, otherwise ignored, strings are used for things like "use strict" and "use asm". Or where Microsoft added "conditional comments", which quite frankly, was essential to the development of Outlook Web Access, which basically gave us Ajax. Or all the absurd vendor prefixes on CSS tag names. Or one of 100 other little hacks that browser vendors have invented to try to innovate past the standard. Pushing pass the standard, by the way, is the only way forward. We've learned that lesson by now, so we should plan for extensibility.</p>
]]></description><pubDate>Wed, 26 Jun 2013 15:32:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=5946687</link><dc:creator>snprbob86</dc:creator><comments>https://news.ycombinator.com/item?id=5946687</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=5946687</guid></item><item><title><![CDATA[New comment by snprbob86 in "IE11 to support WebGL"]]></title><description><![CDATA[
<p>I dunno... Allowing the language to be selected like a video codec or image file format seems like a reasonable request.<p>There are three issues:<p>1) Language pluggable?<p>2) Spec-ed shader languages<p>3) Mandatory languages<p>The proposal was:<p>1) No<p>2 & 3) GL SL ES<p>Microsoft proposed:<p>1) Yes<p>2) GL SL ES<p>3) None<p>The perfectly reasonable compromise would have been:<p>1) Yes<p>2 & 3) GL SL ES</p>
]]></description><pubDate>Wed, 26 Jun 2013 03:53:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=5944093</link><dc:creator>snprbob86</dc:creator><comments>https://news.ycombinator.com/item?id=5944093</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=5944093</guid></item><item><title><![CDATA[New comment by snprbob86 in "Code Density"]]></title><description><![CDATA[
<p>> This is a pretty good article<p>Thanks!<p>> he states 5, I bet it is closer to 20<p>I think it varies greatly with many factors, but agree that it's probably closer to 20. I'm just trying to avoid selling silver bullets.<p>> Has anyone ever measured a Reading Comprehension score for languages?<p>While language is a huuuge component of that constant factor, there are certainly other components. For example, if you want to write a sudoku solver, you should start by writing a backtracking constraint solver and then implement the constraint solver on top of it. You'll write less code than trying to solve sudoku directly, but that code will certainly be slower to read. This applies within a language just as much as it does across languages.</p>
]]></description><pubDate>Tue, 25 Jun 2013 01:09:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=5936849</link><dc:creator>snprbob86</dc:creator><comments>https://news.ycombinator.com/item?id=5936849</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=5936849</guid></item><item><title><![CDATA[New comment by snprbob86 in "Let's deploy via Git"]]></title><description><![CDATA[
<p>> There may be situations where you want the entire history of your development to be included on your live server, but often this just isn't appropriate.<p>Are you concerned about being wasteful with disk space? Or is there some other concern here? Some security issue perhaps?</p>
]]></description><pubDate>Sun, 23 Jun 2013 16:15:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=5928065</link><dc:creator>snprbob86</dc:creator><comments>https://news.ycombinator.com/item?id=5928065</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=5928065</guid></item><item><title><![CDATA[New comment by snprbob86 in "Packagers don't know best"]]></title><description><![CDATA[
<p>> If more developers cared about versioning their software appropriately based on incompatible changes or stability guarantees<p>But they don't. And you're not going to be able to make them. And even if you did, people would disagree about what constitutes compatibility, stability, and engineering disciplin. One man's "breaking change" is another man's "that was an implementation detail". It's not possible to get this right, since first you need to define "right". That's why versioning is folly.</p>
]]></description><pubDate>Sat, 22 Jun 2013 15:54:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=5924020</link><dc:creator>snprbob86</dc:creator><comments>https://news.ycombinator.com/item?id=5924020</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=5924020</guid></item><item><title><![CDATA[New comment by snprbob86 in "Packagers don't know best"]]></title><description><![CDATA[
<p>Steam itself is sort of a package manager, so that's an interesting edge case...<p>However, I think that there are basically three categories of application data<p>1) Documents -- These should never be deleted and are not invisible
2) Settings & other small data not worth deleting, probably nice to keep around in case you ever re-install. Most stuff.
3) Large semi-temporary files, like samples and other downloaded add ons that are optional parts of the application<p>I think OSX handles 1 & 2 well, but you're right, it needs a way to handle #3 too. However, I think that #2 is a much better default than #3.</p>
]]></description><pubDate>Sat, 22 Jun 2013 15:52:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=5924010</link><dc:creator>snprbob86</dc:creator><comments>https://news.ycombinator.com/item?id=5924010</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=5924010</guid></item><item><title><![CDATA[New comment by snprbob86 in "Packagers don't know best"]]></title><description><![CDATA[
<p>> if you fork a project and it becomes incompatible with the upstream, rename it<p>I agree completely, but I'd like to take your idea further in a direction you likely didn't intend.<p>The fundamental observation of distributed version control systems, in my opinion, is: Every commit is essentially a fork.<p>When you combine these two ideas: 1) fork->rename and 2) change==fork, with the 3) identities & values from FP/Clojure/etc, you realize that version numbers are complete folly.<p>Coincidentally, I just wrote about this with respect to SemVer: <a href="http://www.brandonbloom.name/blog/2013/06/19/semver/" rel="nofollow">http://www.brandonbloom.name/blog/2013/06/19/semver/</a><p>In short, if you have awesomelib and make an incompatible version, you can call it awesomelib2. Or you could call it veryawesomelib or whatever else you want. If you give up on the silly idea of being able to compare version numbers, then versioning and naming become equivalent.</p>
]]></description><pubDate>Fri, 21 Jun 2013 22:55:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=5921572</link><dc:creator>snprbob86</dc:creator><comments>https://news.ycombinator.com/item?id=5921572</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=5921572</guid></item><item><title><![CDATA[New comment by snprbob86 in "Packagers don't know best"]]></title><description><![CDATA[
<p>What?! This is total nonsense.<p>Application uninstalls are as trivial as dragging the application to the trash bin. No, this will not eliminate the application's data from ~/Library, etc, but 98% of the time you don't want that anyway. If you know what you're doing, it's usually a quick `rm -rf ~/Library/...` and you're done. Some poorly behaved apps stick stuff in other places or otherwise muck with your system, but now with the app store, that's no longer an issue.<p>And, if you're absolutely anal about deleting every single trace of an app, there are tools that automate the process. For example: <a href="http://www.appzapper.com/" rel="nofollow">http://www.appzapper.com/</a> -- But really, it's probably a waste of your time unless you had a badly behaved app go rouge. In my many years of Mac ownership, I've installed and uninstalled hundreds of apps and the only time I ever had to bang my head against the wall was when I used to use MacPorts and a Postgres install went haywire because of the same sort of packaging nonsense that the article is talking about.</p>
]]></description><pubDate>Fri, 21 Jun 2013 22:46:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=5921523</link><dc:creator>snprbob86</dc:creator><comments>https://news.ycombinator.com/item?id=5921523</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=5921523</guid></item><item><title><![CDATA[SemVer: A Technical Solution to a Social Problem]]></title><description><![CDATA[
<p>Article URL: <a href="http://www.brandonbloom.name/blog/2013/06/19/semver/">http://www.brandonbloom.name/blog/2013/06/19/semver/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=5908215">https://news.ycombinator.com/item?id=5908215</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 19 Jun 2013 21:02:45 +0000</pubDate><link>http://www.brandonbloom.name/blog/2013/06/19/semver/</link><dc:creator>snprbob86</dc:creator><comments>https://news.ycombinator.com/item?id=5908215</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=5908215</guid></item><item><title><![CDATA[New comment by snprbob86 in "Project Loon"]]></title><description><![CDATA[
<p>How fast will the connections be?</p>
]]></description><pubDate>Sat, 15 Jun 2013 03:59:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=5883939</link><dc:creator>snprbob86</dc:creator><comments>https://news.ycombinator.com/item?id=5883939</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=5883939</guid></item><item><title><![CDATA[New comment by snprbob86 in "iOS 7 looks familiar"]]></title><description><![CDATA[
<p>I think I'd actually find it quite distracting while I am typing.</p>
]]></description><pubDate>Tue, 11 Jun 2013 20:42:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=5864584</link><dc:creator>snprbob86</dc:creator><comments>https://news.ycombinator.com/item?id=5864584</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=5864584</guid></item><item><title><![CDATA[New comment by snprbob86 in "There Was a Time before Mathematica"]]></title><description><![CDATA[
<p>Start with Mathematica's builtin documentation. The overview pages are actually quite good. They are also online [1].<p>Of course, given that the early drafts were written by Wolfram himself, you'll have to ignore absurd statements like this one: "Long viewed as an important theoretical idea, functional programming finally became truly convenient and practical with the introduction of Mathematica's symbolic language." [2]<p>See also: Pure [3]<p>[1] <a href="http://reference.wolfram.com/mathematica/tutorial/CoreLanguageOverview.html" rel="nofollow">http://reference.wolfram.com/mathematica/tutorial/CoreLangua...</a><p>[2] <a href="http://reference.wolfram.com/mathematica/guide/FunctionalProgramming.html" rel="nofollow">http://reference.wolfram.com/mathematica/guide/FunctionalPro...</a><p>[3] <a href="http://purelang.bitbucket.org/" rel="nofollow">http://purelang.bitbucket.org/</a></p>
]]></description><pubDate>Sun, 09 Jun 2013 05:32:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=5847706</link><dc:creator>snprbob86</dc:creator><comments>https://news.ycombinator.com/item?id=5847706</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=5847706</guid></item><item><title><![CDATA[New comment by snprbob86 in "Rope (data structure)"]]></title><description><![CDATA[
<p>I'd like to see a rope-variant of the 2-3 finger tree.<p>2-3 finger trees are immutable/persistent and support access to both ends in amortized constant time and logarithmic concatenation and splitting.<p>The complicating factor being that for flyweight values, like characters, the interior nodes of the tree would be prohibitive for one leaf per character. Surely there must be a variant of 2-3 finger trees that addresses this.</p>
]]></description><pubDate>Sat, 08 Jun 2013 16:58:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=5845445</link><dc:creator>snprbob86</dc:creator><comments>https://news.ycombinator.com/item?id=5845445</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=5845445</guid></item><item><title><![CDATA[New comment by snprbob86 in "There Was a Time before Mathematica"]]></title><description><![CDATA[
<p>I haven never tried to write a script or algorithm or anything in Mathematica. It's not useful for that (at least to me). I use it more to explore and to understand problems.<p>That's why I mentioned truth tables. Being able to quickly perform symbolic simplifications is awesome. If nothing else, learn how to do that!</p>
]]></description><pubDate>Sat, 08 Jun 2013 15:47:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=5845206</link><dc:creator>snprbob86</dc:creator><comments>https://news.ycombinator.com/item?id=5845206</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=5845206</guid></item></channel></rss>