HNHacker News
TopNewBestAskShowJobs

prospero

1,953 karma · joined May 30, 2008

code @ http://github.com/ztellman words @ http://ideolalia.com

ztellman@gmail.com @ztellman

submissionscomments
prospero··on Clojure core.async Channels
It seems to me that there are real obstacles to that; since the propagation of messages from one channel to another requires a separate 'take' and 'put', there's some halting problem-style obstacles to figuring out the causality of how messages are propagated.

You can maybe create propagation operators that make these relationships explicit, but that would require either eschewing the bare take/put methods, or making sure the take/put behavior is in sync with whatever metadata you use to describe it.

prospero··on Clojure core.async Channels
CSP is message-oriented, Lamina is more stream-oriented. One implication of this is that in Lamina multiple threads can traverse the stream topology without any contention, but in core.async this isn't possible. Another is that the topology is explicitly described in Lamina, but it's implicit in core.async.

That being said, I'm not clear if any of these differences are important to most people's use cases. I suspect that Lamina channels can behave like a core.async channel without much trouble, so it wouldn't bother me much if core.async became the primary interface for these sorts of things. If someone cares a lot about throughput or other distinguishing factors, they can just look under the covers.

I am, however, a little curious how well the goroutine mechanism works in terms of being able to sample the state of the various tasks. Without some equivalent for "jstack", they become something of a black box.

prospero··on Clojure core.async Channels
Can you walk the chain of consumers and where they're forwarding the messages? I didn't see anything like that in the code, but you're far more familiar with it than I am.
prospero··on Clojure Tradeoffs
For those of you playing along at home, this is because of Clojure's reducers framework [1]. If we were to extend 'clojure.core.protocols.CollReduce' to ArrayList, we'd get similar performance, but the important point is that efficient iteration across immutable collections is very much possible.

http://clojure.com/blog/2012/05/08/reducers-a-library-and-mo...

EDIT: and my response is just a little redundant now

prospero··on Why I retracted my Nature paper: correcting the scientific record
The article mentions several independent failures to reproduce.
prospero··on Why Edward Snowden Is a Hero
The majority of of the article discusses the latest information about the NSA, and how we should hold NSA officials responsible for repeatedly lying to congress. Did you even bother to read it?
prospero··on Graph: Faster Abstractions for Structured Computation
There's the entire JVM ecosystem available. Batteries are very much included.
prospero··on Answering your questions about Heroku routing and web performance
You seem to have misread the above comment. Here's what it actually said:

The system as a whole behaves more and more like a random router as the number of intelligent bamboo routing nodes increases

The point is that this process was gradual and implicit, so there's no point at which the intelligence was explicitly "deprecated". That doesn't excuse how things ended up, but it does explain it to some degree.

prospero··on 600K concurrent HTTP connections with Clojure and http-kit
Some would also mention Aleph, too.

https://github.com/ztellman/aleph

prospero··on Could the eagles have flown Frodo into Mordor? (2000)
That was what I was referencing, I was just on a phone at the time and didn't have the time or will to write it all out.

I didn't know about the latter example, though, thanks for tracking that all down.

prospero··on Could the eagles have flown Frodo into Mordor? (2000)
You might look in The Clouds.
prospero··on Introducing Drake, a kind of ‘make for data’
Also a privateer and a mythical beast. I think there's sufficient prior art on this one.
prospero··on Getting Started With Clojure
https://github.com/clojure/clojure/blob/master/src/jvm/cloju...
prospero··on Getting Started With Clojure
Because keywords are functions which are implemented such that:

    (:keyword m)
calls in turn

    (get m :keyword)
That's just a basic feature of the language. No macros involved.
prospero··on This is not Steve's Apple
Not my idea of what Apple is, and definitely not Steve's.

Because Steve and me, see, we were like peas in a pod. He would have run this whole iPad Mini thing past me first.

