skysight-inc/HackerNews huggingface dataset:
Haskell is a pure language. Purity is a concept that is absolutely bizarre to the real world, where adding two numbers together results in tons of side effects (load into registers, oops, have to load cache lines, alter memory, raise the ambient temperature, etc. etc.). However, the idea of pure functions is useful. So we make our basic program blocks from pure functions that don't "do" stuff, but just transform values.

However, we must chain these into useful programs somehow. Monad is the type name chosen in Haskell for the construct that does this. It's kind of simple if you work it backwards from the syntax. You want to be able to say

do
a <- readInt
b <- readInt
add a b
print

The first two can fail, rely on side effects and the last one is purely a side effect. The only pure function is add, which can't work if a or b aren't there. Monads serve as a way to represent the real-world-ness without it seeping into the add function. You can think of each line as a closure getting the next value from the previous line. So readInt returns a Maybe Int. If it returns a Nothing, the next closure is simply skipped. You can insert a check after the add, if you want to, to see if you got Nothing and alert the user, etc. However, the basic idea is that the program does not crash with a NullPointerException. We know what to do if we get Nothing. The add function doesn't need to concern itself with that.

Hence, the Monad. It wraps a real world concern around a type (it has a type constructor). You must be able to make one from a concrete value that is unburdened with exceptional state (it has the unit function). You must be able to call pure functions on these monadic values without the side state seeping into the function (it has the bind function).

Edit: the reason you don't see Monads in other languages is because they're not essential to them. You can do stuff in C without Monads. To Haskell, Monads are like the Higgs boson. It's how you bind stuff together.
Tips for Offshore Partner Assessment
Seriously, you could apply this to any hobby if you want to use an endless list of externalities.

I mean, come on. It's not like the plane would be sitting on the Tarmac if he didn't board it. It's flying anyway.
Strange considering that the only reason you're alive today is because of technology.

There is no set end-goal. You create your own end-goal. That's the point of human existence, to create your own meaning.
No bonus should ever have to be paid back. If you have to pay it back it is a loan or prepaid work. Signing bonuses should be a reward for agreeing to start work, not work for a year. If $35k is too much for that, then don't pay $35k, pay $5k or zero. If you want someone to stay a year, pay a one year $35k bonus. The only reason these repayment agreements exist is because the company expects employees to go underwater and be trapped at their company. How does that make good employment policy to have people forced to work at your company?
Is GDP the relevant metric to assess this?

On credit/debit card transaction volume North America represents 40+% of global market.

https://www.capgemini.com/resource-file-access/resource/pdf/...
4000 requests doesn't seem like a lot if this extension gets popular, but let's see if it's gonna be a problem at all.
This is a good question, and I think will have to wait on a better understanding of what we mean by intelligence, which right now is a term that carries a lot of luggage.

It may be that the situation is similar to biochemistry. We observe exquisitely complex synthetic pathways in the natural world, and can to some extent harness and retool things to our benefit, but our capacity to design those reactions from scratch is almost nil compared to what goes on in the simplest living cell.

It may be that creating those fast rockets that don't exist in nature is orders of magnitude easier than writing a catbot. That's an open question and so far the evidence is on the side of it being far out of our grasp.
"You must be able to call pure functions on these monadic values without the side state seeping into the function (it has the bind function)."

That sounds more like fmap.
I've been using Monads in Scala for not throwing wild exceptions, but still being able to stop the computation immediately if needed. For example you want to validate things with a Validation[A] type, which can either be Valid or Invalid. The binding function in Scala is called flatMap, so flatMap for a Valid value returns a lambda having the included value as the parameter and Invalid doesn't have a function call, so the flatMap operation stops.

Example:

Valid("userId").flatMap(userId =>
Invalid("address").map(address => User(id = userId, address = address))

would stop for the address validation, because the flatMap for a Validation is specified as:

def flatMap[B](f: A => Validation[B]): Validation[B] = this match {
case Valid(value) => f(value)
case Invalid(value) => Invalid(value)
}

and map for a Validation is specified as:

def map[B](f: A => B): Validation[B] = this match {
case Valid(value) => Valid(f(value))
case Invalid(value) => Invalid(value)
end

And of course we can have a bit of syntactic sugar to not nest dozens of flatmaps, in Scala we use for:

for {
userId <- Valid("userId")
address <- Invalid("address")
} yield {
User(id = userId, address = address)
}

Now in the main function we can handle the Valid and Invalid with pattern matching and look, we can stop the computation without throwing exceptions, which makes testing and everything way simpler.
Do notation.

Haskell's do notation is syntactic sugar over monads which effectively allows you to write 'imperative-looking' code while still carrying a local state forward without mutation. The Wikibook[1] does a pretty good example of explaining what this looks like (though I'm guessing you already know this).

Now, obviously it is true that one of do notation's advantages is the same as any other monad usage: it allows us to explicitly sequence events in a lazy language that otherwise offers no (obviously intuitive) guarantees on evaluation order. In that sense it's nothing more than sugaring over the otherwise necessary usage of a lot of ugly >> and >>= operators everywhere in increasingly annoying indentation.

But the other thing it offers is a syntactic sugaring over carrying state forward into successive computations (like the State monad[2]), which still carries at least some useful sweetness in a language that is otherwise functionally pure, which is why F# generalized the concept even further to computation expressions[3].

Looked at another way, do notation, or something like it, can be used to sugar over something that rather more looks like the Clojure ->/->> operators, where the initial value is essentially a local namespace. Much like the threading macros, the result even appears to be doing a kind of mutation, even though it's actually doing nothing of the sort.

This kind of thing turns out to be useful for games, for instance, as the linked State monad example above does. In games we often have a main update loop, where we have to do several successive operations on our game that might change the state. We can do this a number of ways, but one way is with something like do notation, where for instance (in some hypothetical language) we might do this:

do with gameState
oldGame <- gameState
gameState <- checkInput
gameState <- tick
if gameState != oldGame
draw

And all of this kind of "fake mutation" can be handled underneath the sugar in a purely functional manner. It's something I've been meaning to put into Heresy for some time. Heresy uses continuation based loops that have a "carry value", that can be passed from one cycle to the next. It's a simple matter of some macro magic to then layer over this some syntax sugar that makes that carry value effectively a name space, that can be altered from one statement to the next, but all entirely without actual mutation underneath.

You can write whole imperative, mutation-riddled languages in purely functional ones this way. There's an implementation of BASIC that runs in the Haskell do notation.[4]

[1] https://en.wikibooks.org/wiki/Haskell/do_notation
[2] https://wiki.haskell.org/State_Monad
[3] http://tomasp.net/blog/2013/computation-zoo-padl/
[4] http://augustss.blogspot.fi/2009/02/is-haskell-fast-lets-do-...
This is not a practical distinction with regard to the legislation.

A word document describing the specification for an export controlled technology is as prohibited from export as the implementation.

Having the word document on a laptop you take to another country is as much a breach of the law as shipping a centrifuge.
I think that can be true, but YC has a model that works for them, so it seems ok to me to not try to cover every industry in the world. Some of them are quite different, to the extent that YC's networks and expertise might not be as immediately useful anyway. For example Houston has a lot of energy-technology startups, especially in oil & gas, doing anything from the "hardware" side to analytics to GIS type stuff. But it's basically its own world that has little overlap with the Bay Area startup world. Different investors, different types of customers, different production challenges, different employee demographics, etc.
The world is getting better all the time
How is it morally questionable?

Who hasn't overfilled their cup many times at self-serve drinks counter? Been back for three plates of ice cream at a buffet?

It's sounds like a lot of work but completely harmless. Finding loopholes in complicated systems to me seems like a type of arbitrage mor than anything.
Ironically if you want to be an engineer with longevity its better to start out as an art or music major lol. All I people I know who majored in CS are doing anything but computer related work.
Perhaps more importantly, how much fuel does it take to transport 200lbs in relation to transporting the rest of the plane?

Not like he's specifically chartering the flights, the planes is going to fly with or without him.
> The number of unread Facebook messages I have is not printed on 30% of all the web pages I visit.

I've only seen this printed in google search and google plus, not on any other website. Maybe it's an extension of yours?

If it's google search you're complaining about, just log out, or use something like DDG.
Hey, I started in the 80s on a Commodore 64 (and Vic 20!) too! And later graduated to COBOL74 on a Unisys mainframe... I just got a really young start.

If you find yourself feeling like writing about your opinions on software design sometime, I hope it comes across my news feed. I'm starting to bookmark articles like this one so that I can compile them together in the future to hopefully combat the treadmill thinking in software development.
> I think the problem is humans just aren't smart enough to do the work.

I think this is true if you define "the work" as building on top of the infrastructure we have today. I believe we're capable of building conceptually clean, non-ball-of-mud architectures, but the need to interoperate with piles and piles of legacy systems forces compromises into the design. Just look at a typical web application stack; you've got layers and layers of cruft, and nobody is able to pull off a bold move that tears layers off; the best we can do is add more layers on the top.
It's probably worth remembering that there is an open source exemption. If a piece of 'intrusion software' has been published the export controls no longer apply.

Publish your exploits to github before you send them overseas or travel to the conference to announce them.
Absolutely. Spotify be damned. Grooveshark felt like Audiogalaxy done by professionals.
> My training was in graphic design

So mainly paper based graphics right?

> and the web training we got in college was behind where I was self-taught in web before getting to college, they only covered the basics.

As I thought so no formal training in design for screens.

Screens are not paper. Please be responsive yourself, be a life long learner and stop disabling zoom. Can google analytics or somesuch look for failed pinch to zoom events followed by someone leaving your website?

P.S. responsive means that the website responds to the screen size and looks fine on a 40" wide screen or on a 4" smart phone. It does not mean anything about speed of response (which is a nice thing to have obviously but not at the expense of basic function).

P.P.S. there are two responses to a non-zooming website:
1. That of someone that knows what the web-designer did: "Why on earth did the * web developer disable zooming. I'm closing the tab."
2. Non-techy people: "Grunt aaahhh why is this * website not working. I'm closing the tab and never coming back".
Yes, that's another reason I've avoided upgrading--I really appreciate the ability to swap the battery out in the middle of a long flight without a screwdriver.

Basically everything in the X200 is user-serviceable; you can even replace the keyboard without taking it in, provided you can find the parts you need. The only thing I'd be worried about is being able to find new batteries for it; worth looking into before you pull the trigger.
Also Europe is a continent.
While this statement seems like common sense, there are plenty of examples of limitations creating a better language. I am quite happy that nobody can write goto in code that I have to work with.
Phần mềm rank checher – kiểm tra thứ hạng từ khoá chính xác nhất
1. It's much easier to compromise a DB into a dump with injection, insufficient access control etc. than dump the db, find out it's encrypted, then hack the app servers and find a key somewhere in the binary.

2. You can use key distribution schemes to the app servers.

3. If you need to 'live' search in personal data you're doing it wrong. You can move search to a fulltext engine for the stuff you really need, which is more difficult to dump and reassemble. E.g. if you search for city, you only have primary keys and cities in one system.

4. You should also not keep profiles, personal data and other data on one server. Compromising one of the access paths will compromise all your data.
just take any italian word, you won't regret it.
I find the "Summary of international crypto controls" at http://www.cryptolaw.org/cls-sum.htm very informative.

It shows that the _export_ controls have been in places for years and that is something that should worry us.
Sushijs/nyc
I don't have hard numbers, but as a frequent traveler, exchange fees are honestly pretty annoying, so much to the point that I manually exchange money with wealthy friends in destination countries, horde cash like Japanese Yen in a box until I go back, and other nonsensical-in-2015 things.

A lot of countries still operate on mostly cash (like the aforementioned Japan) so getting by with only a CC isn't too feasible. Then, relying on the ATM will cost you a lot of money over time unless you specifically have a checking account at a bank with no ATM fees.
Are the questions different from regular YC applications? I don't see the "Please tell us about the time you most successfully hacked some (non-computer) system to your advantage" question I've read about
Well for them it is money lost due to fraud vs money spent on tech upgrade.
Until money lost to fraud is tolerable banks are not going to upgrade, it also seems that a lot of big banks are very short sighted, like it was with 2008 housing bubble.
The Historic Development of Network Visualization
Lexus has built a car with a human heartbeat
I know the feeling. I'm 30. My partner is 26, from the Sutherland Shire. If we are going to get a place near her family (which she wants so badly) I just don't know how we're going to afford it. Even if I make a 6 figure sum, adding her teaching salary probably won't be enough to afford the housing prices out there.

Couple this with the fact that neither of our parents have the money to help us buy a house... I'm pretty sure we're doomed for now.

I keep thinking to myself... save or invest a tonne of money and wait until the housing bubble bursts to buy a house. I'm not economically savvy really, so I don't know how good a plan that is.
I just wanted to mention that I really liked this article/slides, and agree that most software sucks...

... but I think the systems built "by hackers for hackers", nix clones in general and linux distributions in particular, are generally the best stuff out there.

It's all the attempts to be "intuitive" and "easy" and "just work" that really fails. It's the stuff "by designers for users" that sucks.

The old-ish core unix/linux stuff has been slowly polished over the years and works pretty damn well, and you depend on its quiet stable operation for all your fancy user-friendly (and "dev-friendly") layers that need to be completely replaced every couple of years, for your favorite phone and your favorite websites.

EDIT: you complain about trying to compile kdevelop, on ubuntu... well there's your mistake, both of those things are trying hard to be user-friendly. Try plain debian, plain vim, etc.
...no? How are you supposed to figure out whether pay is biased by gender or ethnicity then?
Aren't we talking about the speed of sound in helium, though? That should be faster.
I've really enjoyed "Functional JavaScript - Introducing Functional Programming with Underscore.js". I almost didn't get it because the use of underscore was a bit of a concern (the library is great but I felt I wanted to learn FP with "pure" JS).
It was a fairly big step up from the intro to JS I read before (Eloquent JS) but it's a fantastic book. Jam packed with good stuff. I think the writing is a bit dense at times but the content is gold.
First open ecosystem industrial grade 3d printer platform
Ask HN: What entrepreneurs are you following?
Russian Video Conferencing Market Decreases for the Third Consecutive Year
Less as a real argument than as devil's advocate, here's a shorter non-library version:

function f1(s) {
try {
let data = JSON.parse(s);
let x = parseFloat(data.a.b.c.substr(0));
if (x === x)
return x;
} catch(e) {}
return null;
}

...ok, it's a bit golfy, and in JavaScript you don't get much control over exception catching. But in general, exceptions can be used like an implicit Maybe/Either monad, just as mutability is an implicit IO monad.

(Also, you picked an odd task - it's unusual to expect a float to be represented as a string in a JSON object, and a check that rejects NaN but accepts weird floats like Infinity is not terribly useful.)
I've just tried submitting those, and all three were DOA.

If you want to know more about these specific sites and why they might be on the DOA list, you need to follow the guidelines:

Please don't post on HN to ask or tell us
something (e.g. to ask us questions about
Y Combinator, or to ask or complain about
moderation). If you want to say something
to us, please send it to hn@ycombinator.com.

From https://news.ycombinator.com/newsguidelines.html
> What we really need to find a way to support long-term, high risk projects driven by young scientists with breakthrough ideas.

Fellowships typically fill the roll of paying for long-term, high risk research.

If it needs to be weighted away from established researchers, make it a lottery.

Current funding models are optimised for convergence on leading hypotheses. A lottery would increase coverage.
Do you have to request the comp? I've never been offered compensation for the often broken entertainment system, wifi, or power (as UA Gold).
Your Ubuntu-based container image is probably a copyright violation
Rebuilding Uber's Dispatching Platform
How to delete your app's user account if necessary?
So reading between the lines - the bracket holding the helium tank (inside the oxygen tank) broke, the helium tank ripped away from it's plumbing (pressure lines and valve(s)) and the high pressure gas contained in it escaped into the oxygen tank causing it to burst.

The SpaceX description is a little vague about the plumbing, I'd like to know more about that - is it an on off vale that opens and closes under command of the flight computer to maintain pressure, or is it a modulated valve that is controlled by a PID loop or the like.
https://en.wikipedia.org/wiki/Turing_tarpit
Emoji searcher but as a menubar app for Windows
I'm drawing a blank for now, but I'm almost positive I've came across this phenomenon for many things before.
Thanks for sharing!

My Dart thingy is commercial NDA bla bla bla - so the only thing I can say it's more than 20K LOC. I was always afraid that such a big app couldn't be mantained in lang without proper IDE on non-windows (for Dart I'm using Dart's team Eclipse plugin and/or Webstorm plugin).

In my case I'm just too lazy to code in lang without lexical this and as I understand JS is TS subset, so you still can shot yourself in the foot really easy, also from what I hear JS/TS is better suited for small projects whereas Dart shines when project gets bigger (tree shaking, proper SDK) and perf really matters.
On the con side: I would love Dart had as good IDE/plugin as TS has on Windows (Visual Studio).
That is what signature is for, isn't it? If bank can't prove it is your signature then it is a fraudulent transaction. Technically cashier/clerk should not accept the transaction if signature doesn't match but I've rarely seen them check it.
Thanks for the bug report, fixed now :)
Robotic Surgery Linked to 144 Deaths Since 2000
This is awesome.

YC reputation has grown in the last few years. Raising the bar quite high, making it much harder to get in at the earliest stages. I believe this is the reason for this.
The Reeducation of Blackboard, Everyone's Classroom Pariah
Simple alternative to quickly set the current time: use the date header of any webserver:

date -s "`curl -I http://www.kernel.org |grep 'Date:'|awk -F': ' '{print $2}'`"
Is "advice" really what Tarsnap needs? It got a lot of it (really terrific advice, too) from patio11. Looking at the home page, it doesn't appear any of that advice has been taken.
I'd come across the same issues you are experiencing and had been looking for a solution to the $input.path() issue.

Turns out to retrieve JSON you can use $input.json().

Full details are on the AWS documentation page. Not sure if this has been newly added as I only found it today.

http://docs.aws.amazon.com/apigateway/latest/developerguide/...
http://www.amazon.co.uk/Why-Does-mc2-Brian-Cox/dp/0306819112
I actually have the Nordic NRF51822 / NRF51 development board and it is super fun to play with. I come from a web dev background so getting into hardware is rough.

The toolchain for building firmware is crazy. It's kind of like in webdev we dynamically generate css through sass and then put it through all these different stages (minification/etc). Except this is all old school Makefiles. Made me cringe a bit.
Comments moved to https://news.ycombinator.com/item?id=9920543.
The AI in a box game doesn't seem to have any published results, so I don't think we can take the participants' word for it that one really convinced the other to let it out of the box.

Still, it's not hard to imagine a real AI building up trust over a long time then requesting a bit more capability to help it do something a bit more helpful until the humans don't realize how much power they've given it. Politicians do the same thing to us all the time and by manipulating people's thoughts they get to kill plenty of people.
Stripe vs. Braintree: Why BrainTree Lost
Work is work and it shouldn't be expected on the weekends
Also imagine it gets stolen, good luck remembering all the cards you had in there and banks you need to call. Payment gateway route, like paypal, gives same convenience and less headaches.
I don't know, it's not my fault : )