HNHacker News
TopNewBestAskShowJobs

ryanbrush

122 karma · joined February 4, 2013

I like to hack.

@ryanbrush https://github.com/rbrush

submissionscomments
ryanbrush··on A Lisper's first impression of Julia
It seems like a stretch to classify Julia as Object Oriented. It has types and record structures, but these aren't strongly coupled to functions like you'd see in most OO-style approaches. It also doesn't encourage hiding data behind a bunch of "accessor" methods on objects.

There also isn't OO-style inheritance and polymorphism. Julia's multi dispatch reminds me most of Clojure's protocols, which is a great feature. It achieves polymorphic behavior of functions without having to do ugly things to the objects. That Julia can make this fast and ubiquitous in the language is pretty awesome.

I'm also new to Julia, but I really like the above design decisions, among others features.

ryanbrush··on Jepsen: Testing Partition Tolerance of PostgreSQL, Redis, MongoDB, Riak (2013)
Were any issues logged, or these problems otherwise addressed, in the ten+ months since this was posted?

I wasn't able to find anything with some quick searches but hopefully others on this thread are more familiar with these projects.

ryanbrush··on Apache Kafka – Publish-subscribe messaging rethought as a distributed commit log
I believe the ability to configure this behavior is being tracked at the link below. It seems like it's a switch between consistency and availability. By default Kafka prefers availability, and the possible inconsistency results in data loss (because Kafka just discards some inconsistent data it can't resolve). But the JIRA linked below should make that behavior optional, so if a majority of machines fail the cluster will become unavailable rather than inconsistent.

https://issues.apache.org/jira/browse/KAFKA-1028

ryanbrush··on Datomic: Can Simple be also Fast?
Whether through Datomic or something else, it seems like some version of "database-as-a-value" (as described by Rich Hickey) is bound to happen. We're keeping immutable version histories of as much as our hardware and systems will allow, from source code management through other types of media. Why in the world wouldn't we do this with our data if we could?

It'll be interesting to see how this plays out. Widespread adoption of technology tends to follow a path of least resistance. Does Datomic offer a simple enough path to pull many people over? I also know many of us have a preference for building on open source systems; will this be an obstacle for Datomic?

ryanbrush··on Things Every Programmer Should Know
Yes, these are excellent, and goes into much more depth than the brief article I wrote.
ryanbrush··on Things Every Programmer Should Know
Very kind of you to say! I came up with the metaphor when needing to explain this to a semi-technical person as well, so we've had similar needs there.
ryanbrush··on Things Every Programmer Should Know
Using that cache is a good idea. The site linked to was used to gather the original content rather than broad consumption. (I wrote two of the chapters in this book, and this was where we revised them.)

Lots of good articles in there, though.

ryanbrush··on Go Concurrency Patterns ported to Clojure
Sounds great. I'm glad to know something like that's in progress, and many thanks for your efforts on this project!
ryanbrush··on Go Concurrency Patterns ported to Clojure
Understanding that core.async is new and evolving, but is there a reference or an idiomatic way to work with blocking operations, beyond the general advice of separate threads as an exercise for the reader?

EDIT: I bring this up because this seems like a common misstep for users of core.async, and a simple pattern for blocking IO might help people avoid it.

core.async really looks awesome...if we can create simple patterns for working with blocking operations, it would be a compelling model for a lot of use cases.

(Also, hats off to the core.async developers; it seems like the reward for creating something great is just demand for more. ;)

ryanbrush··on First look at Clojure.core.typed
Ah, I didn't realize that core.typed could deal with rich data structures like that. That's actually pretty amazing.
ryanbrush··on First look at Clojure.core.typed
A perhaps naive question: could this sort of thing tap into Clojure's type hints rather than using external annotations? So rather than writing the example in the post:

(ann my-inc [Number -> Number])

(defn my-inc [n] (let [internal-number (Integer/parseInt "1")] (+ n internal-number)))

one could write this:

(defn ^Number my-inc [^Number n] (let [internal-number (Integer/parseInt "1")] (+ n internal-number)))

...and then run a type checker that reads and analyzes the hints?

Of course, the core.typed annotations could preserve whatever information they need in the compiled output, whereas the type hints aren't preserved past the compile phase (as far as I can tell.) Is that the limitation that requires defining type information in separate annotations?

ryanbrush··on SpaceX Grasshopper Flies High
Not to mention the operational costs of a small navy to recover the rocket and transport it to a launch site.
ryanbrush··on Things Every Programmer Should Know
Funny to see this here. That wiki was used to put together the contributions for the book, and the fact it wasn't planned as a high-volume site is pretty obvious right now.

There are a number of items worth reading from some pretty good writers in there (Verity Stob, Michael Feathers, Scott Meyers, Uncle Bob, to name a few.) Mostly short vignettes but I enjoyed them.

(Disclosure: I wrote 2/97 of that book, but there are many chapters in there better than mine).

ryanbrush··on Pedestal: An open source tool set for building web applications in Clojure
The desire for an open source app top-to-bottom or the need to use existing databases or tooling would be a good reason.

(However, I do think this question is a bit of a red herring: I don't see any obstacles to pulling in a different database in Pedestal.)

ryanbrush··on Amazon Redshift is 10x faster and cheaper than Hadoop and Hive
I wish the post had gone into depth on _why_ Redshift was significantly faster, but I'm betting it uses in-memory joins whereas (hence the size limitations it mentions) whereas Hive joins are just MapReduce jobs that keep only minimal subsets of data in memory at a given point. The upshot is the Hive/MapReduce strategy isn't limited by physical memory.

Of course, if your data set can fit in memory, then Redshift or similar technologies probably is a better choice than Hive. But it's important to remember that the performance gains here come as the result of a tradeoff.