Great article, Damien. This idea that network partitions are exceedingly rare was the reason why ElasticSearch goes CA vs. the AP many other NoSQL datastores choose.
Not only are network partitions rare, the most disastrous case where the cluster splits in half is even rarer. Usually, you have a small part of the cluster partition away.
I hope people don't take this as a Dynamo vs. Couch discussion, because the relative importance of partition tolerance is a topic that spans all datastores that give up on ACID.
Network partitions are extremeley rare only for small clusters. For very large clusters or multi-datacenter clusters there is much more hardware than a single switch between servers. Then, the likelihood that something cuts off the whole room full of servers from the rest of your cluster is not something safe to neglect.
This is a great question. I can't speak to Facebook, but I ask hard algorithm questions and this is why I do it.
The point of these hard questions is not to assess if you know some obscure algorithm. The algorithms in these questions are obscure precisely because you're not supposed to know them. If the candidate clearly knows the algorithm I switch to a new question.
The point of these questions is to assess your ability to perform under pressure in an unfamiliar situation, which is a fundamental skill that all productive engineers require. I expect that any engineer I greenlight to encounter novel situations. These are not necessarily Hard Problems dun dun dun, but these situations will challenge your problem solving skills and you won't be able to look up the right answer on StackOverflow. I expect candidates to have the ability to deliver a solution that works and makes the right tradeoff between time, quality, and scope.
I have also had interviewers ask hard problems for the wrong reasons. Frowntown to that.
In 2011, we had more than 100 people attend the first edition of the ErlangDC conference.
Since then, we've seen an uptick on the attendance of the monthly meetups which we've been having more regularly: http://www.meetup.com/erlang/. We've been getting between 12 to 20 people attend the meetups.
We are hosting one next week actually in which Jordan Wilberding will be talking about Credit Card processing for mobile apps.
The main goal of the conference is to improve the DC Erlang community. All the money that's left over is used to support the DC meetup group.
The real question is whether aquaponics can create higher quality food than organic produce, which is not subsidized. Subsidies are also unsustainable in the long run. The major costs in aquaponics are in the technology, which will inevitably get cheaper. If aquaponic agriculture truly represents an order of magnitude improvement in water use and space use, and can produce better food, it's only a matter of time before not even subsidies can keep traditional agriculture economically sustainable.
This is just what I needed to see after the front page of HN was dominated by bullshit about Surface and iPad mini. Finally, technology used to make something other than toys for bored rich people.
Yes, hydroponics produces the best possible quality food that can be made. Being a closed system, it also doesn't require pesticides so it's essentially organic anyhow.
You are correct that Organic produce is the obvious immediate competitor. I wonder if hydroponically grown good can be labeled as organic. it could certainly come with no label at all.
As to whether there's a marketing benefit to actually being labeled as hydroponically grown, I've no idea.
As for subsidies, I assume that Organic food takes advantage of all of the same subsidies as non-organically grown food.
I think the site load time is an allegory for how long it takes for the JVM to start up.
There are some good links in this blog. If you are a Clojure newbie, definitely check out the text-only cache of this blog.
I also want to note that "Clojure newbie" has many meanings, depending on which direction you approach Clojure from. Depending on whether you come from Java, LISP, Python or nothing, you will start with different tracks. I would recommend that Java programmers actually start with protocols and reify, typically billed as advanced subjects, then the concurrency primitives, before getting into macros and advanced LISP stuff.
In my life, I've learned and used the following languages, in this order: Logo, Basic, Pascal, C++, Java, Python, Ruby, Clojure. Each time that I learned the next language, I thought it was a great improvement on the previous, and I wondered what I had been spending my life doing with the previous language.
My experience is that with Clojure is a testament to pretty much everything in "Beating the Averages" (http://www.paulgraham.com/avg.html) It's hard to know for sure, but I have a feeling that I will end up using Clojure far much longer than the rest of those languages, combined.
If you are contemplating learning a language for one-off commands and sysadmin scripts, then I kind of prefer Ruby over Python and Perl for expressiveness and readability. Most Rubyists are of the Rails persuasion, but I still have never learned Rails.
I came to Lisp via "The Little Schemer", and I recommend it for people who are new to Lisp (and/or programming). It's short and sweet, but explores some really interesting and deep ideas (recursion, higher order functions, the Y combinator, the halting problem, and interpreters). I like to think of it as "SICP lite".
It won't teach you Clojure, but it will open your eyes and set you on a path to Clojure, and I think give you a very strong grounding for Lisp. At least that's what I think it gave me.
On the other hand, if you really want to get up to speed on Clojure specifically, Rich Hickey's talk "Clojure for Java programmers" is a great intro to the language. I don't think you need Java experience to get something out of it, it's mostly targeted at non-Lispers without much functional programming experience.
If you can wait til Apr 22 (by Amazon's release dates), there will be 2 more clojure books which I'm pretty confident will be excellent, in addition to 2 Manning books which are also great.
hehe. the load time is more like the stunned expression you get when you realize people picked up on something you said. :-P (I should have an upgraded amt of RAM in a matter of minutes, and hopefully it'll be up again.)
Interesting recommendation for Java programmers. I've noticed a lot of people smiling instinctively when they see the Seesaw project. Seesaw turns Java Swing GUI programming from a horror into a pleasure, so that's another idea.
About Seesaw, the GUI for the Clojure namespace browser was whipped up by Frank in the course of 1 week (https://github.com/franks42/clj-ns-browser). As Frank puts it, it's a testament to Seesaw, since he had no real experience in Java Swing, and he got the GUI working from the couple of hours a night he got each day after he put his kids to sleep in that one week.
A bit of the ole Ralph Nadar effect going on here, I presume. Java's share is being cannibalized by Groovy, Scala, Clojure, etc. They should start making a JVM ranking to start consolidating all those languages.
Yes, I understand those are frameworks not languages. The point was that since TIOBE indexes against the word 'javascript' and not 'node,' etc. I think it's possible that JavaScript's relative usage is obscured.
This is purely anecdotal on my part but it seem to me I see many posts or articles talking about 'writing an app in node.js' or 'the UI was written in jQuery' rather than 'written in JavaScript.' This seems to me a phenomena more or less unique to JavaScript.
In all seriousness, yeah. Gilt went from black/yellow to predominantly black/white for a good reason.
I do like how the yellow pops though. Unfortunately, it also makes my eyes bleed. Maybe try a duller yellow, like goldenrod. My emacs theme is goldenrod on dark gray and it is pleasant.
This is awesome, but what gives me pause is the part where you have to write a foreign function interface for every single Carbon API call. Also, I would assume that Cocoa is completely unavailable when going to C. Is that correct?
I'm very happy to see the multi-platform vision of Clojure becoming closer to reality. I'm not in the "write once, run everywhere" camp. That goal is a bit ridiculous, but the choice of VM and the choice of language should be independent decisions. I like Erlang's VM a lot, but the language itself is not very nice. When writing iPhone code, I don't want to be forced to use Objective C.
Every new language/environment has the problem of needing interfaces into the lower-level system. If this takes off, you can expect the people to build the FFIs and share them.
If not, usually it's not too difficult to only wrap the calls that you need. There are also methods for automatically generating FFIs, although that only works with certain APIs.
Cocoa is definitely accessible from C. Objective-C is just a superset of C, so if you compile all the generated C files as Obj-C you can write any Cocoa code you want.
I think you have it backwards what subsets and supersede are. The subset (C) by definition does not have everything in the superset (Objective-C), and one of the crucial features missing is Objective-C's object model and message passing. This is not intractable (BridgeSupport and the runtime API should be sufficient), but it will definitely be more work than writing Objective-C directly.
It's (a lot) more work, but there's a C interface to Cocoa (just use objc_message_send). I know that this is how Clozure Common Lisp interfaces with Cocoa.