Provide Feedback on Start-Up - <AUTHOR> http://popupchinese.com Hi guys,
This is a request for feedback. I've been following this board for a while, and have stolen my better usability ideas from some of you, so if you visit perhaps you'll notice the inspiration for certain parts of our interface coming from your site.
Anyway, my company is Popup Chinese (http://popupchinese.com) , an online language instruction service. We provide daily mandarin lessons, videos and test-prep services through the Internet. These lessons are loose modules that can consist of an audio podcast, manually annotated texts (mouseover foreign words for popups with english definitions, pronunciation information, grammar explanations, etc.), quizzes and more. The site also has the standard array of study tools like flashcards.
There's already a profitable marketplace for language podcasting services, and a traditional market that is horrible at teaching language effectively. We believe in online learning, but also believe that content isn't a smart play. So it isn't really the lessons aspect of the service that we're looking for feedback on. What makes Popup Chinese somewhat special is that it's designed as an open platform. The site includes all of the content creation tools necessary for third parties to make and publish professional lessons, along with sophisticated backend NLP tools that simplify text annotation and editing. Users can subscribe to each other's content, and syndicate their materials through RSS.
Basically, we are trying to be a hosted WordPress for the online language instruction market, encouraging the creation and sharing of learning objects around an open platform while developing ways for content creators to be compensated for their work. The challenge is that no-one else is doing this, and there aren't any obvious principles for balancing the radically different interests of content publishers and consumers. We need to make the content creation functionality as powerful and easy to use as possible, but not make the advanced functionality obvious to first time visitors who may be scared off by it, or perceive our own content as lower quality due to the presence of third-party content on the site. Our response to this dilemmas has been to "hide functionality in plain sight".
And here's where you come in.... we have a growing community of learners and are launching iteratively to identify problems and fix them before a more public launch. Because we aren't doing much marketing until we leave beta, we are mostly getting feedback from users who are already good at Chinese. They love the product but do not constitute the majority of the market (Absolute Beginners). So it would be tremendously helpful for us to have feedback on how the site feels and behaves to people who are completely new to Chinese. Is it obvious how to use the site? Can you find appropriate learning content? What problems do you run into in the process?
That's the intro spiel. Thanks for getting this far.
If you have some time to lend a hand, you can get full premium access by visiting http://popupchinese.com/voucher and entering the voucher number 2008AOYUN. This voucher is an open invitation while we are still in beta, so if you know anyone who is studying Chinese, feel free to pass it along to them as well. We are pretty sure they will thank you for it.
I should probably mention that the system is designed to support instruction from any language into any language (we can roll it out in other languages very quickly at low cost if there was a profitable market to be served), and the A.I. elements of the annotation/dictionary service are self-learning. Our business model is currently freemium, although we're hoping to eventually make the entire service free of charge and monetize through other channels. We have a strategy for doing this in Chinese, but I'd be interested to hear from people working on related or complementary projects, especially in other languages. I estimate our costs at less than 1/10th of current competitors, and - who knows - perhaps there is someone here who can help us get Popup Hindi off the ground.
Thanks for your time,
--david <comment><AUTHOR> Hi guys,

This is a request for feedback. I've been following this board for a while, and have stolen my better usability ideas from some of you, so if you visit perhaps you'll notice the inspiration for certain parts of our interface coming from your site.

Anyway, my company is Popup Chinese (<http://popupchinese.com>) , an online language instruction service. We provide daily mandarin lessons, videos and test-prep services through the Internet. These lessons are loose modules that can consist of an audio podcast, manually annotated texts (mouseover foreign words for popups with english definitions, pronunciation information, grammar explanations, etc.), quizzes and more. The site also has the standard array of study tools like flashcards.

There's already a profitable marketplace for language podcasting services, and a traditional market that is horrible at teaching language effectively. We believe in online learning, but also believe that content isn't a smart play. So it isn't really the lessons aspect of the service that we're looking for feedback on. What makes Popup Chinese somewhat special is that it's designed as an open platform. The site includes all of the content creation tools necessary for third parties to make and publish professional lessons, along with sophisticated backend NLP tools that simplify text annotation and editing. Users can subscribe to each other's content, and syndicate their materials through RSS.

Basically, we are trying to be a hosted WordPress for the online language instruction market, encouraging the creation and sharing of learning objects around an open platform while developing ways for content creators to be compensated for their work. The challenge is that no-one else is doing this, and there aren't any obvious principles for balancing the radically different interests of content publishers and consumers. We need to make the content creation functionality as powerful and easy to use as possible, but not make the advanced functionality obvious to first time visitors who may be scared off by it, or perceive our own content as lower quality due to the presence of third-party content on the site. Our response to this dilemmas has been to "hide functionality in plain sight".

And here's where you come in.... we have a growing community of learners and are launching iteratively to identify problems and fix them before a more public launch. Because we aren't doing much marketing until we leave beta, we are mostly getting feedback from users who are already good at Chinese. They love the product but do not constitute the majority of the market (Absolute Beginners). So it would be tremendously helpful for us to have feedback on how the site feels and behaves to people who are completely new to Chinese. Is it obvious how to use the site? Can you find appropriate learning content? What problems do you run into in the process?

That's the intro spiel. Thanks for getting this far.

If you have some time to lend a hand, you can get full premium access by visiting <http://popupchinese.com/voucher> and entering the voucher number 2008AOYUN. This voucher is an open invitation while we are still in beta, so if you know anyone who is studying Chinese, feel free to pass it along to them as well. We are pretty sure they will thank you for it.

I should probably mention that the system is designed to support instruction from any language into any language (we can roll it out in other languages very quickly at low cost if there was a profitable market to be served), and the A.I. elements of the annotation/dictionary service are self-learning. Our business model is currently freemium, although we're hoping to eventually make the entire service free of charge and monetize through other channels. We have a strategy for doing this in Chinese, but I'd be interested to hear from people working on related or complementary projects, especially in other languages. I estimate our costs at less than 1/10th of current competitors, and - who knows - perhaps there is someone here who can help us get Popup Hindi off the ground.

Thanks for your time,

\--david

</comment><comment><USER2> Displaying your lessons brings up an error at the foot of the document

Parse error: syntax error, unexpected $end in /home/lancashi/website/cake/app/views/elements/sidebar/downloads.thtml on line 197

Possibly why the lessons are unformatted?

Also, and this is more a pet hate of mine than a universal issue, I find that 'signin' and signup' are confusing. I would like to see 'register' instead. You also need some more direction on the signin/signup page. For example 'existing users sign in here' over the signin form.

<comment><AUTHOR> thanks.

</comment></comment><comment><USER3> Clicking on [Lessons] provides me with an alert "Error in document.getElementById(adso_tooltip)"

<comment><AUTHOR> what browser are you using? and is this from any page other than the main page?</comment></comment>


OnSwipe Raises, Like, A Million Dollars - <AUTHOR> http://techcrunch.com/2011/01/12/onswipe/

<comment><USER2> Really exciting and we get to build out a great vision, but honest truth: this means a ton more responsibility.

<comment><USER3> Congrats jason! I Believe.

<comment><USER4> Thought I recognized a couple of the investor's names there ;-) did you guys meet at an HN meetup? gotta love this community!

</comment></comment></comment><comment><USER2> Fyi, we're hiring (front end and back end). I'm biased towards HN users :). firstname.lastname@example.com.

<comment><USER5> What's your stack like?

<comment><USER6> So far is PHP on the backend, JS + HTML5 on the client side.

</comment></comment></comment><comment><USER7> As I wrote in the TechCrunch thread:

Congrats Jason and "welcome home" - beer and burger on me at the next Hackers and Founders! :)

</comment><comment><USER8> Congrats! Can you give us a hint on what's next for the platform?

</comment><comment><USER9> Congrats, Jason!

<comment><USER2> thanks Chad! We're beyond excited.

<comment><AUTHOR> Lunch is on you next time you're in SF. :)

<comment><USER2> what, why was this downvoted? I'd buy stammy lunch, even if we didn't raise money. He's the man.

</comment></comment></comment></comment><comment><USER10> I like that extraneous "like" in the title. It like totally cleared things up and made me feel like I was like totally in high school again.

<comment><USER11> It's a reference to how Groupon's recent press release, titled "Groupon Raises, Like, A Billion Dollars'

