Microsoft patent trolls Salesforce - <AUTHOR> http://37signals.com/svn/posts/2341-microsoft-patent-trolls-salesforce <comment><USER2> Given the state of the patent system, I think that these are not horrible patents. Sure, I don't like them either. But remember that the patent system is supposed to protect things that are obvious after you've seen them, but which aren't that easy to think up. We've all seen the technologies, so of course they are obvious to us now. But were they obvious at the time?

Take, for instance, patent #8, "Method and system for identifying and obtaining computer software from a remote computer" (see [http://patft.uspto.gov/netacgi/nph- Parser?Sect1=PTO1&Sec...](http://patft.uspto.gov/netacgi/nph- Parser?Sect1=PTO1&Sect2=HITOFF&d=PALL&p=1&u=%2Fnetahtml%2FPTO%2Fsrchnum.htm&r=1&f=G&l=50&s1=5,845,077.PN.&OS=PN/5,845,077&RS=PN/5,845,077) for details). It covers a system for having lots of machines keep themselves up to date with a central repository. Obvious, right? We can all think of a ton of examples. For instance Debian's apt fits virtually all of the claims except the ones involving payment. (For some reason Debian doesn't worry about that much. :-) )

But look when it was filed. November 27, 1995. That's well before apt. In fact it was the same year that Debian first released dselect. I don't know if dselect was advanced enough back then match the patent. If so then that is prior art and I'd suggest that Salesforce's lawyers look carefully at it.

If it is not, then finding prior art may be a challenge. People today are used to subscription-based software distribution. But pick up _Founders at Work_ and read the interview with Arthur van Hoff about Marimba, which was founded in 1996 (after the patent was filed) and was in the business of subscription- based software with automatic updates. He talks a bit about how new the idea was, and how it was difficult to get people to try it.

That tells me that, at the time and with the way people were used to working, this technology really was new and innovative. Now I really, really hope that someone can find prior art and smack Microsoft down. I don't want this kind of patent to threaten software I use.

But as far as patents go, this seems relatively good. (The fact that it is still bad is an argument against software patents in general, and not this particular patent.)

<comment><USER3> This is an example of an obvious idea - only it won't be obvious until people start using networked computers for some time and realize the need. Unfortunately we have a low bar for what is not obvious, e.g. when no one else has yet had the need for it. Being the first to do something should not give anyone the right to prevent others from doing it.

Patents are a net cost to society, and software and business patents are teeing up to explode those costs. A large tax on the real economy this way comes, with the spoils largely to lawyers and financiers who produce nothing of real value.

<comment><USER2> I absolutely agree. The fact that I know of 2 independent reinventions in the period between filing and issuance underscores your point.

But the recollections of the Marimba founder, and my memories of how people around me reacted to apt, both confirm my point that the technology seemed very innovative to most people at the time.

</comment></comment></comment><comment><USER4> From the suit:

 _As a result of the Defendant's unlawful infringement of the Microsoft patents-in-suit, Microsoft has suffered and will continue to suffer damage._

The patent system's primary goal seems to have become protecting patent holders, which really ought to be only a secondary function. The original purpose of patents was to encourage innovations that would benefit society. It was a simple trade: if you invent something that will help society, society will give you protection against competition for some period of time. Somehow the system has morphed from a tool for encouraging innovation into a panicked land grab. And in the case of software patents like the ones in this suit, society receives very little benefit for the protection it provides.

<comment><USER5> "The patent system's primary goal seems to have become protecting patent holders, which really ought to be only a secondary function. The original purpose of patents was to encourage innovations that would benefit society. It was a simple trade: if you invent something that will help society, society will give you protection against competition for some period of time."

Exactly. How do you have one without the other? Should Microsoft (or any other patent holder) go to court and argue on the basis that society is not being well served?

The patent owner needs to show harm, which is what patent law was supposed to protect them from. The stated reason for such laws is "to promote the progress of science and useful arts", but if you are a patent or copyright holder your argument needs to be that you are not being provided the protection you had expected under the law.

"And in the case of software patents like the ones in this suit, society receives very little benefit for the protection it provides."

That may be. Some patents are for essentially trivial ideas, or ideas that have been in the ether for quite some time. Other patents are indeed clever, and more to the point are the results of an investment of time and money. Without some assurance of recouping that investment some number of valuable ideas would not see the light of day. (Or so I believe. I don't have any citations to back this up.)

Any article that simply refers to a patent abstract as proof of the triviality of a patent is itself trolling. Patent abstracts offer a very broad description; it is the detailed body of the patent that distinguishes it.

<comment><USER4> - _Exactly. How do you have one without the other?_

If obvious patents are granted, society will be giving it's protection at a net loss. For society there is a cost incurred in enforcing protection as well as an opportunity cost in forbidding competition (assuming you believe competition creates better products). This trade-off could be worth it, but only if if the invention would not have emerged, or would have taken a long time to emerge, without protection.

- _Should Microsoft (or any other patent holder) go to court and argue on the basis that society is not being well served?_

Absolutely not. They should never have to argue for anyone but themselves in court. Microsoft is just playing the patent game by the rules that exist today. My problem is with a system that is neglecting its purpose. The problem seems to be rooted in patent rules that are massively out of touch with the current state (and pace) of technology.

- _Any article that simply refers to a patent abstract as proof of the triviality of a patent is itself trolling. Patent abstracts offer a very broad description; it is the detailed body of the patent that distinguishes it._

You're absolutely right in saying that it's not fair to criticize a patent simply by its abstract. The problem is that often the detailed description in the body of the patent is far too broad. Many patents have less to do with a specific invention and more to do with gaining blanket coverage of a large swath of IP. This is the game that large companies and their patent lawyers are playing. I would argue that a system where "he who has the most lawyers wins" is very counterproductive to invention and innovation.

</comment></comment></comment><comment><USER6> It's not a patent troll when a competitor goes after you with patents they acquired doing R&D for real products. The patents sound like they shouldn't have been issued, but that's a different problem.

A troll has no real business other than acquiring patents and suing companies (or arranging for them to be sued).

<comment><USER7> I think this is semantics. You don't have to be a _patent troll_ -an entity like you describe with no other real business, in order to go _patent trolling_.

MS is trying to be a troll under the bridge for Salesforce, and if you look at the patents, they are so broad and non-innovative that using them in an offensive manner constitutes trolling.

<comment><USER6> I don't think you can evaluate this by looking at the patents. If your sole business is patent suits, you're going to sue every time. If your business has paying customers, there's a chance you're going to spend more of your attention on them than your patent portfolio.

</comment></comment></comment><comment><USER8> I understand the need for people on HN to play devil's advocate and try to defend Microsoft's actions, but I don't think there's much of a case here in their favor, even if one did really dig into the patents. Microsoft should be spending its time and resources making their own software better, not suing other successful companies. To me this whole debacle stinks of desperation. Microsoft can't figure out how to find success in the web applications space and out of frustration are simply choosing to sue the most successful SaaS companies. I knew things were getting bad at MS, but I didn't realize they were this bad.

<comment><USER9> I'm sorry but that's a pretty weak argument. So does that mean that any company with patents should just suck it up if someone infringes instead of defending their IP? Regardless of what you think of the validity of patent, it was granted and MS has a right to defend it.

If you put in time doing research and then spend time and money patenting that research because you believe it to be innovative (subjective), would you just suck it up and "try to make your own software better" if someone copied your work?

<comment><USER10> Among all the companies out there that are arguably violating these patents, they choose to go after a high profile, successful, primarily online company who has been in business using these technologies for years. This is highly selective and to me indicates that the GP's point probably has some validity. Can anyone really argue that Salesforce of all companies has somehow infringed on Microsoft's IP? If they had been enforcing these patents earlier on and enforcing them uniformly, it would have seemed much less of a patent-troll style maneuver.

<comment><USER11> If they had instead gone after lots of small companies, you would be complaining that they were abusing the little guy who couldn't defend himself.

This is not patent trolling because Microsoft actually uses these patents in their software.

</comment></comment></comment></comment><comment><USER12> It's pointless looking at patent titles (or abstracts), You have to examine the _claims_.

Even there, you can't just look at claim 1, because the standard approach is to begin by claiming overbroadly, and then narrowing the claims, so that usually claim 1 wouldn't be expected to hold up, but one of the later ones. Which later ones, you don't know because of the uncertainties of litigation: it's hard to predict what a court will find. As in negotiating, why not ask for as much as possible?

It's a little bit like the dubious criminal defence _I didn't kill him, and if I did it was an accident._

btw typo: in "for infringing the following patent", _patent_ should be "patents". That confused me.

Gee I sound like a patent advocate/apologist. It's just that I love inventions.

 _EDIT_ I'm not arguing for these particular patents, but against how they're being assessed.

<comment><USER13> If claim 1 is tossed then subsequent claims based on claim 1, which will probably be many, are automatically tossed. Therefore claim 1 better be your best claim.

For example, in "Method and system for mapping between logical data and physical data," if Claim 1 is tossed, then claims 2-9 automatically go with it.

<comment><USER14> No, you've got that backwards. Suppose you have:

Claim 1. A method for surviving, comprising: Cooking a meal.

Claim 2. A method as in claim 1, wherein the meal is breakfast.

Claim 3. A method as in claim 2, wherein the breakfast comprises sausages and bacon.

Claim 4. A method as in claim 3, wherein the sausages and bacon are fried.

and so on. A court might decide that there's some prior art for having meals, and toss out claim 1. But that prior art might only be for lunch and dinner, in which case claim 2 might survive. On the other hand, maybe someone else has had breakfast before (publicly enough to count as prior art). Then claim 2 goes too, but maybe claim 3 survives. Oh, too bad, it turns out that the court thinks having sausage and bacon for breakfast is obvious to one ordinarily skilled in the art. Bye-bye to claim 3, but maybe frying them is an extraordinary new idea that no one else would have thought of.

Of course, similar things can happen during patent prosecution (i.e., filing; the terminology is silly), only now it's the patent office that keeps objecting to your claims and requiring you to fall back to weaker dependent claims.

It's absolutely standard for your first claim to be very broad, and subsequent ones to be narrower. It's absolutely not standard for claim 1 to be "best" in the sense of "least likely to be invalidated".

<comment><USER15> Yes, but if you're not doing Claim 1 ... i.e. you're not cooking a meal ... even if your meal is breakfast, and the breakfast comprises sausages and bacon and those are fried ... you're not infringing.

<comment><USER13> Exactly.

Salesforce can defend two ways: 1) challenge the validity of the patent, or 2) prove that they don't infringe the patent.

