yariv
Facebook Platform supports OAuth as a standard authentication protocol for 3rd party apps. It also provides APIs that developers can use to export data users have entered into facebook (with the user's permission, of course). What do you think is missing in Facebook's support for data portability?
You can definitely export all your photos into SomeApp.com using the graph API and they can store your photos indefinitely. These APIs are documented at http://developers.facebook.com/docs/api.
(I work on the Facebook platform.)
(I work on the Facebook platform.)
Twoorl, an open source Twitter clone: http://github.com/yariv/twoorl/.
Vimagi, a graffiti-like facebook app: http://apps.facebook.com/vimagi-paint.
Also, parts of Facebook chat (I work at Facebook).
I'm not trying to argue that entrepreneurship isn't a great path to pursue for many people, but I disagree with the simplistic picture that people sometime paint wherein entrepreneurship is always glamorous and employment is always dreary.
Disclaimer: I work for Facebook.
I (almost) never restart my Erlang server, and that lets me develop just as you described. Why do you say it's not supported?
(Btw, it really sucks to go back and use languages that don't have hot code swapping. Developing in them feels terribly slow.)
Fast: if you put is_float() guards on your function definitions, Erlang will optimize their computation. If you worry about memory consumption of strings, use binaries.
"Note that the language was originally built for concurrency rather than parallel computation." I don't follow this argument. Isn't the point of concurrency to implement parallelism?
Erlang really is easier than Java -- both to read and to write. I think people too often confuse "different" with "difficult".
Another reason to do open source: it gives you a better chance of being able to work on something you enjoy because it connects you with like-minded people in the industry.
I think every programmer should be involved in some open source project. In most cases, a resume doesn't tell you much about someone's coding skills and real contributions, and technical interviews have many flaws in determining someone's qualifications. Only by looking at someone's code can you actually get a sense of their abilities.
It's much more interesting to interview someone who has done open source projects. You don't need to waste time figuring out if he or she can reverse a linked list. You can dive straight into more advanced topics.
I'm not sure about finding a cofounder though. I wouldn't feel comfortable partnering with someone if I hadn't gotten to know them by working closely with them.
The OO patterns movement probably had something to do with it. It's easy sometimes to get the impression that with OO, you have to learn a bunch of weird patterns to produce good code, but with FP you don't have this conceptual overhead -- you just write the solution that feels the most compact and natural, almost in a mathematical sense.
Where OO does usually make life harder is in concurrent programming. Because objects have mutable state and hidden fields, it's difficult and often dangerous to send (and receive) them between processes. In Erlang, for example, all data is immutable and because it's made of simple (lists/tuples of) primitives, it's very easy to send it as messages (to processes on the local and/or remote VM) and to pattern match against it on the receiving end. This makes concurrent and distributed programming probably as easy as it can be.
I also find code written in function languages easier to read and debug because of data immutability. In code written in functional style, you know exactly where every variable is bound, so it's easy to track down bugs that cause it to have the wrong value. There's no mystery as to where a variable's data may be modified, which gives you confidence in the correctness of your solution.
I don't mean to suggest that FP is perfect and OO is broken. Sometimes when I write FP code I wish I could grab one or two concepts from OO. OO code can also be quite elegant as well.
I hope such blog posts start appearing. It means Twoorl will have hit prime time :)
Although I use MySQL, I haven't used any relational features. The app doesn't do any joins.
With regards to new interfaces (voice/visual/whatever) that people sometimes say will be the "next big thing" in search -- these are just features that Google can easily implement if they prove to be so effective (which they probably won't -- I'd much rather type in my query than say it). Replicating the sophistication, performance and scale of Google is much harder.
Erlang may not be optimal for applications that do heavy string processing, but the significance of that statement is overblown. Take typical webapps for example. What kind of string processing do they do? Very light stuff. They spend of their cycles slurping binary data from the database and sending it down a socket. Erlang is excellent for this usage. They occasionally take form inputs from a user, in which case they do some simple processing to ensure the input is properly escaped. Erlang handles that just fine.
Most of the "Erlang sucks for strings" arguments remind me of the "Ruby/Java is slow" arguments. They're sort-of true, but they just don't matter for most applications.
What people will use it for is up to their imagination. Wings3d (http://www.wings3d.com/) is a good example of using Erlang outside of its "intended" domain.
Don't forget that when Java came out, it was only "good" for writing applets...
I think the "Erlang sucks for strings" argument is overblown, and it's rarely if ever backed by real world experience and/or data. Erlang is fine for most string handling tasks you'll find in a typical (web) application.