[http://www.businesswire.com/news/home/20110110006746/en/Grou...](http://www.businesswire.com/news/home/20110110006746/en/Groupon- Raises-Billion-Dollars)

<comment><USER10> ah, got it. thanks

</comment></comment></comment><comment><USER12> Congrats!!! So great to see.

</comment><comment><USER13> LOVE the new name. I think it's a winner.

Congrats Jason

</comment><comment><USER14> DOMINATE

</comment><comment><USER15> Great Stuff guys!! nice vision, presented very nicely!</comment>


An S.O.S. in a Saks Bag - <AUTHOR> http://www.newyorker.com/online/blogs/currency/2014/06/an-sos-in-a-saks-bag.html <comment><USER2> I don't intend to defend the human rights record of China, but I do question the outright opposition to the use of labour as a means of punishment and/or rehabilitation.

Here in the UK, we have a criminal justice system that isn't without fault, but is one of the best in the world. We make extensive use of "forced labour", both in the community and in prison. British prisoners are required to participate in work or training activities, or face the withdrawal of privileges - fewer visits and phone calls, less free association time and so on. There is no significant history of corruption or malpractice in the use of prison labour here and there is broad consensus that requiring prisoners to engage in productive activity improves prison discipline and aids rehabilitation.

From my perspective, it seems that the issue is clearly of degree rather than of type. The issue is of broader prison welfare, not the specific issue of prison labour. To castigate the Chinese penal system as "modern day slavery" us fundamentally unhelpful. The article has a tone that borders on hysteria, with no real global context or reference to the use of prison labour outside China.

There are clearly major human rights issues in the Chinese penal system, but I think we should specifically address those issues directly. The use of torture and capital punishment is considered unambiguously wrong in the developed world, and the abolition of these practices in China, the US and the Middle East is of utmost priority. Frankly, I think that the article is a covertly ideological attack on China, part of a broader trend of commentary that seeks to dismiss Chinese industrial growth as merely the result of the oppression of labour rather than of good governance and well-managed economic development.

<comment><USER3> >but I do question the outright opposition to the use of labour as a means of punishment and/or rehabilitation.

I question this as well. But I dont think anyone should be forced or required to work. If you want to sit and rot in a jail cell so be it but if you want to work then you should be allowed to. Even if you dont get a _normal_ wage.

>British prisoners are required to participate in work or training activities, or face the withdrawal of privileges - fewer visits and phone calls, less free association time and so on.

This is where the US differs, they treat most prisoners like dogs at the pound. I dont think the US prison system is rehabilitating anyone and its probably the reason we have so many repeat offenders. We arent leaving them better off than when they came in. In fact most of the time they are in a much worse position when they leave.

Now we are outsourcing all of our prisons to corporate prisons run by 3rd parties who treat the prisoners even worse.

</comment></comment><comment><USER4> I wonder if the bags manufactured in US prisons ever have notes slipped into them. You don't have to go to Saks, you can buy them online -

[http://www.iaprisonind.com/store/c/31-Plastic- Bags.aspx](http://www.iaprisonind.com/store/c/31-Plastic-Bags.aspx) [http://www.iaprisonind.com/store/c/77-Miscellany.aspx](http://www.iaprisonind.com/store/c/77-Miscellany.aspx)

Oh yaa, he says he's not guilty. I'm sure it would be hard to find a prisoner in a US prison who says he's not guilty.

In fact some judges in the US freelance in sending innocent people to jail, in exchange for the kickbacks they get - [http://articles.philly.com/2014-02-05/news/47009400_1_ciavar...](http://articles.philly.com/2014-02-05/news/47009400_1_ciavarella- and-conahan-ciavarella-jr-philadelphia-based-juvenile-law-center)

Americans just love moralizing and pointing their fingers at other countries for the exact same things they do.

<comment><USER5> your argument ("Americans just love moralizing and pointing their fingers at other countries for the exact same things they do") is called "tu quoque" and it's a logical fallacy.

[http://en.wikipedia.org/wiki/Tu_quoque](http://en.wikipedia.org/wiki/Tu_quoque)

It does not detract from, or even relate to, the subject of the article in any way.

\--

EDIT: Following downvote, to make it clearer:

1\. yes we should not have slave labor in America either, and yes some people are wrongfully imprisoned, and yes we use prison labor. The legal process is probably better in the United States than in China, but that does not mean the American legal process should not be improved. None of this has anything to do with the subject of the article, and does not excuse it in any way. Besides, the New Yorker is a private magazine - the article could be Chinese just as easily, and you would not have to change any of the language in it.

2.

Oh, except for the fact that there is freedom of speech to publish it in the United States (even if the subject of it were American prison labor) whereas it's doubtful if the Chinese are even allowed to _read_ the present New Yorker article, let alone publish it if they had written it themselves. In America, the New Yorker, I, you, or anyone are free to publish a similar article on American prison labor.

Here are a few:

[https://www.google.com/search?q=american+prison+labor+site%3...](https://www.google.com/search?q=american+prison+labor+site%3Anewyorker.com)

<comment><USER6> _it 's doubtful if the Chinese are even allowed to read the present New Yorker article, let alone publish it if they had written it themselves._

I'd be interested to hear from those with more direct experience whether this guess is true. Is this article accessible in China? Would a Mandarin translation be censored? Would a native equivalent be publishable? And culturally, is there embarrassment at using prison labor?

<comment><USER7> I don't have any more direct experience, but according to both greatfire.org and websitepulse, the article is available behind the Great Firewall.

</comment></comment></comment></comment><comment><USER8> > Reëducation

While this is completely unrelated to the subject matter, I admire the New Yorker's insistence on keeping the diaeresis alive.

<comment><USER9> That, plus their insistence along with the rest of the New York media of putting periods in anything that looks like it might be an acronym or initialism, even when they are dead wrong and it isn't!

SOS is a case in point. SOS is just SOS. It is most definitely _not_ S.O.S.

SOS is a Morse Code prosign. Like all prosigns, it doesn't stand for the individual letters. The letters are just a way of writing out the sound. SOS definitely doesn't stand for "Save Our Ships" \- it was first introduced in Germany!

In Morse code, the letter S is "dit dit dit" and the letter O is "dah dah dah". When you send individual letters, you pause in between. So if you were sending the individual letters S O S, or a word that happened to be spelled "sos", you'd send "dit dit dit <pause> dah dah dah <pause> dit dit dit".

But that's not how you send SOS. You run it all together: "dit dit dit dah dah dah dit dit dit".

The same is true for other prosigns such as AR which means "end of message". The letter A is "dit dah" and the letter R is "dit dah dit". But you don't send AR as "dit dah <pause> dit dah dit". It's "dit dah dit dah dit".

If someone sent me the individual letters A and R with the pause in between, I wouldn't recognize it as an end of transmission. I'm listening for the entire sound of "dit dah dit dah dit". It's really more like a big long "letter" of its own.

Prosigns are customarily written with a bar above the letters to show that they are connected without a pause. Of course, that's not always possible, but they definitely are never written with dots between the letters.

Except in New York, where they love the periods no matter how wrong they are!

[https://en.wikipedia.org/wiki/SOS](https://en.wikipedia.org/wiki/SOS)

[https://en.wikipedia.org/wiki/Prosigns_for_Morse_code](https://en.wikipedia.org/wiki/Prosigns_for_Morse_code)

<comment><USER10> That was really informative! I have always wondered what makes those phrases special, and how you're supposed to distinguish them from just the letters in the same sequence. (I knew little about morse code other than the crude letter-to-dit conversion, not about how to enunciate it.)

The idea that it's actually one large, composite letter makes a lot of sense (just like certain letter sequences in strings like \n or \0).

</comment></comment></comment><comment><USER11> Not wishing to at all detract from the egregious inhumanity of what is portrayed, but a notable thought crossed my mind while reading this. Programming has the potential, if we can get past the more superficial, and avoid the dark and exploitative sides, seems to be the only real way to get to a point where we can have a world with quality affordable consumer goods without this kind of rape and murder in exchange for riches.

Doesn't that make you stop and think? Programming has that potential. Sure you can exploit and rob and do horrible things with it as well, but what other profession has the potential to let society have the potential of sustainable affordable riches for all WITHOUT this kind of murder for gain (for that's what it is, part of the life of others taken by force to obtain riches)

<comment><USER12> What? Will programmers sew my T-Shirts for $5 a pop like kids in Hondorus?

<comment><USER13> Probably not; however, their 3D printed robot in a kiosk probably would.

<comment><USER12> Since when are 3D printers and robots built by programmers? And we already have robots that sew garments. Honduran labor is cheaper. Are programmers going to make those robots cheaper?

<comment><USER13> Not sure how sincere you're being, but I'll explain: Robotics is expensive, which is why people are still doing these tasks. 3D printing helps make robotics ubiquitous. Think back to the golden era before the PC, or the days of yore, when the only guys using a 'cell phone' were guys in limousines.

Now, I can go get a computer more powerful than a Cray for $200 & put it in my pocket; not to mention that I can also talk to other people on it.

We're on the shoulders of giants right now, my friend. And in kind, work being done today will give the programmer the capacity to replace cheap, forced labor with cheaper robots.

<comment><USER12> You've mentioned: 3D printed robots, cell phones, and powerful computers. Programmers didn't build any of these things--other sorts of engineers did. The OP asked: "but what other profession has the potential to let society have the potential of sustainable affordable riches for all WITHOUT this kind of murder for gain?" The answer is: lots of professions will have to work together to make this possible.

The overarching issue is that OP's self-aggrandizing tech utopian gibberish ignores the fact that giving masses of people access to cheap consumer goods will require revolutions in many areas that have little to do with programming. 3D printers are going to be of limited usefulness without advances in materials science. Their reliance on plastics is going to become untenable given the continuing increasing price of petroleum. Etc.

Outside engineering, it will require major advances in social and political systems. Without such advances, 3d printers will put everyone out of work, and all the benefits will go to those who own the means of producing those robots. Moreover, 3D printed robots don't make metals and plastics out of thin air-- those have to be mined out of the ground and those deposits are often in countries quite hostile to each other.</comment></comment></comment></comment></comment></comment>


A Modern Space Cadet (2012) - <AUTHOR> https://stevelosh.com/blog/2012/10/a-modern-space-cadet/#control-escape <comment><USER2> I had this "caps lock is escape when pressed alone, ctrl when pressed with another key" for quite a while, but now I've changed it.

Now I have "caps lock is escape when pressed alone, and a special modifier when pressed with another key". So Caps+H is the same as cursor left, Caps+J is the same as cursor down, and so on (vi bindings). I also have this for F/B/N/P (emacs bindings). And Caps+A/Caps+E are the same as cmd-Left/cmd- Right.

Because quite a few applications don't support the Emacs bindings Ctrl-b/f/n/p everywhere. Now I can press the same keys but get real cursor keys, so that it works everywhere.

Karabiner Elements also allows you to create prefix keys. So I do Caps+C followed by another key = ctrl + that key. E.g. Caps+C, then X, is the same as Ctrl-x.

And because I hate the Mac touch stripe (forgot what it is called), I do Caps+X then 1/2/3/... for function keys F1/F2/F3/... It's pretty cool because it passes on modifiers, so I can do Caps+X followed by cmd-1 and that's the same as cmd-F1.

It's just a thought, in case people might like to try.</comment>


Show HN: CloudChangelog – Daily Updates from Azure, AWS, GCP and Oracle Cloud - <AUTHOR> https://cloudchangelog.com/ <comment><AUTHOR> We also publish a daily newsletter available here [https://cloudchangelog.substack.com/](https://cloudchangelog.substack.com/)</comment>


SCO Found No Source Code In 2004 - <AUTHOR> http://www.groklaw.net/article.php?story=20110301153719104

<comment><USER2> I do not see how Goldfarb's settlement with the SEC serves as evidence of malfeasance by SCO or misdeeds by Microsoft. Though it certainly does make good _ad hominem_.

<comment><USER3> Wow! That's the most impressive point-missing I've seen in a long time! Way to go!</comment></comment>


Are "jets" a good idea? (2017) - <AUTHOR> http://lambda-the-ultimate.org/node/5482 <comment><USER2> It occurs to me that ASM.js (before WebAssembly) was full of jets. That is, they wrote weird idioms that the interpreter could understand and optimize, while technically keeping the semantics of the language itself (JavaScript). The most visible example was someVar|0, which was a kind of way to assert that the expression would be an integer. Not really a type declaration, since it didn't ensure someVar would be a number, only that the expression was integer.

In the examples though, clearly the goal is to have some provability in the core language, make that provability feasible with a small language, and keep that as the language becomes further optimized. It seems subtly different than an optimizing compiler.

<comment><USER3> Somebody mentioned "failure of full abstraction" on HN a few months ago (actually they said something a bit different), which I tracked down to a late 90s paper by Martin Abadi. It refers to a situation where the object code is exploitable because it doesn't fully reflect the semantics of the source code.

One use of jets, in the secure code setting, is to provide a core language that is so simple that it can obviously be compiled in a "fully abstract" way.

That is my understanding, anyway. The notion of fully abstract compilation seems to be quite hot, and it comes originally from Abadi's paper: [http://www.hpl.hp.com/techreports/Compaq-DEC/SRC- RR-154.pdf](http://www.hpl.hp.com/techreports/Compaq-DEC/SRC-RR-154.pdf)

</comment></comment><comment><USER4> This is already a standard piece of how JITs work today. See the discussion of Java intrinsics and Array.fill() here [0].

> An intrinsic function is applied as a method substitution [...] and the > compiler will replace it's apparent source-level implementation with a pre- > cooked implementation. In some cases intrinsics are sort of compilation > cheats [...]

> The intrinsics are all set up in vmSymbols.hpp and if you look, you'll see > Arrays.fill is NOT on the list. [...] Because it is something like an > intrinsic... [...] What is it then? Arrays.fill is a code pattern > substitution kind of compiler shortcut, basically looking for this kind of > loop:

``` for (int i = 0; i < arrayB.length; i++) { arrayB[i] = b; } ```

And replacing it with a call into the JVM memset implementation.

[0]: [http://psy-lob-saw.blogspot.com/2015/04/on-arraysfill- intrin...](http://psy-lob-saw.blogspot.com/2015/04/on-arraysfill-intrinsics- superword-and.html)

<comment><USER5> That has bugged me since the first time I read about Nock. JITs use intrinsics to work around inefficiency of generated code when the maintenance burden of the intrinsic is worth the performance boost, and the grand plan is to make a VM so terrible that you need a shitload of intrinsics for programs to terminate before the heat death of the universe? Years later I still haven't gotten past that initial bafflement. It just makes no sense at all.

<comment><USER6> > JITs use intrinsics to work around inefficiency of generated code when the > maintenance burden of the intrinsic is worth the performance boost, and the > grand plan is to make a VM so terrible that you need a shitload of > intrinsics for programs to terminate before the heat death of the universe?

Put it this way: the JVM is perhaps the most sophisticated JIT on the planet, maybe a million lines of code, the product of decades of programming research and billions of programmer-hours, and it still needs intrinsics to improve performance. So how about we skip the billions of programmer hours and just use lots of intrinsics?

I don't know if it's going to work, but it's interesting enough to be worth a try.

<comment><USER4> I'm baffled by your conclusion and that of your parent post.

> So how about we skip the billions of programmer hours and just use lots of > intrinsics?

This is very nearly the equivalent of: Why don't we skip writing a compiler and just USE glibc?

My post was about the opportunity to forgo the use of an intrinsic and instead do pattern recognition as part of compilation. The point being that the "jet- like" pattern matching phase that exists in many compilers today, my example being from the hotspot JVM's JIT compiler, but GCC will match the for loop and INTRODUCE a call to memset too.

<comment><USER5> I was using "intrinsic" inappropriately, I think, to mean both substitution of method calls and substitution of bytecode patterns. Yeah, the JVM already does the second thing. It's not roses for them, either[0]. The thing that I've been looking for in all this discussion is acknowledgement that the JVM team has been doing this, has encountered engineering challenges to the point that they're willing to change javac to simplify a jet, and an explanation of how these weird VMs are so different that none of that matters and using a shitload of jets is perfectly fine.

[0] [http://openjdk.java.net/jeps/280](http://openjdk.java.net/jeps/280)

</comment></comment></comment></comment></comment><comment><USER7> If you assume the program is being passed through a JIT (a thing that is already common for interpreted code, and which _also_ tries to guarantee that it doesn't change the resulting program's semantics), then one can think of jets as simply explicit hints built into a JIT regarding how to optimize particular known idioms well known in the corpus of programs the JIT was designed to work with.

This is exactly how GPU drivers get gradually more optimized for existing games: the driver's shader compiler actually has an ever-growing library of shader-source-code patterns, with hardware-vendor-optimized replacement sections.

</comment><comment><USER8> "Are optimizing compilers a good idea?"

Look if you replace 1 representation with another that is _correct_ (to within the human author's reason), but faster. You have the identical discussion, and an answer (yes).

<comment><USER9> Well, there's another aspect: "Is it OK to design a language that will be unusable without an optimizing compiler?"

Running any normal language without an optimizing compiler is totally fine and routinely done. Here we're talking about languages that might be thousands or millions of times slower.

<comment><USER10> Compared to a optimizing compiler, a fresh implementation for a language would probably also be thousands/millions of times slower, unless the codebase implements the optimizations itself.

And then you end up speeding up the compiler to reach a decent state, to speed up the code

But time to reach initial compiler is much faster with a jet-based one (there's barely anything to the language).

and then you end up adding jets to reach a decent state

I'm not sure there's a significant difference in this regard. The main question, I think, is which is easier/simpler/faster to optimize into a proper state, and in the case of compiler optimization being better, if its sufficiently better to beat the ease of initial implementation for a jet- dependent language

<comment><USER9> It would be great if optimizers made code 1000x or 1000000x faster, but apart from some edge cases like the removal of ineffectual loops, disabling optimization in any compiler shows that ~10x is more realistic.

My day job is writing compilers (for traditional languages), and I have no doubt that it's significantly easier/simpler/faster to implement the jet based one.

However, the jets only apply to known algorithms, so it's really more like an optimized library than a compiler technique. Code that uses the "library" will be really fast with little effort, but anything that requires functionality not directly found in the library will get the 1000-1000000x overhead, while the traditional compiler will run it all with ~10x overhead.

I totally agree that it's the perfect fit for long-lived, highly heterogenous, correctness first applications like blockchain, but I don't see how it'll be useful for general purpose languages.

</comment></comment></comment></comment><comment><USER11> This is the problem I have with Lisp, but exponentially worse. Languages like this try and stretch ever-closer to an imaginary "perfectly pure language". It's an interesting exercise, but in the process they get further and further away from concepts that are palatable to the human mind, and end up esoteric and minimalist beyond usefulness. We sometimes forget that programming languages are not designed for computers, but for humans who want to express ideas to computers.

<comment><USER12> Do you mean Scheme, specifically? Because I have a hard time seeing that in lisp in general. Racket's small but fairly pragmatic, Clojure is pretty big, and Common Lisp is frankly a bit of a kitchen sink language.

<comment><USER13> Not your parent, but I personally didn't find S-expression syntax to be superior. Treating code as data and vice versa is metaprogramming, and it should be something you know how to do when you need it, easy enough to where you're not really going out of your way to do it when you do need it, but weird enough so that you can notice it and immediately see that you are going to need to put on your thinking cap in order to proceed further down the road of understanding this program, when you come across it.

I've yet to see a better approach than Ruby's.

<comment><USER14> Amusingly, I've yet to hit as much frustration as I have when using a few ruby packages at work. Holy hell is it confusing to figure out where things came from, sometimes.

I don't necessarily care for the data as code, most of the time; but I do like that most everything has a sensible way to serialize to a file. Even better, unless I am wanting to get optimized, the round trip can take care of itself.

Curious what the syntax is for a basic list of key value pairs? Well, it is the same as any list of pairs. Which is the same as any list, unless you are trying to get fancy.

This freedom really is liberating, at times. Yes, some folks have made macros so that they have a syntax to have a different literal for different styles of maps/tables/etc. By and large, life is easier if you don't use those and just stick to the minimal syntax necessary to do this.

Which really helps with your concern. When I can see what the transformation is, I can literally substitute into my mental model what the macro is doing, so that I don't have to juggle a bunch of crap around.

And all of this, oddly enough, lands you into not caring if you are calling to a function or a macro. I have more trust in calling things in most lisps I've worked with, because I can understand both ways in terms of themselves easily enough. With ruby, I'm often wary of using a new method in a source file, because I really can't trust all of the interactions that are assumed for it to work out.

<comment><USER13> I'm not sure how much of our respective experiences is due to familiarity. For example, I have REPL power tools and a really good understanding of Ruby's object model to help me figure out what something's doing. So that almost never concerns me all that much.

Whenever I pull in a new gem, I usually budget a few minutes to wrap my head around the semantics of how the gem is expected to be used. Occasionally the documentation isn't good enough and I need to source dive.

What I never have to deal with is new syntax. No matter how Ruby is being used, the syntax is always the same comforting, pleasing-to-read near-prose. What changes when you use metaprogramming in Ruby is semantics. You can't add new syntax to the language unless you actually change the language.

Like you, I find people misusing metaprogramming. For me usually this is fairly easy to detect. If I look for the source of a method and it's dynamically generated, then showing the source will take me to where it was generated.

I won't pretend to have chosen Ruby over Lisp because I liked the language better. I chose it because I figured it would help me get a job better. But as time went on I found myself at home with Ruby.

I don't think it would take me all that long to get used to any given Lisp. But I don't believe it actually gives anyone superpowers, at least, not superpowers you can't have with Ruby. I have yet to hear a lisper actually articulate a solid advantage for code as data.

When there isn't any functional reason to choose between alternatives, all there's left is the aesthetic. Which is where all those parenthesis finally become important.

<comment><USER14> Hmm, you seem to be indicating that people use macros to create new syntax all of the time. I have not actually found that to be the case that often. In particular, there are only two macros I know I use somewhat regularly that do this. LOOP and FORMAT. And even those always follow the same general syntax of lisp. Unless you get crazy, it is not usual to actually use things that drastically change the full syntax of lisp.

But again, in lisp, you probably make use of more metaprogramming than you'd realize, precisely because it is indistinguishable from normal programming.

(I'm tempted to contrast this with some of the DSLs I've seen in the likes of scala and ruby... I have a hypothesis that all of the hoops you have to jump through to make a macro like construct cause people to go all in when they do so.)

Now, I'm also not claiming lisp gives superpowers. Again, I'd almost go the other route. Most lisp is typically quite simple, because you can accomplish quite a lot that way.

Which does bring it back to aesthetics some. The parens just flat out don't bother me. They are a bemusing joke, that never actually made sense. Too often, the difference is minimal compared to most C programs. Foo(bar) becomes (Foo bar). Which isn't that big of a deal. The basic math changes from infix to prefix is a bit to get used to. However, I find it is much more pleasant to deal with generics (+ matrix1 matrix2) as opposed to matrix1.plus(matrix2) of java and the like. Of course, I was also a huge fan of my HP calculator in college. RPN for the win! :)

So, yes, I do think it comes down to preference. I don't think you're preference is wrong/bad. I do think your view of lisp sounds colored more by bemusing jokes than actual problems in lisp code. But, I fully grant my experience with ruby may be colored by an overly ambitious project written in it.

<comment><USER15> In ANSI CL, the macro related to formatting is called _formatter_ ; _format_ is just a function.

The _format_ function can take a function as an argument in place of the format string.

The _formatter_ macro can compile a format string into such a function.

        (format nil (formatter "(~a-~a)") x y)

_formatter_ spits out a lambda that is passed to _format_ ; _format_ then passes it the stream, and the remaining arguments.

<comment><USER14> Indeed, apologies for messing that up. :) My point was more on the rarity of "syntax breaking" macros. And, even that one doesn't really change the syntax much. It is just a very complicated function, for all intents and purposes.

<comment><USER16> > My point was more on the rarity of "syntax breaking" macros.

Why don't you consider macros like DEFUN, DEFCLASS, COND, etc to be "syntax breaking"?

<comment><USER15> Not speaking for grandparent, I would say that _cond_ isn't syntax-breaking because it doesn't have to employ grammar -driven parsing to recognize and delimit the clauses and their constituent forms. The nested list structure of _cond_ that you see _is_ the real syntax.

 _defun_ could be like this, though its ANSI CL specification is quite screwed up.

The sytax is given as:

       defun function-name lambda-list [[declaration* | documentation]] form*

where the double square brackets are described in "220.127.116.11.1 Splicing in Modified BNF Syntax" which denotes that a list of elements is to be spliced into a larger structure, and the elements may appear in any order. The description of this idiotic bullshit is convoluted, but an example section gives the gist of just how idiotic:

 _" For example, the expression_

      (x [[A | B* | C]] y)

_means that at most one A, any number of B 's, and at most one C can occur in any order. It is a description of any of these:_

      (x y)
      (x B A C y)
      (x A B B B B B C y)
      (x C B A B B B y)

_but not any of these:_

      (x B B A A C C y)
      (x C B C y)

Note how the B elements generated by B* can be interspersed! So in the case of _defun_ it means that we can have variations like:

      (defun name (args ...) decl doc decl decl decl body...)

      (defun name (args ...) doc decl decl decl decl body...)

      (defun name (args ...) decl decl decl decl doc body...)

There can be at most one docstring, and an arbitrary number of declarations, and they can be mixed in any order.

Note that if we interpret A|B*|C as a simple regex notation, it wants all the B's clumped together; someone really had to work hard to concoct this counterintuitive BNF extension.

<comment><USER14> That all said, I can't imagine that most folks are surprised by the general shape of most defun statements. The complexities that go into how it is implemented is crazy, but it is not at all like the first time you see a LOOP invocation, is it?

<comment><USER16> > I can't imagine that most folks are surprised by the general shape of most > defun statements.

The general shape of a LOOP expression is just a list of symbols and lists. A complicated LOOP expression that uses many features at once doesn't end up looking very Lispy, but a shorter one like (loop :repeat 10 :do (print 'hello)) shouldn't look at all foreign, especially if you write the keywords as keywords, which many people do.

I guess when people talk about the regularity of Lisp syntax, I think they usually mean that (op ...args) applies the operator OP to the list ARGS. LOOP obeys this very well: the only LOOP syntax I can think of that breaks it is `using (hash-key k)` or with HASH-VALUE. Universally accepted macros break this rule all the time, though. By shoving everything into lists, they totally abandon trying to keep with the (op ...args) form. If you see that regularity as a great advantage of Lisp's, then it seems like you should be much more bothered by the more "mundane" macros than you should be by LOOP.

        (loop :for i :below 10 :do (print i))

Is less "syntax-breaking" than:

        (dotimes (i 10) (print i))

<comment><USER15> Commonly used _loop_ syntax is replete with syntax that breaks "op args ...":

      when <condition> do
      for <var> in <list>
      for <var0> = <init0> then <step0> and
        for <var1> = <init1> then <step1>
      collecting <expr> into <var>

The normal macros that don't have a flat argument structure, but shove everything into lists are keeping with the idea of leveraging the nesting so that the construct is "parsed on arrival" (POA?) into the macro. All that remains is to access its structure.

<comment><USER16> Syntactically, those are things that could have been implemented as operators, but aren't, they're just LOOP keywords; lots of functions take keyword arguments (edit: even if LOOP's are a little different from &key parameters). LOOP avoids using unquoted lists for things other than calling operators.

edit: Oh, right, destructuring, too! I guess that also counts.

Out of curiosity, how would you feel about a macro like this (ignoring that it doesn't enforce any keyword order)?

        (defmacro for (var &key = (then =) while do)
          `(do ((,var ,= ,then))
               ((not ,while))
             ,do))

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment> nv-vn Unrelated, but have LTU's site admins just disappeared? I signed up for an account probably over a year ago and it still hasn't been verified.

<comment><USER17> Same. Maybe you just have to hijack them at ICFP.

<comment><USER18> There were some issues with the signup process over the past year. You should email them directly:

[http://lambda-the-ultimate.org/node/5535](http://lambda-the- ultimate.org/node/5535)

</comment></comment></comment><comment> core-questions > Urbit's Nock, which, other than the jet concept, I honestly think is either > a strange art project or snake oil, so I won't discuss this further.

Urbit is very real, though whether it will go anywhere or not is a different question. You can run the code today, the language is.... weird as, but there it is, running and doing what it does.

<comment><USER19> Snake oil != vaporware.

</comment></comment><comment><USER20> I think the standard term is Idiom Recognition.

</comment><comment><USER21> Did this end up going anywhere interesting? As written up, it sounds like an attempt to simplify programming that would just turn into a "turtles all the way down" problem.

<comment><USER22> They haven't made a lot of public gains yet but the project has only recently raised enough money to grow beyond a few developers.

</comment></comment><comment><USER23> What about debugging? Without an IDE and/or a stepping debugger you're in for a lot of no fun.

<comment> nils-m-holm Are you referring to debugging in insanely simple languages or to debugging in general? Because I have written code in a text editor and debugged with PRINT (or whatever the language offers) for decades. It was a lot of fun!

</comment></comment><comment><USER24> The language specification should guarantee that when you implement an algorithm from your algorithm book, you get the same time and space complexity as described in the book, with reasonably small constants. You should be able to hit your big-O target without knowing which "jets" get special treatment by the compiler. That's all I ask for, and it's not too much to ask.

</comment><comment><USER25> This is basically asm or microcode at a higher level.

<comment><USER26> Yeah I was pretty sure I've seen this in both Nim and Common Lisp, but don't compile-time macros in general allow for this? A comment even mentions source- text replacement with C functions. So it seems like the "jet" is just a type of macro that is formally specified to behave as a pure transformation...

<comment><USER7> If macros are "GOTO", a jet is a "COMEFROM". A programmer _knows_ they're calling a macro, and expects that code to change. A jet, meanwhile, affects code that was written without knowledge of the jet.

<comment><USER27> It sounds like a aspect oriented programming.</comment></comment></comment></comment>


Is the supply and demand crisis for RoR talent a deal breaker for companies?  - <AUTHOR> http://heuristx.com/posts/58-is-the-supply-and-demand-crisis-for-ror-talent-becoming-a-deal-breaker-for-companies The demand for Ruby on Rails talent has sky rocketed and it's very difficult to find talent. If you disagree, I'll pay you $5,000 dollars a head. For start-ups and corporations willing to embrace the technology, the decision to use RoR can be critical.
I began approaching well known Rails programmers via email the other day for my education technology company, asking if they knew of anyone interested in a job and as usual, I received a bunch of emails from people "frustrated and pist off."
My email went to the tune of: "Hello, was wondering if perhaps you know of anyone interested in working with a Rails based education technology company in Chicago. We're offering a really great package for both junior and senior level developers."
If companies are gridlocked and can't build the capabilities needed to innovate because they can't find Rails developers, why should companies continue to use it? I know of more than a dozen well funded start-ups who've actually decided not to use Ruby on Rails because of inability to find talent.
You would think those truly concerned with the adoption of the technology at industry would care a little more about companies looking to make hires and grow. I feel like this selfishness and willingness to embarrass companies trying to find talent is inconsistent with the principals of open source software, which thrive contingent upon their widespread adoption.
Even more concerning, it's not like we're offering chump-change for the position. We're actually coming in well above market rate, well over 100k, totally respecting the authority. So to those I've offended with a casual email requesting your help, please explain to me how businesses should proceed in their decision to adopt RoR and build out their capabilities. <comment><USER2> Hiring experienced generalists with some web development background is a better approach. I would argue strong Javascript skills are more important than ever having used RoRs even if RoRs is the primary stack you use. RoRs is just not that difficult to learn and use.</comment>


Avoid OOP (Overzealous Optimization Programming) - <AUTHOR> http://colintoh.com/blog/avoid-oop

<comment><USER2> I don't know where to start.... Telling people to not write fast code for the sake of other people checking that code is absolute madness. The code is ran thousands or millions of times per day and is the obvious choice to lean toward when optimizing instead of leaning toward optimizing for some theoretical idiot who likes to read lines of code in a fast and efficient manner to do his job.

This job may be ran once or twice a year which is nowhere near the amount of savings in various computational power / hardware etc compared with the wages of some geek who simply can't be bothered to do his job well.

</comment><comment><USER3> The advice I've always been given is that speed optimization is a second step after writing your code in the idiomatic, easy to read and maintain way. The optimization is done after profiling to find out where the real bottlenecks are for your application.

</comment><comment><USER4> By the same token, don't worry too much about writing "maintainable" code before you actually start solving the problem at hand.

<comment><USER5> Absolutely. The only "clean" practice I advocate is test driven development. The day you want to refactor your code to avoid copy paste hell, you'll be thankful you have all those tests in place</comment></comment>


One year in, still no visa - <AUTHOR> https://daniel.haxx.se/blog/2019/04/17/one-year-in-still-no-visa/ <comment><USER2> I think it's part overreaction from security folks, part bureaucratic overcomplexity.

Someone I know got denied a visa to the US. She went to the embassy to get interviewed, and got told no, and no reason. Just an intimidating guy telling her no, you're not welcome. This lady had nothing to do with anything computer related, or crime, or anything remotely odious.

Someone else I know got stuck getting her docs because she passed her citizenship test in one state, then moved to another before the ceremony. She phones up about it, at the person on the other end literally says "wait a few minutes while I fuck this up, I have no idea how this system works". Somehow after a few weeks of desperation they managed to solve it.

I can imagine the curl guy's application getting 10 seconds of time, most of which will be taken up by the fact he's going to kick up a lot of hits on google and he has "haxx" on his homepage.

<comment><USER3> The amount of damage it does is huge to the foreign psyche. Already numerous conferences plan to move to anywhere but the US.

I'm entirely sure Russia and China cheer on this level of pettiness.

If he had actually done something wrong they'd have welcomed him in with open arms and arrested him on US soil a la Marcus Hutchins.

Hopefully it's only a few years before the pencil pushers realise how self defeating this strategy is. Resting on laurels and foreigners keen for large paychecks will only go so far for the US. The world can and will move on, decent wages only goes so far, there's definitely decent wages to be found in China too and many reject it.

</comment></comment><comment><USER4> To people outside the Internet bubble, saying you're an ethical, white-hat hacker must sound a bit like saying you're an ethical, white-hat thief.

</comment><comment><USER5> "During this year I missed out on a Mozilla all-hands, I've been invited to the US several times to talk at conferences that I had to decline and a friend is getting married there this summer and I can't go."

Wouldn't all these things be covered by an esta?

[https://esta.cbp.dhs.gov/esta/](https://esta.cbp.dhs.gov/esta/)

Edit: nevermind he talks about it in the other linked article [https://daniel.haxx.se/blog/2018/07/28/administrative- purgat...](https://daniel.haxx.se/blog/2018/07/28/administrative-purgatory/)

</comment><comment><USER6> At this point, wouldn't contacting an immigration lawyer be beneficial? As he says in his other article (see lm28469's comment), he wants to visit the US and not give up hope. See [https://www.ailawoffice.com/immigration/visa- denial](https://www.ailawoffice.com/immigration/visa-denial) for example.

</comment><comment><USER7> I fail to understand why he sounds so bitter about all this. He, nor anyone in fact, is in any way _entitled_ to a visa and any government is well within their rights to reject for any reason.

Besides, his counter page and his list of events he's missed is laughable. Such whining!

I've only ever encountered the _very_ privileged (and Mr. Stenberg with a Danish passport firmly falls in this category) who are outraged when there are complications with this sort of thing.

A Singaporean once lamented to me about getting a Ukranian visa for a friend of theirs as if it's some kind of terrible tragedy failing to realize that most of the world needs visas whenever they travel.

E: His other article, "administrative purgatory" is an even bigger whinefest that it crossed over into the funny, complaining about literally any and all things that literally everyone who doesn't qualify for ESTA has to go through...

<comment><USER6> Permit me to be outraged, equally, when anyone is denied access to a resource without good reason given, to something that is readily available to their peers. Your comment is unseemly and unkind.</comment></comment>


What's Wrong with Bananas - <AUTHOR> http://nautil.us/issue/66/clockwork/whats-wrong-with-bananas <comment><USER2> Bananas can be a good example to get people thinking more carefully about agriculture and spin.

I remember a conversation with a coworker several years ago in which I was trying to convey the difficulty of sensibly defining "organic" farming. His first suggestion: "food that hasn't had chemicals put in it". When I asked him to explain what "chemical" means, he thought for a while then moved onto what was quite a clever second attempt: "food as it would grow anyway, without human intervention". I pointed out that without humans, bananas as he knew and loved them (I think he ate plenty) would become extinct quite quickly.

<comment><USER3> I found an apple tree on an island in the middle of a lake once, while out kayaking. It had apparently been there for quite some time, completely untended to by human hands. I was excited to try a "natural" apple, for whatever reason I had the idea that it would be tastier than store bought apples. I regretted biting into it pretty much immediately. It was my first lesson on the importance of artificial selection in the palatability of our produce.

I have found out, since then, that apples grown for their edibility are grown from grafts, not seeds. Most likely, someone at some point stopped on that island and had lunch, and left apple seeds on the island, which eventually grew into a wild apple tree. Wild apples aren't edible, and the apples we know and love have been carefully bred to be the way they are.

<comment><USER4> You have to stop the human intervention at the right moment though. In my country there are maybe 10 apple varieties that are grown commercially and they are surely tastier than their wild ancestors.

However, taste is just one of many criteria when deciding which apples to grow. For example there are 50 years old apple trees in my neighbour's garden that are oh-my-god out of this world tasty. They are also small, do not produce regular quantities each year and prone to diseases. So they are not viable for commercial use but still the best apple you have ever tasted if you manage to find one.

So perhaps organic could also mean focusing on other criteria than growing fruit that is most viable to grow in huge quantities, that is more resistant to various diseases and other chemicals that kill insects/fungi, that look beautiful and have a long shelf life and taste good enough.

<comment><USER5> I think we should stop using shallow adjectives to signal quality.

"organic" is just a marketing label.

Instead of trying to sort everything into two bins and decide how to gatekeep "organic" how about we do science and education and labeling to teach people the details of how their food is bred and produced and how quality and effects vary.

<comment><USER6> Organic is not a marketing label - here[1] are the extra regulations which any food labelled as organic in US must be certified to satisfy. These regulations have been developed and studied for decades, here is one recent review [2]

[1][https://www.ecfr.gov/cgi-bin/text- idx?c=ecfr&SID=9874504b6f1...](https://www.ecfr.gov/cgi-bin/text- idx?c=ecfr&SID=9874504b6f1025eb0e6b67cadf9d3b40&rgn=div6&view=text&node=7:220.127.116.11.32.7)

[2][https://phys.org/news/2016-02-agriculture-key-world- sustaina...](https://phys.org/news/2016-02-agriculture-key-world- sustainably.html)

</comment></comment></comment></comment></comment><comment><USER7> > _A single cluster of nearly identical genotypes, the Cavendish subgroup, > nearly monopolizes the world's banana groves and banana trade._

I've read this over and over again in so many articles... but is it really true?

In Brazil at least, every supermarket has several types of bananas [1], only one of which is Cavendish. (Similar to how a US supermarket will have several types of apples.)

So seeing as the fifth-largest country has plenty of banana variety... I'm curious if anyone can chime in on other places outside of North America.

[1] [https://www.google.com/search?q=tipos+de+bananas&safe=off&rl...](https://www.google.com/search?q=tipos+de+bananas&safe=off&rlz=1C5CHFA_enUS717US717&source=lnms&tbm=isch&sa=X&ved=0ahUKEwiBve_b- rXeAhWkhOAKHVIoDTMQ_AUIEygB&biw=1152&bih=638&dpr=2.5#imgrc=UD5y_sNiMOPQQM):

<comment><USER8> Same when I visit the Far East, lots of varieties, and available _actually_ ripe to eat (in the UK they are now all so under-ripe in stores that by the time they are ripened they've also started to rot. 20 years ago you could get bananas that were actually ripening, now you probably can't eat one without some "ugh, tastes under-ripe").

Only ever one variety of banana in the UK, with size and organic or not your only choices. I can't ever remember more than one banana variety, though they sure seem like a different single variety than I remember from my youth. Maybe that's just the awful ripeness issue.

Most of the English apple varieties, with the more complex flavours, have gone too. Lots of "varieties" vast, shiny, tasteless balls of sugar from assorted overseas sources. They _look_ more consistent, so easy for supermarkets to love. I hate supermarkets the more I've grown to love food.

</comment></comment><comment> quixoticelixer- "Because most important crops reproduce only by sexual seed, they cannot be clonally propagated. " This is entirely wrong, many important crops (infact all) can be clonally propogated and many are.

<comment><USER9> Most fruiting trees are cloned by grafting with rootstock. As the article says, sexual reproduction produces variance, and for many fruits we barely have them tamed. Sexually produced apples tend to be crab apples. Planting your Haas avocado seed will probably give you edible fruit, but nothing like a Haas.

<comment> quixoticelixer- Grafting and cuttings are a form of sexual reproduction.

<comment><USER9> Cuttings and grafting are both clonal reproduction. They are by definition asexual, because there is no recombinant chromosomes. Grafting to rootstock creates a genetic chimera. It does not mix chromosomes at all.

</comment></comment></comment></comment><comment><USER10> There was a good read on this in the most recent issue of Wired UK as well: [https://www.wired.co.uk/article/cavendish-banana- extinction-...](https://www.wired.co.uk/article/cavendish-banana-extinction- gene-editing)

<comment><USER11> Discussed here: [https://news.ycombinator.com/item?id=18192671](https://news.ycombinator.com/item?id=18192671)

Among many: [https://news.ycombinator.com/item?id=18194173](https://news.ycombinator.com/item?id=18194173). The banana is dying and the suit is back!

</comment></comment><comment><USER12> Not sure I'm really following the problem this article is trying to warn about.

It seems to be stating that there was a very popular banana variety called "gros michel", a disease came along that affects gros michel bananas and farmers started replacing gros michel bananas with "cavendish" bananas.

Now there is a disease that kills cavendish bananas, so presumably farmers will start planting a different type of banana to replace cavendish, right? what's the big deal?

<comment><USER13> I think the article strayed a bit far into metaphor, but the core story is about the red queen hypothesis.

The red queen hypothesis is that organisms adapt and change in response to an ever-changing background environment, just to maintain the status-quo. The changes ripple out, causing all neighboring organisms to adopt changes as well, to try and maintain their relative position in the environment. The name "red queen" comes from Lewis Carroll's _Looking Glass_ , "Alice finds herself running faster and faster but saying in the same place. ... 'Now, here, you see, it takes all the running you can do, to keep in the same place.'"

How this relates to bananas is that reproduction is one of the ways organisms adopt changes to themselves (new DNA). The gros micheal bananas and cavendish bananas do not reproduce, they are all clones. As a result, all of the bananas are a monoculture which allows pathogens to spread quickly and destroy them. New bananas are likely to have the same problem, unless they reproduce and are not clones.

What I find more interesting is that similar problems occur in computing systems, where many datacenters or computing environments (hospitals, large enterprise offices) are running all the same or nearly same operating systems. The fast spread of worms and viruses are usually because the same exploit works everywhere, due to the monoculture.

</comment></comment><comment><USER14> The NYT had a great piece a few years back of a similar bent but w.r.t. oranges: [https://www.nytimes.com/2013/07/28/science/a-race-to-save- th...](https://www.nytimes.com/2013/07/28/science/a-race-to-save-the-orange- by-altering-its-dna.html). Definitely influenced how I think about this type of issue and is worth a read as well.

</comment><comment><USER15> Can somebody post the TLDR version of this? I started reading with genuine interest but the author takes too long to get to the point. I am not even sure what the point is.

<comment><USER5> Gros Michel was the main banana variety that accounted for some very large proportion of commercial production several decades ago. Disease wiped out most of them and made it uneconomical to produce so everybody switched to Cavendish variety, and there's a disease for that one now too.

Except people write this exact article about these two banana varieties about 10 times a year and it's just sensationalism.

TL;DR your grandchildren might eat a different variety of banana you don't recognize. Move along</comment></comment>


Ask HN: One-click unsubscribe, wth - <AUTHOR>

No one uses one-click unsubscribe. I get 100s of emails from Pinterest, Microsoft Health Vault, Twitter... and none of the have a one-click unsubscribe. This is getting to a very ridiculous level of annoyance.<p>Is there a way to force people to respect people's inboxes and provide a one-click unsubscribe -- that is, without requiring the user to log into his or her account, and then go to "account settings", and go through 3-4 clicks? <comment><USER2> Gmail will sometimes try to unsubscribe you if you flag a message as spam.

<comment><AUTHOR> yeah, certainly not for all the 100s of services out there -- I am not even sure what they do, I think they just ping the URL of any "unsubscribe" link</comment></comment>


GopenPGP, an open source encryption library for native applications - <AUTHOR> https://protonmail.com/blog/openpgp-golang/ <comment><USER2> I'm not sure I understand why Protonmail forked the Go crypto library here. Did they fork the entire thing and make substantial changes/updates throughout, or did they just make changes to the PGP implementation available in Go/crypto?

Go/crypto already implements elliptic curve cryptography[1], so I'm curious which specific elliptic curve primitives (or algorithms) they added to their fork.

________

1\. [https://golang.org/pkg/crypto/](https://golang.org/pkg/crypto/)

<comment><USER3> Go wanted to deprecate OpenPGP support. But, it looks as if they have walked that back a lot:

[https://github.com/golang/go/issues/30141](https://github.com/golang/go/issues/30141)

"We will be deprecating the packages listed above, except openpgp/, otr/ and xts/.

I'll update the proposal and send a CL shortly."

</comment></comment><comment><USER4> I wonder if/when a C or C++ bindings to this library will be made. It would be nice to have some alternative to GpgME.

<comment><USER5> There is also sequoia, with an explicit goal of being easy to link to C. If you can bear the license.

Source: [https://sequoia-pgp.org/](https://sequoia-pgp.org/)

<comment><USER6> For those wondering, the license for Sequoia is GPLv3.

<comment><USER7> So not an option for iOS iPhone email clients?

<comment><USER8> Why can't you put GPL v3 software (or Apache or whatever GPL-compatible license you prefer) into the app store?

<comment><USER9> Not a lawyer, but I assume because the GPL v3 requires that other people be able to modify the program and redistribute their modified versions. Since Apple are the sole gatekeepers of anyone's ability to distribute iOS apps to users, complying with the license is problematic.

<comment><USER10> Here's the FSF's take on it: [https://www.fsf.org/blogs/licensing/more-about- the-app-store...](https://www.fsf.org/blogs/licensing/more-about-the-app- store-gpl-enforcement)

Long story short, the GPL requires you to grant a license to run the application for any purpose. You can also not add additional constraints to this. The App Store's terms and conditions say that you may only offer the software to be used under the usage terms that Apple gives. These two things are in conflict. Apple generally does not approve apps with a GPL license and most people think it's because of this reason (as far as I know they haven't ever made a comment about it). A few apps have apparently made it through, it seems this has been an error on Apple's part.

</comment></comment></comment></comment></comment></comment></comment><comment><USER11> iOS/macOS developers have an alternative with [https://github.com/krzyzanowskim/ObjectivePGP](https://github.com/krzyzanowskim/ObjectivePGP) that is tailored to the Apple platforms.</comment>


Ecma forms TC52 for Dart Standardization - <AUTHOR> http://blog.chromium.org/2013/12/ecma-forms-tc52-for-dart-standardization.html

<comment><USER2> Looking forward to the day when we're not afraid to abandon Javascript and look towards a more competitive development ecosystem in browsers.

<comment><USER3> doubt that will happen anytime soon, javascript will just become more like c/c++ in the next 5-10 years

<comment><USER4> When developing low-level or systems software, there are many programming languages to choose from, but C and C++ continue to be often-chosen.

When developing software to run natively in all browsers, there's one choice: JavaScript.

So the comparison isn't fair. C/C++ had to prove themselves among many competitors. JavaScript "won" by default, not because it's somehow the best choice.

I'm glad to see other options like Dart and PNaCl coming along. It's about time.

</comment></comment></comment><comment><USER5> Great to see Dart moving towards standardization. I've used it for a few projects now and have been really impressed with how quickly it's matured and how much fun it is to develop in.

</comment><comment><USER6> This makes it sound like they want another VM alongside existing JS VMs specifically for Dart. Isn't that making the same mistake again of not specifying a general purpose VM?

<comment><USER7> There is really no such thing as a perfect general purpose VM that can run everything. This is touched upon in the Dart FAQ

[https://www.dartlang.org/support/faq.html#q-why-didnt- google...](https://www.dartlang.org/support/faq.html#q-why-didnt-google-build- a-bytecode-vm-targetable-by-multiple-languages-including-dart)

and many others, for example me

[http://mozakai.blogspot.com/2013/05/the-elusive-universal- we...](http://mozakai.blogspot.com/2013/05/the-elusive-universal-web- bytecode.html)

</comment></comment><comment><USER8> I like Dart after trying it. The tools are great and the libraries are starting to come into their own. I much prefer doing WebGL development in Dart than Javascript.

However the adoption of a new VM, I think, will be challenging. It will be telling if Mozilla will develop one if this actually goes through standardization. My instinct tells me they won't and that Dart will continue on as another "transpilation," language.

</comment><comment><USER9> > … the home of standards such as JavaScript, Eiffel, and C# …

Eiffel, scarcely used; C#, used only for some Windows development.

(I know I am misrepresenting each of these languages slightly, C# in particular as I'm ignoring Mono.)

<comment><USER10> Not just mono, but Xamarin and Unity are huge, if interrelated uses of C#.</comment></comment>


Show HN: BUdgetDuo – Easily determine your share of household expenses - <AUTHOR> https://budgetduo.com <comment><AUTHOR> BudgetDuo was inspired by a fairly simple spreadsheet my wife and I use to help divvy up household expenses.

It's extremely easy to get started, just enter your recurring monthly bills, then choose how you'd like to split them - either 50/50, ad-hoc, or proportional to your income. The income based split is really where BudgetDuo shines compared to similar tools. Using you and your partner's income the calculator will provide a breakdown of the overall percentage you owe, as well as a monthly and per paycheck amount.

There are many different ways to handle shared expenses in a relationship, and BudgetDuo let's you easily compare a few of those options. Ultimately, folks should do what works best for them, but my hope is that BudgetDuo will help add some insight as couples are developing their plan.</comment>


Show HN: Smart American Roadtrips - <AUTHOR> https://curiosio.com?iso=us <comment><USER2> I searched for trips local to me (Utah), and while it gave me a quick autocomplete, the actual search for trips was glacial.

And the trips themselves were questionable. The itineraries seem unfocused - like it was linking up a list of notable places within a few hundreds miles, but drove right past places that are more interesting, and gave odd time frames - only half a day to explore some very large, crowded, national parks, but 3 entire days to spend in a fairly unremarkable city?

Obviously, I didn't check every trip available, but I didn't see enough accurate insights into my area to trust that any other trips would be worth checking out.

<comment><AUTHOR> Useful info about the large parks. We are going to add activities in the parks, the duration in the parks will increase. Not all places are present in the knowledge graph yet, thus drove past. Thank you for your feedback, know what to work on next!

</comment></comment><comment><USER3> Probably by accident, but it hijacks the back button. I find that annoying.

<comment><AUTHOR> OMG I've just reproduced what you reported. In Firefox. Obviously it is a bug. We tested only fresh Chrome and Safari browsers... Thank you!

</comment></comment><comment><USER4> Interesting. I would say the copy needs some work; I had a hard time understanding the problem being solved. From the about page:

> We created technology capable to answer trickiest questions, like what is > the most curious travel itinerary for two travelers landing in Venice, > departing from Milan, having 9 days and expecting to spend within 2,600 > dollars?

What meaning of "curious" is being used here? Normally only a person or animal can be curious, or you could use it to mean "mysterious" but you wouldn't normally describe an itinerary as mysterious.

<comment><AUTHOR> We were so focused on the speed and relevance of search that we abandoned the copy... You are the second person who told that normally only a person or animal can be curious. When I was told it first time I checked Merriam-Webster and confirmed that curious is "exciting attention as strange, novel, or unexpected" [https://www.merriam- webster.com/dictionary/curious](https://www.merriam- webster.com/dictionary/curious) Will polish and clarify, thank you for the feedback!</comment></comment>


Safest Seat on a Plane - <AUTHOR> http://www.popularmechanics.com/technology/aviation/safety/4219452

<comment><USER2> _That's the conclusion of an exclusive Popular Mechanics study that examined every commercial jet crash in the United States, since 1971, that had both fatalities and survivors. The raw data from these 20 accidents..._

Ha, 20 accidents since 1971... It'd probably be more helpful to the general public for them to study which side of an ostrich it's safer to stand on.

<comment><USER3> What is remarkable to me is that Southwest Airlines has yet to have a passenger die in an aviation accident. And they carry about 100 million passengers per year these days.

<comment><USER4> Also remarkable is that Qantas has had, I believe, no fatal accidents since 1951.

</comment></comment></comment><comment><USER5> It's amazing to me how much hysteria there is in the media when a plane crashes, even a smaller aircraft, while little attention is paid to the number of injuries and fatalities caused by automobile accidents.

According to the National Highway Traffic Safety Administration, over 37,000 people died in traffic crashes in the United States in 2008, which makes car accidents the 10th leading cause of death. To put this in perspective, this number of deaths is equivalent to 265 fully loaded Boeing 737 crashing, or one every business day of every year.

And how about non-fatal injuries from auto accidents? Over 2.5 million drivers and passengers (the same number of people living in the four states of Wyoming, Vermont, North Dakota, and Alaska) were injured in 2008. This makes traffic crashes the third leading cause of non-fatal injuries.

Of the injuries caused by traffic crashes, over 10% (or over 250,000) are incapacitating, in which the injury prevents the injured person from walking, driving, or normally continuing the activities the person was capable of performing before the injury occurred.

In sum, in a 10 year window about 1% of the total US population is either killed or seriously injured in a car accident.

</comment><comment><USER6> One thing which this article forgot was that also the position of the emergency exit relative to your sitting place is important. If you don't sit in the max. range of 7 rows [1] to it, you are likely to not survive a crash due to people blocking each other, smoke and fire.

[1] [http://www.news.com.au/travel/travel-advice/how-to- survive-a...](http://www.news.com.au/travel/travel-advice/how-to-survive-a- plane-crash/story-e6frfqfr-1111115935414)

<comment><USER7> The two things I like best about emergency exit rows is that there is usually a couple extra inches of legroom and that there are no children around.

</comment></comment><comment><USER8> They say that the seats in the back are more safe, presumably because fewer people die in them, but are not the seats in the back usually only filled if the plane is full? The plane would have to be somewhat full in order for someone in the back of the plane to die in a crash. I am not saying that their data is completely wrong, as I am not sure what their methodology was, but it is at least suspect.

<comment><USER9> My anecdotal evidence from looking at what seats are occupied when picking my seat does not back up that idea at all. Passenger density tends to drop slightly towards the back of the plane, but it's rare to have a plane that's more than half full that has any completely empty rows.

Even if the back of the airplane tended to be empty, the article makes it quite clear that they looked at deaths per occupied seat, not deaths per seat overall.

</comment></comment><comment><USER10> It'd be more useful to know which is the safest seat in a car, SUV, bus.

<comment><USER11> Yup.

I recall reading a study that said rear passenger seat (rear right hand side in a RHS driving country) is the safest by a fair margin in a four or five passenger vehicle. Not really surprising if you think about it.

I doubt there will be a high standard deviation for bus seats assuming you mean 40-50 passenger long-distance buses. Somewhat away from the front, close to an emergency exit, and away from any structural weaknesses (if known) is probably your best bet.

</comment></comment><comment><USER12> "that had both fatalities and survivors..."

Is this saying that they only considered crashes where at least 1 person survived and at least 1 died? If so, doesn't this change the analysis from 'given you will be in a plane crash, how can you reduce your likelihood of dying?' to 'given that you will be in a plane crash and SOMEONE will survive, how can you increase the likelihood that it is you?'

I suspect the quotes at the beginning of the article are principally about the former question (and are probably correct in that context).

<comment><USER13> Yes. Clearly the chance of survival in a crash is not 50%, regardless where you sit. In the vast majority of crashes either all die, or none do (in which case it's probably not a "crash" but a forced landing). It would be interesting to know what the overall chance of surviving an airliner crash is.

<comment><USER11> It would heavily depend on the definition of "crash" used.

</comment></comment></comment><comment><USER14> It's unclear to me what use this information has to anyone, not mention the potential ethical concerns of trying to promote this kind of research under the guise of airline safety awareness.

Sure, I can believe that seats toward the rear of an aircraft tend to fair better in crashes. It's actually rather obvious, hence the decision to place the data recorders in the tail.

However, what use is this research to the vast majority of travelers who have limited choice in where they may sit on a flight? Doesn't this sort of research suggest telling such travelers, "well it sucks to be you, doesn't it?" And what about the airlines' need to fill as many seats as possible meet their bottom lines?

</comment><comment><USER15> I remember reading once that on military planes, everyone sits backwards because that is safer. I wonder if it is true?

<comment><USER16> Your lungs less likely to collapse on impact. I've heard somewhere, not sure 100%.

</comment></comment><comment><USER17> _There's been only one fatal jet crash in the U.S. in the last five-plus years_

That can't be right.

<comment><USER18> It is. There have been 3 fatal commercial aviation accidents in that time frame but the other 2 involved propeller craft:

<http://www.ntsb.gov/aviation/Paxfatal.htm>

Also note carefully: _in the US_. You might be thinking about other recent fatal jet crashes that happened outside the US.

<comment><USER19> Interesting link. Ignoring 9/11, the last 10 years the safety has clearly gone up very much compared the previous 20 years. 23 crashes in the 80's, 15 in the 90's, and just 7 in the last decade (again, ignoring 9/11).

On the flipside, every crash except 1 in the last 10 years has been 100% fatal, whereas the previous 20 years there are quite a number of crashes with a lot of survivors.

I dunno, I just find that interesting. :P

</comment></comment></comment><comment><USER20> Quantas never crashed.

<comment><USER3> Quantas has never had a _fatal_ crash, in one of their _jets_. Which is different than what you...

Or was that just a Rain Man reference?

<comment><USER18> There is no "u" in Qantas. Also:

<http://en.wikipedia.org/wiki/List_of_Qantas_fatal_accidents>

<comment><USER21> And no fatal crashes since the last fatal crash in 1951, before they had any jet airliners.</comment></comment></comment></comment>


Would you take a coding assessment before even talking to a human being? - <AUTHOR> https://dev.to/garzo/coding-assessment-before-interview-too-soon-3epj <comment><USER2> I have absolutely turned down coding assessments without even the guarantee of a phone call.</comment>


Pass the tortoise shell: reading and writing across time and space - <AUTHOR> https://www.the-tls.co.uk/articles/public/pass-the-tortoise-shell/ <comment><USER2> Oh man, James Raven was my History tutor at university. How weird to meet him again here on HN!</comment>


No Humans, Just Robots – Amazing Videos of the Modern Factory - <AUTHOR> http://singularityhub.com/2010/02/11/no-humans-just-robots-amazing-videos-of-the-modern-factory/

<comment><USER2> Near the beginning of the 20th century, a lot of theorists predicted that our increase in per worker productivity would leave a population with huge amounts of leisure time. The average person would only have to work a couple of hours a day for all of humanity's basic needs to be met. With robots, we may eventually reach the point where people don't need to work at all in order to meet humanity's basic needs. Unless something drastic happens to our economic system, however, I seriously doubt it will translate into a shorter work day.

<comment><USER3> Someone still needs to build and maintain the robots. How we avoid turning this into some sort of aristocracy is the interesting question.

<comment><USER4> I think it is more probable for the mechanics to get pushed lower rather than elevated to some higher status.

</comment></comment></comment><comment><USER5> Will there be jobs in 20 years for anyone with an IQ under 90?

Are we going to end up with vast structural unemployment?

<comment><USER6> This will create wealth. Wealth will mean that art, health and relaxation will be in high demand.

100 years ago over 90% of people were farmers. Now 2% of people work on farms, does that mean we have 88% unemployment?

.

No we don't. Instead we have Yoga instructors who charge $80 an hour for a private lesson. We have artists who charge $500 for a hand made bowl.

.

The more we have robots automate the more wealth we will have, the more wealth we have the the greater the number musicians, artists and yoga instructors we will have.

.

Creating wealth doesn't destroy jobs long term, "A rising tide raises all boats", however short term many people will be displaced and have no jobs during the transition. (Short term could be many years).

.

In the long run this is better. Do you think UPS sorting employees would rather be doing this [http://www.core77.com/blog/technology/a_different_sort_of_as...](http://www.core77.com/blog/technology/a_different_sort_of_assembly_line_inside_a_ups_shipping_facility_15929.asp) or creating art work?

<comment><USER7> But being a yoga instructor / bowl maker is just as (if not more) time consuming as being a farmer used to be. And those are insecure jobs which people have to struggle to make ends meet with.

<comment><USER8> Historically, farmers went hungry when harvests were poor.

How many yoga instructors, janitors, or receptionists starve in bad markets?

</comment></comment></comment></comment><comment><USER9> Good collection of videos, though many corporations are finding that robots are costly to purchase, install, and maintain and are very inflexible in their tasks. People on the other hand are free to purchase, take no installation, and maintain themselves (granted you still have to pay them). Most importantly they are very flexible. You could give them a new task every day and they would adapt. If you've ever toured a Toyota factory, you would be surprised by the large amount of work not being done by machines.

</comment><comment><USER10> I find that site hard to read whenever it gets linked here.. it just looks like a badly done TechCrunch knock off. Distracting :-(

</comment><comment><USER11> Wait just a second, didn't we have an article about the exact same thing, but about how it was _worrisome_, not _amazing_, just two weeks ago? (<http://news.ycombinator.com/item?id=1086492>)

What is this, Pravda?

</comment><comment><USER12> A day ago I made a comment here about how I wasn't sure that a large population of available working-age people is the huge advantage everyone seems to think it is anymore, and this is exactly the kind of thing I had in mind. Look at that flexpicker video. Bet you didn't think a robot could stack pancakes. Well baby, a robot can sure stack pancakes all right. How long before it can flip burgers? I bet they already can and it's just a matter of cost.

Wouldn't want to only have repetitive manual labor skills in about 10-15 years' time when these things drop in price to below $10k or so. Robots are going to cut through the service and manufacturing sectors like a 2 megawatt laser through room temperature butter.

<comment><USER13> It's not really a matter of cost of the robot, the limiting factor of more widespread adoption is actually just that there aren't enough people building automation systems (the robot and machine vision combination), a worker shortage.

<comment><USER14> Building , as in assembling ? or building as designing those system ?

<comment><USER13> integrating off the shelf robots, computers, machine vision software to create a specific 'automation machine' for a specific production line</comment></comment></comment></comment>


Study on Test-Driven Dev.: 15-35% longer, but 40-90% less bugs [pdf] - <AUTHOR> http://research.microsoft.com/en-us/projects/esm/nagappan_tdd.pdf

<comment><USER2> If you program in a bottom up fashion, you can test your code seamlessly while you write it. In Lisp for example, you simply check that the function you just wrote returns what you expect. If not, you fix it right then and there. While I can't present any evidence to back up my claim, I imagine programming in this way reaps the same benefits of test-driven development without adding as much time.

<comment><USER3> The problem is not to write something that works, bottom-up, as you type it. Any half-decent software engineer can do that. The problem is maintenance : when you start to modify existing code, a function many other functions rely on (I assume functional style, without side-effects here). And sooner or later you'll have to alter your code, whatever the reason: spec change, performance issue, bug, new problem to tackle, you name it.

The simplest thing I can think of is if you have to alter a function to handle correctly some corner cases. You didn't think about them when you wrote the function in the first place, so basically your function was buggy all along... Now you have to test all the functions that rely on this function again. What if they relied on said bug and you didn't realize it ? With tests, you just run the tests (and hope they were well designed...). With your technique, you do the same, by hand, function after function...

Or to remain in a very bottom up style, what if you realize that one of your underlying brick was poorly designed ? It just doesn't address well the new problem at hand and need little enhancements... Anything that relied on this brick have to be, well, updated to use the new functions, and of course checked again. Again unit-tests come in handy...

Note that I'm just making the case for unit-testing, not test-driven developement itself...

</comment></comment><comment><USER4> FEWER bugs. Jesus people. If you can count em, use 'fewer'.

Also, it's comparing time to count. Does 90% fewer bugs make up for the lost time? Are serious, systematic defects caught by tests? I suppose I should read the paper.

<comment><USER5> I did (sort of) read the whole thing and it did not indicate how much time the non-TDD teams spent fixing their higher defect count. Did they take more time than the equivalent 15%-35% increase in dev for the TDD teams? Perhaps it was a wash? I don't know.

How accurate is to compare the various project teams? It always seems to me that no two projects and no two dev teams are ever the same. How do you account for the differences? The researcher somewhat addresses this but I am not fully convinced:

>>"...The projects developed using TDD might have been easier to develop, as there can never be an accurate equal comparison between two projects except in a controlled case study. In our case studies, we alleviated this concern to some degree by the fact that these systems were compared within the same organization (with the same higher-level manager and subculture).Therefore, the complexity of the TDD and non-TDD projects are comparable..."

Perhaps more data needs to be collected.

</comment></comment><comment><USER6> I admit I didn't thoroughly read the whole paper, but this stuff strikes me as something to help the bulk of average programmers (or with average experience) get through a project. I didn't see anything in the paper addressing ability and experience at all, so it comes across as process being more important than the people involved.

Look for a MSFT TDD MVP certification now.

</comment><comment><USER7> If a low bug-count is your goal, use a statically-typed, functional- programming language like Haskell or Ocaml. You'll probably also win on development speed, although writing fast-running code in these languages can be painful/ugly. These languages kick ass for producing reliable programs quickly.

<comment><USER8> _writing fast-running code in these languages can be painful/ugly_

Seriously? The OCaml implementation is about as fast as C and -- if you were to look at the language shootout -- fast OCaml code is digestable for pretty much anyone with even minimal exposure to the language. The OCaml execution model is simple. Now, with Haskell you might have a point.

<comment><USER9> I wouldn't use Ocaml (and, to a similar extent Haskell or Erlang), for anything beyond research projects or small prototypes. These languages are research-driven, not community driven, and they have plenty of features that nobody wants except the maintainers. In the case of Ocaml, just take a look at crap like camlp5 and polymorphic variants.

Language shootouts are poor benchmarks for the quality of a languge. Better metrics are community activity and the quality of the libraries.

<comment><USER3> You are completely wrong about Erlang, which is absolutely not a research language, but when combined with OTP a very pragmatic tool designed by Erlang to answer their specific needs. Now it doesn't mean that it's the right tool for any problem, but when used for the right jobs, it is awesome : elegant, mature, rock stable and definitely production ready. And the community is growing...

For more generic purpose as far as functional languages are concerned F# might have a go, if Microsoft continues to push its efforts to integrate it in Visual Studio and make it mainstream. With .net/mono under the hood the libraries are there. Not completely production ready yet in my opinion, but hopefully soon I'll be able to use it instead of C# when I have something (fast) to do on top of mono...</comment></comment></comment></comment>