Option 1 is harder. Patents are presumed valid. Defendant (Salesforce) has the burden of proof that the patent should be overturned. Salesforce will have to do that for each alleged infringing claim.

Option 2 is easier. Plaintiff (Microsoft) has the burden of proving infringement. Salesforce just needs to show that they aren't infringing claim 1 and then they also aren't infringing claims 2-9.

</comment></comment></comment></comment></comment><comment><USER16> Some of these patents were assigned in the mid-90's. Where has Microsoft been all this time?

Patents should have an "enforce it or lose it" clause. Some of these may have been novel at the time of filing. However, after some time of being unenforced, they become standard practice in an industry. Then after 10 years of standard use some company comes out of nowhere and tries to enforce it? Too late.

<comment><USER11> Trademarks have the "enforce it or lose it" clause. This causes companies to be forced to go after all non-commercial use of the trademark, causing hassles for the people they are going after, and money for the company. That doesn't necessarily mean that your idea is a bad one, jut that you have to watch out for unintended consequences.

<comment><USER17> It would have the awesome intended consequence of exposing how patents actually hinder innovation, not improve it.

</comment></comment></comment><comment><USER18> I say this with some reluctance because I've written quite a lot of Mono/C# code, but to me this absolutely proves beyond any reasonable doubt that the software patent threat from Microsoft is real and not just some abstract academic debate. I think I'll be limiting or scaling down my use of .NET on linux in future as a consequence.

<comment><USER19> > to me this absolutely proves beyond any reasonable doubt that the software > patent threat from Microsoft is real and not just some abstract academic > debate.

Honest question follows after the quote.

