Apple's Commitment to Customer Privacy - <AUTHOR> http://www.apple.com/apples-commitment-to-customer-privacy/ <comment><USER2> Okay, a few things I'm just plainly getting pissed off about every time I see these threads.

* Bitching about the words "direct access": Guess what, these are words, they have a meaning. They're saying that the government can't view the database directly, they can't determine what they get to see, and they don't get to pull it up whenever the fuck they feel like it. And guess what? That means something. I swear, everyone obsessing over the words "direct access" goes on record as one of the most idiotic things a lot of really smart people get obsessed about.

* Most of these companies are effectively saying they're agreeing to subpoenas, with the one difference being that NSA warrants can't be reported by the companies involved. This is still infinitely more tame than the previous claims that the Guardian has been walking back this last week(let alone the entirely ridiculous argument Snowden put out there saying they can 'watch your thoughts form as you type', which gets even more funny when you consider the only service listed that transmits your typed data is GMail).

* There is a lot to be concerned about here- no mistake about it. But right now, there's a lot more holes in Snowden & Co's story than the opposite. It's still troubling, the attitude taken by some of those at the highest echelons of government, on the whole subject- but the accusers have a lot of explaining to do, if you've been paying attention.

<comment><USER3> Ad. 1 I think you are missing the point - "not providing direct access" is a bit like Bill Clinton saying he did not have sex with Monica Levinsky, if some company sends some institution a complete database dump of all customer personal data it is not "direct access to the servers" but it is just as bad in terms of privacy implications, so the phrase means nothing in the end.

<comment><USER4> Are you bothering to read these things, or just searching for the term "direct access" and calling it a day?

From the statement:

"Regardless of the circumstances, our Legal team conducts an evaluation of each request and, only if appropriate, we retrieve and deliver the narrowest possible set of information to the authorities. In fact, from time to time when we see inconsistencies or inaccuracies in a request, we will refuse to fulfill it."

From Google's:

"Until this week's reports, we had never heard of the broad type of order that Verizon received—an order that appears to have required them to hand over millions of users' call records. We were very surprised to learn that such broad orders exist. Any suggestion that Google is disclosing information about our users' Internet activity on such a scale is completely false. "

What about that is weasely or unclear to you? They categorically deny providing broad data to the government. Of course they can't say they don't provide any access, because they're obligated by law to comply with warrants. But the accusation was that they provide direct access (those words that you all are so obsessed with appear in the Guardian article), with the implication that the NSA can just go and take whatever data it wants with no oversight.

Unless you believe that Apple, Google, et al. are just plain lying, that is clearly not the case.

<comment><USER5> Notice that the paragraphs immediately before that specifically talks about data passed to law enforcement and plays down the type of requests, after the paragraph before that talks about national security.

Since when would anyone start to lump NSA in with "law enforcement". The focus on law enforcement in general in that statement is curious since that's not really what all the noise has been about.

Maybe their PR team are just a bunch of buffoons that have still not realised that these statements gets dissected, but it is rather odd that they when releasing a statement to try to stem criticism based on their previous choice of words again choose wording that is so ambiguous