prospero··on The future of .NET
With respect to Lamina, that's just an example of a task on a separate thread being treated as an asynchronous result. It's entirely possible to use it to represent network communication or pretty much anything else.
prospero··on Dropbox dives into CoffeeScript
Nice false dichotomy you got there.
prospero··on Not all programmers are alike (a rant on Clojure).
I've talked to a lot of people about how they got into Clojure, and a fair number credit Paul Graham's essays for selling them on the idea of using a Lisp. I think there's a pretty clear causal link.
prospero··on Asteroids in under 600 lines of Common Lisp (uses SBCL and SDL)
Outdated how? They were working the last time I made a commit a year ago, I'm not sure what could have changed.
prospero··on Asteroids in under 600 lines of Common Lisp (uses SBCL and SDL)
The only collisions I care about in my implementation are asteroid/ship and bullet/asteroid, and they're easier to express directly. The OP's version appears to have many more types of collisions, which makes multiple dispatch a more obvious choice.
prospero··on Asteroids in under 600 lines of Common Lisp (uses SBCL and SDL)
Here's an Asteroids clone I wrote in Clojure a few years back, which has less than 400 lines and some neat stuff like procedurally generated 3D asteroids: https://github.com/ztellman/penumbra/blob/master/test/exampl...

Some of the design decisions are discussed in detail at http://ideolalia.com/creating-a-simple-game-in-clojure

prospero··on Racket v5.3
What about the JVM is such a downer?
prospero··on The future is specific
Let's talk about Google, then. In addition to having special ways of displaying results for different types of searches (local, geo, weather, shopping, etc.), there are also a lot of different heuristics underlying the search results. It's not just PageRank-and-done, it's many different approaches trying to maintain a uniform level of quality across a variety of niches.

I'll repeat that again: it's not the approach that's homogeneous, it's the quality.

You can see this with Apple, too. Their devices aren't limited to some set number of use-cases, it provides an API and ecosystem for creating new, domain-specific applications. You mention Objective-C in your response, which is kind of missing the point; we're talking about domain-specific applications, not domain-specific languages. LightTable will presumably be very consistent and general at the API level, and uses Clojure, which is a general-purpose language as well.

As for Amazon, their offerings span the entire spectrum from general to domain-specific. You can get an empty VM, but you can also get something like Elastic MapReduce. Amazon will happily develop domain-specific products on top of their platform as long as there's a large enough market.

Finally, look at Rails, which is a framework specifically for creating web apps. It doesn't help me write a new NoSQL server, it doesn't help me write a new AAA video game, it seems to be doing okay all the same. It's used because it's a really effective lever in certain, specific cases. If we can have a development environment which is a similarly large lever across a wide range of cases, how could that ever be a bad thing?

prospero··on The future is specific
All of your examples are gestalts. They're not single seamless abstractions, they're patchworks that are more than the sum of their parts.

That's precisely what is being proposed here: a platform for creating a development environment that is more than the sum of its parts. Something that gives you composable pieces that can be fit together into something that maps directly onto your problem space.

Is this really so unclear? I can't picture the hypothetical product that you're arguing against.

prospero··on Why we moved from NodeJS to Ruby on Rails
Unless you're taking the sunk cost of the node.js development into account, I don't understand your point.

If the core programming model for node.js doesn't help them in any way, and the ecosystem is less mature, then it kind of misses the point to say that everything is doable in node.js. Whether something can be accomplished is not a good metric for whether a platform is productive.

prospero··on Why we moved from NodeJS to Ruby on Rails
I think the point wasn't that "asynchronous is hard", it's that "asynchronous is just incidental complexity". CRUD apps don't need to be asynchronous, and node.js has a relatively impoverished ecosystem for such apps.

There are undoubtedly tradeoffs no matter what you use, but this seems like an eminently practical decision.

prospero··on Python, Clojure, Haskell: Factual Releases Drivers That Matter
If they already have support for Ruby, PHP, Java, Objective-C, and server-side Javascript, then a post that claims Haskell and Clojure are the languages that "really matter" can probably be safely assumed to be a joke.
prospero··on Python, Clojure, Haskell: Factual Releases Drivers That Matter
I doubt they actually think a Haskell client is going to be one that "matters". It's a fun bit of software, take it for what it is.

Also, if you google "factual api", you get http://developer.factual.com/display/docs/Factual+Developer+... as the top result. Unless you're faulting them for not releasing wrappers in all languages simultaneously, I don't really understand your point.

prospero··on Oracle loses on fair use; Only rangeCheck left (w/o new trial)
Did this not come up in the course of the trial?
prospero··on Vert.x (JVM async) vs Node.js Http benchmarks results
Netty has support for zero-copy file responses, I imagine that's at least a large part of the performance discrepancy.
← PreviousPage 3 of 13Next →