Programming in Rust: the good, the bad, the ugly - <AUTHOR> https://hackernoon.com/programming-in-rust-the-good-the-bad-the-ugly-d06f8d8b7738 <comment><USER2>
        Some things occasionally feel too verbose. For example, converting
        between str and String [...] seems like something the compiler
        could figure out for me. I'm sure there's a good reason for why it
        is the way it is

This in particular has a very good reason — converting from a `&str` to a `String` requires memory allocation. You don't want to start accidentally allocating memory!

See also:

\- Why is it discouraged to accept a reference to a String (&String), Vec (&Vec), or Box (&Box) as a function argument? ([https://stackoverflow.com/q/40006219/155423](https://stackoverflow.com/q/40006219/155423))

        Having to handle every Result from every function is good; it
        means the programmer has to think about what's happening with
        every function call. Sometimes it feels tedious. [...] you still
        need to explicitly define a case for every type of error that may
        occur.

You are not required to create a case for every type of error (although I think it's good to). You can use a trait object (`Box<dyn Error>`) if you truly don't care about the type.

See also:

\- Recoverable Errors with Result ([https://doc.rust- lang.org/stable/book/ch09-02-recoverable-er...](https://doc.rust- lang.org/stable/book/ch09-02-recoverable-errors-with-result.html))

        I find myself frequently writing code similar
        to option.as_ref().unwrap().borrow(), which feels icky.

I can't imagine a case where this particular set of methods is needed (and as a sibling comment mentions, you can often avoid `unwrap` via pattern matching), but there is the unstable `Option::deref`, which shortens this code:

        fn example(a: Option<String>) {
            // Before
            let b: Option<&str> = a.as_ref().map(|s| &**s);
            // After
            let b: Option<&str> = a.deref();
        }

See also:

\- `Option::deref` ([https://doc.rust- lang.org/std/option/enum.Option.html#method...](https://doc.rust- lang.org/std/option/enum.Option.html#method.deref))

<comment><USER3> Why should converting a &str to a String require memory allocation? It seems like String could just reference the &str and use COW?

<comment><USER4> That needs a garbage collector to work – the lifetime of String isn't limited, but the lifetime &str's is. That means that the backing storage of String can be deallocated under it's feet. There has been some discussion about allowing Strings to use COW in case of &'static str which doesn't have this problem, but I'm not sure whether that proposal has any momentum at the moment.

<comment><USER5> In C++ using COW for std::string was a common implementation approach, before C++11 made it invalid.

</comment></comment></comment></comment><comment><USER6> A couple of notes:

Tooling: Rust takes backwards compatibility very seriously. If you're using multiple version of a crate in your dependency try, it's _very_ likely because those two crate versions have breaking changes between them.

Language - You should very rarely need to unwrap because of pattern matching:

Stuff like this: if (a.is_some()) { let value = a.unwrap()...

Can be rewritten like this: if let Some(value) = a { ...

<comment><USER3> The gratuitous unwrapping comes from APIs like `Mutex::lock` and `write!`

<comment><USER7> IME unwrapping usually comes from the variant of an enum being determined by the ambient invariants in the program. For example, if you have a dependent pair, (x,y), x determines the variant of y. Similar consideration for switching between a array of options of pairs and a pair of arrays of options.

The simplest example of this is array subscripting. A sufficient bound on n will determine the variant of arr.get(n). The API acknowledges this common case by providing arr[n].

</comment></comment></comment><comment><USER8> > [RLS] suggestions seem to be right only about 75% of the time

That's way better than my experience. I'd say it works correctly at most 10% of the time. Probably less.

</comment><comment><USER9> I wish there was a way to escape lifetime annotation propagation in Rust. What I mean is, if you have a struct with an owned field that you refactor to a borrow, you have to add <'a> _everywhere_ that struct name appears in your program.

<comment><USER10> I'm hopeful that the work on non-lexical lifetimes will extend to this in some fashion, but honestly I'm not sure it's possible while making the same guarantees since you need to make sure that the borrow expires before the data becomes invalid.

However, in many cases, you probably just want a Box or something instead of a borrow within a struct. Do you have a specific example where you want a borrow?

<comment><USER11> At most, you'd have to propagate a <'_>; the lifetime is part of the type and showing it matters for the same reason showing any other type parameter matters.

</comment></comment></comment><comment><USER12> It sounds like Rust could be a good way to break one's bad habit of depending too much on their IDE.

Pity that won't last.

The biggest problem I had with Rust was that I found it very, very hard to go back and forth between Rust and C++. Rust forbids or discourages use of semicolons and parentheses in many places where C++ requires them, and it took days to restore the habit of putting them in. I finally had to stop experimenting with Rust because it was interfering with getting paid work done. People coding only Rust, or Rust and (say) Ruby, should be less affected.

At the time, it was quite hard to know where an & was required, and where it was forbidden. There wasn't much middle ground, suggesting maybe it would do better figuring that out for itself. But it is probably too late to change that. Rust left behind a huge number of C's legacy mistakes that C++ had to suck up, but it is increasingly limited by its own early choices.

<comment><USER10> The semicolon thing is just something you need to get used to. In just cases, you can just write C-style with a statement per line if that makes more sense to you. However, I've come to love the expression-oriented nature of Rust because I can sometimes convince myself that I'm doing FP when I'm writing Rust.

Maybe it just comes with practice, but I don't find it difficult to switch syntax. I do a lot of Go, Rust, and JavaScript, and each has some peculiar syntax. I do recall it being a bit of a pain when starting out, so perhaps you're still relatively new to Rust?

As for borrows, I guess I haven't had that much of an issue with it. I keep the documentation open while writing code, so I can quickly reference something if I need to. However, usually a borrow is needed if the type isn't expected to implement Copy (i.e. isn't a value type), and that rule of thumb works pretty well. However, whenever I get it wrong, the compiler is there to help.

There are a few things that I wish were different in Rust, but I imagine those differ for each person.

<comment><USER12> You mistake me -- omitting parentheses and semicolons was very, very easy to get used to. Too easy, in fact. It was very hard to get back to putting them where they are required in C++. I was continually omitting them. (Maybe an IDE would have helped.)

</comment></comment></comment><comment><USER13> A lot of the listed problems are basically verbose repeated patterns, which is pretty much what macros are for.

</comment><comment><USER14> Using Box/Rc for linked lists is generally a bad idea since it can easily lead to a stack overflow due to the way destructors are called.</comment>


Android 4.3 Factory images for Nexus 7 (2013) Available - <AUTHOR> https://developers.google.com/android/nexus/images#razorjss15j <comment><USER3> Looks like the individual binaries are available now too for AOSP builds:

[https://developers.google.com/android/nexus/drivers#razorjss...](https://developers.google.com/android/nexus/drivers#razorjss15j)

Seems like Google decided to solve the problem right away once it got a bit of attention. Good on them for that.

Also looks like Nexus 4 binaries for Android 4.3 are available at the same time; I didn't think those were available either, does anyone know for certain?

<comment><USER4> Nexus 4 binaries have been available for the some time now. I installed using the same couple of weeks ago.

</comment></comment><comment><USER5> The New 7 has been very buggy for me. Got it the first day it came on the market, would randomly reboot. Couple of days later it started to shutoff by itself. GPS would not hold a signal and the Screen would randomly flicker... Returned mine after a week. Second one had similar problems so gave up.

Looks like I am not the only one: [http://productforums.google.com/forum/#!topic/mobile/mG4JXaT...](http://productforums.google.com/forum/#!topic/mobile/mG4JXaT- SHs\[1-25-false\])

Disappointed with the quality of a Marquee new product from Google. Hard to believe that they put this thru much quality control.

<comment><USER4> The random shutdown and reboot problems are because of the apps which are not yet updated. I think Netflix was one those apps. The GPS problem seems to be fixable with software update. Apparently the problem arises when two or more apps try to use the GPS.

<comment><USER6> I would argue that if apps can randomly shutdown and reboot the device without even explicitly trying to do so then the OS is at fault, even if it turns out that updates to those apps resolve the problem.

This isn't the 1980s or early 90s, consumer OSes (even those on small mobile devices) should not come crashing down because of something an app has done.

<comment><USER7> The reason is that some apps use different functionality which can expose deadlocks in the OS. If the OS hits a deadlock, than the watchdog service will reboot the phone to prevent it being locked in a certain state.

I'm aware of an example of a reboot exacerbated dramatically by using sticky intents / broadcasts on 4.1.1 - <USER2> [https://code.google.com/p/android/issues/detail?id=46806](https://code.google.com/p/android/issues/detail?id=46806)

</comment></comment></comment></comment><comment><USER8> So...JBQ crisis averted?

<comment><USER9> No, he quit. I believe the reason for his quitting was not so much because Qualcomm was tardy in releasing the images but more because of all the abuse he took from random internet nobodies due to the delay.

The Qualcomm crisis has been averted, the android userbase is still a bunch of dicks.

<comment><USER10> He wouldn't have quit if he knew the images were coming soon. This seems like Qualcomm was taking the heat for it, and decided to let Google use the images. JBQ even said he has been warning Google about this for six months.

So he knew it was Qualcomm the ones that were dicks, but he couldn't convince neither Google nor Qualcomm to put up the images, so he didn't want to take the blame for it from the Android community. This is just Qualcomm responding to the PR mess that they created now.

<comment><USER11> He deserves a lot of credit - it's doubtful it would have got anywhere near the same publicity if he hadn't quit, and that probably put the issue over the edge in terms of forcing Qualcomm to come to the party sooner.

</comment></comment></comment></comment><comment><USER12> This is why I only buy Android Nexus devices. Other brands just cannot get their update schemes together.

</comment><comment><USER13> Thanks, I saw images for Google Nexus Phone, and mine is so, and I've got the update already, but made me wonder - There is a verion "With Google Wallet" and one without. I thought you can install Wallet by your choice, or is that not the case?

<comment><USER14> The non Google Wallet images are for those outside the United States.

<comment><USER13> Thank you!

</comment></comment></comment><comment><USER15> Hmm, I thought the new Nexus 7 was 'flo', not 'razor'? Have I always been wrong? Or has the development name changed?

<comment><USER16> Droid Life says[1] razor is the "product name" and flo the "device name". I guess that means flo refers to the hardware and razor the software.

[1]: [http://www.droid-life.com/2013/08/09/new-nexus-7-razor- facto...](http://www.droid-life.com/2013/08/09/new-nexus-7-razor-factory- images-and-binaries-now-posted/)

<comment><USER15> Thanks!

</comment></comment></comment><comment><USER17> Since my Nexus7 has upgraded is there any reason why I should bother with these?

<comment><USER18> These would only be necessary if you wanted to restore your device to the factory firmware after installing custom software, or to update before the OTA reached you (which obviously isn't an issue now).</comment></comment>


Ask HN: How can I teach others to code? - <AUTHOR> So I am self-taught. I don't work as a professional dev, but I am at a point where I can more or less create a working prototype and deploy. And now I am trying to get my friends to that point. I have guided them for the past few months and they are at that stage where you know the basics but have a hard time understanding how you can put everything together to develop your project. I did try building a project with them and show how things are done, but I am not that good at doing this and it turned out to be just me doing all the coding with explanations that went a bit over their heads and no one asking any doubts when it became confusing. <comment><USER2> You should try and break down programming concepts and ask lots of questions to see where their gaps in knowledge are.

Instead of doing all the coding yourself, leave it up to them by getting rid of some of what you build and hand it to them as isolated exercises. This will allow you to test their abilities incrementally and also give them a boost in motivation to see something working.

Teaching others how to code is another skill to build just like programming. You will learn through practice and get better at explaining abstract concepts with clarity after explaining things clumsily the first time. Just keep at it.</comment>


Uber's French Resistance - <AUTHOR> http://www.nytimes.com/2015/06/07/magazine/ubers-french-resistance.html

<comment><USER2> > The telltale signs were there: an iPhone on the dashboard, someone sitting > in the back seat.

Do drivers mind if you sit in the front seat? It sounds like the approach would avoid legal problems (but perhaps increase danger, both between driver- occupant, and in the event of an accident).

</comment><comment><USER3> Uber are a bunch of assholes, but I don't think anybody's arguing that established taxi monopolies aren't also a bunch of assholes.</comment>


DotCloud Adds Support For WebSockets, Vertical Scaling And More - <AUTHOR> http://techcrunch.com/2012/03/27/open-paas-dotcloud-adds-support-for-websockets-vertical-scaling-and-more/

<comment><USER2> Here are the announcements on dotCloud's blog.

[http://blog.dotcloud.com/dotcloud-announces-native- support-f...](http://blog.dotcloud.com/dotcloud-announces-native-support-for- websock)

<http://blog.dotcloud.com/dotcloud-now-supports-mongodb-20>

[http://blog.dotcloud.com/now-scale-vertically-or- horizontall...](http://blog.dotcloud.com/now-scale-vertically-or-horizontally- on-dotcl)

</comment><comment><USER3> I wonder what info-structure changes had to be done to support WebSockets. Are they using experimental nginx support? Something else?

<comment><AUTHOR> If you look at this page, towards the bottom

<http://docs.dotcloud.com/guides/websockets/>

It says the following: "the old load balancers are based on Nginx, while the new ones are based on Node.js"

</comment></comment><comment><USER4> What are the limits to the vertical scaling? Can I, for example:

      dotcloud scale MYAPP db:memory=144G

How much would such a thing cost, if possible?

<comment><AUTHOR> According to this page: <http://docs.dotcloud.com/guides/scaling/>

The max you can scale is 64GB, However scaling above 4GB must be explicitly enabled for your account, so you need to contact them.</comment></comment>


Another Chinese Billionaire has gone missing - <AUTHOR> http://www.businessinsider.com/chinese-billionaire-zhou-chengjian-from-metersbonwe-is-missing-2016-1?r=UK&IR=T <comment><USER2> friedcat from ASICMiner (1st real large scale ASIC bitcoin miner producer) also went missing a while back and I wonder if that is in anyway linked, given that he had access to a very large sum of untraceable bitcoin it would seem possible that he was targeted for his wealth as were these guys.

<comment><AUTHOR> I just wonder if they're being tortured or threatened while under detainment... or even "reprogrammed".</comment></comment>


Ranking Employees: Why Comparing Workers to Their Peers Can Often Backfire - <AUTHOR> http://knowledge.wharton.upenn.edu/article.cfm?articleid=2567

<comment><USER2> In my opinion, this piece ignores the larger issue with ranking employees. Ranking of any sort implies competition. Your employees should not be competing against one another any more than the cells of your body should.</comment>


Understanding Carrier IQ technology [pdf] - <AUTHOR> http://www.carrieriq.com/PR.20111212.pdf

<comment><AUTHOR> Article on The Verge:

[http://www.theverge.com/2011/12/13/2632410/carrier-iq- says-i...](http://www.theverge.com/2011/12/13/2632410/carrier-iq-says-it- unintentionally-collected-encrypted-sms-is-working)</comment>


Choosing good names - <AUTHOR> http://marcelo-cure.blogspot.com/2015/06/choosing-good-names.html?m=1 <comment><USER2> The article makes a clear case for keyword arguments, without mentioning it at all. In Smalltalk you would write something like:

calculateTax: percentage transferValue: value

This has the advantage over the proposed solution that where-ever you CALL such a method, the meaning of the passed-in arguments is clear ALSO in the calling context. Just having meaningful names for FORMAL arguments does not do anything about how the ACTUAL arguments are named, in the (often more than one) places where the method is called. Meaning, it is hard to know whether a given method-call has its arguments in correct order without a) Checking the method-definition for their expected order b) Checking from the calling context the meaning of the variables you pass in to the call. Do they agree? Takes some figuring out.

That requires of course that your language supports keyword arguments. In languages that don't you can simulate them by using a single object as the only argument. That may seem like extra work but it helps, especially when there are many "arguments". It also allows you to have default-arguments without requiring that they are at the end of the argument-list. I think this pattern is called "Argument Object".

</comment><comment><USER3> You could provide even more clarity by using meaningful types like Money or TaxPercentage instead of Double.

This would allow you to ensure only valid values are passed and would help avoid problematic floating point arithmetic :)

<comment><USER4> I guess you mean typedefs and not separate classes for Money, TaxPercentage etc.

I recently came across a codebase that implement type classes for almost all types of things it handles and found that to be overkill. Almost always, name and age can be represented by a string and an integer respectively; separate Name and Age classes just reduce the readability in your code.

<comment><USER5> In a language that supports it reasonably, the advantage of genuinely separate types is that the language will prevent you from doing stupid things like accidentally multiplying to monetary amounts or adding a percentage to a monetary amount.

Reasonable support here mostly means that you can implement operator overloads, so that you can define e.g. a Money type that can be added but not multiplied.

Money handling may not actually be such a good example for this, because you should really have proper unit testing there anyway. I did work on a codebase that had types for SI units, and it was quite a nice experience.

</comment></comment></comment><comment><USER6> The me the best convention is Linux kernel coding style. I prefer slightly more verbose variable and function names on interpreted languages, to compensate the lack of static type checking, but _calculateTaxOverTransfer()_ is probably too much.

 _Local variable names should be short, and to the point. If you have random integer loop counter, it should probably be called "i". Calling it "loop_counter" is non-productive, if there is no chance of it being mis- understood. Similarly, "tmp" can be just about any type of variable that is used to hold a temporary value.

If you are afraid to mix up your local variable names, you have another problem, which is called the function-growth-hormone-imbalance syndrome. See chapter 6 (Functions)._

Source: Linux kernel coding style - [https://www.kernel.org/doc/Documentation/CodingStyle](https://www.kernel.org/doc/Documentation/CodingStyle)

<comment><USER7> The two examples given in support of short local variables names rely heavily on convention or prior knowledge. I don't think they're strong arguments for making short variable names.

Naming the integer counter "i" is convention learned in CS class (initially) that has become common usage. If you have nested for loops then j, k are often conventional for naming the next counter variables, though without an enclosing "i" they would look strange to most people.

Likewise, tmp draws on existing knowledge of /tmp as the location for temporary data on Unix machines.

<comment><USER8> Relying on convention is a _good_ thing, as long as your team (and the larger community for that language) is mature enough to have a strong set of relatively easily discoverable conventions.

<comment><USER9> Strongly agree. Conventions can produce code that is easier to read and to write. Certainly to the uninitiated, most of the formulas in a math or physics textbook look completely opaque. But by following conventions on meaning of symbols, they are precise and expressive and also easier to write.

</comment></comment></comment></comment><comment><USER10> Often programmers instinctively name their code the same way they structure it: with as much elegance and brevity as possible.

If you think about it, elegance and brevity in naming serve no logical purpose. When reading names, understandability is the only goal; elegance and brevity do not assist in this goal. Thus, from a readability standpoint, it is better for names to be verbose and informative at the expense of elegance.

There are those out there that complain about how verbosity contributes to increased typing time and the probability of spelling errors, to which I have to say: Modern dev tools like Intellisense and autocomplete largely eliminate this type of error. Additionally, if you hate these modern tools, I still feel that, especially in extremely large and complex code bases, the benefits of writing clear and understandable code with verbose naming far outweigh the benefits one gains when using brevity in naming.

</comment><comment><USER11> I would have called the function "calculateTransferTax". It's shorter while providing the same meaning.

Also, the "tax" argument is the tax _rate_. "tax" in this instance I would expect to mean the final amount. So I'd call that parameter "taxRate".

(And I'd use ints for everything, of course)

<comment><USER4> How would you use ints when there's division in the code? I've heard it's usually better to prefer ints to floating points, but in my limited experience I've found that it's easier said than done.

<comment><USER12> Using floating point arithmetics for currency is just asking for trouble: [http://stackoverflow.com/questions/3730019/why-not-use- doubl...](http://stackoverflow.com/questions/3730019/why-not-use-double-or- float-to-represent-currency)

</comment></comment></comment><comment><USER13> I guess the verbosity of the method's name is actually good in this case? Since it makes the function so much clearer.

I am never sure how much to abbreviate a name, but I guess if it's not going to be used much it can be long without problems.

<comment><USER14> If you're using a modern IDE, you shouldn't have to ever type the name out after the first time. I almost never abbreviate anything.

<comment><USER15> When I first started using Objective-C, I noticed how verbose the signatures were when passing messages, but really liked how it read when you were scanning the source.

After that, I stopped giving a shit about how long my identifier names are and just make sure they explain in a direct (but concise!) way what that method does or what that variable is.

</comment></comment></comment><comment><USER12> In this case, I'd argue that the names are still bad for a couple of reasons.

Firstly, it's too verbose - a nice middle ground would have been better: calculateTransferTax(Double transferValue, Double tax). It's fairly clear what the tax is being calculated over.

Secondly, I'd say that "tax" is a bad name for the tax percentage since it doesn't describe that what actually is (the percentage / rate of tax), and since it's a Double, I'd expect it to be "0.2" for a 20% tax rather than 20.0 which appears to be what the method would actually expect.

</comment><comment><USER16> I agree with this post in the general sense, still I think you can go way overboard with this.

If you take as your goal this: "understanding what this piece of code does 1 year from now", as opposed to "I should name these variables and this function fully and correctly" then I think you'll do a lot better each time. There are numerous places where I can more quickly and easily consume "i" as apposed to "someArrayIndex", or "fname,lname" instead of "firstname, lastname", etc.

</comment><comment><USER17> When it comes to code readability, and ultimate reusability, I believe renaming variables is where most time refactoring is best spent. Not only does it encourage better naming, but if the naming or paradigm model is off, it encourages better design.

<comment><USER18> I'd vote for removing dead/useless code, reducing scope/visibility, making things immutable, and running an auto-formatter. In the case your code is being re-used by outsiders, in an API or something, yeah bad naming ends up being awful.

</comment></comment><comment><USER19> thanks for the post.

yes taking an extra 10 seconds to name a function in a more clear way could probably save hours of frantic reading and cross referencing for another engineer down the road, especially when fixing urgent bugs/issues

<comment><USER20> And please make sure the words are spelled correctly in your public API. A library we use at work has a typo in the word "Acknowledge" where it is "Acknowladge". Drives me up the wall every time I see it.

<comment><USER19> ya this drives me nuts. Especially when the "autocorrect" word checker inside the IDE complains about the typo and keeps showing a red squiggly line, for code that is in another library that I am not supposed to change within the project in the IDE. Drives me nuts

</comment></comment></comment><comment><USER21> I'm a big fan of good descriptive names, but in practice when I run into a lint-enforced 80 character line limit names are the first thing to suffer.

</comment><comment><USER22> Well thank god we fixed the naming, that will surely help when someone comes looking to find out why all the amounts don't add up.

<comment><USER23> Indeed.

Looking forward to the follow-up post, "Choosing good types".</comment></comment>


Ask HN: Do you think the internet will become oversaturated? - <AUTHOR> With over a billion websites on the internet, and petabytes of increasing data per day, do you think the internet has a useful limit of data saturation? <comment><USER2> Like it doesn't scale technically? Like it doesn't scale from a business perspective? That it dies a cultural heat death?</comment>


Police push legal boundaries to get into cellphones - <AUTHOR> https://www.nbcnews.com/news/us-news/give-your-password-or-go-jail-police-push-legal-boundaries-n1014266 <comment><USER2> >The officers demanded his passcodes, warning him they'd get warrants to search the cellphones. Montanez suspected that police were trying to fish for evidence of illegal activity. He also didn't want them seeing more personal things, including intimate pictures of his girlfriend.

The police have a right to attempt you trick you into giving up information you shouldn't. Plead the fifth/don't talk to the police.

>So he refused, and was locked up on the drug and firearms charges.

This is fair.

>Five days later, after Montanez was bailed out of jail, a deputy from the Hillsborough County Sheriff's Office tracked him down, handed him the warrants and demanded the phone passcodes. Again, Montanez refused. Prosecutors went to a judge, who ordered him locked up again for contempt of court.

This is also fair. The police acquired a warrant and presented the warrant legally. The man refused, committing the crime of contempt of court, which is a fair and just punishment for refusing to heed a court-issued warrant. It's also within his right to decide to serve the time for contempt of court rather than providing the password.

Yes, there are lots of bigger issues touched upon in this story, but the headline seems sensationalist. Didn't the police do the right thing by obtaining a warrant for the password?

<comment><USER3> Legal yes, right no.

In many situations you cannot be forced to provide evidence that would be used against you or information which would lead to such evidence. I would go further and say that in all cases you shouldn't be required to provide such information.

It should be recognized as a basic right that you do not have to aid those who are trying to convict you of a crime. Our system of justice is _adversarial_ for good reason and it is explicit in forcing those with the most power to limit the use of that power for the benefit of the accused. Without those checks and balances (and frequently even with them) abuse of that power, under the auspices of a greater good, would be common.

<comment><USER4> The law draws a distinction between being forced to testify against yourself (which essentially has you _creating_ evidence to be used against you), and being forced to turn over evidence in your possession which may be used against you. The latter isn't indicative of an abuse of of power. The pre- existing physical evidence is what it is, and proves what it proves.

Your proposal is also unworkable. Should companies not be required to hand over corporate records, because those might implicate them in a crime? Should a murder suspect be allowed to deny police access to his shed, where the murder weapon might be hiding? A bedrock principle of law is that "the law is entitled to every man's evidence." The whole point of warrants is to reconcile that principle with private property—to create a structured way for police to access private property to get access to evidence. Your proposal isn't a "check" or "balance"—it obliterates that principle. It allows wrongdoers to hide evidence of their crimes even against a valid warrant.

<comment><USER5> But a password isn't evidence, it's testimony. The Supreme Court has held that you don't need to turn over "contents of the mind". The example of Wikipedia uses a bank password as an example [1]. In fact even the act of turning over the password demonstrates that the defendant had control of the device and could easily be argued to be self-incriminating.

Also, think about the implications of this. What if the person being ordered to hand over the password says "I forgot"? How do we know if they have _genuinely_ forgotten the password?

1\. [https://en.wikipedia.org/wiki/Fifth_Amendment_to_the_United_...](https://en.wikipedia.org/wiki/Fifth_Amendment_to_the_United_States_Constitution#Combinations_and_passwords)

<comment><USER4> It may or may not be testimony. The Wikipedia example you're referencing turns on the fact that knowing the password to the account proves ownership or control of the account, which itself may be a fact relevant to the charges. For example, if the account is connected to know money laundering. Turning over the password to a phone may or may not reveal similar information. If the phone was found at a drug stash house, knowledge of the password reveals a connection to the crime. If it's just your phone, and there is no doubt it's your phone, knowledge of the password doesn't in and of itself reveal anything.

Testimony is stuff you'd tell a jury. In the bank account example, you'd tell the jury: this account was used by the criminal, and the accused knew the password, it must be his account. You wouldn't tell the jury "the accused knew the password to what was undisputedly his own phone."

</comment></comment></comment></comment></comment><comment><USER6> Plausible deniability. Encryption systems that are designed for countering a hostile threat that can force you to divulge the key have two passwords. One opens your real data, one opens a decoy. It would be nice is phones had that feature.

<comment><USER7> Hello Irene Adler

</comment></comment><comment><USER8> He went to jail for contempt of court for ignoring a court order, not just disobeying police to unlock his phone. This would be true for any court order. In the article, it appears the police had probable cause for the warrant to search the phone by the text popup that appeared on the locked phone.

<comment><USER9> If a court order said he had to confess, and arrested him for not doing so, would you say that is a lawful order?

And if not, what is the difference between being ordered to confess and being ordered to produce evidence harmful to yourself?

Courts should have the right to seek evidence, no one is disputing that, nor is anyone disputing the rights of the court to seek that evidence unmolested, but there is a difference between seeking evidence and mandating compliance.

As far as I am concerned courts should not have any right to compel any action, particularly specific action. They should only have a right to compel inaction. In short, the court can issue warrants that permit their officers to conduct actions that would otherwise be illegal, for example entering my house without my permission, and they may even compel me to stand outside and not interfere while they do so, but they should never be able to compel me to open the door for them.

<comment><USER10> > but they should never be able to compel me to open the door for them.

If they have a warrant and don't open the door, they will break it down with a sledge hammer.

<comment><USER9> And they are welcome to do so, so long as I am made whole at the end of the investigation if no evidence is found.

</comment></comment></comment></comment><comment><USER11> This seems to me like a technical problem. Assuming one must really store sensitive things on smart phones, there should be a way to do this AND allowing one to share the phone unlocked with an adversary without risk of leaking data. Multiple unlock codes maybe?

Maybe a tertiary duress code that starts a timer and performs predefined actions after {n} minutes. i.e. send control code to a server, notify friends, family, lawyer you are under duress with GPS coordinates, wipe phone at the risk of destroying evidence, start sending audio to youtube, transfer / delegate data to a different predefined device, etc... Might be useful if you are being mugged.

</comment><comment><USER12> Well, in my opinion, the closest analogue would be mail. Can the police search through your mail?

[https://www.legalmatch.com/law-library/article/can-the- polic...](https://www.legalmatch.com/law-library/article/can-the-police-open- your-mail.html)

The answer is yes, with a search warrant. Therefore, I see no reason that a phone should be treated differently.

<comment><USER13> If the police want to open my phone I will supply them with the pentalobe driver to do so.

</comment></comment><comment><USER14> Phone OSes should allow the user to exercise plausible deniability by having dual or multiple passwords or other physical means of telling the phone to unlock only in a safe mode that will reveal innocuous documents or photos, job, relatives and friends contacts, and possibly let the inbox and outbox contain only conversations from clean numbers. If a cop signals to pull over, a short bossa nova tap on the phone case might get detected by the accelerometer and trigger that safe mode, until the user tells the phone the emergency is over by tapping a pataflafla followed by a paradiddle diddle (just kidding, but you get the point:^) Not that I condone any illegal use of cellphones, but often a wrong assumption by a police officer paired by his perceived omnipotence can easily escalate to a level much worse than the "crimes" they intended to prevent.

<comment><USER15> Phone maker Xiaomi's Miui version of Android has a feature much like this called Second Space where you can create a clean copy of the OS and only import what data you choose from your primary account. Call and SMS history is shared but not contacts, but SMS being insecure an App like telegram used in first/primary space would be more secure anyway.

I haven't really used the feature yet but thought it was a really cool idea. [https://www.pcsteps.com/18454-second-android-user-account- xi...](https://www.pcsteps.com/18454-second-android-user-account-xiaomi- second-space/)

<comment><USER16> Blackphone2 as well: [https://www.silentcircle.com/products-and- solutions/blackpho...](https://www.silentcircle.com/products-and- solutions/blackphone2/)

</comment></comment></comment><comment><USER17> IMO, the legal landscape here hasn't kept up with changing social conditions. A huge amount of social and personal activity is now getting mediated through technology, and legal protections have not been correspondingly extended.

Cell phones routinely keep a log of who you've been talking to, when, and a big chunk of the actual contents. They also will often collect location history, or broadcast the location to third parties as part of their normal operation.

</comment><comment><USER18> What if i programmed a phone to no reveal data, even with the correct passphrase, as long as the user is seen under pressure by law enforcement or society to reveal data?

<comment><USER6> and how would you program that?

<comment><USER19> alexa, hide !

-ok ill let you know how to find me when i hear the safe word

</comment></comment></comment><comment><USER20> jail is not that bad.

<comment><USER21> Maybe not, but please don't post unsubstantive comments here.</comment></comment>


Ask HN: Is it worth it to get a subscription on Climeworks? - <AUTHOR> Any thoughts on this startup [0]? Is it worth to join as a pioneer[1]?<p>* [0]: https://www.climeworks.com/<p>* [1]: https://climeworks.shop/ <comment><USER2> Really interesting project IMO. It would be great to have this linked with an app that actually computes how much CO2 you consume while travelling and proposes to offset whatever you are consuming.</comment>


Linux and Windows Kernel Comparison (2003) - <AUTHOR> https://www.youtube.com/watch?v=Nz-vWYM-2Gw <comment><AUTHOR> Background on the speaker [0]

> Mark Eugene Russinovich (born c. 1966) is CTO of Microsoft Azure. He was a > cofounder of software producers Winternals before it was acquired by > Microsoft in 2006.

Seems like a great person to be in charge of Azure.

[0] [https://en.wikipedia.org/wiki/Mark_Russinovich](https://en.wikipedia.org/wiki/Mark_Russinovich)</comment>


Call for Feedback on a Go Package Metadata Spec - <AUTHOR> http://engineeredweb.com/blog/2015/pkg-spec-call-feedback/

<comment><AUTHOR> If you're only interested in the actual proposal: [https://github.com/mattfarina/pkg](https://github.com/mattfarina/pkg)</comment>


Dropbox and Google Cloud integrations - <AUTHOR> https://blogs.dropbox.com/dropbox/2018/03/google-cloud-integrations/ <comment><USER2> This is the reason why proprietary cloud services will never be as flexible as traditional programs on our computers. With N cloud services there need to be N^2 integrations to make them all work together. With N desktop programs it is enough if each of them implements a single common API (for example text bast stdin/stdout Posix API) to make them all work together.

Imagine if 'cat' and 'sort' needed to implement a dedicated API to work together, and then 'sed' would add another one, and 'wc' another. This is a kind of mess that we see with cloud services integrations.

<comment><USER3> Why couldn't cloud providers adopt a common API? Some providers are adopting AWS apis for their services.

And we can also look at the email example : a lot of cloud provide email services and they all use the same protocols (SMTP, IMAP...).

<comment><USER4> Because they want to lock their customers to their platform. AWS has the biggest marketshare, so if a smaller provider adopts AWS's api, that means that AWS customers can easily migrate to them.

I do wonder how we managed to get standard protocols adopted for email. What did email providers use before SMTP and IMAP? Maybe the key difference then from now was that the internet community was much smaller? Did Mark Crispin simply write the RFC for IMAP, email vendors noticed on their own, and adopted the protocol? Or was the emailing community then so small that there were no vendors and it was really just a handful of programmers, who could discuss and agree on protocols via something like Usenet and implement their own clients and servers?

<comment><USER5> more the latter. long ago, to get access to mail or usenet you generally were a technically minded person at one of a few universities or large corporations like DEC. to give a sense of the scale involved, check out [http://olduse.net/blog/current_usenet_map/](http://olduse.net/blog/current_usenet_map/) . There were on the order of between dozens and hundreds of machines, and you would send mail to a person on a given machine by figuring out (by hand?) a path from your machine to that machine and include the names of all the machines in a "bang path" [http://www.catb.org/jargon/html/B/bang- path.html](http://www.catb.org/jargon/html/B/bang-path.html)

Also, before SMTP there was UUCP (which was used for both mail and usenet).

</comment></comment></comment></comment><comment><USER6> Google's branding continues to confuse me. Isn't Google Cloud their AWS competitor, and the thing they're talking about in this article called G Suite?

<comment><USER7> G Suite is a product series part of Google Cloud.

[https://gsuite.google.com/together/?user- benefits_activeEl=t...](https://gsuite.google.com/together/?user- benefits_activeEl=tab-connect)

on the top left corner you can find "G Suite by Google Cloud"

<comment><USER8> This naming is ridiculous. Did they hire a bunch of Microsoft people ?

<comment><USER9> Google naming products at this point is just memes. But it proves that if you have an amazing enough product (G suite) the name doesn't matter at all. Whoever came up with G suite is just a bad person though ugh.

<comment><USER10> I'm all against rigid company culture, but google naming needs to be improved. Variables are consistently named better at google than the products they are written for.

<comment><USER6> The naming doesn't even need to be improved, they just need to stop with the renaming. GSuite is an awful name, but i know what it means at this point as long as they don't sometimes call it "Google Cloud" instead.

<comment><USER11> G Suite has been called in the past "Google for Work", "Google Enterprise", "Google Business", "Google Apps", "Google Apps for Business", "Google Apps for Work", and I probably forget some more. It's really insane.

</comment></comment></comment></comment></comment></comment></comment><comment><USER12> It's worth pointing out that BECAUSE Dropbox recently announced their plans to IPO, all media coverage is now viewed in light of what's best to prop up their pricing.

No surprise that they are including names like Google, Microsoft, and SAP to put a more positive spin on everything.

</comment><comment><USER13> I don't really get why this is that useful. Except maybe the Gmail/Dropbox integration. Our office pays for 1) G Suite - from which we use Gmail and Calendar, 2) Dropbox for Business for file storage/sync, 3) Office 365 for Word and Excel, and 4) Slack.

I would really really like to give my money to one company, except Google Docs/Drive sucks (er, doesn't meet our use case), Office 365 - Outlook sucks (in comparison to Gmail) as well as whatever the Microsoft file syncing option is (OneDrive?). Our Dropbox for Business comes up for renewal this month and Google and Microsoft's file sync stuff isn't remotely comparable. Same for Slack vs the Hangouts incarnation of the moment.

I primarily blame Google. We are probably paying an extra $500/user/year because outside of Gmail and Calendar the other G Suite services are pretty awful in comparison to their competition. It is super frustrating.

<comment><USER14> I feel like the GSuite product experiences outside of Mail and Calendar still feel really unrefined for a company of the size, scale, and capability of Google. They've had the opportunity to absolutely crush the productivity / work suite of apps, and yet somehow for all their resources and prowess, they've not been able to produce products that are truly _compelling_ options vs Office and Slack. Maybe there's a "yet" at the end of that, but as time marches on, it feels less likely for some reason.

<comment><USER15> Are you including gDocs and gSheets in that? They seem adequately polished to me (I know the serious Excel user won't be switching any time soon, but for lots of "just put it in a spreadsheet" uses gSheets is fine). And of course time will tell if they have managed to finally make a Slack-killer with Hangouts Chat[1].

1: [https://gsuite.google.com/products/chat/](https://gsuite.google.com/products/chat/)

<comment><USER13> The primary roadblock for us is gDocs. Sheets would probably meet our needs because spreadsheet aren't really a core need, however word processing/documents are our lifeblood. While gDocs has improved it doesn't come close to Word for us. It isn't just that it is a web app -- the Office 365 web based Word actually would be usable for us vs. the desktop apps. That fact is actually pretty amazing to me, I would not have anticipated that to ever be the case when Microsoft first put out their web based version of Word. As it happens a while back I mentioned on here one of the big bugs/lack features that kept us from using the web based Word and some guy from Microsoft asked for more details and then the issue was resolved a few weeks later. That was pretty surprising and impressive to me.

I have no doubt Google has the talent and ability to make Docs competitive, but for some reason it is just not a priority for them.

I'm going to look at Hangouts Chat, but we had a particularly painful process (for no technological reason) when we migrated from using Hangouts for IM to Slack and I don't really look forward to the eye-rolls that are going to come with "Remember Hangouts? We're going back..." even if the Hangouts Chat is an entirely different product. But that is our issue.. Kudos to Google if it can eliminate the need for Slack.

</comment></comment></comment></comment><comment><USER16> I would love to move from Google Drive to Dropbox because of syncing issues and the UI/UX but the pricing models kills me. I have around 40 GB of stuff I need to be backed up and in cloud so more than the free version that Dropbox offers but not enough to justify the first tier of 2TB. I get plenty of room to grow with the cheapest version of Google Drive.

I've been tempted to just suck it up and pay for way more than what I need.

<comment><USER17> I'd argue that what you need is not 40GB of storage, it's _enough_ storage and a great service. To me, paying $8.25/mo is a no-brainer for the quality and reliability of the service alone. Having enough storage space so that I never have to think twice about uploading something is just a nice bonus.

<comment><USER16> The only thing holding me back is I'd probably have to pay for both since I use Drive for a daily NAS scheduled backup for business purposes. Looks like I can now do that with Dropbox as well.

Great. Might just spend the money :)

</comment></comment></comment><comment><USER18> It's quite unclear what this practically would mean. Some things are getting confusing with Dropbox already. Why for example, can't I find the "Paper" files, in an actual seperate folder?

I'm not sure this is a good thing.

Then again I'm quite surprised how incredibly good iCloud syncing is from Apple, it took them years, but it works impeccable - though I know it's more limited.

<comment><USER19> I think what this means is an integration with Google Drive in Dropbox itself. You might need to connect your Google account with Dropbox (by allowing permission of course) and can then able to access GDrive files in Dropbox or create a Docs/Slide/Sheet from within Dropbox which will in turn save it in Dropbox and GDrive both. At least that's what I am getting from this announcement.

</comment></comment><comment><USER20> This is great for me. I use dropbox for my personal files these days instead of GDrive because there's no native linux client for Gdrive. There are some 3rd party ones but they're not that great. I've also been moving away from Google Docs and now the only thing I have in my GDrive is a financial sheet for budgeting that I like to access from my phone. I'll probably store it on Dropbox now.

<comment><USER21> Google Drive always fails to sync correctly on my Macbook as well, unlike Dropbox.

<comment><USER22> Is that the old client? Yes, it was never great for me either.

I had an alert to switch to "Google Drive File Stream" (and uninstall the old Google Drive client) that is some kind of virtual filesystem. I went ahead and did it but haven't used it much yet.

<comment><USER23> I found out about File Stream by accident, they haven't really pushed it.

<comment><USER24> It's only for g-suite (i.e. corporate) users, not personal accounts. It's up to your g-suite admin to push it. I've been using it for a few months and it's pretty good.

</comment></comment></comment></comment></comment><comment><USER25> That's confusing. I'm a G Suite customer and it comes with either huge or unlimited amount of google drive storage. I can access that storage either through a browser, or with a program from google called "drive file stream" which creates a 'fake' local file system interface to online storage. Isn't that the same as dropbox? Where would dropbox fit in for a G Suite customer?

<comment><USER26> I'm in the same boat with my organization. My guess is that you'll be able to store the .gdoc 'files' in Dropbox and opening them will open the docs in your web browser, just like Drive File Stream.

I'm also curious how this will work with things like Team Drives. You cannot copy a folder from one Team Drive to another (unless you're a domain admin, and even then the folder's URL changes), for example.

</comment></comment><comment><USER27> It's clear that the money is in the enterprise business and not their consumer business.

The problem for Dropbox is that storage is commoditized. For them to make money, they need to become a collaboration platform. Storage is a necessary (but not sufficient) piece of that. The more important piece for any collaboration platform is identity. When your company is on G-suite/Gmail, Google manages identity for you. So it becomes frictionless for other Google products to piggyback on that identity and authenticate you. That's what turns a suite of products into a proper collaboration platform.

Microsoft and Google have an advantage because they manage email. So I had expected Dropbox will launch a G-suite competitor.

If you're in the Google ecosystem with G-Suite, I don't see why you would want to complicate life by using Dropbox. G-Suite integrates well enough with Google storage. In fact, for $10 per user per month, G-Suite offers unlimited storage.

<comment><USER28> You might be interested in this Stratechery article then that looks at Box vs Dropbox:

[https://news.ycombinator.com/item?id=16465883](https://news.ycombinator.com/item?id=16465883)

</comment></comment><comment><USER14> As someone who has never used Dropbox and has instead typically used Google Drive for doc sharing, could someone who's a user of Dropbox provide their perspective on how Dropbox is different and why it would make sense as a G Suite user to use dropbox vs Drive?

<comment><USER26> I moved from Drive to Dropbox as part of my plan to become less reliant on Google's ecosystem and start self hosting and/or paying for online services.

I've stuck with Dropbox for a while because it's easy to set up, portable, the iOS app is fantastic, and I _feel_ like my data isn't being siphoned off to advertisers.

<comment><USER20> Same. I was a kool-aid drinking Google fanboy but started looking elsewhere a couple years ago. I found myself using Google products just because they were Google. Part brand loyalty and also it was nice to just have one account for everything. After a while I admitted to myself that there were better products. Deezer is awesome and I like it much better than Google Music, I've been on Firefox for a year now and much prefer it to Chrome (tried switching back just to see if Chrome had made any changes and I was back on Firefox in 24 hours). I prefer Simplenote to Keep and, other than my one spreadsheet in Google Docs I use Libre Office locally for my other docs/sheets.

The other thing I've noticed is how fickle Google is with their products, either not advancing them or straight up killing them. I used to use Listen for Podcasts and Reader for RSS and got disheartened when those were killed off. Dropbox is my latest switch, hell I even use DuckDuckGo more these days, too. The only Google products I can see myself using long term are Gmail (with my Google Apps Domain account) and Photos. Also, Maps is still the best Maps software. Other than that I don't use their services much at all these days.

</comment></comment></comment><comment><USER29> I wonder if they'll make it easy to attach MULTIPLE Google accounts to your Dropbox accounts. I have 5 at the moment and there would be some real value in Dropbox giving me an easy way to pull things from all of them together.

For example, the Dropbox Paper feature of integrating with your calendar to creating meeting notes is great. I've started using it to take all of my meeting notes as well as tracking action items from those meetings. The biggest issue is that I have 1 Dropbox account and I'm often dropping in links (or calendars) from multiple Google accounts.

</comment><comment><USER30> What does Dropbox do for me that going all the way over to Google Docs wouldn't?

<comment><USER31> Far better file synchronisation (peer to peer LAN sync, partial file sync, file requests). And you are the customer, not the product, to repeat a cliche.

<comment><USER32> I had the opposite impression. Dropbox sync was constantly making conflict files while Google Drive Sync (now replaced by File Stream) was able to more gracefully determine which file was newer. File stream adds the benefit of just keeping a stub file on all of my machines, then not actually downloading the file until I need it (you can, of course, specify which folders to always keep a downloaded copy of).

<comment><USER33> File Stream is for Business account only (G Suite). Dropbox Sync is also for paying individual customers (Dropbox Professional tier, not Dropbox Plus).

That being said, I had conflicts with Dropbox when opening a Visual Studio solution on a directory mapped through a junction point, which made me unsure about how reliable is their filessystem driver.

</comment></comment></comment></comment><comment><USER34> What does this mean for Dropbox Paper?

</comment><comment><USER35> Is the Dropbox plan to be a better-than-the-default sync provider, something you purchase in addition to the Google Cloud or Office 365 subscription?

I've been thinking that it will be hard for Dropbox to grow alone, but I would have expected them to establish closer ties with companies offering complementary services. I see Google Cloud as a quite straight competitor for Dropbox. Teaching Dropbox customers to use services like Google Docs might be risky.

</comment><comment><USER36> This seems like google is finally coming to terms with reality: (a) docs/sheets/etc are awesome, (b) drive is an insane piece of crap that has been significantly holding back the impact of (a). I'm pretty excited about the possibility that we might be able to ditch drive at my company. Definitely will be trying this out.

</comment><comment><USER37> So with this I would be able to edit Google office docs directly from Dropbox / see it in my Dropbox folder?

For our startup tagtog.net this is useful because we like having all centralized into our docker folder and so not miss important documents in other services.

<comment><USER31> Indeed, it will be interesting to see how this works, since on with Google Docs the documents are not actually stored on Google Drive (just a placeholder/link that opens Google Docs when you open it). I would expect that this works there same, because so far there are no Google Docs file formats.

It should also be noted that Dropbox already had Office Online support for a while, which allows one to edit Office files that are stored in Dropbox in Office Online. This integration stores the actual Word/Excel/PowerPoint documents on Dropbox, so after syncing you have these files locally as well.

<comment><USER38> Google apps (now GSuite) has had offline functionality for several years. You can work on Sheets, Docs etc completely offline.

<comment><USER31> Sure, but that's not the same as: the documents end up as regular files in a directory in a standard(ized) format, that you still can open in 10 years long after you cancel your subscription/account.

One of the huge benefits of Dropbox was that _everything_ ends up as a normal file on your hard disk, that you can archive/backup. Unfortunately, that is not really true anymore, since Dropbox Paper docs are not saved to Dropbox.

You can save a copy of a Google Docs document on your drive in a Microsoft Office format, but that goes in one direction.

</comment></comment></comment></comment><comment><USER39> If only this was standardized somehow so that in the future users could integrate the features the way they want, not depending on current business partnership set of deals.

<comment><USER24> Do you mean like an API? [https://developers.google.com/drive/](https://developers.google.com/drive/)

<comment><USER39> I mean a standardized protocol that could allow such integrations with any cloud provider. API is just an implementation.

<comment><USER24> I struggle to see the difference. Describe what your proposal would look like.

</comment></comment></comment></comment><comment><USER40> As long as my Google data does not leak to Dropbox, this is fine. I am still boycotting Dropbox over the Condelessa Rice.

</comment><comment><USER41> Right after a news article that they've mostly dropped AWS. Must sting a little for Amazon.

<comment><USER42> from the article, it doesn't sound like Dropbox is actually using any of Google's infrastructure. It seems to be an a set of integrations with Gmail/Hangouts and G-Suite

<comment><USER41> I didn't say they were. Just that right after dropping AWS they go public with a collaboration with one of AWS' competitors.

</comment></comment></comment><comment><USER33> Is this just for Business accounts?

Or does G Suite here includes Gmail+Google services?

</comment><comment><USER43> Can anyone explain why would I ever need to use Dropbox over Google Drive when I already pay for Google Apps for business (and I use GDrive through the official desktop plugin that creates a virtual drive just like dropbox)

<comment><USER44> Clients, partners, departments... people can barely ever agree on a single platform.

I'm a WFH digital nomad (I know, but, as we travel around a lot but mostly HQ ourselves from the home-office...) with clients, and my partner has her mix of clients, some of them are shared, and we both have a few different/overlapping businesses that interface with our respective clients & vendors via different platforms.

We use Adobe CC, Microsoft 365, G Suite (G Drive), Dropbox, Slack, etc.

Our non-technical clients overwhelming prefer Dropbox, and can't figure out G Drive's weirdnesses, even if they're G Suite organizations. Dropbox is way friendlier and more normal in non-technical businesses.

(For our core business, we're as G oriented as possible, plus Adobe CC).

Frankly, this news excites me.

</comment></comment><comment><USER45> Big strategic mistake by Dropbox. Not sure what their differentiation is going to be in 2 years now that they've capitulated to GSuite.

Is Dropbox just a hosting company? Why are people still using it?</comment>


How we're changing Colombia through open-source communities - <AUTHOR> https://medium.com/colombia-dev/how-we-re-changing-colombia-through-open-source-communities-and-why-we-need-your-help-7825a9fd020e <comment><USER2> I wish I had known about JSConf in Medellin, I totally would have come down from NYC! I spent time in Medellin, Santa Marta, and Cartagena in May and can't wait to get back to Colombia.

If you need any volunteers for the next round of conferences let me know!

<comment><USER3> will do

</comment></comment><comment><USER4> I'm English and living in Bogota.

I don't speak Spanish very well (taking lessons though) and have been kinda busy up to this point, and both these things have put me off seriously looking around at what's going on, but I would absolutely love to go to meetups in Bogota, just to meet fellow developers/entrepreneurs in the city.

I'd be completely at sea if the meetups were totally in Spanish, and though I wish it weren't the case it'd be basically pointless me being there with my present level, and since the BogotaJS page is written in Spanish I'm not sure if this would be the case here.

Anyway long story short, if anybody can point me towards any English-speaking development / entrepreneurship meetups in Bogota, please let me know (my email's on my profile) - or hey, if anyone's in a similar situation and interested, let's organise one!

Alternatively, if there's anything I can do, as a native English speaker, to help with BogotaJS I'd be more than happy to get involved.

</comment><comment><USER5> [https://teespring.com/colombia-dev-shirt](https://teespring.com/colombia-dev- shirt) for the t-shirt

</comment><comment><USER6> As a 2nd generation Colombian myself (parents were born in raised in Barranquilla but I grew up in the states) I applaud you and your team for this effort. Colombia tech has always been a bit "behind" the times from my POV and unless efforts like this continue to grow & thrive then we can't elevate the overall education for the status quo, so thank you. I will be purchasing the sticker & t-shirt

</comment><comment><USER7> Have a feeling JSConf Colombia is going to be a hard ticket to get next year.

Here's the link for their recent (10/16-10/17) conference, some great talks: [http://jsconf.co](http://jsconf.co)

</comment><comment><USER8> I'm really glad about this read. And the best part is that this doesn't really need some government propaganda. It's just made by the community. Kudos for that.

</comment><comment><USER9> Nothing really to add, but Colombia is a beautiful country. If I had to leave the U.S. I'd be in Medellin, Colombia. If you get a chance to visit I highly recommend it.

<comment><USER3> thanks

</comment></comment><comment><USER10> T-shirt and Hoodie on the way. Great Colombia Dev logo. Best of luck on raising the funds you need. I'll try to go to a meet up next time I am in Colombia.

<comment><USER3> thanks, do let us know!! glad you liked the logo

<comment><USER10> Do you guys already have a date in mind for the 2016 jsconf. I would like to plan to be there and bring some my fellow Florida developer friends.

</comment></comment></comment><comment><USER11> I wish I had known about this too. Would love to help any way I can from Miami. @buritica, email me brian at refreshmiami .com to see how we can help.

<comment><USER3> will do! thx

</comment></comment><comment><USER12> Bought a sticker, it's not much but I hope it helps.

<comment><USER3> it is much

<comment><USER12> Any suggestions for other ways in which I can help? I've always envisioned that access to technology and the internet was going to help a lot of the developing countries catch up, but I feel like we're still so far away from that actually happening.

</comment></comment></comment><comment><USER13> great job! Got my t-shirt and sticker.

</comment><comment><USER3> thanks for sharing this :D

<comment><AUTHOR> :)</comment></comment>


SEC Makes Ousting Board Members Easier - <AUTHOR> http://online.wsj.com/article/SB10001424052748703632304575451572616571774.html?mod=WSJ_hps_LEFTWhatsNews

<comment><USER2> Could someone remind me of what the theory is behind protecting directors from shareholders. In other words, why does the Republican Party always favor entrenched management and directors over the actual, legal owners of the company?</comment>


Teleconsole: Share Your Unix Terminal - <AUTHOR> https://www.teleconsole.com/ <comment><USER2> Hey all, to follow up on everyone's how it works questions - teleconsole is a demo project built a while ago by Ev, our CEO to showcase the capabilities of [https://github.com/gravitational/teleport](https://github.com/gravitational/teleport)

</comment><comment><USER3> So how does this work behind the scenes?

Does the user have to trust the service provider, and can the service provider conceivably distribute malware or take control of the user's machine through this tool?

<comment><USER2> Cool question actually. We don't terminate SSH, the server is used to distribute trust, so while technically possible that this could change, or there is some attack vector we did not think of, the implementation is careful to avoid that.

<comment><USER3> What do you mean by "distribute trust"?

<comment><USER2> Exchange trusted ssh CA public keys

</comment></comment></comment></comment><comment><USER4> That's cool. How does it differ from tmate.io though?

<comment><USER5> That's literally less than a 30 seconds read to figure out how this service is different from that tool.

</comment></comment><comment><USER6> Very cool but I just prefer to attach to a tmux session

<comment><USER7> Wouldn't this require you to setup your own SSH session? Or does tmux have remote sessions built-in?

Edit: I just realized you can join a session through the browser, meaning the opposite party wouldn't need teleconsole / tmux / screen installed. And you can even port forward for web development which is really nice. Not trying to attack tmux. I'm just trying to find the benefits of this.

<comment><USER8> What about [https://tmate.io/](https://tmate.io/) ? It's a tmux fork.

<comment><USER7> Cool! I've not heard of tmate before. The only thing the opposite party would need is SSH installed (instead of being able to access through the browser). Though if you're working with a team of developers the chances are slim that they don't have that installed.

</comment></comment></comment></comment><comment><USER9> I got this error? Post [https://teleconsole.com:443/api/sessions](https://teleconsole.com:443/api/sessions): unexpected EOF

</comment><comment><USER10> screen -x?

<comment><USER11> I was thinking `tmux attach`, but...yeah?

<comment><USER12> I think the difference between such a service and tmux attach or screen -x is that if person A wants to share a terminal with person B and that person A is behind a firewall / NAT, it would be painful to do without some kind of proxy (this is mentioned in the linked page be the way).

You have to trust the proxy though.

</comment></comment></comment><comment><USER13> I came here expecting a terminal fashion show.

</comment><comment><USER14> Facetime?

</comment><comment><USER15> in the olden days all the cool kids used ytalk for that</comment>


The struggles of an open source maintainer - <AUTHOR> http://antirez.com/news/129 <comment><USER2> > First, before of the Redis experience I _never_ worked every week day of my > life. I could work one week, stop two, then work one moth, then disappear > for other two months

Interesting to read that and contrast with the 996 approach on the main page.</comment>


How to explore new songs?? - <AUTHOR> am not able to find single platform where i can explore new music coz all the apps,youtube etc are showing the song which i ve already listened <comment><USER2> The person asking the question is running a "social music network where u can connect your music with your friends" mobile app ([https://news.ycombinator.com/item?id=15669015](https://news.ycombinator.com/item?id=15669015))

<comment><USER3> So, he's trying to trick us? What a trickster...</comment></comment>


Ireland has now helped financial institutions save €20B in taxes - <AUTHOR> http://www.taxinireland.com/ <comment><AUTHOR> "Post Apple, Ireland's new tax structures are the most competitive in the world.... For more information call Ireland's Embassies."

Yupp, that is an official site advertising the virtues of Ireland the tax haven.

(1) Get hammered by the EU for poo pooing the union by offering sweetheart tax deals to internationals while completely disregarding the tax interests of fellow union members.

(2) Publicly atone for some past sins and abolish some of the more egregious offences (e.g. double irish sandwich). And promise to not do these kind of shenanigans again.

(3) Go creative and create a whole slew of new "tax optimization" vehicle and aggressively market those.

Oh Ireland...</comment>


Securing Browsers Through Isolation versus Mitigation - <AUTHOR> https://firstname.lastname@example.com/securing-browsers-through-isolation-versus-mitigation-15f0baced2c2#.ue5qbt6hq <comment><USER2> All that work when I just block all ad networks in my router with a site whitelist, block Javascript, and block Flash.

Even my Windows 2000 laptop is essentially bullet-proof. Don't need all that nonsense just to read my typical news sites and as an additional bonus the router whitelist puts a stop to Windows Update ignoring the utterly-useless core Windows HOSTs file and stops it from doing anything further to my Windows 7 install.

<comment><USER3> There have been several image parsing exploits. Your browser could load a bad image and get owned.

<comment><USER2> I don't let images load. If I want to see them I download them manually and open in another program.</comment></comment></comment>


Globalizing Silicon Valley... - <AUTHOR> http://fi.co/about

<comment><AUTHOR> I attended their ideation bootcamp. They ask 950 dollars to be a part of their program. Has anyone been a part of it?</comment>


Are Semicolons Necessary in JavaScript? - <AUTHOR> http://aresemicolonsnecessaryinjavascript.com/

<comment><USER2> Omitting semicolons in JavaScript is like omitting braces from one line if blocks.

It's all well and good until someone turns this:

      if (conditional)
        statement;

Into this without realizing what they've just done:

      if (conditional)
        statement;
        statement2;

Yes, you can skip semicolons. And yes it will work the vast majority of the time. But the amount of time you save will be eclipsed by that one time someone makes a change to the code that breaks in an unpredictable subtle way due to your purely aesthetic shorthand.

Writing maintainable code is about learning humility. There's no need to show off your understanding of the deeper points of JavaScript semicolon insertion in your production code base. Just insert the semicolons, I promise you you will learn to not be distracted in no time.

<comment><USER3> I've never understood this argument for always including braces in one-line if-blocks. Won't this error be immediately obvious? I mean, after making the change, won't even the most minimal test catch the mistake?

If developer #2 isn't doing the most basic test to verify that "statement2" runs when "conditional" is true, then you've got way bigger problems than your style guide.

<comment><USER2> Anecdotally I've seen smart and capable developers make this mistake numerous times. It usually gets caught by code review, automation etc. But not always.

It's basically the birthday paradox. You take the probability of a very unlikely event and raise it to a big enough power (enough people, enough lines of code) it becomes a non-negligible outcome.

</comment></comment></comment><comment><USER4> Good luck minifying/compressing your JavaScript files without using semicolons. There's nothing I hate more than finding a promising jQuery plugin and when I integrate it into our JS minifying processes it blows up because they left semicolons off of a few lines, or the whole thing.

<comment><USER5> I've never personally minified JavaScript, with or without semicolons, but the article "Semicolons in JavaScript are optional" linked to in the page says the author minified jQuery without semicolons with Google Closure Compiler, and the test suite passed. Is that article wrong? Did minifying semicolons use to work, but they removed that feature for some reason? Does no one actually use Closure Compiler, and the other minifiers don't support missing semicolons? Or is the reason the plugin you found "blows up" simply the error described in "Semicolons in JavaScript are optional" in the section "The only real pitfall when coding without semicolons", which is starting a line with "(d + e)" instead of ";(d + e)"?

That article says that if a minifier doesn't understand JavaScript that an actual JavaScript interpreter can understand, the minifier is buggy. I agree with it – if your minifier messed up the semicolon-less jQuery plugin, and if none of the situations I mentioned above was the case, then your minifier needs fixing, or you should start using a different one.

</comment></comment><comment><USER6> To the author of the website: you have modified google analytics code and removed semicolons, I congratulate you on that. It shows true conviction. :)

Joke aside, that's a good content put together in very clear and concise manner.

</comment><comment><USER7> Unless you get a perfect score, don't omit semicolons <http://asi.qfox.nl>

Oliver Hunt, primary JavascriptCore engineer took this quiz and said, "I rewrote our entire JS parser < 2 months ago, with all ASI rules and still didn't get 100% on a quiz"

<comment><USER8> Most of those examples are designed to push the edge cases in confusing ways (i.e. bad code). Easy answer: don't do that.

Even if you include semicolons in all the "reasonable" places for them, it's quite possible to get tripped up if you don't understand what counts as a statement in JS and what doesn't.

Edit to add: For example, don't write code like this, with or without the autoinserted semicolons:

      var x = function()
      {
        return (function(n){
          return n
        })(n)
      }(function(){Math.exp(
        f
      )})

Someone else looking at the code is hardly going to be better off understanding it if you change that to:

      var x = function()
      {
        return (function(n){
          return n;
        })(n);
      }(function(){Math.exp(
        f
      );});

</comment></comment><comment><USER9> The semicolons are optional people really seem like they are picking a fight just to pick a fight. Why not explain how my JS will be _better_ if I omit some semicolons and not just the same?

<comment><USER5> I would think they didn't explain how it makes JS better because they were on the defensive from people who said leaving semicolons out will break code. They are saying "stop forbidding me from coding in the style I want, my style works just fine". They are just trying to defend their style, not convert people to it.

However, that's not to say there is no reason to omit semicolons. I personally leave out semicolons as an extension of the DRY principle – if you are putting a line break after a statement anyway, then you might as well leave off the semicolon. It's one less character to delete if you combine two adjacent lines into one. Also, if you already think of line breaks and statement ends going together, then semicolons are just noise that you have to make an effort to ignore – the effort required may be small, but there's little reason not to avoid that effort.

The only problem with omitting semicolons in JavaScript is this case mentioned in "Semicolons in JavaScript are optional":

      a = b + c
      (d + e).print()

The author recommends avoiding the error in that by changing the last line to

      ;(d + e).print()

. If the extra effort of adding a semicolon before all line-starting parentheses costs more effort than you would save by getting the two advantages I described above, then maybe adding semicolons everywhere is right for you. You might have to experiment with coding in both styles to be able to accurately quantify how much those two advantages and one disadvantage would affect you.

</comment></comment><comment><USER10> I think ECMA-262-5 7.9 pretty concisely sums it up... and at the same time there are plenty of nasty examples in the "FUD" section at the bottom of the article.

The spec very clearly says they may be used, so I trust no one will have a problem with me using them. It's tough to drop that old C habit, anyway. Even my Python code has a random scattering of semicolons at the ends of lines.

</comment><comment><USER11> I always use semicolons to end lines in JavaScript because it is comfortable for me.

...and I always feel a little guilty about it, because it seems wrong to add superfluous characters to my code. Is it actually "personal preference" and I've been feeling guilty for nothing, or is it better to leave off the semicolons?

<comment><USER5> See my reply to someone else, describing the advantages and disadvantages of omitting semicolons: <http://news.ycombinator.com/item?id=2184289>

As for whether you should omit the semicolons, only you can decide how much those pros and cons affect you. Depending on how much you care about others who read your code, you might also want to consider how you think those other people would choose, if they evaluated those pros and cons for themselves.

</comment></comment><comment><USER12> Slightly out of topic [https://groups.google.com/forum/?pli=1#!msg/nodejs/MWaivVTir...](https://groups.google.com/forum/?pli=1#!msg/nodejs/MWaivVTirPY/0pnRjKsggkIJ)

</comment><comment><USER13> The problem is not the semicolons, it is the newlines, and there is little you can do about that. The newline/semicolon issue is the most ridiculous language design decision ever.

</comment><comment><USER14> I wish they were. It can cause unexpected problems.

<http://bonsaiden.github.com/JavaScript-Garden/#semicolon>

(this really wasn't the example that I was thinking of, I'll scrounge for the other examples, sorry)

<comment><USER8> That example has nothing to do with whether semicolons are omitted or not; the rule that you need to know is _don't ever put a newline between the "return" keyword and the value to be returned_ , but whether you add semicolons at the end of what you want to make a statement makes absolutely no difference in this case.

In other words, whether you write

      return
        foo;

or

      return
        foo

the result is the same: an empty return, completely ignoring the foo bit.

<comment><USER14> Right, but if it wasn't "autoinserting" semicolons, the behavior _would_ be different.

<comment><USER8> That doesn't have any bearing on whether human programmers should add unnecessary semicolons to lines where there is no such ambiguity.</comment></comment></comment></comment>


Show HN: box2d-jquery - physics-engine for your DOM - <AUTHOR> http://www.fullstackoptimization.com/box2d-jquery/ <comment><AUTHOR> hiho, basically box2d-jquery is a jquery wrapper around box2dweb, it's quite simple to use

      $("#some_element").box2d({'y-velocity':10});

it was fun to code, basically it

      * creates absolute positioned clones of your selected elements https://gist.github.com/4051578
      * and animates them usind CSS3 transforms / translate / rotate
      * the values are calculated using box2dweb

i created it as i sponsor a javascript/jquery conference in my hometown (we need more dev-conferences here) and wanted to create something cool.

please fork it on github (zlib license) <https://github.com/franzenzenhofer/box2d-jquery>

update: more examples linked from github Readme.md

<comment><USER2> Very cool! I created a small bookmarklet that injects it into the system we're developing over here. It's nice to amaze some colleagues real quick. ;)

        javascript:(function(){var%20s=document.createElement('script');s.setAttribute('src','https://raw.github.com/franzenzenhofer/box2d-jquery/master/js/lib/jquery.box2d.min.js');document.getElementsByTagName('body')[0].appendChild(s);window.setTimeout(function(){$("#main-nav,header").box2d({'y-velocity':5,'x-velocity':-0.05,'debug':false});},500);})();

Note: if you copy this in the omnibox of chrome, you will need to re-add "javascript:" in front of it.

Edit: And a working bookmarklet for HN that also injects jquery.

        javascript:(function(){var%20s=document.createElement('script');s.setAttribute('src','//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js');document.getElementsByTagName('body')[0].appendChild(s);s=document.createElement('script');s.setAttribute('src','https://raw.github.com/franzenzenhofer/box2d-jquery/master/js/lib/jquery.box2d.min.js');document.getElementsByTagName('body')[0].appendChild(s);window.setTimeout(function(){$("td:first()").box2d({'y-velocity':5,'x-velocity':-0.05,'debug':false});},500);})();

<comment><AUTHOR> cool, here is on for the HN frontpage with a little bit more action (selects every <a> element)

        javascript:(function(){var%20s=document.createElement('script');s.setAttribute('src','//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js');document.getElementsByTagName('body')[0].appendChild(s);s=document.createElement('script');s.setAttribute('src','https://raw.github.com/franzenzenhofer/box2d-jquery/master/js/lib/jquery.box2d.min.js');document.getElementsByTagName('body')[0].appendChild(s);window.setTimeout(function(){$("a").box2d({'y-velocity':5});},500);})();

</comment></comment></comment><comment><USER3> Oh my god, I will troll my colleagues with this so hard. I'll add this to our website cms for their IP only and watch them panic "Why is our website falling apart?"...

<comment><USER4> Brilliant idea! I just created a JIRA ticket for this unusual issue we seem to be having with the tiles on the landing pages. Let's see what happens...

<comment><USER3> Awesome!

</comment></comment></comment><comment><USER5> Very nice! Though the API of Box2d is a little bit hairy, i really appreciate how stable it is. We built a DOM-based game/ad-thingee with Box2d this spring (<http://embassy.de/game/>) and using a game + physics engine (CAAT was the game engine) and relative measures was also a pretty good way to make it scale across window sizes!

</comment><comment><USER6> Does this have collision events? So if A hits B is there a way of knowing?

<comment><AUTHOR> it's on the todo list, it will work with custom DOM event events.

</comment></comment><comment><USER7> The future is here. Kiss your boring, practical webpages goodbye. ;)

</comment><comment><USER8> Forgive me if I am wrong, but shouldn't a true physics engine not behave exactly the same way every time? I refreshed 5 times and every time the word Hey ended up vertical against the word GitHub. I would expect the interactions between colliding objects to vary every reload.

<comment><USER9> I tried 4 times, but on my machine (Firefox on Linux) I get the exact same result every time, up to the last pixel.

In theory you would expect a physics engine to always behave exactly the same every time (as long as there are no random forces in the simulation, obviously). In practice, I can think of some ways that would influence the result. For example, x86 can use extended (80-bit) precision for intermediate floating point calculations internally, but will always store them as 64 bit in registers or memory. Depending on the timing of thread context switches, you can imagine subtle roundoff errors caused by going from extended precision to double precision. When using SSE math you get similar effects but even more pronounced, because SSE is not always fully IEEE compliant.

Usually the introduced error is infinitely small and most algorithms are robust enough to cancel it out. Stuff like non-linear regression or a physics simulation are notable exceptions, because the calculations they do are iterative and progressive, meaning any introduced error can propagate and get amplified along the way. I've seen deterministic non-linear fit algorithms go in completely different directions for unstable problems on different machines, just because of CPU differences (64-bit vs 32-bit, x86 vs. sparc, etc).

<comment><USER10> Great explanation, thank you. Always fun to know about non-determinism at the hardware level.

<comment><USER9> >> _Always fun to know about non-determinism at the hardware level._

Strictly speaking, the non-determinism isn't actually in the hardware, because the OS schedules thread context switches ;-)

Assuming the CPU is running a completely single-threaded program or uses a deterministic way to schedule thread context switches, the result should always be perfectly identical.

</comment></comment></comment></comment><comment><USER11> Wow very nice. I want to read what it says but I have a hard time keeping the whole thing still! I have some wicked ideas for this.

<comment><AUTHOR> next version will include collision detection (when to elements colide some custom DOM event will be thrown), so we can start to implement simple (to complex) game logic into the DOM as well.

<comment><USER11> That would be incredible. When do we think it will be able to do that?

<comment><AUTHOR> depends on the pull-requests and bug-reports that will hopefully start now (i want this code battle hardend for production use), they will take precedence over new features, but latest january / feb.

</comment></comment></comment></comment><comment><USER12> This is great, but it seems a little slower than the raw box2d. Is it doing anything else on each animation loop?

<comment><AUTHOR> mostly a lot of looping and setting CSS, see [https://github.com/franzenzenhofer/box2d-jquery/blob/master/...](https://github.com/franzenzenhofer/box2d-jquery/blob/master/js/src/main.coffee#L327:L352) but yes, performance profiling is the next step, also i wonder if position top / position left is faster than transform+translate... any support is welcome

</comment></comment><comment><USER13> Somebody please make a bookmarklet out of this.

<comment><USER14> A quick and dirty one that only affects h1, divs and imgs (based off the example on the github page):

javascript:(function(){document.body.appendChild(document.createElement('script')).src='[https://raw.github.com/gist/4257861/bf99710923dc4512338a9f19...](https://raw.github.com/gist/4257861/bf99710923dc4512338a9f193e05ff9928b0593b/jqb2d.js;}\)\(\));

The code can be found here: <https://gist.github.com/4257861>

<comment><AUTHOR> divs are an issue, because divs commonly include other divs commonly include other divs commonly include other divs ....

jquery-box2d does not animate the DOM of the webpage you see, it animates clones of the elements of the website you see, so basically you create and animated clones of elements that have animated elements of clones of elements and so on... this is probably solvable (everything is), hopefully it will be solved by somebody who is more in love with the DOM than i am

</comment></comment></comment><comment><USER15> I don't know how this is useful, but I want to use it!

</comment><comment><USER16> So slow on my browser.

Back to native applications coding.</comment>


Five Years Of Linux Kernel Benchmarks: 2.6.12 Through 2.6.37 - <AUTHOR> http://www.phoronix.com/scan.php?page=article&item=linux_2612_2637

<comment><USER2> It's actually quite disappointing to see that the Linux kernel performance essentially never increased over 5 years. A lot of nice functionality was added, so at least the lack of a net loss is quite fantastic.

I wonder if this report might give the kernel folks the boost they need to be truly innovative moving forward.

</comment><comment><USER3> the choice of some of these benchmarks is weird. they have a bunch of cpu- bound benchmarks. why exactly would you expect these to change as the kernel changed? (i would expect changing compiler to have a bigger influence.)

the ones that do change (and improve mostly) are ones where the kernel actually plays a role--file system, network, etc.

the iozone benchmark is a bit surprising, it shows no improvement. but they are hitting 200MB/s, so i wonder if this is simply because linux is hitting the max speed of the disk.

all in all, not very useful.

<comment><USER4> In general Moronix doesn't know what they're doing, but such benchmarks can be useful as regression tests; if the kernel _isn't_ giving you full hardware performance then you have a problem.

</comment></comment><comment><USER5> Simple way to get me to NOT read your article: give it a flash-based popup-ad and split the article into 8 separate pages. I just want to see the data. Fail.

<comment> rw- phoronix.com sucks anyway :)

</comment></comment><comment><USER6> Please standardize on either lower=better or higher=better. The graphs switch conventions frequently making it hard to interpret at a glance.

</comment><comment><USER7> I wonder how OSX's and WinNT's would look?</comment>


Strict Haskell (-XStrict) has landed - <AUTHOR> https://github.com/ghc/ghc/commit/46a03fbec6a02761db079d1746532565f34c340f <comment><AUTHOR> >Justification and use-case starts at [https://github.com/ghc/ghc/commit/46a03fbec6a02761db079d1746...](https://github.com/ghc/ghc/commit/46a03fbec6a02761db079d1746532565f34c340f#diff-02e7842997523ff8a5ad0312df2edfe2L12435) if anyone was wondering.</comment>


Testing apps w/ JavaScript that makes external HTTP requests (ex: Stripe.js) - <AUTHOR> http://robots.thoughtbot.com/post/34761570235/using-capybara-to-test-javascript-that-makes-http

<comment><USER2> For an alternative: <http://sinonjs.org/></comment>


Google breaks AI performance records in MLPerf using TPUv4 - <AUTHOR> https://cloud.google.com/blog/products/ai-machine-learning/google-breaks-ai-performance-records-in-mlperf-with-worlds-fastest-training-supercomputer <comment><USER2> Under figure 1 it says "Comparisons are normalized by overall training time regardless of system size, which ranges from 8 to 4096 chips. Taller bars are better."

Does this really make sense? The new TPU should have lots of chips and therefore finish training faster, which would make comparing like this kind of pointless? Am I misunderstanding something here?</comment>


Toptal-Remote Projects - <AUTHOR> Toptal | Software Developer | Remote | Contracts with a commitment of 40+ hours a week Toptal is adding freelancers even amid the layoffs and furloughs hitting many industries. We provide freelance tech talent to top organizations and are looking for global talent in the following areas:
React Native, Vue.js, Java, Shopify, Angular, React, Unreal Engine, Flutter
We are also looking for the following skills in the US:
Python, React, React Native, Shopify, Flutter, Drupal
These are all fully remote positions (even during non-pandemic times), and because we're so diversified geographically and by industry, it's very common for people to transition to companies in other regions or sectors that are doing well while others are facing difficult times.
Please contact me for more info (https://topt.al/b6cP8M), and feel free to check out our Toptal page to learn more about our process, our community, our clients, and the work we do. <comment><USER2> HN is not a job board, please read the FAQ for more details.</comment>


Breaking Down San Francisco's Car Break-In Epidemic - <AUTHOR> https://projects.sfchronicle.com/2018/sf-car-breakins/ <comment><USER2> I don't suppose there's any chance of San Francisco passing Castle Doctrine laws regarding property inside owner's vehicles? It would probably solve the problem in short order. The problem is that these thefts have no repercussions for those performing it, so of course the thefts will continue to rise.

<comment><USER3> > Castle Doctrine

In case you're wondering the way you find out your car was broken into in San Francisco is, you get up and start your day. Leave the house and walk four blocks to where you parked your car two days ago and find the passengers side window is smashed.

It would help if the police and DA's office actually cared about car break ins but they do not. Neither of them care for the same reason; None of them live in SF and they have off street parking at work.

</comment></comment><comment><USER4> Bay Area governments see car burglaries as a form of economic stimulus. They expect that victims will buy replacements and repairs locally, generating both local income and tax revenues.</comment>


Jack Ma defends the 'blessing' of a 12-hour working day - <AUTHOR> https://www.bbc.com/news/business-47934513 <comment><USER2> This is just Sino brainwashing in the East as workers in the West move toward a four day week. Does anyone really expect the 996ers, on their death beds, will say, "I'm sure glad I made oligarchy great again. I regret not going the extra step to be a 10-10-7 worker."

Perhaps 996 is the perfect life for a population of incels who are not going to make family a significant element of their lives.</comment>