In fact, if I were to trust this (and I can't decide if I should), my main reason for trusting them is that I'm wondering if they wouldn't just flat out lie and give a much stronger denial if they are in fact feeding the NSA with tons of data.

<comment><USER6> I think the rules said the companies are not allowed to disclose the exact amount of FISA requests. Instead they need to bundle them together with other requests from law enforcement.

<comment><USER5> They are not saying they are bundling them together - they are saying these are requests from law enforcement. It could just be a sloppy PR department, who knows.

<comment><USER7> Since multiple PR depts are saying largely the same thing, I'm inclined to believe this is what they've been informed they can release.

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> > For example, conversations which take place over iMessage and FaceTime are > protected by end-to-end encryption so no one but the sender and receiver can > see or read them. Apple cannot decrypt that data.

I don't know, then, why when I do an iCloud restore on a brand new device, all existing messages are recovered. Is this a way to recover all past messages that's not really addressed, if I can still recover all historical messages after replacing all devices connected to an iCloud account at once?

Cursory links:

[http://security.blogoverflow.com/2012/09/qotw-34-imessage- wh...](http://security.blogoverflow.com/2012/09/qotw-34-imessage-what- security-features-are-present/)

[https://github.com/meeee/pushproxy](https://github.com/meeee/pushproxy)

[http://imfreedom.org/wiki/IMessage](http://imfreedom.org/wiki/IMessage)

<comment><USER9> Hmm, if they are encrypted with your password and Apple does only store hash of that password for login and encrupted messages then everything is ok? I assume that when you change your iCloud password, the old messages are not visible anymore. Anybody to verify that?

<comment><USER10> > _I assume that when you change your iCloud password, the old messages are > not visible anymore._

I'm not sure why that would be true.

I posit that such a system _could_ work like this:

* An asymmetric keypair (e.g. RSA or ECC) is generated and stored on Apple's servers. The private key is encrypted with the user's password, which is not retained by Apple except in a hashed form.

* When a device is added, the private key is decrypted using the password and sent to the device.

* When your password is changed, either A) the private key is decrypted with the original password, and re-encrypted with the new password, or B) the private key is decrypted, used to decrypt all data, thrown away, and a new keypair is generated, with which all data is then re-encrypted.

It is, of course, obvious that Apple could, in theory, capture your plaintext password somewhere in there and use it to decrypt messages.

There are ways around this, such as devices doing the key decryption locally and only ever sending a derived/hashed form of your password to the server, and using a different derived/hashed form for encryption.

However, since you can log in to iCloud and Apple's store with your Apple ID in a browser, there is still no effective defense against Apple capturing your plaintext password (unless you care to perform a detailed inspection of a bunch of JavaScript every single time you load any content from Apple's servers).

<comment><USER9> But this is totally different thing. One is what some company stores by their IT design and then what some agency can require of that data. Second is whether some agency can force/ask some company to do more, to do active spying by that agency spec. So for example, if company X does not log locations, can NSA force them to start doing that? What else can NSA by law force private company X to do? Can they for example force CEO to stalk user Y by foot? If they can not do that, how can they force to develop IT-systems to do that? So when NSA ask to turn location tracking on, and company Y refuses, then what? CEO goes to jail?

<comment><USER10> Yes, I was responding to what your first comment said, which is, indeed, entirely unrelated to what you've now brought up.

Did your first comment not say what you meant?

<comment><USER9> Did, did, i just responded to your (and some other respondents) remarks that Apple _could_ do something they said they are not doing (like catching plain passwords). The fact is when company really-really wants to stalk you, they can.

</comment></comment></comment></comment></comment></comment><comment><USER11> I'll put this note here.

If you are being angry at Apple, Google, Microsoft and others for being dishonest about managing your data, you are being dishonest yourself.

Apple does not have army of policemen, courts, flying drones, space programs, military operations all over the world and monopoly on finance, education, roads, telecommunications and other important areas.

Government has. Whatever shit government forces other people to do to you is entirely government responsibility. Apple can and will happily operate and be nice to privacy without NSA intrusion. But the nature of NSA is that Apple _must_ comply under threat of violent coercion and also must play whatever game NSA makes them to play (e.g. maintain secrecy of the warrants).

If you are angry, your _entire_ anger should be forwarded towards the government — the monopoly of violence masking itself with a "common good" and "social contract" and making nasty things all over the world at your expense. If you are angry at your fellow citizens because of that kind of shit, you are being manipulated into a civil war by people with power.

<comment><USER12> _If you are being angry at Apple, Google, Microsoft and others for being dishonest about managing your data, you are being dishonest yourself._

I'll admit to being disappointed, but I will say this: I'm not angry. What it all boils down to is trust. Do I _trust_ you to keep my sensitive data secure?

Given the recent events and disclosures we've had regarding the exteme over- reach of the US intelligence agencies, it's very easy for me to say: No, I don't. Not anymore.

I cannot trust any US-based, US-operated or operated-elsewhere-US-owned subsidiary to keep my data secure.

That's not your fault, but it _is_ your problem, because I will be taking my data and business elsewhere. And you cannot regain my trust until your country improves its privacy outlook, so for your own sake, I would start lobbying if you already haven't.

<comment><USER13> Lobbying doesn't solve something like that. For any company, potential problems with a government are more dangerous than losing some of its customers - because government, if it wishes so, can cause this company to lose a lot more money or shut down completely. It's not companies' problem that they are forced to give up your privacy, it is precisely your problem, because you supposedly gave this system of governance legitimacy.

<comment><USER12> _It 's not companies' problem that they are forced to give up your privacy, it is precisely your problem, because you supposedly gave this system of governance legitimacy._

Just for clarity: I suspect you mistake me for a US citizen. I'm not.

<comment><USER13> Doesn't matter. Just because some guy revealed US government spies on people doesn't mean it's only the US who do this. Every government does this to the extent of its capabilities (example: [https://news.ycombinator.com/item?id=5830994](https://news.ycombinator.com/item?id=5830994)). It's the system, not some particular government. If you vote, whoever you vote for - you're giving this system legitimacy. Don't be mistaken by thinking some governments are nobler than others. Some are better at appearing nobler or worse at doing bad things. But they all will try and coerce businesses into doing things they want given the opportunity.

That's why taking your business out of one jurisdiction to another hardly solves the problem. The source of the problem is the system of governance, not unjust businesses.

</comment></comment></comment></comment></comment><comment><USER14> Apple's statement about iMessage security is inaccurate.

Apple signs your device's certificate used for secure iMessage communications. Apple can always generate a new certificate for you and provide access to its root keys to impersonate you and read subsequent messages.

While it has forward secrecy, iMessage, and indeed no PKI encryption system, is secure from a rogue root authority.

<comment><USER15> I think you misunderstand asymmetric encryption. you have also confused the two uses of asymmetric encryption;

(a) to prove identity -- a digital signature (b) to provide confidentiality -- encryption

If the _secret_ part of an asymmetric key is generated on a device and it lives and dies on that device, Apple doesn't have it -- the device does. Messages encrypted using the public part of that key can only be decrypted with a device that has the key.

Your augment regarding PKI encryption systems is flawed. You don't need or care about a "root authority" to provide confidentiality. If your assertion is/was true, how can or does PGP work? (Hint: signing _only_ affects identification and authenticity of a message)

<comment><USER16> _If the secret part of an asymmetric key is generated on a device and it lives and dies on that device, Apple doesn 't have it -- the device does. Messages encrypted using the public part of that key can only be decrypted with a device that has the key._

But he wasn't describing a technique for decoding messages that have already been sent. He's only claiming an attack on future messages.

With control of the CA, the attacker can just advertise a bogus public key for the victim in the key server, giving him access to future messages. He can now intercept and relay.

<comment><USER15> Future messages would need to be encrypted using the new key.

If the protocol announces when a new key is added to the "encryption set" how can you get away with that?

(when you add a new device to iMessage all the other devices "see" the new device being added and tell you about it).

It would be great to see a comparison between OTR and iMessage.

<comment><USER17> > (when you add a new device to iMessage all the other devices "see" the new > device being added and tell you about it)

And who writes the software on those devices that tells you about the new key again?

Based on what I'm reading, absent physical access to one of the devices authorized for using iMessage at the time, past iMessages should be safe. But, given the apparent ease of adding new authorized devices, tapping future iMessages sounds like it wouldn't be hard.

</comment></comment></comment></comment></comment><comment><USER18> > For example, conversations which take place over iMessage and FaceTime are > protected by end-to-end encryption so no one but the sender and receiver can > see or read them. Apple cannot decrypt that data.

I don't see how this can possibly be true.

I can sign into iMessage on my MacBook, and then into the same account on my iPhone and see the same messages. The only shared secret between the devices is my password, which means that the private keys must be derived directly from them. As Apple sees my password in plaintext fairly regularly, this is almost next to useless in situation where they are forced to reveal private messages by a government.

Given that the client still can't even keep messages in chronological order (even after the update), I severely doubt their encryption is implemented correctly either.

<comment><USER19> Actually the devices share a key bag, the popup notifying you when other devices are using your iMessage information comes up during this exchange. The fact that the messages don't immediately show up on other devices and can be out of order speaks to this P2P cryptographic style.

You can search for analysis of their protocol, I've done some dissection and it's pretty solid.

<comment><USER20> How does this address the concern though? Since a user only needs a password to access past sent messages, the security is only as strong as that password... and Apple can pretty easily circumvent any password related security since they are the ones verifying it.

<comment><USER19> True, you only need your password to issue a new key set to the keybag; you can actually monitor the protocol for devices that are distributed your decryption keys (including Apple if they were spying) and you get a popup on each device alerting you to this. It is possible Apple could create a back door for them to issue a certificate set to your keybag without your permission but that would be a can of worms for them, I'm actually comforted by the fact that they'd much prefer to keep end-to-end encryption for their own liability.

<comment><USER18> I wouldn't for a second trust that Apple /doesn't/ have the ability to do this.

</comment></comment></comment></comment></comment><comment><USER21> Apple, Jobs especially, has historically been somewhat cozy with Washington. For the sake of argument, let's say that, hypothetically, Apple is doing work for the NSA beyond what they've admitted to.

1\. Apple is a famously compartmentalized and secretive organization. If Google, Facebook, Microsoft, etc. could keep what they were doing a secret until the whistle was blown on them, Apple can too.

2\. So far, the whistle has not been specifically blown on Apple.

3\. The worse it is, the less likely Snowden had access to it.

4\. An admission of guilt would shake trust in Apple as badly as being exposed by a whistle blower, so there's no motivation to do the former in order to prevent the latter.

If Apple's gotten their hands dirty, they're not going to admit to it. I'm not accusing Apple of anything. I'm just pointing out that this press release is utterly and totally meaningless unless you _trust_ the NSA and people working with them not to lie to you.

I may sound paranoid but, in a country where the government has given itself the power to coerce companies into spying and legally prevent them or their employees from revealing the truth, there is no room for trust. It is not possible to trust the statements of any U.S. corporation as long as the U.S. government clings to this power. Obama may be trying to sell the U.S. public on the idea that the safety gained is worth the privacy lost, but the real issue is the death of trust.

<comment><USER22> Steve Jobs was never cozy with Washington. There's no evidence that he ever interacted with anyone in Washington. Apple didn't even have any lobbyists until Tim Cook became CEO.

[http://www.bloomberg.com/news/2013-05-21/apple-chief- talks-t...](http://www.bloomberg.com/news/2013-05-21/apple-chief-talks-taxes- in-pushback-to-heat-in-washington.html)

<comment><USER7> "Apple didn't even have any lobbyists until Tim Cook became CEO."

I don't think that's true. From personal anecdote, I've met one of Google's European lobbyists and during the conversation he spoke about how his counterparts in Apple worked. If they had people in Europe, I'm sure they had them in the US. Perhaps they don't spend much on lobbying but it seems almost foolish _not_ to have people on the ground when you're as big a company as Apple. If only to keep an ear to the ground regarding political winds (who wants to be blindsided by regulatory changes?).

Edit: This doesn't mean they were 'cozy' with anyone, I'm just pointing that they likely existed.

<comment><USER22> I interpreted the article to mean that the lobbyist Cook hired was the first one, but I guess it doesn't really say that. It does say that Apple maintained a very low profile in Washington until recently, and still spends about 1/4 what Facebook does in lobbying.

</comment></comment></comment></comment><comment><USER23> "The most common form of request comes from police investigating robberies and other crimes, searching for missing children, trying to locate a patient with Alzheimer's disease, or hoping to prevent a suicide."

Such a broad range of things included in 'the most common form of request' really reduces the power of the statement.

<comment><USER24> On the contrary, I think the point is that they're all relatively mundane compared to "uncovering terrorist plots!", which has been the alleged motivating factor behind this whole situation.

</comment></comment><comment><USER25> Notice how Apple's PR strategy always involves waiting. They never speak up until after the main fury has died down. It's like when a person is being yelled at, sucks it up, waits 20 seconds, and then calmly responds.

It worked in Antennagate, and they are catching a lot less flak for their statement than Google and Facebook, who stepped into the melee right away.

</comment><comment><USER26> I read that as. "The US government told us to say this (in order to reassure our customers...)"

<comment><USER27> Me too. Every statement I've read from various companies seem to be the same.

</comment></comment><comment><USER28> _" From December 1, 2012 to May 31, 2013, Apple received between 4,000 and 5,000 requests from U.S. law enforcement for customer data. Between 9,000 and 10,000 accounts or devices were specified in those requests, which came from federal, state and local authorities and included both criminal investigations and national security matters."_

This looks pretty good (assuming it is honest) with only one possibility for a big weasel worded escape which if they are using they might as well lie.

It doesn't say "information was requested" or "information was provided" for only 9,000-10,000 devices but that only that number were _specified_. If there were orders that didn't specify devices and accounts (e.g. all messages globally). It might be that this is to cover the fact that those communicating with the specified devices would have some information revealed or it might be that the "specifed devices" figure is misleading.

If anything these numbers are suspiciously small (once the local police department regular investigations are removed). Unless there is a significant breadth to the requests you have to wonder if the FBI (and NSA/CIA for non- citizens) are doing enough targeted requests to track real suspects. Following this line of reasoning you could conclude that they don't need to!

<comment><USER29> > It doesn't say "information was requested" or "information was provided" for > only 9,000-10,000 devices but that only that number were _specified_.

Actually, it does say that: "were specified _in those requests_ ".

<comment><USER28> I don't think that I explained well enough.

The number "specified" may be less than those information is provided on in the resulting report. "All devices in the US" does not specify any devices but it includes rather a lot.

In a more limited way a request for a specific users details could also include traffic information about first level contacts (and possibly more - try seven degrees and see how few requests you can make to get all the company's details).

Now a plain reading of "all the devices in America" would suggest that it specified millions of devices but the NSA like their wordplay and they might only mean when specific devices are requested rather than included in another request.

Note that Yahoo doesn't mention the number of accounts specified. Possibly they thought that might be too misleading.

[1] [http://yahoo.tumblr.com/post/53243441454/our-commitment- to-o...](http://yahoo.tumblr.com/post/53243441454/our-commitment-to-our-users- privacy)

</comment></comment></comment><comment><USER30> Don't we already know that Yahoo fought hard against PRISM? Why are all of these companies lying so blatantly by saying they've never heard of it?

<comment> brown9-2 Because the government doesn't tell companies required to provide them information under FISA what the NSA calls their in-house analysis software.

</comment></comment><comment><USER31> "Apple cannot decrypt that data"

Right. No doubt true.

But there is a catch... and this is a big catch.

Even if the key generated on a device lives and dies on a device, it can still be an insecure key if it is generated by an insecure process like concatenating a well-generated but short (low number of bits) key with an escrowed, possibly public-key encrypted, "LEA" (law enforcement access) key.

<comment><USER15> Skipjack is dead, extinct.

If this were true, it would be possible to find it by disassembling iOS. There would also be a suspicious "unexplained" payload that accompanied anything that was encrypted with a symmetric key.

<comment><USER32> Interestingly enough, famous "_NSAKEY" was found only after Microsoft forgot to remove the symbolic debug info of the internal code of the DLLs:

[http://web.archive.org/web/20000617163417/http://www.crypton...](http://web.archive.org/web/20000617163417/http://www.cryptonym.com/hottopics/msft- nsa/msft-nsa.html)

I believe the second key remained to exist, only as "KEY2"

</comment></comment></comment><comment><USER33> All of your friends say to you, "Your girlfriend is cheating on you." Some of your friends you trust very deeply. Some only moderately so. But you love your girlfriend. You think about some inconsistencies in her behavior in the last few months which makes you suspicious. But on the other hand, her explanations make sense and have supporting evidence of their own. Do you choose to believe a group of your friends, or your significant other?

We all guess how this story plays out, as it often has before. The friends are right. Some of the friends don't even know each other, so its confirmation from different points of origin. The girlfriend does something stupid and gets caught in her lie. You feel stupid for believing her, break up, move on with life, etc.

But what about the cases where the opposite is true.

It turns out that several of your friends actually have a few friends in common that they don't know about. One of them starts a rumor that gets slight confirmation by a couple of random events: The girlfriend is seen talking to a guy from college she was friends with. She is overheard on the subway late at night in a heated argument with someone about her boyfriend. Stuff like that.

The same stories build up and mutual association of close friends tell you that she's up to no good. You choose to confront her, and in either situation you believe her explanations or you think she is lying, when in fact she is telling you the truth.

I know this is an odd allegory. I think that what I'm trying to say is that we are now at a point where reasonable people will start making choices such as either "The government is watching everything I say online" or "The government is only doing routine requests for mostly good causes". People who are more conspiracy minded, myself included, start choosing the "watching everything I say" argument, while other folks take the "mostly good causes" approach.

We've now seen at least 5-6 of these public announcements from companies like Apple, Facebook, and Google that more or less are saying the same thing. They respond to legitimate government requests but push back against seemingly illegitimate ones. And on top of that, the requests are small in number in the 10-20k range.

We can either say that a) the NSA/FBI are only doing moderate numbers of requests and not wholesale collecting and monitoring us like 1984 on steroids, or that b) they're collecting more information about us than they care to let on and all of our worst 1984-esque fears are coming to pass.

To any readers of this that read anything else I write, I'll say this: I lean towards the latter.

I am an admitted layman (don't ask me to do advanced math), but I try to stay informed about the directions that technology is leading us and its effects on society. I'm what you might loosely call a "Singulitarian" in that I feel justified in stating the transformative effects of technology over the next 20-100 years will be far different than anything we've ever experienced before. We're already in the low end of the hockey stick.

I see that right now, including the last few years and a few years into the future, we are living in the 1984 Orwellian state. A little bit gentler and a lot shinier, but basically 1984. But this won't last. Right now the NSA is building a massive data center in Utah, [http://www.sltrib.com/sltrib/politics/56461026-90/nsa- data-u...](http://www.sltrib.com/sltrib/politics/56461026-90/nsa-data-utah- center.html.csp). That gives them the ability to capture and store more data than there are stars in the sky. But this is only temporary. As with all technology, this eventually will scale out to be accessible to all of us.

What is 1984 like when its 2084 but the State is everyone you know and possibly everyone in the world?

So it summarizes like this (note my distaste for TLDR):

Many large companies are spouting the same line right now. We only cooperate with legal government requests, and there aren't that many requests.

This has been going on for two weeks and like all humans, we're getting burned out. Most of us will decide one way or another that the government is spying on us and move on. We'll either not care of be slightly more cautious of what we say/do online. Not that it will help. Either way, your next paycheck is coming, rent is due, oh a bachelor party!, look at the shiny Google/Apple thing!

I don't claim to have an answer. I'm not going to change much of what I do online. I'm not a violent revolutionary, though I'm beginning to think its time for US Govt 2.0 through more peaceful means.

Anyway, if you made it to the end of this congratulations. If you're in SF, buy me a beer and I'll continue at length.

<comment><USER34> > I'm not going to change much of what I do online. I'm not a violent > revolutionary

The problem with this whole scenario is not how you view yourself, but how the government views you. They define if we are a threat, not ourselves.

<comment><USER35> And look who has been defined a threat in the past: civil rights leaders, protesters, and those with political differences.

</comment></comment></comment><comment><USER30> Why are these companies only publishing requests from the last six months? That seems like a rather short time span.

<comment><USER20> Presumably because that's all the government authorized them to say.

</comment></comment><comment><USER36> > Any government agency requesting customer content must get a court order

This doesn't count for much given that they use secret courts, though.

</comment><comment><USER37> "Between X and X+N" requests/devices".. why can't they say the exact amount?

</comment><comment><USER38> I was really hoping not to see the phrase "direct access" this time.

<comment><USER39> But we get another statement that iMessages is end-to-end encrypted. Apple continues to state that, but there's also some evidence to the contrary. Like newly authorized devices being able to somehow retrieve the chat history.

Someone more capable than I should really investigate iMessages.

<comment><USER40> "Apple can not decrypt it" \- does it mean somebody else can? Or is it encrypted at a level that is virtually unencryptable with today's technology?

<comment><USER31> It could mean somebody else can, because of key escrow and partial key escrow. Even if the key is generated on the device and stays on the device, you have to look at how the key is generated. With key escrow, the messages can be secure against attacks by everyone except those who have the escrowed portion of the key.

<comment><USER15> And to do that you _must_ _also_ transmit the escrowed part of the key in the protocol -- which is 100% detectable as a blob of " _extra_ but seemingly unnecessary data".

Do you see that? Does anybody see that? Has anybody seen that?

</comment></comment></comment></comment></comment><comment><USER41> They should have a comment box for people to comment.

</comment><comment><USER42> "We don't offer backdoor access for our hardware either."

whew... so glad to see that in there :)

<comment><USER43> "You'll have to find it yourself or get a court order." :)

</comment></comment><comment><USER44> Worthless statement...

</comment><comment><USER45> _Apple has always placed a priority on protecting our customers' personal data, and we don't collect or maintain a mountain of personal details about our customers in the first place. There are certain categories of information which we do not provide to law enforcement or any other group because we choose not to retain it._

This is why Facebook and Google are a nightmare scenario for privacy, they retain everything and then some to profit from it. If they have it (and boy do they have info on users,) NSA and FBI can easily obtain it, all in one place.

<comment><USER35> That is because, at the end of the day, Facebook and Google are advertising companies and Apple is not.</comment></comment>


Ask HN: How do you make good use of old iPhones? - <AUTHOR> Keep as backup phone? Recycle? Security camera? TV control? <comment><USER2> This might be quite UK centric and is a very dry answer but old smartphones should be donated to asylum seekers.

I remember reading an article a year or so ago about how asylum live on the welfare afforded to them and their phone bills (a necessary expense) were a huge chunk of it, basically all of them paying well more than I do on my PAYG for similar service. What I see must be the issue is that, without a phone of their own, the cheapest short term option is to sign up for an option that provides a phone.

This immediately limits them from the ultra low budget GiffGaff/Asda/etc type options and will very frequently tie them down to a much less budget friendly carrier if not straight into a contract.

<comment><USER3> I don't understand this. If their problem is that they HAVE TO use Giffgaff, I can't sympathise with that - I use it myself and love the service Giffgaff provides.

So this doesn't make sense to me - it doesn't feel they're forced into a corner at all. I'd rather sell the phone and donate money to asylum-seeker supporting charities.

<comment><USER2> Nah, you misread.

Their problem is that they _can't_ use SIM only options as they need a phone (potentially multiple) too, so it's cheaper in the immediate term to sign up to a £15-20 a month plan that provides a (really crappy) phone than a similar £7 a month one which doesn't.

Of course, on a purely rational level seeing as we're talking about iPhones as opposed to just phones in general, the best option would be sell the iPhone and use the proceeds from it to buy and donate multiple cheaper (but sturdy) Androids

</comment></comment></comment><comment><USER4> Old smartphones are good as security cameras: they have a nice camera and wi- fi of course, but also could be much better than traditional security cams as they also can have 3G/4G networking and a battery, in case power/internet is cut for example. They could also record or play sounds, like an alarm. I have an iPhone 4 and iPhone 5 doing that. However, it's not easy to find an app for such a use, I'm planning to open-source my custom one + setup.

However, BE CAREFUL, devices with batteries MAY BE DANGEROUS. I have had so many bulging/swollen batteries, even with devices just stored in a drawer. No incident or fires yet fortunately. So always keep an eye on them!

<comment><USER5> What's the best software to turn an old iPhone (or Android phone?) into a security camera?

The concept does seem good, they certainly have more capable hardware and cost less than a lot of network attached cameras.

<comment><USER4> There are a few apps on the App Store: iPCamera for example ([https://itunes.apple.com/us/app/ipcamera-high-end-network- ca...](https://itunes.apple.com/us/app/ipcamera-high-end-network- camera/id570912928)), it provides an MJPEG stream that you can process with a camera monitoring software like ZoneMinder.

There are also a few open-source projects with this kind feature: StreamIt for example ([https://github.com/twittemb/StreamIt](https://github.com/twittemb/StreamIt)), which also provides an MJPEG stream.

This would be the most basic stuff.

MJPEG is however not the most efficient (~200Kb/s networking). There are also some "video" streaming projects like [https://github.com/shogo4405/HaishinKit.swift](https://github.com/shogo4405/HaishinKit.swift) or [https://github.com/wlanjie/lf.swift](https://github.com/wlanjie/lf.swift), which provide MP4/RTMP/HLS streams and could be processed with a camera monitoring software like Shinobi ([https://shinobi.video](https://shinobi.video)).

I hope this helps!

</comment></comment></comment><comment><USER6> I run repair shops for a living, so I can tell you the #1 thing people do is give them to their kids or other family members.

Trade-ins with carriers are big as well, and of course selling them will still net some money as well. You can sell to local stores or online at sites like Swappa.

People who aren't as technical as the typical HN reader often don't know that iPhone, iPad, and laptop batteries are replaceable, and it's usually relatively cheap to do so. Please educate your friends and family members!

</comment><comment><USER7> I always look for that one friend who still has a really bad/old smartphone and give it to them for free.

<comment><USER8> As someone who was that friend, it's greatly appreciated. It's nice to still be able to use a semi-modern phone when you're living on $14,000 a year.

</comment></comment><comment><USER9> Old iPhones make excellent portable music players. Use them yourself in the patio, car, bathroom, etc.

Donate to others who would have a need.

I donated my favorite iPhone5s (the best iPhone ever) to my dedicated home helper (yeah ... they exist in this part of the world!)

</comment><comment><USER10> Donate. There are a lot of organizations that collect secondhand phones for people in need, including the homeless, refugees, people escaping domestic abuse, and the like.

Wipe thoroughly first, of course.

</comment><comment><USER11> Depending on how old, sell them on eBay. They have okay resell value, you get money and keep a phone out of a landfill.

<comment><USER12> Every time I upgrade I sell my old phone on eBay. I keep my hardware in good shape and I'm often surprised at the resale value after 2-3 years. Feels great to recover some of the cost of the upgrade!

</comment></comment><comment><USER13> I use them. I've actually never bought a smart phone (nor gotten one for "free" due to some contract) because there seem to be so many people willing to stop using functional phones. Currently I'm using an iPhone 5c and don't have any upgrade plans anytime soon.

</comment><comment><USER14> I gave them to my parents. I also still have an old iPhone 5 that I bring to the rock climbing gym and use on the WiFi because I won't be as upset if it plummets to its death from my (zipper) pocket or gets crushed somehow.

With the ability to receive phone calls on linked devices over WiFi, the old phones are still useful where the risk to the device is unusually high.

</comment><comment><USER15> I have an old iPad2 and I'm honestly amazed at how bricked it is at this point just from the passage of time.

Recently I turned it on after a long while, asking myself this post's exact question.

I went into the browser, but I got SSL errors accessing Google, Apple, etc. Okay...

Then I went to the settings app to see if there are updates, but the device is obviously unsupported at this point.

Finally I went to the App Store to try and install some picture frame app or something, but that was stupid of me since I already knew Apple certs were no longer valid in my obsolete OS.

Bottom line: It's trash with a touch screen. Galaxies are much better in that aspect. Rooting them provides a world of possibilities.

<comment><USER16> I disagree, I also have an iPad 2 and it works perfectly fine for watching youtube and browsing. I can't say I have any issues with downloading apps either, of course most new ones wont be supported.

</comment></comment><comment><USER17> We've had an iPhone 3gs (30-pin) plugged into a speaker playing music in our son's room for years. He plays the violin, so listening to the piece he's working on and previous pieces is useful and calming for him.

</comment><comment><USER18> Old iPhones:

1) Make excellent phones.

2) Make great music players.

3) Make great backup phones to use when hiking, biking, running, etc.

4) Make great GPS devices for older cars (Some maps apps let you download maps to be used offline).

</comment><comment><USER19> I would like to use mine as a "pay as you go backup". But I don't know a service that would let me do that without any monthly fee.

<comment><USER20> What are you looking to do exactly? I don't quite get it. Pay as you go SIMs don't have a monthly fee (at least not in the UK).

</comment></comment><comment><USER21> I connect my old phone to my speakers during parties as a kind of streaming device. It's easy to control them from my main phone

</comment><comment><USER22> I had to use my old iPhone 6 as a backup recently when water got into my 6S and the touch screen became erratic and had dead spots on it. Took a few days for it to get repaired (sister-in-law's husband did it for free so I wasn't going to complain about how long it took) so I had to use the old one during that time.

</comment><comment><USER23> I mostly only get new ones when there are serious issues with the old one, so generally they just get recycled. My first, a 3GS, did last many years with a white noise app as a overqualified noise machine in the kids' room but even it is finally dead. One of my wife's was still in good condition at one point and we did resell it.

<comment><USER24> Did you know what caused your 3GS to pass on?

Wondering how many phones out there could be given a second lease on life if just given a battery replacement.

</comment></comment><comment><USER25> I use my old iPhone as an international travel phone. I keep the Messages, Mail apps, but add things like WhatsApp, VPN, Skype, Google Translator, Measurement Converters, GoEuro for use when I travel overseas. Bonus points if you have to turn it on when you get back to the US and it doens't have many apps on it.

</comment><comment><USER26> I pass them down to my kids as iPod Touches. Then I mostly forget about the previous generation.

I'm hesitant to replace their iPhone 6's with our iPhone 7's. It doesn't feel like an upgrade. Our 7's have had issues since the beginning, and the headphone jack is _very_ valuable to the kids.

<comment><USER27> I'm going the opposite way, I'm trying to get rid of the 6s. I've had nothing but bad luck with touch disease and NAND solder joints breaking over and over.

The whole early build of the 6 and 6+ is cursed. I hope Apple loses that class action lawsuit in a super-bad way.

</comment></comment><comment><USER28> Give it to someone from the Third World, chances are, it'll change their love more than you would imagine.

</comment><comment><USER29> They mostly collect dust as backup phones. But it feels better as insurance than selling them away for a couple hundred bucks a pop.

Maybe I'll put the Hue app on one so I have spare remote controls for lights.

It would be nice if I could use an old iPhone as a hub for HomeKit, but I think it only supports iPads.

<comment><USER30> Yep only iPads and AppleTVs

</comment></comment><comment><USER31> I've jailbroken a couple and given a few more away to family that otherwise wouldn't have paid to upgrade.

Would love to run little servers and other dumb stuff on them, but I never have. Always felt like it'd be fun to run a server/Python process on my older phones.

</comment><comment><USER32> I made a Myst linking book like this [https://learn.sparkfun.com/tutorials/myst-linking- book](https://learn.sparkfun.com/tutorials/myst-linking-book) but it was way easier to do with a smartphone.

</comment><comment><USER33> I thought about using mine as a Fire TV remote because the one that comes with it is so bad, but the battery life just isn't good enough (and I don't want to have to always plug it in after use - I keep my remotes in a tray inside my coffee table).

</comment><comment><USER34> I have several phones doing sterling duty as paperweights and look forward to suggestions. One disappointment of our market system has been the failure to produce new apps designed to run on older hardware.

<comment><USER35> It's also kind of tragic that companies stop providing software updates for older working devices, or allow open source to fill in. I can pull my PC from 20 years ago out of a closet and reasonably expect to run Linux on it, yet there is no equivalent for my 8 year old iPad.

</comment></comment><comment><USER36> I created an itunes account for my daughter when she was two months old. The phone stays on a charger in her room and is used for nothing but playing apple music when she's sleeping.

<comment><USER37> I hope you realise & know that an old device with always connected charger is at high risk of fire.

<comment><USER20> Not really considering the battery is not charging constantly (contrary to popular fear-mongering, once a phone is at 100% and left plugged in, the phone will simply run off the power and disconnect the battery).

</comment></comment></comment><comment><USER38> Sell the old one - I get around $500 back every year from Craigslist when I upgrade. If that's too much of a hassle Apple will buy it back from you for a little less.

</comment><comment><USER39> I use my old phones as wireless IP security cameras with visual and audio triggers to capture the video, I also use them as backup 2FA devices.

<comment><USER40> What apps do you use for security?

</comment></comment><comment><USER41> 1\. The security camera to watch your pets while you're away too! I like the Dog Monitor iOS app

2\. Shower music player

</comment><comment><USER42> I give them to my family overseas in the Philippines. Old IPhones are still very useful over there.

</comment><comment><USER43> I give them to friends.

</comment><comment><USER44> We typically donate ours</comment>


Ask HN: Give me some list of movies about Entrepreneurship and Technology...  - <AUTHOR>

<comment><USER2> Check out these threads:

[https://news.ycombinator.com/item?id=450702](https://news.ycombinator.com/item?id=450702), [https://news.ycombinator.com/item?id=4060887](https://news.ycombinator.com/item?id=4060887)

Also my personal list of favorites that entrepreneurs should watch (although not necessarily about technology):

Glengarry Glen Ross - [http://www.imdb.com/title/tt0104348/](http://www.imdb.com/title/tt0104348/)

Moneyball - [http://www.imdb.com/title/tt1210166/](http://www.imdb.com/title/tt1210166/)

The Pursuit of Happyness - [http://www.imdb.com/title/tt0454921/](http://www.imdb.com/title/tt0454921/)

Jerry Maguire - [http://www.imdb.com/title/tt0116695/](http://www.imdb.com/title/tt0116695/)

Catch Me If You Can - [http://www.imdb.com/title/tt0264464/](http://www.imdb.com/title/tt0264464/)

</comment><comment><USER3> Not a movie, but Masters of Doom is a great book about the rise of ID Software ([http://www.amazon.com/Masters-Doom-Created-Transformed- Cultu...](http://www.amazon.com/Masters-Doom-Created-Transformed- Culture/dp/0812972155))

</comment><comment><USER4> This has a nice list. [http://ventureburn.com/2013/11/5-great-movies- entrepreneurs-...](http://ventureburn.com/2013/11/5-great-movies- entrepreneurs-should-watch-for-reel-inspiration/)

</comment><comment><USER5> Code Rush. Documentary about Netscape: [http://en.m.wikipedia.org/wiki/Code_Rush](http://en.m.wikipedia.org/wiki/Code_Rush)

</comment><comment><USER6> E-dreams. about kozmo.com: [http://www.imdb.com/title/tt0262021/](http://www.imdb.com/title/tt0262021/)

</comment><comment><USER7> Startup.com [http://www.imdb.com/title/tt0256408/](http://www.imdb.com/title/tt0256408/)

</comment><comment><USER8> I strongly recommend watching Pursuit of Happyness - specially since it's based on a true story.

</comment><comment><USER9> \- The social network

\- The startup kids

\- Jobs

<comment><USER10> these, plus:

\- The Triumph of the Nerds: The Rise of Accidental Empires

\- Pirates of Silicon Valley

</comment></comment><comment><USER11> Also there is a series called BETA

</comment><comment><USER12> \- How America Was Built - (Rockefeller & Mellon)

</comment><comment><USER12> \- The CIA Movie With Colin Farrell.</comment>


Show HN: Miki: Makefile Wiki, Minimal makefile-based personal wiki - <AUTHOR> https://github.com/a3n/miki <comment><AUTHOR> Creator here.

From the README:

* Write wiki pages in reStructuredText (rst) or Markdown (md). Both types can be in the same wiki.

* Run make to output html, and/or pdf, and/or plain text.

* Read your wiki pages.

* Optionally catalogs any book/media files in your wiki.

No software provided, just a makefile and two convenience scripts.

No templates provided.

Relies on existing tools that you already have or are easy to install.

<comment> a-nikolaev wonderful work! file system, make, and other standard tools are our best friends

</comment></comment><comment><USER2> I don't get it. This is not a wiki. A wiki is a collaboration tool with fast reads and searches and slow writes. This is a simple static site generator, such as jekyll/hugo/..., just without the automatic updates, filewatch or http save triggers. Those generators have all these features, and much more.

To turn this into wiki, add a js library to allow editing and saves (=> tiddlywiki), and maybe think of markdown javascript renderers (=> reveal-md)

<comment><AUTHOR> Yet, it _feels_ like a personal wiki to me. :)

I think that a focus on low level tools (javascript), or on current and common implementations as the definition of wiki, is unnecessarily restrictive.

I was going to "count the ways" that Miki can be considered a personal wiki. It doesn't much matter. It works for me, and I hope maybe a few others.

Instead, I'll propose that Miki, and other tools like it, are in the realm of personal wiki, in a similar way that Unix is an IDE. [https://sanctum.geek.nz/arabesque/series/unix-as- ide/](https://sanctum.geek.nz/arabesque/series/unix-as-ide/)

<comment><USER3> > low level tools (javascript)

Sincerely confused by this parenthetical statement.

<comment><AUTHOR> rurban, my parent, says "to turn this into a wiki" and then lists javascript for on-page editing and markdown rendering. That's one way to get it done, of course.

But for sitting on the couch with your wiki totally contained on your lap in your laptop, editing in a text editor is a reasonable solution to "edit this page."

"Render markdown" from the command line is also a reasonable solution in that (my) scenario.

</comment></comment></comment></comment><comment><USER4> I've been half-heartedly looking for something exactly like this for a while, thank you for posting it!

Instead of using Uppity, which appears to be abandoned (?), I found Navigate Up WE ([https://addons.mozilla.org/en-US/firefox/addon/navigate- up-w...](https://addons.mozilla.org/en-US/firefox/addon/navigate-up-we/)), which performs essentially the same functionality and appears to be maintained.

Thanks again, this will be very useful!

<comment><AUTHOR> And thanks for the bug report on github. :)

I have noticed a warning with uppity due to Mozilla's redesign of their extension support, but it's still working for me. Thanks for the tip to Navigate Up.

Not related to the bug, I'm curious what text editor you use. I use Vim, and the reason why I suggest writing links in your source files ending in .rst or .md is so that I can go from source to source in Vim, by putting the cursor over the filename and then _gf_. That, and then _ctrl-o_ to go back, is very useful to me.

As rst and md are human readable, with a good editor like Vim, you could treat your source files _as_ the wiki and never generate. Not that I _would_ , but you _could_.

Do you use a different editor with similar capability?

<comment><USER4> I mainly use Vim, and have tried using both Vimwiki and Org-mode as personal wikis in the past, but they were never quite what I was looking for.

I like writing the wiki content in Vim, but for viewing it I think I prefer it as a webpage.

Following file links in Vim is really useful though, I should use it more often!

<comment><AUTHOR> I also write in Vim and prefer the webpage view.

File links in Vim are really handy in your Miki when you're writing a couple of pages in a topic and you want to jump back and forth.

Of course in that scenario you can also ':e .' to edit the directory, or use the vim-included netrw, or install nerdtree.

</comment></comment></comment></comment><comment><USER5> I understand "wiki" to mean something editable by users. I'm not really sure that this fulfils that. Maybe brand as a site generator?

<comment><AUTHOR> It's a _personal_ wiki, and it is editable by the one user on the local machine, by editing rst or md source files. Could make it editable by other users on the local machine through file permissions.

It's purposefully minimal, so no in-page editing, for example. I wanted to write no software and use what I already have that does the job.

If you want to call it a site generator, I'm fine with that. :)

Personal wikis are a thing, though. TiddlyWiki is more like what you're expecting, but it's still mostly a local machine thing, notwithstanding their recent (to me) publishing features.

VimWiki is more like what I've made, except it's specific to vim. Still local.

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

<comment><USER6> Personal wiki = not a wiki.

vi is a "personal wiki"

</comment></comment></comment><comment><USER7> It would be cool to have it generate a sitemap from tree(1)

<comment><AUTHOR> Wow, cool. Thanks.

Done.

I thanked you in the commit log.

<comment><USER7> Ah! Neat, thank you!

</comment></comment></comment><comment><USER8> I use asciidoc with asciidocfx and then push it to a git repo.

This way I can keep it in sync between multiple machines.

I'd like to create a webapp with offline capabilities to do this but can't see myself getting around to it anytime soon.

</comment><comment><USER9> This is great. I like how make builds dependencies and uses modification times to avoid doing unnecessary work. It's a sound concept. Is there anything like make that uses yaml or JSON as input?

<comment><USER10> What do you mean by "input"? Do you want a structured data file instead of the Makefile, or do you want to process structured data inside Makefile rules?

</comment></comment><comment><USER11> Would it be possible to somehow run this on Windows?

<comment><USER12> The dependencies should all be available, either directly or through cygwin. And of course there is the Linux subsystem now.

<comment><AUTHOR> Yeah, cygwin would be the first thing I'd try for Windows. In fact I listed cygwin as a possibility at first, but took it out as I don't have a Windows machine ATM, so I didn't want to assume.

You can check for cygwin packages on their web search page [https://cygwin.com/cgi-bin2/package-grep.cgi](https://cygwin.com/cgi- bin2/package-grep.cgi)

rst2pdf is missing, so _mwk pdf_ and _mwk all_ would fail for rst source files. You could edit that out of the makefile, or find a replacement and alias rst2pdf to it.

pandoc is missing from cygwin, but pandoc itself has a windows installer, [http://www.pandoc.org/installing.html](http://www.pandoc.org/installing.html).

That page suggests a latex package for pdf output, so there's a fighting chance you could get markdown working in Miki from cygwin if you put the Windows pandoc in your cygwin path. I've done similar for other tools in the past.</comment></comment></comment>


Scott Thompson to step down at Yahoo - <AUTHOR> http://www.engadget.com/2012/05/13/yahoo-ceo-scott-thompson-steps-down-degree-scandal/

<comment><USER2> As always the only thing Engadget added to the article they're hijacking is links to more of their own rubbish and a long list of SEO spam tags.

[http://allthingsd.com/20120513/exclusive-yahoos-thompson- out...](http://allthingsd.com/20120513/exclusive-yahoos-thompson-out- levinsohn-in-board-settlement-with-loeb-nears-completion/)

</comment><comment><USER3> I wonder what impact this will have on the lawsuit war against Facebook. This was one of Scott Thompson's priorities while he was CEO, perhaps we will see a softening now that he is out?

</comment><comment><USER4> Maybe this is in one of the stories but I missed these points:

1) Did he lie or did Yahoo? I thought I saw somewhere that at his previous position the degree in question wasn't listed.

2) If he added the degree, would it really have made a difference in the hiring decision? "No CS degree... pass"

<comment><USER5> 1) From the Kara Shwisher article: "Sources said that Heidrick told Yahoo's board that it was in possession of a resume that Thompson had apparently submitted showing the inaccurate CS degree on it."

2) The board brought this guy in to gut engineering and research among other departments, so I doubt they cared that he was an accountant. You don't need to be a genius to hand out pink slips.

<comment><USER4> 2) That's what I was thinking, so a CS degree wouldn't matter. If Yahoo was worried about looking bad, my question has to be: "Why just now and not before?"

</comment></comment></comment><comment><USER6> I am curious to see what competent, intelligent person with CEO experience would even want to take his place...it seems like the only people capable of turning Yahoo around most likely don't want to board that sinking ship.

</comment><comment><USER7> I'm wondering when Yahoo won't rate the HN front page. Its all but irrelevant now; is it just their place in history that gives them some halo?

<comment><USER8> [http://trends.google.com/websites?q=yahoo.com%2C+facebook.co...](http://trends.google.com/websites?q=yahoo.com%2C+facebook.com%2C+twitter.com%2C+yelp.com&geo=all&date=all&sort=0) yahoo is big, traffic wise better than ever and ....... just mainstream. and even if we like it or not, IT wise, business wise the mainstream still matters.

</comment></comment><comment><USER9> Yahoo shouldn't have sued FB.

<comment><USER10> If he actually had studied computer science he might know the ridiculousness software patents. He may have also experienced the power of using software to solve big problems -- like the kind Yahoo has.</comment></comment>


Henry Kissinger: The Coronavirus Pandemic Will Forever Alter the World Order - <AUTHOR> https://www.wsj.com/articles/the-coronavirus-pandemic-will-forever-alter-the-world-order-11585953005 <comment><USER2> [http://archive.is/Jk1SZ](http://archive.is/Jk1SZ)

</comment><comment><USER3> I tend to associate the arrogant smugness displayed by characters like Henry Kissinger. With a lack of intelligence, knowledge and competence. Change my mind.</comment>


New Engine Invention is 3.5X More Efficient Than Current Combustion Engines - <AUTHOR> http://news.discovery.com/autos/new-car-engine-sends-shockwaves-through-auto-industry-110405.html

<comment><USER2> _hope to have a car-sized 25-kilowatt version of the prototype ready by the end of the year._

This was posted last year. Any update?

Edit: well at least you can see it in action here: <https://www.youtube.com/watch?v=nIPSTTvHfLs>

Edit2: Just noticed it said "car-sized _25 kW_ " but that's only 33 horsepower. That's about half as much as a Smart car.

<comment><USER3> Assuming that the engine is both lighter and more efficient according to the article you might think that the horsepower numbers are going to be on a different scale compared to what we're used to. Old Geo Metros ran on 55HP and they used the "old inefficient engine".

<comment><USER2> Horsepower is power _output_. So the new engine might take a lot less fuel, but it still only puts out half as much power as a Smart car engine.

<comment><USER3> I'm not talking about power output. It's obvious that it puts out half as much power as a Smart Car. What I'm saying is that it might not matter.

I'm talking about necessary power output. If the engine cuts the weight of the car in half, then the scale of HP you're used to hearing applied to haul the car around in a desirable manner changes because you don't need as much.

<comment><USER4> > If the engine cuts the weight of the car in half

Then this engine has negative weight because current engines are much less half the weight of the car, let alone half the weight of the car plus typical load (which is the relevant weight).

Yes, an engine that weighs less means that you can have other parts that weigh less as well, but it's still not enough.

</comment></comment></comment></comment></comment><comment><USER5> This is BS. Thermodynamics places a limit on engine efficiency at about 37%, the top of the line combustion engine is maybe 25% efficient. Thus an increase in efficiency of 3.5 times is BS. The only possible way to get the efficiency above 37% is to have the engine get super hot, ~>1500F. Which for obvious reasons is not practical

<comment><USER3> "As a result, the generator is 3.5 times more fuel efficient than typical combustion engines." It's talking about fuel efficiency, not thermal efficiency. Figuring in that the generator weighs a lot less and can make the car a lot smaller is probably where these numbers come in. The article could be a bit more specific about it, though.

<comment><USER4> > Figuring in that the generator weighs a lot less and can make the car a lot > smaller is probably where these numbers come in.

The only relevant question is whether "the generator" is significantly more efficent than a conventional engine with the same power output, size, and weight. After all, we can make smaller conventional engines to put in smaller cars.

Disagree? Then I'll point out that there are micro-vehicles with conventional engines (albeit tiny ones) that do even better, thus "proving" that conventional engines are far superior....

</comment></comment></comment><comment><USER6> This might be interesting.

Then again, I've read too many of these stories that turn out to be exaggeration, or the writer misunderstanding the real capabilities of the invention.

</comment><comment><USER7> They are calling this a "Wave Disk Engine".

Here is a link to the wikipedia article <http://en.wikipedia.org/wiki/Wave_disk_engine>

</comment><comment><USER8> This article is more than a year old, has there been any real followup?</comment>


Common JavaScript Gotchas - <AUTHOR> https://github.com/stevekwan/best-practices/blob/master/javascript/gotchas.md <comment><USER3> Javascript is probably an excellent example of something written without any consideration of how it would work at scale (which is exactly what we tend to promote). The idea of it suddenly being used for writing single page applications and entire UIs, and now servers and god knows what else, was probably unthinkable at the time.

It wasn't that long ago when all JS did was put snowflakes on a page, or trails of fire behind your cursor, or annoying sequences of alerts and prompts. And it was called DHTML.

Were it possible - in the 90s - to anticipate the recent surge in popularity of JS, maybe we would have had a totally different language.

That said, these 'gotchas' are just part of learning the language. Same with PHP really. With a sufficient level of experience you tend to forget they actually exist.

<comment><USER4> The sad part is that there is little effort into changing this. Javascript was clearly not designed for what is being used nowadays, but browsers vendors don't believe in introducing a new client language because apparently it's hard to get everyone to agree to a new standard client language. I wonder if the people behind W3C ever considered discussing this. Those gotchas in the article above are not really a tremedous hassle once you learn to live with them, but nonetheless while working on the client side one is still left wanting more from the language.

<comment><USER5> Because, fundamentally, replacing any part of the web platform is _hard_. The last big, breaking, change was GIF -> PNG. HTML -> XHTML might happen once IE < 9 becomes irrelevant, but I doubt it.

But, in the case of JS, there's one major practical constraints: Introducing a new language must not regress performance of JS. (Why? There's an absolute ton of JS on the web. Getting 1% of the web using a new language able to be quicker doesn't matter if you regress 99% of the web.)

You may think, "Sure, that's easy. You just add a second VM, entirely disjoint from JS!". Unfortunately, it's not that easy: if you allow the languages to coexist in the same page, you then need to GC across both languages (as some objects are shared between the two runtimes, primarily those relating to the DOM), and cross-VM GC is an active research area, where nothing has been shown without at least a 10% performance hit to both GC impls.

Well, then, how about having a "generic" VM that runs JS within it? You're going to have an uphill battle to get performance equal to current JS VMs, because their bytecode (ignoring V8 for now!) encodes a lot of high-level semantics of JS, which means any new language, to have good performance, would have to share a lot of semantics with JS. This inevitably puts massive limitations on what any new language can be like, and restricts it to being "JS-esque".

So what can we do? There are two basic options: subset JS, though inevitably this doesn't sort out things like `==` v. `===`, but you can get to something where you can statically check you're using a sane subset (e.g., not using `==`, not using any undefined variables, etc.); or, write some language not overly dissimilar to JS and compile down to JS (the "not overly dissimilar" restriction is a practical necessity as you can't really afford to send large language runtimes and standard libraries over the wire). In both cases, JS is ultimately the target thus it's important to keep on fixing what can be fixed with JS (e.g., the lack of a module system, the lack of memory-efficient data structures), but both can improve the situation over unrestricted JS as it is today.

<comment><USER6>
      HTML -> XHTML might happen once IE < 9 becomes irrelevant, but I doubt it

I think XHTML is actually declining in popularity, offset by html5.

</comment></comment></comment></comment><comment><USER7> Replace article with link to Crockford and John Resig's advanced JavaScript tutorial.

<http://ejohn.org/apps/learn/>

Any list of gotchas that omits discussion of falsiness, objects vs arrays, array-like things that aren't arrays, the array sort function...

And the throwaway comment about JavaScript being poorly designed is facile and annoying Every language anyone uses has warts.

<comment><USER8> Nobody is suggesting that other programming languages don't have oddities or problems. But very few, aside from perhaps PHP, are riddled with the huge number of senseless, if not outright stupid, issues we see with JavaScript.

It's pretty telling that Crockford's "JavaScript: The Good Parts", which is the most widely-recommended book by the JavaScript community, essentially says to not use huge parts of the language. One doesn't have to intentionally avoid so much core functionality when using most other programming languages.

<comment><USER9> Have you actually used non-trivial Javascript in any project? You repeat the exact same thing in _every_ JS thread here, and most of it seems to come not from any real experience in JS.

It could be true writing good JS is a little harder than good Java, especially on the server. This is a consequence of the callback oriented nature of JS frameworks and APIs. Once you get used to it, it wouldn't really matter and there are real performance benefits that come out of it.

As for the many warts people bring up, how hard is it to follow a few good practices? If those trivial issues can't be overcome, that person will have problems programming in any language.

<comment><USER8> I must admit, I do have a great deal of experience with many programming languages, many frameworks and libraries, many operating systems, and many platforms. Some of this experience predates the web.

I have indeed worked on multiple large JavaScript code bases. Some of this work was in the late 1990s (using Netscape Enterprise Server's support for server-side JavaScript, unfortunately), and some of it within the past few years.

Having worked on large JavaScript-based systems, in addition to ones written in languages like C, C++, Java, C#, Fortran, COBOL, PHP, Erlang and several proprietary languages/platforms, the problems with JavaScript become excruciatingly clear. The wider your experience, the more obvious it becomes how terrible JavaScript is.

The problems with JavaScript, especially for any sizable development projects, run far deeper than merely needing to stick to some "good practices". It just doesn't provide the infrastructure needed for anything but small-scale development. Its many flaws render it further inadequate for any serious use.

Now, that won't stop some people from trying to push it far beyond what it's capable of. The results are never good, however, and generally inferior to what could be obtained when using other technologies.

<comment><AUTHOR> I love JavaScript, but there's no denying that large aspects of the language are somewhat ill-conceived. Crockford himself says this.

Once you know which pitfalls to avoid it's possible to write some really elegant code, but the mere presence of those pitfalls causes a ton of problems when you bring in engineers from other programming languages.

I find it kind of concerning that when someone criticizes JavaScript, everyone's first response is, "he must not have any experience with the language." That's an unfounded personal attack and ignores the crux of the argument.

Look, we love JavaScript, but it doesn't do us any good to pretend it's perfect. It'd be much easier to ramp up new engineers on the language if we admitted its flaws and made efforts to educate "the right way."

<comment><USER7> "crockford himself" has done great things fo Javascript but he's also not the last word on it. He himself admits that some of his ideas about JavaScript were wrong and resulted from his pre Javacript baggage. E.g. The model he suggests for conventional inheritance in "The Good Parts" does not, iirc, actually work as advertised and in any event isn't needed.

The interesting thing to me about JavaScript is that insofar as it lacks "crucial" language features it turns out to provide the necessary tools to build them yourself. Exactly gow do you want inheritance or modules or whatever to work? E.g. While JavaScript doesn't impose a module structure it's very easy to come up with one, and because you build it yourself you can tweak it to deal with your exact needs rather than adhering mindlessly to "patterns" developed for working around the shortcomings of more tightly defined languages (Java, cough)

Java programmers moving to JavaScript seem to write horrible code because the freedom to actually just do stuff rather than build boxes with tiny weird- shaped holes cut in them to package pieces of functionality is so alien.

I wish Python, with its (fewer) warts were as ubiquitous and useful as JavaScript, but it's not, and Javascript is pretty darn good.

<comment><AUTHOR> I'm not disagreeing with you in any way, shape or form. JavaScript is an AWESOME language for both productivity and results. But I think we're doing ourselves a disservice if we assume that anyone jumping right into the language is going to immediately understand it.

Like you said, bad code is somewhat inevitable when you drop a classically- trained OOP programming into JavaScript. And that specifically is not a fault of the language. But I think we can all do a better job of pointing newbies in the right direction.

</comment></comment></comment></comment></comment></comment></comment><comment><USER10> TL;DR: Poorly written shallow analysis.

Really, he should've used a different title, say "JavaScript Rant"

The author complains about the was language is designed, and says "might", "in some cases", "this is wrong" etc. without showing real examples. And he's also dead wrong on a few facts (like JS being a pure functional language).

Looks like "let's bake something in 5 minutes" and post it to HN to get 57 points for nothing.

<comment><USER11> I'm ashamed that a lot of rants about languages get so many points here on HN. This article, in particular, is written by a JavaScript ignorant, which for the first time approaches the language. Even worse, "JavaScript the good parts" is a good read, but it shouldn't be promoted as the _de facto_ bible of JavaScript as it is: it's old, outdated, lacks a lot of the recent changes and promotes a lot of patterns which became anti-patterns.

An example of my last sentence: have look at how Titanium SDK (v2.1.x) folks designed their "parasitic inheritance" architecture following Crockford's book. A terrible, unusable, instable, un-hackable (wrong) use of JavaScript.

EDIT: I don't know if Steve Kwan is actually a _noob_ or not, but it looks like. Eg:

        identifier = function () {};

this is not one of the examples of "ways to create a function". This is actually an assignement using a function expression. These are the 3 REAL ways:

        // As expression, in an assignement or as argument.
        (function () { /*...*/ });
        // As expression, but with a name given to it.
        (function $identifier$ () { /*...*/ });
        // As a declaration, which gets HOISTED!!
        function $identifier$ () { /*...*/ }

<comment><USER11> Addendum. Oh gosh:

        var someObject = new Object();

Is that real?

<comment><AUTHOR> I did not put that there because it was the best syntax. :) I put it there because I felt it was most likely to be understood by someone new to the language. I assume you're implying I should have used {}?

<comment><USER11> Yes, not for the syntax itself, but for a mere "smell" of code quality. The use of "new Object" is found only in two kind of JS code incredibly old or incredibly badly written.

<comment><AUTHOR> I hear you completely. But understand that my intent here was not to write idiomatic code, it was to write code that an outsider to JavaScript would understand. I worry that the {} syntax, while simple/elegant/preferred, may be somewhat less obvious to a new person who is unfamiliar with JavaScript's object literals. In any event, I've updated the article to include both ways.

Regarding variable hoisting, I am trying to keep this article short, concise, and focused on the big offenders when it comes to gotchas. The only reason I didn't discuss hoisting is because I felt it would introduce too many concepts at once. To me, hoisting is kind of "level 2," whereas understanding why var is required is "level 1."

And on a side note, I appreciate all the feedback you're providing here - <USER2> really do. That's why it's on GitHub and not some blog somewhere. But I would suggest that we separate personal attacks from code criticisms. If you don't like my approach with this article or you find something that's flat-out incorrect, by all means tell me. As a human I am prone to make mistakes - maybe moreso than others. :)

But please avoid making value judgments about a person you don't even know, such as calling them an ignorant. It's bad enough when people behave this way on the internet, but if that kind of mentality starts to seep into your "real world" life too, it'll start having serious effects on team relations and employability.

<comment><USER11> I'm sorry for my personal stakes at you. And honestly I have to say I'm biased against javascript articles, because I'm so used to find a strong lack of experience and knowledge in them. I appreciate your answer, and please pardon my rudeness.

At the same time you could make a "level 1" article a lot more adherent to reality. For example, you could completely jump over that "function creation" section entirely, and simply do a clear explanation of what an expression is in JavaScript, and how to spot them.

Again, thank you for your personal advices, and thank you for your politeness (as opposed to my manners).

</comment></comment></comment></comment></comment></comment></comment><comment><USER12> The answer to "Why are there so many different ways to declare a function? What are the differences?" doesn't really answer the question.

No error:

      <script>

      myFunction();

      function myFunction() {};

      </script>

Error:

      <script>

      myFunction();

      var myFunction = function() {};

      </script>

A correct answer should explain why this happens in order to understand what the difference really is about.

<comment><USER13> I can take a stab at it.

All variables are hoisted to the top of a function, where they are defined as 'undefined'. This is confusing, I know - there is actually a difference between an undefined variable (accessing it will cause a ReferenceError) and a variable defined as 'undefined', which is in many cases identical to null, except in object syntax.

An example you can run in your inspector:

      function foo(){
        console.log(a);
        var a = "string";
      }
      function bar(){
        console.log(a);
      }
      foo(); // logs 'undefined'
      bar(); // throws ReferenceError

Why does this happen?

Well, this is because of the variable hoisting. Before running a function, the interpreter scans for any var definitions and 'hoists' them to the top of the function, where they are set to undefined. This leads to the strange situation where defining a variable after it's been accessed (as in foo()) actually prevents an exception.

The same is true of functions defined with the 'function name(){}' syntax. As opposed to the 'var name = function(){}' syntax, the entire function (including the definition of the function!) is hoisted to the top of the containing function. So this will work:

      function foo(){
        bar();
        function bar(){
          console.log("works!");
        }
      }
      foo();

This can be confusing but if used properly can be very helpful in refactoring your code. For instance, there are times when I've easily cleaned up code by just putting them into separate function definitions within the parent function:

      // old version
      function longFunction(){
        // 50 lines of code
        // awful, messy
      }

      function refactoredLongFunction(){
        doFirstThing();
        doSecondThing();
        doThirdThing();

        function doFirstThing(){
          // ...
        }
        // other function definitions
      }

This prevents a pattern I see in a lot of JS libraries that drives me _nuts_ \- defining functions at the top of a closure, then calling them at the bottom. I very much dislike scrolling 100 lines to see the actual action performed by a function. Using the above pattern leads to much more readable code, IMO.

If you'd like to know more about function and variable hoisting, this is a good read: [http://www.adequatelygood.com/2010/2/JavaScript-Scoping- and-...](http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting)

<comment><USER14> > Before running a function, the interpreter scans for any var definitions and > 'hoists' them to the top of the function, where they are set to undefined.

A little off topic, and completely trivial and petty, but it kinda bugs me when people talk about it as if the interpreter is moving variables around.

Moving variables around like that seems like a completely nutty thing to do, because it is. You can't give someone an explanation of the trade-offs as to why Javascript does it, because it doesn't. So hoisting is just presented as another thing Javascript does that makes it weird.

Really it's not actually moving anything, it's just an artefact of the same scoping rules used in lots of languages, compounded by allowing variables to be referenced before they're assigned.

Variables aren't moved, they behave as if they were moved.

</comment></comment></comment><comment><USER15> The gotchas are fine, but the explanations are very poor. I'd like justifications or references.

I would prefer Ben Alman, Douglas Crockford, John Resig, Paul Irish, or one of the many talented people writing about javascript if you were actually interested in understanding the gotcha's on this list.

Also, I wish authors would be careful to distinguish js from jQuery. Yes it's standard now, but preferences change with time.

<comment><AUTHOR> I tried not to get too deep into the explanations because I really, really wanted to keep this to a short list that could be scanned and grokked.

Truth be told, if someone wants an explanation of some of JS's weirdness, there are far better articles out there they can Google to meet that need. :)

</comment></comment><comment><USER16>
        function myFunction(arg1, arg2) {};       // This is OK, but...
        var myFunction = function(arg1, arg2) {}; // This is best!

_The second option is better, and is properly scoped, but it leads to certain syntax problems once you get into closures._

What problems? How does assigning the function to a variable help avoid needing to make a closure for _this_?

<comment><USER17> The first one will be hoisted to the top of the function (the whole declaration), the second one won't (the variable will, but not the function expression itself).

EDIT: To clarify:

All variable declarations in Javascript do indeed get hoisted to the top of the scope, but with function declarations even the function value itself gets hoisted. So for instance, this returns 'two':

      function foo() {
        function one() { return 'one'; }
        return one();
        function one() { return 'two'; }
      }

      foo();

But this returns 'one':

      function foo() {
        var one = function one() { return 'one'; }
        return one();
        var one = function one() { return 'two'; }
      }

      foo();

<comment><USER18> What? I have no idea what you are talking about. Both get hoisted to the top of closure scope...

<comment><USER17> See my edit.

</comment></comment></comment></comment><comment><USER19> Cannot decide which is a worse language, Javascript or PHP.

It is quite amazing how much effort people putting in to designing the "perfect" language, and yet we continue to see highly flawed languages get popular.

I wonder if we'll ever see a replacement for JS in the browser? Maybe just a JS-strict with all the gunk and strangeness removed (and maybe the libraries cleaned up a LOT).

<comment><USER20> I hope to see the day where the web is language agnostic. Why the hell do we have to be tied to one single language?

<comment><USER21> The worst part is the hype. Pretending it's cool, like there is a choice.

</comment></comment></comment><comment><USER22> >> "Closures are a concept that appear in pure functional languages like JavaScript"

Err.. since when did JavaScript become pure functional?

<comment><USER23> I saw and asked the exact same thing.

<comment><AUTHOR> Good catch. I accidentally JavaScript. It's been fixed. Thanks!

</comment></comment></comment><comment><USER24> The tone of this article does absolutely nothing to help a new learner. While mostly factually correct, constantly complaining, whining, and saying what a stupid design decision this or that was helps in no way.

Every language has quirks. In the case if js, the things your complaining about like var and function declaration are features of the language.

<comment><AUTHOR> My apologies if I came across this way. The intent was not to whine about var or function declaration, but rather to provide clear direction about a standardized "okay" way of doing these things without causing yourself undue headaches.

So please don't interpret my calling these issues out as whining. Just trying to make new people aware that they are there. :)

If, on the other hand, I am legitimately WHINING and not realizing it, also feel free to tell me where so I can fix it. Thanks!

<comment><USER24> Fair enough. Definitely not a personal attack or anything. I used to have the very same thoughts until I really learned how powerful many of those confusing things are.

<comment><AUTHOR> I've gone through and removed some of the bristly "flavour" language. If you want to scan through it again and look for more offenders I'd be greatly appreciative.

</comment></comment></comment></comment><comment><USER25> JavaScript is most certainly _not_ a pure functional language.

</comment><comment><USER26> There have been a lot of articles re-hashing Crockford's analysis floating around recently. These have been valuable, but they tend to focus on the same topics in the core language (largely concerned with scope, use of closures, behavior of basic data types, and functional programming). In web development, the DOM and events end up being a more common area where I and other devs are tripped up. A few things I wish I knew before a deep dive into an large scale JavaScript project:

1) Newly added elements will not respond unless events are bound to them. One solution (thinking in jQuery here) is to bind events higher up the DOM.

2) Each line in code may not simply execute in sequence. For example, asynchronous ajax calls require subsequent calls to be nested in callbacks.

<comment><USER27> Regarding #2, I highly recommend reading Trevor Burnham's excellent book _Async JavaScript_. It goes into a great deal of detail explaining how async operations work, and ways of dealing with them.

</comment></comment><comment><AUTHOR> Wow, glad to see this is stirring up a lot of discussion. Thanks for all your contributions guys.

There are a ton of comments down below with a ton of criticisms and suggestions. I will attempt to summarize and respond to the key ones here:

#1: The list is missing a lot of very well-known JavaScript gotchas.

That's intended. My goal here is not to provide a complete, comprehensive list of all known quirks with the language - those exist in far better fashion on the web already. Rather, my goal is to create a simple list of issues that I KNOW will trip up newbies out of the gate.

Oddness with truthiness, undefined and arrays is definitely irksome, but from my experience people tend not to run into those problems until they've already written a good chunk of JS. On the other hand, issues like var, confusion over closures, and the this keyword come up very quickly - almost immediately.

#2: The list seems very negative and biased against JavaScript.

My apologies, as that was not the intent at all. JS is great. But it is also extremely flawed and there are some things flat-out wrong with the language. I'm definitely not the only person who says this, either. :)

It's a great language to work in and you can do some wonderful things with it once you grok it, but if we're going to be completely objective, we have to admit that it has some definite problems that make it hard to learn.

#3: This seems full of preferences, not hard-and fast rules.

That's definitely by design as well. I circulate this list out to my team and so it has my fingerprints all over it.

If this is a real sticking point with you guys and you feel it would be better having that stuff removed, please send me some pull requests and I'll be happy to review.

#4: The author comes across as snarky and unhelpful.

That's just a personality flaw and I apologize for it. :) I didn't want this piece to be dry and I injected a bit of voice. If you feel it's actually detracting from the article, please feel free to shoot me some examples and I'll clean it up.

<comment><AUTHOR> Oh, and one more thing. If you see anything in there that's flat-out WRONG - not just a preference or stylistic choice, but actually WRONG - by all means, shoot me a pull request! That's what it's there for.

I see a few of you already have, so thanks!

</comment></comment><comment><USER28> Because of semicolon insertion, Allman-style braces are frowned upon. <https://www.google.com/search?q=javascript+brace+style>

<comment><USER29> I would just like to point out that people tend to blow the semicolon insertion thing out of proportion. For braces it really only comes up when returning object literals and for other things there are just a couple of features that can bite you (starting lines with parenthesis or array literals and so on)

<http://inimino.org/~inimino/blog/javascript_semicolons>

Sure, its best to always explicitly use semicolons but its not as dangerous to forget them as most make it sound.

<comment><USER8> While semicolon insertion itself does cause many problems, the mere fact that it exists as a "feature" of the language is perhaps a bigger problem.

There's no justifiable reason for it to exist. The drawbacks should have been clear from the moment the concept arose, and it should have been scrapped before ever having been implemented. That's the only sensible response to it, after even a minimal amount of analysis.

A missing semicolon should be treated as an error, causing the execution of the script to be immediately halted, and the programmer notified of it. It is as simple as that.

</comment></comment></comment><comment><USER30> Thanks for this, bookmarked.

I actually find little quick explanations like this extremely pragmatic and useful. I don't do a whole lot of JS, but I certainly need to dive in occasionally. Having quick references like this one readily available is preferable to finding my Crockford book and flipping through the pages. If you need to develop a client-side app or do heavy JS coding, maybe read the Crockford book...but if all you need to do is get some shit working real quick links like this one are invaluable.

</comment><comment><USER31> This list isn't even well thought out at all and is more just a rant about some random stuff. I'm not a big fan of the javascript type system in any case but this isn't a real critique of it.

At some point just like Monads you just get the javascript type system and don't worry about it anymore. It is what is. No amount of gotchas will get you over the hump; you have to actually understand it. At least it isn't syntax like C++ where you find out in a WTF moment that the parser is doing something insane.

</comment><comment><USER32> Some Gotchas should be cached by the ECMAScript 5's "strict mode", see [https://developer.mozilla.org/en- US/docs/JavaScript/Referenc...](https://developer.mozilla.org/en- US/docs/JavaScript/Reference/Functions_and_function_scope/Strict_mode)

</comment><comment><USER33> Very instructive. I stumbled upon some of these "gotchas" and had to find a solution by myself then. I felt like I have a duty to share this with my french fellas so I translated your article on my blog (with © and ®) monlouis.tumblr.com

</comment><comment><USER34> You should jsperf your function definition advice. The standard "function foo() { ... }" way is over 10x faster than the "var foo = function foo() { ... }" way or any other variant.

</comment><comment><USER35> gotta be honest.. not loving the tone of this post.

40% of it just keeps droning on about how noobs will fall for these traps, and saying things like "If you are new to JavaScript, I suggest avoiding the this keyword".. as if these concepts are so mind blowing noobs minds will melt.

it does bring up a few good points but it could have been a lot shorter.. and how is closure a common js gotcha? the list includes 4 javascript constructs veiled into a rant.

<comment><AUTHOR> I really didn't want to write that. Ignorance is never really a good solution. :)

But from my experience, someone who is coming into JS for the first time is probably not setting up a complicated object hierarchy - they're probably just trying to figure out how to bind some events to a DOM element and get some basic UI functionality. And they probably don't need to use the this keyword as much as they think they have to.

I completely agree that this could be a bad decision on my part, or at least a very controversial one. But I'd rather have truly new JavaScript developers focus on things like encapsulation and closures before they get too far into the this keyword and constructor/prototype.

</comment></comment><comment><USER36> Highly recommend reading "JavaScript: The Good Parts" by Douglas Crockford, it's an excellent book.

</comment><comment><USER21> It would be much easier to list the parts of JS that work as a non-alien would expect.

</comment><comment><USER37> Yay another one. This is what SO community wikis are for.</comment>


The Airline Fee to Sit with Your Family - <AUTHOR> http://www.wsj.com/articles/the-airline-fee-to-sit-with-your-family-1464198317 <comment><USER2> These airlines presumably have rules on how old a child has to be to fly unaccompanied, right? These stories always tempt me to book a flight with my very self confident and out going 6 year old niece and instruct her to annoy the shit out of everyone near her while I sit safely far away. I don't think airlines will be motivated to do anything about this while its considered the families problem - it needs to be seen as a problem for every other passenger.</comment>