Ideally, using formal methods [1], one can write a provably correct program. Just because software can have bugs does not mean it must have bugs. Human contract law has no analogue.
Personally I'd be wary of any electronic contract that wasn't formally verified. The DAO exploit is unsurprising.
I set up a FreeBSD box at a computer shop I worked at in high school. We had a T1 and static IP, so I set up some routes to make it internet accessible (my boss wanted to use it to host pictures for his eBay transactions).
I set it up, threw it under a table in the corner with nothing but a power and ethernet cable, and moved on.
I was surprised when 5 years later he called to ask why it had stopped working. I told him where it was, he rebooted it, and it came back.
(My memory was a little fuzzy but I probably set it up in 2001-2002 and it ran until at least 2007-2008)
Does the course cover Functors, Applicatives, Monoids, and Monads? What about other higher-level functional constructs (Arrows, Zippers...)?
From what I've seen, I think Scala is a nice language. One thing I don't like is particularly that it's a bit kitchen-sink-ish: there's a whole lot of syntax and semantics to learn, seemingly due to the OO side of the language. By comparison Haskell is quite simple. All the higher-level constructs are implemented in plain Haskell, so you can easily understand them but thanks to a flexible, uniform syntax, using them doesn't feel clunky.
To me the main reason for not learning FP through Scala, however, is that the community isn't organized around teaching FP in the same way that Haskell is. It sounds like this course is an exception. But otherwise, I found that trying to learn about Monads from the scalaz documentation was not satisfying, and we all know that "A Monad is a Sheep with Curly Hair" blog posts are a dime a dozen (in Haskell and Scala). Learn You a Haskell made the concepts, and also their benefits, clear to me for the first time. Now I'm working through Real World Haskell to build my chops and reinforce my understanding.
While trying out both languages and picking which one to learn, I came across an interesting post on Gilad Bracha's blog which had a lively discussion including a comment by the [claimed] original author of Scalaz [1], which made it clear to me that it would be easier to start in Haskell and move to Scala than vice versa. I think I (and the OP) are both seeking to gain a strong foundation in FP concepts. To summarize, in my experience most Scala resources on the internet (blog posts that come up, etc.) aren't quite as good in this regard; at this point a lot of the Scala programmers using these techniques are probably Haskell programmers anyway.
That being said, the internet is a huge place. If there's a Scala equivalent of this post [2] please do share it! I agree with other posters here that Scala has quickly gained a significant amount of industrial acceptance. I'd imagine that I'm more likely to write Scala professionally in my lifetime than Haskell. But I also believe I'll be better off approaching it having learned the FP concepts in Haskell first.
If you prefer something a little more simple, Spectacle is a free program similar to ShiftIt and SizeUp. Basically it's shortcuts to put windows in any half or quarter of your screen, centered, maximized, or send to other monitors.
What functionality does prelude provide? Unless I'm missing something, the website suggests that you can find out by "reading the source."
I had a similar experience once with the emacs starter kit [1]. Though it's a noble effort and probably does have a ton of great features, there are some problems: you pretty much get all or nothing (ESK split it out into a "core" and "per-language" set of libraries but still, there's a lot of stuff) and it's hard to tell which things are emacs builtin and what is customizable. If you disagree with a customization you're SOL; I knew enough about emacs to know that some things had been customized, and I didn't like them, but it was nigh impossible to find out where they were customized and how to turn them off.
It reminds me of the libraries vs frameworks discussion [2]. Emacs works well with libraries (with little elisp functions counting as "mini-libraries"), and the ESK/prelude seem like frameworks.
I'm not trying to pick on these toolkits in particular. They are probably a good way to start out with emacs--I know that the ESK provides a bunch of features to make it more "friendly" out of the box for someone who is coming from something like TextMate.
Most "old-school" emacs people I know have their own .emacs that have accumulated over years and years of trying to solve specific problems or customize that one thing that's annoyed the crap out of them for a while. My .emacs is not pages and pages, but it does have some good stuff in it.
What I'd love to see (and maybe I'm inviting myself to do this) would be a tool (maybe ELPA is this tool, though It's hard to know) which allows you to search for, browse, and install elisp snippets to help you out. ELPA is good for bigger libraries (i.e. major modes) but not for "how do I create an unfill-paragraph function?"
Netflix has algorithms that decide how quickly your next dvd is sent. More accurately, it uses a score to rank the group of people who have the same DVD at the top of their queue in order of who should be allocated the next available copies.
This score is based on a number of factors, with the objective being to maximize subscriber happiness (one example question is whether is it more valuable to have quick turnaround for a frequent subscriber who is already happy with the service, versus an infrequent user who might be on the fence--it is not obvious who would be more sensitive to and negatively impacted by a delay in receiving the next DVD).
(Source: I work with people who previously worked at Netflix. This is not confirmed fact but a loose understanding based on casual conversations.)
Your latter point is a tautology. You win arguments by making really good ones and gaining an advantage over those you don't. By the measure of "able to win arguments" the former viewpoint is better than the latter. If you're using other measures to evaluate viewpoints, you shouldn't do so in the framework of arguments.
Regarding this particular argument and how difficult it is to value ones that sound valid: at the time, this argument was quite cogent and I would have agreed with it. The author made a well-researched, well-formulated, convincing argument. He (along with many others, I'm sure) was later proven wrong, but at the time of the argument, he had a convincing case. Nothing wrong with that, in my opinion.
Often old articles with predictions that turned out to be horribly wrong come up on here. I think that whether the person turned out to be right or wrong is not very relevant. When you make an argument you are stating your opinion at that time, and so the quality of the argument should be measured in that context. That isn't to say that you can just make wild predictions without risk of losing credibility; again, your prediction can and should be measured at the time you make it, and I think that baseless ones should be critiqued appropriately.
That's a great point. It's similar to why people often set up their problems as 3SAT or convex optimizations--you get to benefit from all future improvements to 3SAT solvers or optimizers.
He is an inspirational dude. I can't find a direct quote, but when I read the article posted here some time ago (http://news.ycombinator.com/item?id=458090) I got the sense that he wants to change the world, and potentially going broke doing it is an unfortunate but permissible side-effect. Given the various posts about "what to do with my millions" today, I think what Musk has chosen to do with his capital provides a poignant perspective.
No, I did see that, but to zoom in further, what is meant by "in accordance with its privacy policy"?
For Google's other apps, their privacy policy lets them confidentialize and then use data about you to improve their services. Don't see anything that stops them from doing stuff with your data as part of "providing you with the service", without giving up your ownership of it.
Yes, I'm speculating. But it just struck me as a reason for google to offer this service. And honestly, if I were a user I might be ok with them using my data anonymously to improve said service that I am using.
I was guessing that google (in their never-ending desire to consume more data) would want to use us as guinea-pigs to improve their algorithms. It's not 100% clear to me, but from the terms of service:
By submitting, posting, displaying, or transmitting Data on or through the Service, you give Google permission to process your Data for the sole purpose of enabling Google to provide you with the Service in accordance with its privacy policy. You hereby grant Google all licenses to your Data necessary to process the Data and provide you with the Service in accordance with its privacy policy. As a part of the Service and through provided interfaces, Google may allow you to remotely access, view, and download results of the processing of your Data. (via http://code.google.com/apis/predict/docs/terms.html)
I imagine that they might claim the right to use your data anonymously to improve their algorithms, much like they do for your personal data in their other apps. I mean, what better way to refine their supervised learning algorithms than via an endless supply of training sets? But I hate wading through legalese, anyone have any insights?
It just seems like you could get almost all the alleged benefits of Chrome OS with a simple shell for Windows or Linux that runs the browser and nothing else on login.
It does seem so. And indeed, that's what Chromium OS is. Essentially a new distro with their own browser-based desktop manager.
I had trouble figuring out if they were joking with each other or being serious. Regardless, I must say that they both have a quite peculiar style of writing, and it was cool to see the human side of two people that I've studied so much.
The other important reason to use a library is that if someone improves the algorithm someday, you can benefit for nothing more than installing and testing the new version of the library.
I remember this also being the case for Constraint Satisfaction Problem (CSP) algorithms in AI. If you can formulate your problem as a CSP and feed it to a library, you automatically benefit from future improvements in the field of CSP solvers.
i've been using this knot for years, and it's great. i dream of some day teaching my kids to tie their shoes with this knot, and then having them explain to the other kids in class why their system trumps the standard methods.
Ideally, using formal methods [1], one can write a provably correct program. Just because software can have bugs does not mean it must have bugs. Human contract law has no analogue.
Personally I'd be wary of any electronic contract that wasn't formally verified. The DAO exploit is unsurprising.
1. https://en.wikipedia.org/wiki/Formal_methods