Having more megapixels allows you to crop more without losing detail and effectively zoom in on different areas on the photo in post processing. It frees you from needing to perfectly compose your photo when you take it and it makes prime lenses almost as versatile as zooms for getting closer to your subject. It has an important effect on ergonomics because it lets you carry around a lightweight prime lens instead of a big heavy zoom and still be able to achieve similar results, or even better ones if you can take advantage of the prime's higher max aperture.
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?
The theory is that by accepting someone's friend request you're not automatically granting them the ability to export your email address to any application that asks for it. If it were possible there's a good chance your inbox would quickly be filled with spam from apps your friends use. I know of no social network, including Google's own Orkut, Twitter, and Myspace, which allows this kind of mass exportation of friend emails via its API.
It used to be the case that apps could only store your data for 24 hours, but we removed this restriction in the last f8 conference.
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.
The Facebook API allows 3rd party applications to access most of the user's data, including the user's email, if the user grants the application the required permissions. More details are at http://developers.facebook.com/docs/authentication/permissio....
With the Facebook API, the user doesn't have to provide any third party his credentials to allow the third party to access his data. Facebook uses OAuth to securely pass an access token to the third party while protecting the user's credentials. See http://developers.facebook.com/docs/authentication/ for more info.
On the flip side, if the team from 37 Signals worked for a great technology company like Facebook, Google or Apple, they could have built products that tens or hundreds of millions of users and hundreds of thousands of developers use every day. They could have worked with some of the best engineers and designers on the planet and have had a huge impact on the products they've built and their company's success. They also could have also created popular open source software that runs on massive infrastructures, written their own blogs, and achieved industry fame.
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.
"People tend to think of Common Lisp style hotpatching where you can dynamically build up your application from scratch without restarting the CL environment. Erlang doesn't really support that, but you can hack it to give you somewhat of the same."
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?
I think it's a lot easier to understand what some code does if you don't have to read a lot of language imposed cruft that surrounds the actual 'meat' of the algorithm.
Erlang really is easier than Java -- both to read and to write. I think people too often confuse "different" with "difficult".
You can write readable code in any decent language, and you can just as easily write unreadable code in Python. The important variable is the programmer's skill, not some language-imposed restriction. Besides, bad use of white space is rarely what makes code unreadable. It's usually poor organization, functions/modules that are too long, non-descriptive names, overly complex class hierarchies, etc. I think Python is a nice language but I disagree that its whitespace rules make it so much more readable than other languages.
Everything you said is true by my experience being involved in open source projects.
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.