[http://www.techflash.com/seattle/2010/05/microsoft_sues_sale...](http://www.techflash.com/seattle/2010/05/microsoft_sues_salesforcecom_alleging_patent_infringement.html)

> "Although Microsoft has been a frequent target of patent-infringement claims > itself, it's only the fourth time in its history that the Redmond company > has filed a patent-infringement suit against a competitor, and the company > has said in the past that it views such actions as a last resort when it has > been unable to negotiate a licensing deal."

Do you use technology provided by (just throwing out names) Google, Apple, HTC, Oracle, etc.? Have they proven to be less litigious?

If you do use technology provided by other companies, are you also planning on scaling back their use?

<comment><USER18> I'm thinking in terms of programming languages rather than products from particular companies. Recently I've gone back to using C/C++ and might also start using Python. As far as I know there are no software patent issues with those languages.

</comment></comment></comment><comment><USER20> I don't care if I get down voted to oblivion for this, but I can't take the assholery anymore. When Apple et. al. file such suits its strategic, when they arbitrarily try to kill stuff its also strategic and jobs being jesus.Microsoft so much as moves a muscle and Apple trolls that have infested todays 'new' media and companies such as the above swing into action. Fucking 37 signals, what a sad day indeed.

<comment><USER21> I agree with your observation. Also I think some of the posters here of HN are trying to hard to play devil's advocate based on how much they like that particular devil.

</comment></comment><comment><USER22> I've some questions about "A method for providing a web page having an embedded menu to a web browser and for displaying the web page to a user of the web browser are provided."

The original text: _A request for a web page is received from a web browser In response to the request, a web page and an applet associated with the web page are packaged for transmission to the web browser. The web page and the applet are then transmitted to and downloaded by the web browser. When the web page is displayed and the applet is executed by the web browser, the applet creates and manages an embedded menu in the displayed web page under control of the applet . This embedded menu provides a user of the web browser with a plurality of links through one action in the displayed web page_

An applet? Does Salesforce use an applet to draw its menus? (that's so '90s). Is the patent valid if Salesforces does its menus only with HTML?

ADDED: May Flash be considered as an applet?

<comment><USER23> Based on the patent claims, they are talking about absolutely nothing more than a Java applet with a menu in it.

This is insane.

</comment></comment><comment><USER24> This is unusual behavior for MS. I wonder if this is the opening move in a buyout/takeover gambit.

<comment><USER25> expanding on "unusual" its only the 4th time they have done this.

<comment><USER24> I don't have the specifics but I believe the other times were narrower claims against specific technologies. This is a broad brush stroke against an entire industry segment.

</comment></comment></comment><comment><USER26> Is it really hacker news every time some idiot writes yet another inaccurate article about a patent lawsuit?

</comment><comment><USER27> I think this is a pretty bullshit move by MS but I have a hard time feeling back for Salesforce. Their software _really_ sucks.

<comment><USER28> Can you be more specific?

[Disclaimer: I work for salesforce.]

<comment><USER27> Your API is _terrible_. That wouldn't be such an issue if the documentation was any good. Getting an answer from tech support even though we were paying customers never happened.

<comment><USER28> Again, can you be more specific? Which API: Visualforce, Apex, web services, chatter, ... ? What about it needs improvement?</comment></comment></comment></comment>


Is Prolog worth learning in the 21st century? - <AUTHOR> https://dev.to/vladimirwrites/probably-the-language-of-god-44b6 <comment><USER2> I almost never use Prolog anymore, but I think it is a language really worth learning. Lisp languages, Prolog, constraint satisfaction languages, Smalltalk, etc. may not be mainstream but they will expand your ways of thinking about solutions to problems.

<comment><USER3> Exactly. In fact, I'd go so far as to say the _less_ people use a language, the _less_ relevant to modern programming paradigms - the _more_ it is worth learning.

The way to expand your sense of what's possible is by learning completely different ways to do things and think about things, and - at least in computing - the best way to find _truly_ alien visions of what computers might become is by looking for the ones that _had_ to evolve completely independently of modern programming paradigms because those modern paradigms hadn't been invented.</comment></comment>


How a Google Headhunter's E-Mail Unraveled a Massive Net Security Hole (2012) - <AUTHOR> http://www.wired.com/2012/10/dkim-vulnerability-widespread/all/

<comment><AUTHOR> How can someone monetize on a finding like this? This vulnerability easily had a value of millions to Google, Amazon, Yahoo etc, but how could Zachary Harris have made money of his discovery?

<comment><USER2> > This vulnerability easily had a value of millions to Google...

Did it? Any competent computer programmer or competent mathematician with a passing knowledge of crypto would understand how weak that 512 bit static key was. This was clearly an oversight, rather than a subtle bug.

<comment><AUTHOR> An oversight is still a vulnerability. I agree it didn't take some over the top technical knowledge to discover it, and a 512 bit static key was known to be vulnerable, he exploited it and showed it to be vulnerable. A widely known bug that is in your code is still a bug.

<comment><USER2> You... clearly failed to understand my comment. I was addressing your claim that "This vulnerability easily had a value of millions to Google...".

I argued that it did not. This was the only thing that I argued.

I don't understand why you're telling me that a security oversight can lead to an exploitable vulnerability. I never claimed otherwise.</comment></comment></comment></comment>


AFLFast vs. Erlang - <AUTHOR> http://mindscope.pw/afl-fast-vs-erlang/ <comment><USER2> > Damn. That's terrible. We are never going to get anywhere with 20 executions > a second

...

> Lucky for us there is a trick we can use to greatly improve that speed.

I just dusted off my fuzzpy project [1] this week and was bringing it up to date with recent CPython, LLVM/libFuzzer.

> Notice the speed: 373.4/sec, up from 20! And we've already found 100 unique > crashes!

Most of my test cases run at < 10/sec. I feel like I just got lapped while I thought I was on a casual solo stroll. O.o

I intentionally left Py_InitializeEx() in the critical section for fear of contaminating global state, though. But I see that I should've at least experimented with it out.

[1] [https://bitbucket.org/ebadf/fuzzpy](https://bitbucket.org/ebadf/fuzzpy)

EDIT: sorry, I went a little off the deep end -- this post is in response to the article listed in the first paragraph "After finding 1800+ crashes in Python 3.5 using a method shown here ... "

<comment><USER3> I didn't get the point of the 1800+ crashes. Python isn't designed to be safe from corrupted byte code in the .pyc files.

</comment></comment><comment><USER2>
        PyObject *arg = PyTuple_GET_ITEM(varnames, j);

> ... can be null if varnames is an empty tuple (which it can be if the pyc > file is malformed).

This might be a case of "program works as designed" if the dev team thinks that's an acceptable reaction to malformed pyc input. But, hey, it's worth reporting because I would probably be inclined to fix it if I were the BDFL.

</comment><comment><USER4> I hope we can get this to run much faster than a few executions per second. Having a way to speed this up could greatly help eliminate errors in the Erlang VM.

The OTP team is usually pretty good at working with tooling for correctness around the VM, so I would think this isn't too hard to get going.

<comment><USER5> Wondering if using erlang:halt() rather than init:stop(0) would be better since halt(0) shuts down the VM instantly while init:stop(0) takes time to take down the entire supervision trees in the VM in proper order.

<comment><USER4> When I quickchecked maps, my approach was to use the distribution feature to run the maps code itself on another VM and trying for force it into a crashing state. This avoids having to restart the VM all the time.

AFL fuzz is severely limited if you need to boot up the VM, then run a program, then stop the VM again. It is rarely that part you want to test.

Perhaps we can strike middle-ground. Rip out the ETERM encoder/decoder to binary data and fuzz that. It should be a far simpler target.

</comment></comment></comment><comment><USER6> Hmm, not bad at all Python 3.5 1800+ crashes, Erlang VM 9.

And I suspect Erlang's VM is more complex. Has a register VM machine. A M:N scheduler (M cpus, N processes). Fairly intricate memory allocation, hot code loading and such.

<comment><USER7> I think the author implies that 9 (unique) crashes are with limited number of executions due to slow speed. Besides, all 1800+ crashes might not be unique.

<comment><AUTHOR> Here's my stats on python so far:

(normal afl) [http://mindscope.pw/static/afl-python- slow.png](http://mindscope.pw/static/afl-python-slow.png)

(aflfast) [http://mindscope.pw/static/afl-python- fast.png](http://mindscope.pw/static/afl-python-fast.png)

sorry for screenshots ;)

</comment></comment></comment><comment><USER8> I hope he's able to work with the Erlang VM devs and get this running at a faster pace. I'd be curious how many more this is able to find when it's able to run at a faster pace.

</comment><comment><USER9> You can also get QuickCheck for Erlang, although that stays at the Erlang fuzzing level, not AFL style branch fuzzing. Still, finds bugs!

<comment><USER4> Fuzzing is different from QuickChecking:

QuickCheck uses hand-crafted known properties and generators. Fuzzing don't. QuickCheck can be used to find negative tests, but this is the sole target of a fuzzer. There are some similarities in the approach, but it is not the same kind of tool.

</comment></comment><comment><USER10> Did you file bugs for python?

<comment><USER11> The marshal format used by pyc files is explicitly documented[1] to be unsafe, just a fast way to cache the compiled byte code to a .pyc file next to the .py source file. The Python VM is not a sandbox so there has been no need for an untrusted bytecode format.

[1] see big red warning box at [https://docs.python.org/3/library/marshal.html](https://docs.python.org/3/library/marshal.html)

<comment><AUTHOR> That's true, but looking at crashes, the 'exploitable' marks some of them as exploitable, there are also heap errors. Might be an easy entry point to do... something ;)

We did similar excercise a year ago with zpaq, and Matt and community was able to fix it so well that now you can fuzz it pretty much forever :)</comment></comment></comment>


UK Government to Ask Queen to Suspend Parliament - <AUTHOR> https://www.bbc.co.uk/news/uk-politics-49493632 <comment><USER2> The interesting and scary part is that (if you are a fan of him / Brexit at any cost) Johnson is not defying parliament but simply "preparing his bold programme for government" to be delivered in a Queen's Speach a couple of weeks before Brexit date.

The dual narrative of politics continues, and both sides of the equation literally experience a different universe it would seem.

<comment><USER2> Care to explain the downvote? I was only explaining that a huge number of people feel it's democracy that's being upheld by this action.

I personally disagree entirely. I just am amazed that a fragmented simultaneously different truth can exist so openly with people believing the side they agree with.

Of course I see the risk to UK democracy and the strategic (and in my view dangerously manipulative) use of the system and of course with the timing it seems impossible to argue seriously that it's just to set out a programme of gov, but that is the line Johnson is selling.

<comment><USER3> Your post simply makes no sense to me. You're using assertions without reference ("Johnson is not defying parliament", "to be delivered in a Queen's Speach") and vapid terminology ("dual narrative of politics", "different universe") without explaining any link between them.

So I downvoted because I can't make heads or tails of your words.

<comment><USER2> So Johnson in his speech (which is available in the video in the BBC article) is suggesting it is normal for a new government to take a break to set out a new programme of government (which is delivered in a Queen's speech, also mentioned in his speech).

Some people who see his viewpoint are happy to overlook the timing and don't necessarily see it as undemocratic.

There is another element. Direct democracy believers feel that parliament is trying to crush democracy (by potentially overturning a referendum result).

Representative democracy believers cannot accept that their representatives would be denied the ability to represent their constituents at such a critical time of major constitutional change.

So the dual narrative was a reference to how some people see this step as delivering the power and will of the people.

Others see it as a dangerous subversion of democracy.

Happy to clarify more if I'm being unclear but you can read the comment section on the BBC article and you'll see incredibly polar comments. The dual narrative is precisely that. People read the same article, see the same speech and have a completely different understanding of it.

Perhaps that's unremarkable to you, but in the UK it's been profound and profoundly different from the mainstream politics I've seen my entire life.

[Edit - clarification of crush democracy]

</comment></comment></comment></comment><comment><USER4> If this had happened in a second or third world country, we would have called it a coup. A government suspending parliament is suspending the checks and balances. It is usurping all powers. As all other usurpers, Johnson cites the will of the people.

Yes, for now it is just temporary. In 49, Caesar also started with a temporary dictatorship: 11 days. Then in 48 one year. Then in 47 10 years. Then in 44 for life. then he was killed but the Roman republic and its sort of democracy died with him.

Johnson is blocking elected members of parliament from asserting their influence on the most important decisions since WWII.

The mother of all parliaments...

<comment><USER5> Caesar didn't take power in a coup. He asked senate for power and senate granted it.

<comment><USER6> He brought his army to town, then "asked" the senate for power. That looks a lot like a coup.

</comment></comment></comment><comment><USER7> This is where a written constitution is super important. The UK (or England & Wales to be specific) doesn't have one, and relies on 'constitutional conventions' (which needless to say shift in interpretation by whoever is in government).

The lack of a written constitution has allowed certain things like the UK equivalent of the 5th Amendment (invoking the right of silence when questioned in a criminal proceeding does not invoke an appearance of guilt that can be told to the jury) disappear under Tony Blair.

<comment><USER8> No. If you took the current UK constitution and wrote it all down on one piece of paper, we would be in exactly the same situation.

The important thing about a constitution is that it is well-designed, not that it is written down.

<comment><USER7> The issue is that if it was written down it would be well defined. There would be legal cases for clarification rather than loosely defined precedents. It's too fluffy and malleable, which can work well in good times, and very badly under oppressive regimes.

</comment></comment></comment><comment><USER9> On one hand, I think that Boris is flexing he power to prove to [the rest of] Europe that he is willing to take a hard Brexit if the EU is unwilling to negotiate (you can't negotiate unless you're willing to walk away).

On the other hand... This is a complete disaster. If parliament can't function, what hope does the rest of the country have? I think the exchange rate is the best metric on how well Brexit is going. The sad irony is that Brexit was meant to give the UK sovereignty (rule Britania and all that...), but crashing the economy has made everything cheaper for foreign investors. The UK is no longer united metaphorically and literally.

Brexit has been a death march from the get-go.

</comment><comment><USER10> There's conflicting reports on this, because this is roughly the time that in "normal" operation that it would be suspended for conference season and then re-opened via the Queen's Speech.

The problem is these are not normal times, and the Parliamentary majority is trying to regain control of the legislative timetable but without bringing down the government.

<comment><USER11> The article says the last times this was done, parliament was suspended for 5 and 13 days respectively while Mr Johnson is asking for 23 days this time. That's telling.

<comment><USER8> Also, he's asking for prorogation, which is done by royal prerogative, rather than the usual recess, which is done by a vote in parliament.

<comment><USER12> Yes, The Parliament Act left the Queen with one last vestige of power, prorogation.

Johnson PM is apparently going to tell HM the Queen that she must give up the ages old constitutional arrangement of ceding power to parliament and instead she must cede power to him.

That's treason both against democracy and against the crown, as I see it.

So, will she intervene and hand the power promised to parliament (to prevent civil war and the downfall of the monarchy) over to Johnson such that he is no longer Her Majesty's Prime Minister but instead becomes the UK's _de facto_ dictator; claiming the power of sovereignty for himself. Or, will she maintain the status quo established when Cromwell became, ahem, disestablished, and refuse to remove the sovereignty of parliament (and so, ironically, maintain her own sovereignty) ...

</comment></comment></comment></comment><comment><USER13> So the plan is for Parliament to be suspended between 10th September and 14th October.

But they were already due a recess between 13th September and 8th October for their yearly jolly at the seaside[1].

Having just returned from their summer recess between 20th July and 5th September.

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

<comment><USER14> There is a very important difference. The normal conference season is just a break, a holiday. Any debates, work or legislation continues where they left off after they get back. If something important happens, they can and have come back early or might vote not to break. The runes were showing that a long break would have been trimmed by parliament.

Proroguing parliament _ends_ the parliamentary session. Any work in progress, debates on bills and what not are cancelled as void. A new session of parliament starts from day one on everything, with a Queen's speech, State Opening and what not. That's why toward the end of the parliamentary year there is often a rush to get matters concluded and bills enacted before prorogation. Coming back early is much more difficult.

This move effectively turns the whole parliament into a one issue organisation and disables debate.

[https://www.parliament.uk/about/how/occasions/prorogation/](https://www.parliament.uk/about/how/occasions/prorogation/)

</comment></comment><comment><USER15> So now the only way out of a clearly anti-democratic move to silence a semi- democratic parliament, put in place by a Prime-Minister that was not directly elected, is by having a non-elected head of state putting a stop to it.

Good heavens.

<comment><USER12> Not really. The Queen intervenes if she does prorogue as that is exercise of her reserved powers.

AIUI since Cromwell's reign ended the monarchy have agreed to give _parliament_ sovereignty.

If the monarch does not intervene, then parliament can stop Johnson from becoming _de facto_ dictator.

If the monarch ends the established constitution, steps in and uses her executive power to order prorogation of parliament, then Johnson can have his way.

The Tories appear to have got in early, and lied, pretending that Johnson PM's right is to take away parliamentary sovereignty whilst the opposite is the case.

<comment><USER14> Well parliamentary sovereignty while the monarch wills it, symbolised by the parliamentary mace, without which proceedings can't continue. Proroguing to get his way is seizing power, whichever way they try to paint it.

Victoria was the last monarch to actually _do_ something unilateral with the sovereign powers, at some point in the late 1800's. She appointed Gladstone's successor without consulting Gladstone. IIRC that was only because Gladstone hadn't bothered with a successor as he was supposed to and it had dragged on for ages. Charles II, the restored monarch, dissolved parliament in the hopes of a better one a time or three. He had ongoing issues with parliament, almost all over the question of Catholic succession.

Lizzie probably has good grounds to intervene given how crassly and illegally Johnson appears to be acting, yet the tabloid outrage if she did could easily cost her the throne. It's a very long time since I read much on the UK constitution, so I couldn't guess what devils are hiding in the details.

</comment></comment></comment><comment><USER16> After all, what good is parliament, if it doesn't vote your way, mr PM?

<comment><USER17> Boris Johnson doesn't appear to care if Parliament votes at all! I'm still amazed how a majority can support BoJo as PM given his desire for Brexit and a no-deal, but at the same time oppose Brexit, no-deal, and Remain. If Theresa May had a spine she would have revoked Article 50 before stepping down.

<comment><USER18> > how a majority can support BoJo as PM

There's no evidence of that, and statistically it's almost impossible (the conservative party, when they win, tends to get elected on 30% of the public's vote or less)

</comment></comment></comment><comment><USER19> Closer to crashing out. This will obviously weaken the EU which will be viewed as a positive outcome by other major players: Russia, China and (bizzarley) US.

<comment><USER20> Not sure what's bizarre about it - the US sees the EU as a competitor economically and stands to gain even more power over the UK as a result of Brexit.

<comment><USER21> This is probably true for Russia and China as well, but especially for the US with its internal political tensions I wonder if we aren't doing reality a disservice by treating it as one entity with a made-up mind.

<comment><USER19> The internal argument is itrelevant as the state persues strategic policies and goals regardless.

<comment><USER21> Yes, but what those policies and goals are change depending on who is in charge

<comment><USER19> Absolutely - and nothing else matters.

</comment></comment></comment></comment></comment></comment><comment><USER21> Do we know the queen's stance on Brexit? It would be hilariously ironic if her response turns out be something along the lines of _" well I'm supposed to stay out of politics, but you kind of forced my hand in telling the world in how horribly stupid I think this entire thing is"_

<comment><USER11> She's been (rightly) tight-lipped and has steadfastly refused to comment, but the BBC reported a while back that some "unnamed sources" close to her believe she is silently partial to Leave.

This older NY Times story talks about her unionist view, the controversy in _The Sun_ 's claim that she is pro-Brexit, and surprisingly also the prorogue: [https://www.nytimes.com/2019/01/25/world/europe/queen- elizab...](https://www.nytimes.com/2019/01/25/world/europe/queen-elizabeth- brexit-britain.html)

<comment><USER22> That's irrelevant to this case, what matters here is whether she considers her duty to simply enact what she is told by the PM, or to interpret whether the action is constitutional.

</comment></comment></comment><comment><USER6> I had always assumed that the sane position was Remain. But I was talking to a friend from the UK, and he said that the status quo was not an option. The EU was going to move (already starting to move, in fact) toward tighter integration, so the only options were "Leave" or "even more EU". Faced with that choice, there were reasonable people who wanted out.

</comment><comment><USER23> Good. The people voted to leave the EU, so get on with the job and make it happen.

<comment><USER24> The people didn't vote to crash out without a deal. In fact, all the Vote Leave literature explicitly said we would negotiate a trade deal before we left.

<comment><USER25> The irony is that under WTO rules, we'd trade with less say on the rules that under pretty much any other arrangement.

Not that the whole Brexit thing was ever very rational (in the homus economicus sense) but this is sliding into a farce and tragedy all in one.

If I were an optimist, I'd say that this is posturing to force the EU's hand but I suspect that unless a face saving measure is found, this is it.

</comment></comment></comment><comment><USER26> Quoting HN submission guidelines:

Off-Topic: Most stories about politics, or crime, or sports, unless they're evidence of some interesting new phenomenon. [...] If they'd cover it on TV news, it's probably off-topic.

<comment><USER27> Seems like the submission guidelines might need updating in light of what the HN community demonstrates to be the range of topics it de facto believes are worthy of posting & discussion, no?

<comment><USER28> It seems to fit under "interesting new phenomenon" but annoyingly enough people hit "flag" when they could have hit "hide" so it disappears.

Now we get to watch the same story get repeatedly resubmitted (bbc.com, guardian.co.uk, times.co.uk etc), commented-on and upvoted ... then flagged off by the minority. But hey, at least we get to see the latest DerpCorp S-1 filing!

</comment></comment></comment><comment><USER29> Breaking noose.

</comment><comment><USER30> Trump is drooling that he wished he had this power.

<comment><USER31> Can't martial law be declared due to an emergency [1] and then pretty much all bets are off? Or actually go to war (fights are being picked all over at the moment), causing such an emergency?

[1] [https://www.theatlantic.com/magazine/archive/2019/01/preside...](https://www.theatlantic.com/magazine/archive/2019/01/presidential- emergency-powers/576418/)

</comment></comment><comment><USER32> Putting the substance of the politics aside, I wonder why all this feels coordinated.

I mean Trump, Brexit, Putin, Erdoğan, The guy in Brazil, in Hungary - all seem to act like a part of a bigger organization.

I don't really believe that there's a grand conspiracy but I am fascinated how unrelated organizations act in resonance.

It's not even limited to big politics, suddenly right wing bigotry is sexy. "Lone wolfs" attack women, minorities or pretty much any outliers, movements emerge as ways to combat vegans, girls that don't behave in the desired ways etc.

<comment><USER22> It's social media. It allows anyone to bypass expert judgement of democratic norms and broadcast to create a tribal group around themselves.</comment></comment>


What is the value of a formal business education? [Pics] - <AUTHOR> http://alexkrupp.typepad.com/sensemaking/2007/08/what-is-the-val.html

<comment><USER3> This article says absolutely nothing about the value of a formal business education.

It says something vaguely negative about the value of business _textbooks_ , the crapiness of which is pretty well established and acknowledged by professors and students alike. See here for a classic example: <http://www.textbookleague.org/103feyn.htm> This refers to highschool textbooks but applies equally well, if not more so, to college business texts.

It's all about the professors. Business is one of those academic fields, like Paul Graham notes, where the best practitioners are not the educators. While this is very true as a generalization, there are exceptions -- mainly: non- practicing educators who happen to be excellent at imparting practical knowledge, and ex-practioners who were once tops in their field. You will find these professors concentrated in top schools, and you will not find them teaching from these textbooks. So there is actually quite a lot of value in a business education _from a top school_. The well-worn cliche about the value of networking at these institutions applies as well -- and it's not just networking in the abstract, it's learning how to network with people who can get things done, and getting things done for people who expect big things out of you. Just like I'm sure it is in computer science, the value of the education is what you extract from it.

</comment><comment><USER4> Wow, what a useless blog post that was.

A MUCH better, less flame-worthy title would have been: "What is the value of reading a 101 level business textbook from 2005?"

A formal, GOOD, business education is invaluable, _in combination with some domain-specific skill_

(I do think the pseudo-advertising in the book is appalling)

It's not very useful to know about how "business works" without knowing and experiencing a real living value chain [whether it be retail, financial services, web software, or film making, etc].

(disclosure, I have a B.S. in finance from the University of Virginia...and an MFA in percussion performance from CalArts...all we did at UVA was read HBR and other intellectually stimulating material and then get grilled on it in full-class discussions...not to mention courses in C++ [viva the 1990's], statistics, and Black-Scholes ;-)

<comment><USER5> I've got a couple coworkers trying to steer me towards business school (MBA, not undergrad), and they said that the real value is the network of classmates that you develop. The courses basically consist of reading lots of case- studies - if you read a lot, you probably do that or the equivalent anyway. But you can't fake the experience of getting a lot of smart, successful people together.

I found that that was also the primary benefit of going to a top private college. My courses at Amherst weren't all that much better than those at a good state school - yeah, they were challenging, and the professors were good, but if you look hard you can get that at many other universities. But almost every single one of my classmates is doing something interesting, whether it be physics grad school or traveling abroad or running a hedge fund or eliminating child soldiers in Africa or writing Broadway musicals or starting a company with me.

<comment><USER4> I agree that "networking" delivers value, but the academia is very worthwhile, too.

Marc Andreesson's post analyzing the credit crunch that forced hedge fund Citadel to dissolve is a great example of the value of "business education."

Command of that realm of knowledge is completely germane to a web software startup, etc.

<comment><USER5> You can get most of that info elsewhere, though. I have no formal education in finance, but I understood everything in the Sowood letter, even without Marc's commentary.

(Really, sometimes I think that money managers would do well to read Benjamin Graham's _The Intelligent Investor_ and nothing else. Many of the complicated mathematical stuff - which my employer makes a business of selling - <USER2> _hurts_ your performance in the long run.)

<comment><USER6> Often, it looks like the last proponent of Graham left in the finance world is Warren Buffett.

</comment></comment></comment></comment></comment><comment><USER7> I couldn't see any of the pictures - Yahoo wanted me to sign in.

<comment><AUTHOR> Sorry about that, I didn't realize. Here is a 2.4mb zip file of all eight pictures:

<http://www.alexkrupp.com/picture_library/Business_text.zip>

They are slightly out of order, but it should be pretty apparent what you're looking at.

</comment></comment><comment> daniel-cussen And that's how regular people become Pointy-Haired Bosses.

</comment><comment><USER8> I think the problem here is textbooks, not the subject: in a Java course I took, students were required to discuss the moral implications of writing software for judging people's credit (apparently, the problem was that creditworthiness correlates with race).

But perhaps business courses are so content-free because so much of business is, too.</comment>


How to Power Nap - <AUTHOR> http://www.gnorb.net/566/how-to-power-nap

<comment><USER2> _If you want to expedite this process, move your pupils around a bit in order to simulate REM sleep._

Does this actually do anything?

</comment><comment><USER3> when I was in college, I would take 20 minute power naps in my car between classes. this really worked to improve my mood the rest of the day.</comment>


Douglas Rushkoff CNN Interview: Egypt & Internet 'Choke-points' - <AUTHOR> http://www.cnn.com/2011/OPINION/02/05/rushkoff.egypt.internet/

<comment><AUTHOR> Fidonet did depend on some dialup connnections, though. These connections were controlled by the phone company.</comment>


Quaternion Julia Set Shape Optimization - <AUTHOR> http://www.mat.ucsb.edu/~kim/JULIA/

<comment><USER2> "We present the first 3D algorithm capable of answering the question: what would a Mandelbrot-like set in the shape of a bunny look like?"

I have questions, Science has answers. Science!

</comment><comment><USER3> Does this have any practical uses?

<comment><USER4> Instead of storing the coordinates for the object mesh, store the "address" in 4d space of the Julia representation?</comment></comment>


Package manager for the C programming language. - <AUTHOR> https://github.com/clibs/clib Basically the lazy-man's copy/paste promoting smaller C utilities, also serving as a nice way to discover these sort of libraries <comment><USER2> I'm pleased to see c99 and mingw considerations.

<comment><AUTHOR> These guys are very considerate

</comment></comment><comment><AUTHOR> Yes!</comment>


What are some Hacker News Hacks? - <AUTHOR> http://www.quora.com/Hacker-News/What-are-some-Hacker-News-hacks

<comment><AUTHOR> Was really not expecting these answers to be so thorough.</comment>


Chrome 19 update breaks secure WebSockets - <AUTHOR> http://code.google.com/p/chromium/issues/detail?id=128339

<comment><USER2> (I'm the Chromium dev who triaged the bug this morning) This title is misleading. There's a bug when the SSL handshake for a WebSocket encounters an error, such as an invalid server certificate. This obviously sucks for developers, but for production sites which should not have SSL handshake errors, it should not be an issue.

</comment><comment><USER3> This is one of the reasons corporates still use IE. Its easy to control and QA for stuff like this.

Heads roll when 1500 people can't work.

<comment><USER4> This is not a legitimate excuse for using IE instead of Chrome.

You can disable automatic updates via setting just a single registry key on Windows (and do similarly simple operations on Linux and Mac.)

[http://www.chromefans.org/chrome-tutorial/how-to-disable- goo...](http://www.chromefans.org/chrome-tutorial/how-to-disable-google- chrome-automatic-updates.htm)

<comment><USER3> It is when you consider WSUS which allows staged deployments of patches. Oh and group policy which allows browsers to be controlled heavily.

I rather like Chrome but as with other browsers, in controlled corporate environments there is no competition with IE. Any technical superiority is 100% irrelevant.

<comment><USER4> I'm not sure if they are as good as they are for IE, but there are more tools available for deploying Chrome in the enterprise ([http://serverfault.com/questions/364150/running-google- chrom...](http://serverfault.com/questions/364150/running-google-chrome- updates-from-a-centralized-location)).

<comment><USER3> Interesting - genuinely didn't know about that. Thanks for the pointer! :)

</comment></comment></comment></comment></comment><comment><AUTHOR> It's not predictably happening with _all_ websocket server implementations. I tried with node.js using a combination of https and ws modules. That worked. We crashed Chrome using em-websockt and netty, though.

<comment><USER5> (i'm on the chrome dev relations team, btw)

We have a few people looking at the ticket now.. looks like its within our websocket implementation and not at the SSL layer. Still reducing though..

We could use some crash IDs if you have any. To get those: Assuming crash reporting is enabled, head to about:crashes and grab any crash ID associated with this event. And drop them in a comment on the ticket. Thank you much.

</comment></comment><comment><USER6> A quick way to test this is to use:

<http://websocketstest.com/>

</comment><comment><USER7> I tested this with an em-websocket (Ruby) server using SSL and after I updated to Chrome 19 (OS X 10.7.3) it no longer works.

</comment><comment><USER6> I just tested this under OSX and had no problem, so this is probably Windows- only.

<comment><USER8> Not quite. From the original bug report:

" _Today I installed Debian google-chrome-unstable and it also exhibits this issue._ "

One commenter (<http://code.google.com/p/chromium/issues/detail?id=128339#c3>) also claimed to have the issue on OS X specifically.

</comment></comment><comment><USER9> This should get fixed before it goes to beta right? Can someone confirm whether or not bugs like this are usually fixed?

<comment><USER10> > This should get fixed before it goes to beta right?

This is a __stable __release. It already passed through beta, dev and canary.

> Can someone confirm whether or not bugs like this are usually fixed?

Typically only security bugs are fixed in stable releases, which would imply this will likely not be fixed.

<comment><USER9> :(

</comment></comment></comment><comment><USER11> …for some users, apparently, but not all. Is that right?</comment>


Ask HN: What are job interview questions that can be used to reject regardless - <AUTHOR> What are some job interview questions that can be used to reject candidates regardless of how they answer? (Double Bind.) <comment><USER2> "Tell us a story about how you took down production."

A reasonable question. But if you really need to reject the candidate (for instance, if you're attempting to resist, or provide cover for resisting, someone brought in e.g. by the bad kind of nepotism), no matter how much they talk about how it led them to build systems to prevent similar disasters, as an interviewer you can selectively choose to focus on the mindset that led them to break the system in the first place.

In general, though, if you're looking for ways to disqualify a candidate based on other than merit, you should examine your own biases against the candidate. Don't be evil.

<comment><USER3> _" Tell us a story about how you took down production."_

We had a real need for batch queries, so I built a declarative batch query mechanism for our in-house ORM. To do this, we needed to make actual objects representing database relations. Unfortunately, the "collections of lambdas" we were using as an ORM had started getting polluted with buisness logic. So I used a parser/rewrite engine to match the un-polluted DB transformation lambdas and to substitute DB column and relation objects implementing the same logic in the un-polluted lambdas.

I checked in a massive change affecting 2500 of the ~5000 lambdas, syntactically matching the logic in all 2500 of those with the parser framework, and then also vetted everything by hand. I was 100% sure the logic was duplicated exactly. This would allow us to introduce the objects, and it would also stop the march of business logic into the DB framework. Everything checked out in QA, so we moved it to production.

Production immediately came to a screeching halt. However, in under an hour, I discovered that a coworker had polluted an even lower level of the ORM framework with business logic. (The code that called the lambdas in the first place.) We replicated that logic in the new framework, and everything worked 100%. I also came out a huge hero in the end, because the batch query mechanism I introduced reduced the average number of queries for opening a portfolio from ~2500 to only 50, and because it was declarative, it could be reused by any programmer very easily.

<comment><USER4> > Production immediately came to a screeching halt. However, in under an hour, > I discovered that a coworker had polluted an even lower level of the ORM > framework with business logic.

"I see. So you failed to communicate effectively with a coworker, which resulted in an hour of downtime. I didn't hear you mention anything about seeing this as a problem, let alone addressing it. Thanks for your time."

<comment><USER3> _So you failed to communicate effectively with a coworker, which resulted in an hour of downtime._

Nope. He was privy to our stopping the flow of business logic into the DB/ORM code. He failed to realize the implications and communicate with _us_.

 _I didn 't hear you mention anything about seeing this as a problem, let alone addressing it._

Pure projection. Of course that's a problem. Thanks for disqualifying yourself up front.

<comment><USER5> I figure you wanted to defend your take regardless, but the quotes indicated to me that the parent was posing as the company that wanted to reject the candidate no matter what the answer was. :)

<comment><USER3> And I was roleplaying as myself, rejecting the company.

<comment><USER6> That was nicely done and I agree - I'd rather be unemployed than work for a company that would think through something like that! Great job. :)

</comment></comment></comment></comment></comment></comment></comment><comment><USER7> A very long time ago, for a job not in the software industry, I had to take one of those multiple-choice exams they use to screen employees. There were probably 100 questions. One of the questions was something like "Have you ever been dishonest?". I probably dishonestly answered that question (with a no) and was thus probably red-flagged by the "Machine" and never proceeded in the interview process.

<comment><USER8> This sentence is a lie.

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

</comment></comment><comment><USER9> None! There's no question that is needed to reject you. You can answer all questions correctly and be rejected. There's no reason to really think too much of this, go in, answer to the best of your knowledge and be a pleasant person. If the interview decides to reject you due to any prejudice of their own, you probably escaped a nightmare, and the companies loss.

</comment><comment><USER10> A long while ago I was in an interview where the interviewer retold a story about a white (yes, skin color was relevant) adventuring motorcyclist in Africa. Anyways, he was driving by himself in southern Africa in Namibia or so. Then outside a village the motorcycle broke down and he got into a horrible accident that broke his leg.

The villagers came and saw that he was wounded. So they started to take pieces of his packing, of his motorcycle and even his expensive wrist watch. He laid there in pain outside the village for several hours as none of the natives helped him. Until another white motorcyclist came and helped him up on his bike and drove him to a hospital. The end.

To this date I have nfc why he told me this story or why he thought it was relevant in a developer interview. Fairly sure it was an elaborate test though with only bad answers possible.

<comment><USER11> Most weird interview anecdote ever

</comment></comment><comment><USER12> How many years of PHP/JavaScript/Python/C++ experience do you have?

We are looking for a lot of experience in the latest version using the latest testing and development practices. We don't want to hire people with bad habits.

</comment><comment><USER13> The double bind :) You've got to love a good double bind.

An interviewer doesn't really have to ask you anything. They can just decide on the basis of what you didn't say instead.

"When asked about his JS experience, he mentioned Y without mentioning X."

A more interesting question would be, can you think of a double bind that allows the interviewer to take either side without looking like a hypocrite over multiple interviews?

</comment><comment><USER14> I found from my own experience both on the hiring side and the candidate side, that there isn't always such a good correlation between getting answers right and being hired or not. Sometimes you get everything right and still don't get the job. On the other hand, sometimes someone might fail miserably and still get the job. It's not like school, where everything is objective.

</comment><comment><USER15> "Have you ever used company computer to search for information unrelated to your job?"

Yes => We cannot hire you

No => Liar! We cannot hire you.

</comment><comment><USER16> Not an interview question itself, but rejecting based on lack of "culture fit" seems to be pretty standard practice. I'm not sure why such a trick question is even needed however, since regardless of how the candidate does the decision to hire is ultimately a black-box that the candidate won't know anything about.

<comment><USER17> I think the OPis asking for something that can be used for internal debate/procedures, not the reason communicated to candidates.

</comment></comment><comment><USER18> This is evil. But, perhaps also inevitable. "Would you mind providing a DNA sample"? You can always find some "liability" within the multitudes of potential markers.

See _Gattaca_ for a vision of this possible future ;)

</comment><comment><USER19> any question would be eligible for that. What if you don't spit out the exact answer your interviewer is excepting? Well, you're out.

</comment><comment><USER20> Regardless of how they answer? Like a trick question? Sounds sinister. Why would you want this I wonder?

</comment><comment><USER21> I do not think that you need justification to reject someone. It is waste of time for you and candidate.

</comment><comment><USER22> You can reject a candidate based on any conversation you may have, regardless of what they say. But why?

</comment><comment><USER23> Any question works for this:

• What's your favorite color?

• What are your weaknesses?

• What are your strengths?

• When's the last time you did something unethical?

</comment><comment><USER24> Tell me about a time you put your own self-interest ahead of your employer's.

<comment><USER25> Right now as I am interviewing instead of working overtime for free.</comment></comment>


Qz's "Chart of the Year" for 2015 announced - <AUTHOR> http://qz.com/577146/quartzs-chart-of-the-year-for-2015/ <comment><AUTHOR> My background is in development economics, and it's amazing how the majority of the developed world thinks a trend is going one way (increasing abject poverty) when the data actually says the exact opposite.

"The world's most important economic story can be told in a single line."

If only the most important trends got the most attention rather than the most sensationalist/fearful. Glad there are outlets/opportunities like this to give it the attention this important trend deserves. And the young economist at Oxford behind this data, Max Roser, is becoming somewhat of a twitter phenom himself.</comment>


Extreme Commuting (2005) - <AUTHOR> http://www.businessweek.com/magazine/content/05_08/b3921127.htm

<comment><USER2> Article Summary:

Extreme commuters are the fastest growing group of work commuters in the country, who rarely see their homes in the daylight. People who spend a month of their lives each year commuting at least an hour and a half to work and back each day are considered extreme commuters. This is compared with the US average of 50 minutes and according to the Census Bureau their numbers have jumped 95% since 1990 to 3.4 million workers. Experts say their numbers will continue to grow.

In 1990 24% of workers left their home counties on their way to the office, and since then 50% of all new workers are doing the same. Many extreme commuters are forced to drive the long distances because the affordable housing isn't near the good paying jobs.

Interestingly, economists say this "commuting paradox" doesn't pay off in terms of life satisfaction. A commuter who travels one hour each way would have to make 40% more in pay to be as satisfied with his life if he were a non-commuter.

<http://hnsummary.com/2010/04/02/extreme-commuting/>

</comment><comment><USER3> I know of ladies in India who wake up at 3:30am, cook and pack lunch boxes for their families, then get onto a 3-4 hour train ride to Mumbai for work. They work until 5:30pm, then head to the vegetable market outside Dadar railway station to buy veggies for dinner and the next day's meal. They get onto the next train at Dadar and spend part of their 3-4 hour ride home cleaning the veggies so that they're ready for cooking by the time they get home.

</comment><comment><USER4> Twice when I was growing up, my dad changed jobs to a new one that was an hour and a half away. He sustained that commute exactly as long as it took us to find a new house closer to work. He hated it. It took a huge toll on him, and I didn't get to see him nearly as much. I promised myself I would never have a job that has a commute like that. Today, mine is about 30 minutes, with very little traffic and some nice scenery (to downtown San Diego). I don't feel like I'm losing a significant part of my life, which is the important part to me.

Later on, he took a pretty big pay cut to get out of his industry altogether (automotive service) to take a job in-town, with a 5-minute commute, doing something he loved (food). Quality of life is important. He still made enough to support our family, and he was around more and much happier. Being able to bike to your dad's work and have lunch with him on the weekend is more important than a bigger house and some spare spending money.

</comment><comment><USER5> I'm doing the exact opposite of this: telecommuting.

I can't imagine myself spending 3 hours a day in the car. I'd die of boredom and frustration (not to mention feel guilty about burning all that fuel just so I can work).

<comment><USER6> As someone who DID commute for 3 hours a day at one point driving, I can't recommend against it enough unless you are utterly desperate for the job and can't move. By the end of the 2.5 year stint I had come to simply hate driving, and still do ~3.5 years later. I avoid going on any drives of more than a 10-15 miles unless there's a damned good reason. Ungh.

</comment></comment><comment><USER7> It baffles me how people are willing to forego a life just so they can own a big house. Tho two-body problem I can understand, but wasting so much of your life so you can own a house you can't enjoy seems so senseless.

<comment><USER3> They aren't foregoing life to own a bigger house. Many of them are foregoing their own lives just so that they can feed, clothe and educate their kids.

</comment></comment><comment><USER8> Since a year ago my commute is 4 hours per day. My last job was 100% telecommuting.

After three months I started telecommuting two days per week and try to work in an extra day here and there.

I love my job and where I work. There's nowhere close to me that offers the same opportunity. I just wish it were closer.

Moving is not a easy option because I have a family to consider. I also don't want to live near my job because I don't care for the town - in fact, there is no town, just corporate parks and plazas.

I live where I do because it's affordable. I don't own a McMansion.

It's not a perfect situation but, you work with what you have. I'm working toward pushing the telecommuting option further.

The irony is that I have to be more productive telecommuting than if I warmed a seat for eight hours :-)

</comment><comment><USER9> I currently commute 4 hours a day (2 hours each way) on the subway and trains. I hate the subway because it's crowded, and on the train I always feel like I'm fighting for a good seat. I wish I didn't have to commute like this, but that's the only choice when your significant other's job is so far away from yours. Between a short commute and a girlfriend, I choose the latter.

Plus, the entire time I can be listening to music or podcasts, and on the train I can be catching up on Twitter or stuff in Instapaper. I'd be spending that time doing it anyway.

But I can tell you this -- I'm the only 22-year-old on that train.

</comment><comment><USER10> This is an article from 2005.

<comment><USER11> It still goes on today:

[http://www.huffingtonpost.com/2010/02/22/michael-hanley- gm-a...](http://www.huffingtonpost.com/2010/02/22/michael-hanley-gm- autowor_n_471304.html)</comment></comment>


Ask HN: What is a monad? - <AUTHOR> I'd like to start digging into functional programming beyond what is available in C# and Javascript, and began by reading a little about Haskell. There are a lot of mentions about something called Monads, which are part of category theory.<p>Can someone provide an explanation that would make sense to an experienced developer in the OOP world? <comment><USER2> It's a design pattern for encapsulation, with similar goals to OO but different methods. Rather than telling you what a monad is, I'll just tell you the goal.

OO is designed to hide the dangerous parts of the world from you. The dangerous parts of the world (or at least _some_ dangerous parts of the world) are encapsulated inside little black boxes with well defined interaction points. If you interact only through those little boxes, you should be safe. For instance, a logger object gives you 1 methods: writeLog (I'll ignore logging levels). The details of actually writing logs are not your business, and you (in principle) don't need to worry about them.

Monads are stricter. A monad puts you into a box and only gives you a few interaction points with the outside world. You can do whatever you want in a monad, but you are never allowed to leave the box. Inside the logger box, you are permitted only pure functions (functions with no side effects) and writeLog.

So basically, in an OO world, code using a logger might call os.unlink("/var/log/myprogram.log"). This would interact in a harmful way with your logging mechanisms. In a monadic world, from _inside_ the logging monad, you are not given access to os.unlink.

Thus, f: a -> Loggable b in the monadic world (where Loggable b is an b living inside the box) is safer than f: (Logger, a) -> b in the OO world.

<comment><USER3> So, a sort of sandbox function?

<comment><USER4> Yes.

But, more like sandbox type.

<comment><USER3> Hmm, I see. Does it also execute code, like a sort of exception handler, or is it just for limiting/allowing access to scope?

<comment><USER5> A monad is a type that has certain associated functions — to wrap values in the monad and do calculations on what's inside. The type itself obviously cannot execute code, but the associated functions obviously do. Monads can be used to implement exceptions.

As an example, lists are monads. The operator for doing calculations with the value in a monad is >>= (pronounced "bind"). To double every item in an array, you could do:

        [1, 2, 3] >>= \n -> [n * 2]

(The syntax "\n -> [n _2]" defines a function that takes one argument, n, and returns a list containing n_ 2.)

There's clearly work going on behind the scenes to pass each value in the list to the associated function as "n", and then combine all the resulting [n * 2] lists into one big list of the same type as the original. But that's all transparent to the programmer. He only sees the interface that the monad offers.

<comment><USER3> Hmm, I see. The problem with my understanding it is that people are describing its properties and I have to build the mental model from them.

Are Python list comprehensions monads?

<comment><USER5> Well, it's the type itself that's a monad. So the question would be, are Python lists monads thanks to list comprehensions? And the answer is: Kind of. The idea of a monad in functional programming is that it's a generic type that can have a lot of different implementations.

The two operations that must be defined for a monad are:

• Return: You pass any value and it returns a monad encapsulating that value

• Bind: You pass a function taking an argument of the type wrapped by the monad and returning another value wrapped in the monad, and it returns a value of the monad

With these two operations, you can accomplish a surprising range of tasks. Python borrowed list comprehensions from Haskell, where they _are_ based on monads — but in Python, they're kind of orphaned from their monadic roots.

<comment><USER3> This makes it much clearer, thanks. Those two operations weren't mentioned anywhere else that I saw, and they are very helpful in explaining what monads are.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER6> What, no one is giving the standard answer of "a monad is a monoid in the category of endofunctors?"

A category is something like a set, but combining the objects with allowed operations. (How very OOP!) The available functions are first-class citizens (called arrows). The objects are the domains and ranges of the arrows, and their internal structures are not exposed. Arrow composition is associative when it is defined. (You can only compose an arrow if the range of one is the domain of the next.)

A functor is just a (natural) function on categories mapping both objects and arrows in a compatible way. Endofunctors map to the same category.

As each object in this category of endofunctors is a function we want to compose, we have to be given a way to do that. This is what that the monoid here does -- it's a way to describe the allowed ways of combining natural transformations, including any systematic tweaks to be done during the combination.

(The classical definition of a monoid is just a set with an associative binary operation with an identity.)

<comment><USER7> The paragraph starting "As each object in this category..." made no sense to me. I can explain the what a monoid in the category of endofunctors is, how it relates to a Haskell monad and maybe you can explain what you meant.

OK, a monoid in the category of endofunctors is an endofunctor F together with a natural transformation (the multiplication of the monoid) from F composed with F to F, and another natural transformation from id to F (called the unit). In Haskell F is the type constructor of the monad, the unit is called return and the multiplication is usually called join (and in the case of the list monad is also known as concat).

(Note that the definition of monoid needed here is not that of a set with associative binary operation, but the more general "monoid object in a monoidal category". Instead of a set S and a multiplication S x S->S, where x denotes cartesian product, we want a functor F and a multiplication F o F->F where o denotes composition. This is an instance of the general sort of monoid since the category of endofunctors is monoidal with respect to composition.)

<comment><USER6> I didn't want to give the full categorical definition in terms of what a monoidal category allows, because I don't think that adds much, but I suppose I flubbed making it simpler. I just wanted to make the point that the monoidal portion determines how the composition occurs -- a given type constructor can be a monad multiple ways.

</comment></comment></comment><comment><USER8> DON'T start functional programming with monads. Familiarize with currying, pattern matching, how to create data types in Haskell, using recursion instead of loops, higher order functions, list comprehensions, type classes, polymorphism in Haskell (different than subtyping in OOP). Ignore monads for a while. To understand monads you must have a good grip of those concepts. You can start with <http://learnyouahaskell.com/chapters>.

You'll see Haskell tutorials delay telling about the concept. There's a reason.

For a bird's eye of monads you can check this: [http://www.reddit.com/r/programming/comments/64th1/monads_in...](http://www.reddit.com/r/programming/comments/64th1/monads_in_python_in_production_code_you_can_and/c02u9mb)

If you are ready, read and do exercises in <http://blog.sigfpe.com/2007/04/trivial-monad.html> and then [http://blog.sigfpe.com/2006/08/you-could-have-invented- monad...](http://blog.sigfpe.com/2006/08/you-could-have-invented-monads- and.html).

</comment><comment><USER9> A cheap and unexciting trick for passing a value through a couple of functions. (Monads _are_ cool, but it's important to understand that there's nothing, nuttin', whatsoever fancy about them, so I like to call them a "cheap trick".)

This is a good intro: [http://homepages.inf.ed.ac.uk/wadler/papers/marktoberdorf/ba...](http://homepages.inf.ed.ac.uk/wadler/papers/marktoberdorf/baastad.pdf)

Be sure to mentally replace "monad" with "warm fuzzy thing" when reading it and it should make sense.

<comment><USER4> Actually, the effects of that trick are nothing less than exciting.

For example, that trick allows you to pass information from future (one of Wadler examples).

</comment></comment><comment><USER10> Monads are _red herrings_ , if what you're interested in is getting started with functional programming (or even Haskell specifically). It's an unfortunate flaw in the Haskell literature that makes it seem like you have to grok monads to learn Haskell; you don't.

Monads _enable syntactic sugar_. If you're getting started with Haskell, you'll notice that when you write code that does I/O, you use a weird imperative-looking syntax ("do notation") that looks different to the normal functional style:

        main :: IO ()
        main = do
          putStrLn "Please enter your name"
          name <- getLine
          putStrLn ("Hello " ++ name ++ "!")

'putStrLn "Hello"' doesn't actually print anything; it returns an IO value that, when interpreted by the Haskell runtime, prints something: that interpretation takes place when 'main' is run. The do notation is syntactic sugar for creating a sort of compound IO value that interprets as a bunch of actions rather than just one. The reason you can use do notation for IO but not for (all) other Haskell code is that IO values are monadic (which is another and possibly more useful way of saying "IO is a monad"): that just means that they behave in a certain way when combined (to produce that compound value) and obey certain laws to make the do notation well behaved.

Monads are _a design pattern_ to abstract away repetitive functional code. For example, if you write a lot of pure-functional code you sometimes end up having to pass around a 'state' parameter. If a function reads or writes from the state, then any function that calls it has to pass in the state, and so on. This leads to a lot of functions with an extra state parameter, many of which don't even care about the state except to pass it down the call tree. An improvement would be to write a higher-order function which took a function which didn't care about state and wrapped it to produce one that just passed the state through. The State monad encapsulates this wrapping and lets you clean up the rest of your code.

Monads are _what's between the lines_ of an imperative program. Bourne shell scripts have the default error-handling rule that they ignore failing commands unless it's the last one executed, or put another way, they run in a monad that ignores errors:

        cat nonexistent.txt   # prints an error message
        echo Done.            # still executes, prints "Done."
        # script returns success

But you can tell it to run instead in a monad which stops after the first error:

        set -e                # change the monad, i.e. the error-handling rule
        cat nonexistent.txt   # prints an error message
        echo Done.            # never runs
        # script returns failure

Old-school Visual Basic has the opposite default, but you can make it behave like a shell script with "ON ERROR RESUME NEXT". Yes, VB had monads.

Monads are _a specific example of higher-kinded polymorphism_ , which is a very powerful and useful concept that's starting to enter the programming mainstream (examples are template concepts in C++ and LINQ in C# and .NET). Parametric polymorphism (List<String> in Java and C#, etc) means you don't have to write a 'reverse' function that works on lists of strings, and another 'reverse' function for lists of ints, etc; you can just write a generic reverse function that works on lists of any kind, because it doesn't need to know the details of the contained type, just how to iterate over a list. However, if you want to reverse an _array_ , you still have to write a new 'reverse'. If your language supports higher-kinded polymorphism, you can write a generic reverse function that works on any kind of container, because all it needs to know is that the container has some well-behaved method of iteration.

(The LINQ example is a bit more subtle, because C# _doesn't_ support higher- kinded polymorphism, but LINQ is a hard-coded exception to that rule. The cool LINQ syntax works for any type which provides certain operations and behaves in a certain way - which just happen to coincide with the requirements for the type to be monadic.)

<comment><USER11> Each of your statements seems plausible, even profound in itself.

Then I try to combine them and my head explodes.

 _You don't need to understand Monads to understand Haskell but they're how you print "Hello world"??_ Yeah. Your other example also seem pithy and worthy, and again leave me feeling like the result is utterly opaque. You've shown goodness and power and all but it feels like you're holding the real definition behind your back to make the magic look even more magical-er.

How's-about-ya-spit-it-out. What the heck's a monad?

I feel like I've gotten as far as thinking that a monad's like a little interpreter/pre-interpreter. You pass it something like raw code and it binds more meaning to the variables as well as change the context of execution etc, all before that code gets eventually interpreted. Kind of like how you pass fragments of code to Ruby functions and kind of like how c++ templates are parameterized by type.

Wikipedia says "A monad is a construction that, given an underlying type system, embeds a corresponding type system (called the monadic type system) into it (that is, each monadic type acts as the underlying type). This monadic type system preserves all significant aspects of the underlying type system, while adding features particular to the monad." <http://en.wikipedia.org/wiki/Monad_(functional_programming)> At least that definition doesn't leave me feeling like someone's said "I can't tell you but they're really great"...

<comment><USER12> No, actually, i've read dozens of explanations, i went metalinguistic and read discussions about discussions of monads, and this guy is totally correct, the ONE SINGLE most important thing to know about a monad, it would seem, is that you are not required to know what a monad is to use it.

</comment></comment></comment><comment><USER13> Let's say you wanted to implement I/O in a language without side effects. You could put all your interactions with the world in a special "World" object. Every time you called world.putString("foo"), you'd get back a new world object that represents the state of the world with "foo" having been written out.

So the code (quoting from samstoke's hello world):

        main :: IO ()
        main = do
          putStrLn "Please enter your name"
          name <- getLine
          putStrLn ("Hello " ++ name ++ "!")

would get translated to:

        main :: World -> World
        main world = let newWorld = putStrLn world "Please enter your name" in
                       let (newerWorld, name) = getLine newWorld in
                         let newestWorld = putStrLn newerWorld ("Hello " ++ name ++ "!") in
                           newestWorld

Note that this makes the order of operations explicit, and that no World needs to be modified. Note also that now main has to take and return one of these World objects, so that a World needs to be threaded through all computations that will interact with the World (just like IO actions can only be executed from within other IO actions).

A monad lets you thread implicit state through a computation.

</comment><comment><USER14> Monads are (quote) elephants: [http://james-iry.blogspot.com/2007/10/monads- are-elephants-p...](http://james-iry.blogspot.com/2007/10/monads-are- elephants-part-3.html)

Monads can be implemented in OO languages, like ruby: [http://moonbase.rydia.net/mental/writings/programming/monads...](http://moonbase.rydia.net/mental/writings/programming/monads- in-ruby/00introduction.html)

Tony Morris, on of the authors scalaz (which implements monads, among other things, in scala ): [http://projects.tmorris.net/public/what-does-monad- mean/arti...](http://projects.tmorris.net/public/what-does-monad- mean/artifacts/1.0/chunk-html/index.html)

A one that was considered a very good explanation on the topic: [http://blog.sigfpe.com/2006/08/you-could-have-invented- monad...](http://blog.sigfpe.com/2006/08/you-could-have-invented-monads- and.html)

</comment><comment><USER4> My friend told me recently that he invented monads in Javascript:

      result = monadicObj
             .action1(arg)
             .action2(arg2);

I told him that he needs variable binding operations for fully fledged monads:

      result = monadicObj
             . x <- action(arg)
             . y <- action2(x,arg2)
             . action3(x,y,arg3)
             . return (x+y);

Otherwise, his invention is much more like Applicative, because we cannot pass values between actions.

So here it is: monads are just objects with overloaded and extended "." operator and with special function "return" that modifies object (in accordance with object meaning) and returns it's input value unchanged. That new operator allows us to bind return results if we want so. Overloading of "." allows us to implement various interesting operations - passing state, executing optional computations, executing non-deterministic computations, probabilistic computations, etc.

You incapsulate the meaning of computation inside object, so you can pass it to some evaluator without that evaluator knowing that you pass him non- deterministic computation instead of monte-carlo monad or vice-versa.

</comment><comment><USER15> jQuery is a monad: <http://news.ycombinator.com/item?id=439116>

</comment><comment><USER16> Moggi used monads in category theory to define computations with side effects in functional programming. The basic insight is that in addition to the values of various types in functional programming, there are "computations" of various types. Examples of "computations" would be exceptions or continuations. Each monad defines for each value type a computation "containing" that type, and the whole type system of values you started with can be embedded in a new type system with new computation types.

Monads in category theory are an algebraic device for embedding a category-- usually a cartesian closed category--of types of values into a new category with types of computations. However, the correspondence between Haskell monads and category monads are related by a series of adjunctions.

Suppose that C is a cartesian closed category and M:C->C is a monad with natural transformations e:1->M (the unit) and u:MM->M (the multiplication).

We assume a fixed choice of products and compatible exponentials: for each type A of C,

      A x ( ) -| [A -> ( )]

Here's the adjunction

      MA -> [[A->MB] -> MB]
      </comment><comment></comment><comment></comment><comment>---
      MA x [A -> MB] -> MB
      </comment><comment></comment><comment></comment><comment>---
      [MA -> MB] x MA -> MB
      </comment><comment></comment><comment></comment><comment>-----
      [A -> MB] -> [MA -> MB]

The final map is given by currying, but it can also be motivated as follows if you think of the exponentials as internal hom sets. If g:A -> MB is in C, so that g:A->B is in the Kleisli category C^M, then u_{MB}oM(g):MA->MB. We can write this as the lambda term \lambda x\in A A -> MB.u_{MB} oM x

This lambda term corresponds to composition in the Kleisli category C^M of C, and belongs to the internal language LL(C), the simply typed lambda calculus determined by C. Under the Curry-Howard-Lambek correspondence, the lambda term corresponds to the required map of C.

</comment><comment><USER17> It's the operator that allows to chain two statements together. It's written ";" in Pascal, and is often implicit in other languages.

When a language explicitly talks about monads, it's because it lets you overload that operator, i.e. it let's you give alternative definitions of what it means to chain statements together.

</comment><comment><USER18> Leibniz on Monads:

[http://www.rbjones.com/rbjpub/philos/classics/leibniz/monad....](http://www.rbjones.com/rbjpub/philos/classics/leibniz/monad.htm)

<comment><USER10> Unfortunately "monad" gets used in a few contexts unrelated to the sense the OP is asking about. Similarly, the (cancelled) TV series Caprica recently started using "monad" to mean "monotheist".

<comment><USER18> On the other hand, it seems that if one is willing to propose a similarity between one of the cornerstones of rationalism and the misuse of "monad" by a fictional character on a canceled television series, one might be more open to seeing more direct lines of intellectual descent from an inventor of the calculus to functional programming.

The embedded type system of a programmatic monad remains unchanged despite the monad's combination into higher level structures - a somewhat Leibnizian characteristic.

</comment></comment></comment><comment><USER19> Slides from functional programming class might clarify things a bit [PDF].

[http://www.it.uu.se/edu/course/homepage/avfunpro/ht10/notes/...](http://www.it.uu.se/edu/course/homepage/avfunpro/ht10/notes/glimming-4up.pdf)

</comment><comment><USER20> I wrote some stuff about monads on HN a while ago that some people found helpful: <http://news.ycombinator.com/item?id=247446>

</comment><comment><USER21> There are already a number of excellent answers, but I'll try my hand. You don't know something until you can explain it 3 different ways.

Haskell excels as a functional language because it has excellent piping, _Monads are just another form of piping_ with particularly great syntactic and psychological properties. They act as wrappers around a direct type and setting the return type of a function as a monadic type (such as IO () or [Int] or Maybe Bool) means that the _primary_ type is () or Int or Bool, but there's something special being passed along as well.

In practice this saves typing since you don't explicitly pass the special monadically-hidden information. It also psychologically lets you think of simple types being wrapped in contexts which have certain properties. Some contexts can be unwrapped, some cannot. Some contexts can transform into other contexts directly, some cannot. Learning the behavior of each monad independently teaches you about these behaviors and then becomes important in advanced Haskell programming.

When learning, avoid them. Learn how to use IO by rote and ask in IRC about the confusing type errors that will arise. They usually translate as "you tried to combine two pipes which don't fit, so that monadic special sauce was lost". Part of learning Haskell is learning all of the joints and adaptors which help you to combine types effectively (including monads).

When you have a firm grasp of using compositions and maps and filters, start with the Maybe monad. Implement it and use all the general monad adaptors on them. Then learn the basic State monad because it makes the special sauce very explicit. Learn IO last because it's really a special case and should never be introduced as a monad.

</comment><comment><USER22> I'll have my stab at making a short explanation without code or lots of technical stuff. So here's some handwaving that may contain mistakes:

Monads are sequential processes, which are combined to make bigger processes. getLine is a monad, so is putStrLn "hello". You can combine two monads into a bigger monad using the >>= operator, which would be the "means of combination" which is extensively discussed in the Structure and Interpretation of Computer Programs lectures. Simplest monad program I can think of is echo = getLine >>= putStrLn.

I learned monads by doing simple stuff like guess the number and hangman, first writing them in the do-notation (syntactic sugar for a mini-imperative language) and then converting that to concrete notation using >>=.

Monads are not only useful for IO, but also other sequential processes such as parsing, pretty printing, binary file io and stateful inside but functional outside algorithms (ST monad).

Disclaimer: this was written by a Haskell newb, recently introduced to the wonderful world of Monads.

</comment><comment><USER23> From my limited understanding garnered by listening to SE Radio, monads are basically a way for Haskell programs to execute actions (rather than simply computing values), so that your program can ultimately DO something like write to a file. As you probably know, the functions aren't supposed to contain any side effects: you don't want something unexpected to happen when you just want to calculate a value. It would be like a spreadsheet that printed out a page every time you entered a certain cell - might make sense in a one-off situation but in the long run it's just inviting trouble.

So monads allow sequences of actual _actions_ to be packaged together and given preconditions and then executed in a safe manner (perhaps with an eye to concurrency). You get to maintain the exquisite purity of functional programming while still writing software that, you know, gets stuff done occassionally.

If you were looking for an explanation of the mathematical concept though, sorry, ain't got a scooby.

</comment><comment><USER24> The Wikipedia has a very good treatment: <http://en.wikipedia.org/wiki/Monad_(functional_programming)>

The monad _is_ the axioms outlined in the article. The applicability of the monad are the logical consequences of its axioms, but it is _no more_ than its axioms.

Happy hacking!

</comment><comment><USER25> The short answer is to read chapter 14, probably more than once, before it makes sense. It took me 2 times: <http://book.realworldhaskell.org/read/>

</comment><comment><USER26> Monads are a means of guaranteeing program sequentiality and maintaining state.</comment>


Xiaomi Introduces GoPro-Style Action Camera - <AUTHOR> http://techcrunch.com/2015/03/01/xiaomi-yi-action-camera/

<comment><USER2> Xiaomi is a fantastic company, but I think they are still unavailable to most Westerns. Having never lived in China, I'm not sure how difficult is it to buy a Western-produced good (e.g. iPhone), but I know from trying to buy an Xiaomi product in the past, it's rather difficult.

There is no "direct" avenue of purchase, and the only reputable suppliers seem to tack on huge premiums that all but negate the usual price advantage that Xiaomi provides.

A nifty, suspiciously similar looking device that likely will never make it to US consumers hands, or even their minds. Have you ever tried to explain to someone non-tech who Xiaomi is? Same goes when people ask if my OnePlus One is an HTC product.

<comment><USER3> The SJ4000 and similar Go Pro clones have been finding their way out of China via the usual eBay channels, so I'd be surprised if the same doesn't happen with this provided that they do an English language firmware.</comment></comment>