Ask HN: How do you explain closures? - <AUTHOR> In the past year or two, I've had to explain closures--what they are and why they are interesting--several times.  Usually, at the end of my explanation, the person doesn't get it, and they go back to doing whatever they are familiar with.
So, I ask HN to put yourselves in this scenario and tell me what your answer would be:
Joe is a talented but inexperienced developer.  He's got a year or two of experience, maybe as much as 5, but he programs for a job, not for fun.  Also, for whatever reason he's never encountered closures--most likely he's only worked in languages that don't really support them.
You want to explain to him (a) what they are and (b) why he would want to use them.  You have about 10 seconds to get his interest before he starts thinking about his WoW raid tonight, and about 5 minutes for the whole explanation.
What do you say? <comment><USER2> _You have about 10 seconds to get his interest before he starts thinking about his WoW raid tonight, and about 5 minutes for the whole explanation._

Not going to happen. First, you need a person that wants to better themselves as a programmer, and understanding closures is just a part of that. Discounting the time it takes to put someone in that state of mind, closures can be explained in under a minute (edit: OK, maybe two minutes ;)).

A closure is just a (function, bindings) pair. If someone has a Java/C++ background, it might help to think of a closure as an object which has some code with references to variables defined outside of that code. Those variables are _dependencies_ without which you can't run the code.

JavaScript example:

        function foo() {
            var x = 1;
            function bar() {
                return x + 1;
            }
            return bar;
        }

What does _foo()_ return? It returns _bar_. But it can't just return _bar_ , since _bar_ has a dependency on _x_ , so it returns _bar_ and everything _bar_ references: the closure (bar, { x: 1 }). In practice, you call a closure as you would call a function, but underneath the abstraction, you need to realize what's returned is both _bar_ and the value of _x_.

<comment><USER3> So when does "x" get evaluated? What if x was a global variable instead? (Honest questions here, not trying to sidetrack the discussion. No, I don't "get" closures.)

<comment><USER2> Great question! Every time you call _foo_ , a new scope containing _x_ is created. That scope "travels" with _bar_ , and is evaluated (dereferenced might be a better word) just as any other variable inside _bar_ would be - during the execution of _bar_. A global variable is just a variable in the topmost ("global") scope.

But my example doesn't make the distinction to clarify that at all. Here's a better one:

        function colors() {
            var cs = ['red', 'green', 'blue'],
                i = 0;

            function nextcolor() {
                i = (i+1) % cs.length;
                return cs[i];
            }

            return nextcolor;
        }

Every time you call _colors_ , a new local scope is created. Easiest way to think of scopes is as maps from strings to values. In this case, a new scope _{ cs: ['red', 'green', 'blue'], i: 0 }_ is created every time you calls _colors_. If the language didn't support closures, that scope would be destroyed when _colors_ finishes execution, but in JS, that scope is bound to _nextcolor_ and returned along with _nextcolor_ in a closure. Now, every time you call a particular _nextcolor_ returned by a call to _colors_ , the _cs_ and _i_ variables will reference those same values. Example using firebug:

        >>> A = colors()
        >>> B = colors()
        >>> A() => "green"
        >>> A() => "blue"
        >>> B() => "green"
        >>> B() => "blue"
        >>> A() => "red"
        >>> A() => "green"
        ...

Keep asking if anything is unclear. I was wrong about this taking 1 minute, I suppose... :)

<comment><USER2> For the record: on second reading, I should have said "that scope is _bundled with nextcolor_ and returned as a closure", not "bound to nextcolor", since the word "bound" is usually used to talk about variable names ("identifiers") and their values.

Similarly, in the next sentence, I should have pointed out that when you call the returned value, you're not just calling _nextcolor_ but the _closure over nextcolor_ , which includes the bindings for _cs_ and _i_.

</comment></comment></comment></comment><comment><USER4> They are functions you can make up on the spot. That's usually the extent of my explanation.

Surprisingly, most of the people I talk to assume that the "fancy" parts of closures (such as variable value capture and upvalues) are the way such a construct should work and require no further explanation to use them. People who are surprised by capture (and assume, for instance, that the variable will take on the most recent value assigned to it by outside code instead of "remembering the value when the closure was made") get a more lengthy computer science-esque explanation. But I generally find that explanation to be unhelpful if a person can't see why closures are useful; "An anonymous function with some teeth" is often how people I talk to come to closures first, so it's how I let them think about it until the model is no longer helpful.

<comment><USER5> Right. That's exactly how it was with me when I first encountered closures. Explaining something that would be guessed anyway just makes it seem more complicated than it is.

</comment></comment><comment><USER6> I implemented anonymous methods in Delphi, and I faced a similar kind of problem trying to sell them, as it were, to the Delphi community.

What they are: functions with state.

Why they're useful: callbacks where a whole separate method or class would be overkill.

Motivating examples:

* Delegating work to a background thread. Captured variables are an easy way to pass along necessary state.

* A generic benchmarking routine. Benchmarking requires taking a measurement before the code, running the code to be measured possibly multiple times, and taking another measurement after the code. If you can turn the code to be measured into a callback, then the benchmarking code can be written once and reused elsewhere. But having to put all your benchmarks into their own methods, much less worry about state and possibly creating classes and initializing data in constructors, is pretty tedious. Closures avoid this tediousness.

(Yes, I'm conflating several concepts here, anonymous functions and lambda closures, for colloquial and didactic reasons. Nitpicking doesn't buy you much in terms of practicality when learning here.)

<comment><USER7> Are they similar in any way to Python generators? They are functions with a state, at least.

<comment><USER8> Multiple closures can share the same state ("environment"). Consider:

      (let ((i 0))
        (list (lambda () (incf i))
              (lambda () (decf i))
              (lambda () i)))

If you evaluate the first function this form returns ("increment") and then the third form ("get"), the result is 1. If you evaluate the whole form again, you now have another "instance", with its own separate shared i.

In Python, you would probably just make this a class. (But sometimes it's nice to have something equivalent to a class that's automatically built for you, and closures are that something.)

</comment></comment></comment><comment><USER9> I usually go with a simple counter-generator as a first example:

      function counterMaker(next) {
        var value = next;
        return function() { value++; return value }
      }

      var myCounter = counterMaker(42);
      alert(myCounter());
      alert(myCounter());
      alert(myCounter());

I'm not sure it is necessary to explain what they are/how they work right at the start. An example like this is pretty clear that something "weird" is going on and if "Joe" is interested at all, questions should probably come up which can then be answered with more details. I think the "what to use them for" stuff is going to depend quite heavily on the environment, language, libraries, and product you're working on.

I usually find it's better to introduce a language idea to someone and let them try to find out where they might put it on their own - they may surprise you. If you're doing code reviews, you could use that as an opportunity to point out how something like a closure (or any other construct) might have improved a situation, or, at least, how it may have changed it.

</comment><comment><USER10> I've found that the concept of anonymous functions is the biggest hurdle to get over -- closures seem to follow as a natural extension of that.

I explained this to someone recently in the context of event handlers in ActionScript/JavaScript, starting with the idea that when you do:

      something.onclick = function(){...};

you're passing a function around just like it was any other value.

Then I moved to an artificial example of a 'magic function-making machine':

      function giveMeAnAdder(baseNumber) {
        return function (i) {
          return baseNumber + i;
        };
      }

with a couple of examples of storing and using the functions that giveMeAnAdder returns.

Then I pointed out that, normally, local variables in a function disappear when the function returns, so how does my adder 'remember' what baseNumber is? And the answer is that the anonymous function is actually a bundle of a function body and the local context, and we call this a closure.

<comment><USER11> Can people please stop using the "make adder" examples? Can't you come up with something original and fresh? The triviality of what is acomplished in such case actually obscures the usefulness and power of the concept. As a result, the novice will interpret the end product as some useless, magical mambo jumbo that doesn't give him much. So who cares if I can get a function that adds a number to something. I have a "+" for that. Give me a use case that I can admire...

Why do you want me to appreciate a ferrari if all you do with it is go pick up some groceries...

<comment><USER10> I agree that for a novice a trivial example doesn't inspire them to learn more. But an experienced programmer who just wasn't familiar with this concept might appreciate more a stripped-down example like this that demonstrates the essentials of the idea. And in general, different people have different learning styles.

</comment></comment></comment><comment><USER12> If they don't already understand object-oriented programming, you make sure they understand that first.

If they understand objects, you explain that closures are the same as objects. They are bundles of state that carry around functions that operate on that state. The only real difference is that a single closure only contains a single function (method) that operates on its data, where a single object can have several methods.

</comment><comment><USER13> An interesting demonstration of why closures are useful is to start from a hypothetical language that supports closures but not objects and then implement a (simple!) object/class system. For me, it was extremely clarifying to have something in my mind click and go "Oh, OOP doesn't need to be a language feature ... there's this much more powerful concept available as a building block."

<comment><USER14> The venerable master Qc Na was walking with his student, Anton. Hoping to prompt the master into a discussion, Anton said "Master, I have heard that objects are a very good thing - is this true?" Qc Na looked pityingly at his student and replied, "Foolish pupil - objects are merely a poor man's closures."

Chastised, Anton took his leave from his master and returned to his cell, intent on studying closures. He carefully read the entire "Lambda: The Ultimate..." series of papers and its cousins, and implemented a small Scheme interpreter with a closure-based object system. He learned much, and looked forward to informing his master of his progress.

On his next walk with Qc Na, Anton attempted to impress his master by saying "Master, I have diligently studied the matter, and now understand that objects are truly a poor man's closures." Qc Na responded by hitting Anton with his stick, saying "When will you learn? Closures are a poor man's object." At that moment, Anton became enlightened.

<comment><USER15> No link to the source?

[http://people.csail.mit.edu/gregs/ll1-discuss-archive- html/m...](http://people.csail.mit.edu/gregs/ll1-discuss-archive- html/msg03277.html)

</comment></comment></comment><comment><USER16> Closures are essentially a way to create private variables.

For example, in Javascript:

        var fn = null;

        (function(){

            var temporary = 789;
            alert(temporary);

            var secret_private = 5;
            fn = function(){
                alert(secret_private);
            };

        })();

        fn();

In javascript,

        (function(){ ... })();

defines and executes kamikaze function. It's a function which dies as soon as its job is completed.

We can use the kamikaze to hide secret_private from all but the functions that we want to have access to it.

Since fn is defined in the kamikaze function, fn can access secret_private.

Since fn is assigned to a global variable, it can be accessed from outside the kamikaze.

When the kamikaze dies, it takes all of its variables with it, except for the ones that are referred to outside of the kamikaze.

temporary disappears because it is referred to only inside the kamikaze.

But, since secret_private is referred to in fn, and fn is a global, secret_private does not disappear, but now only fn can refer to it.

So sceret_private is essentially a private variable of fn.

<comment><USER9> Kamikaze functions? Sounds dangerous...

<comment><USER16> Dangerous, maybe, but high affect.

</comment></comment></comment><comment><USER17> You could try an example showing what a closure does 'under the hood' by showing an equivalent non-closure example, like:

With Closure:

      foreach (var obj in objects) {
        AddButton("Delete " + obj.ToString(), () => obj.Delete());
      }

Without closure:

      class DeleteHandler {
        public DeleteHandler(TYPE obj) {
          _obj = obj;
        }
        private TYPE obj;
        public void DoDelete() {
          obj.delete();
        }
      }
      ...
      foreach(var obj in objects) {
        var deleteHandler = new DeleteHandler(obj);
        AddButton("Delete " + obj.ToString(), deleteHandler.DoDelete);
      }

<comment><USER18> I'm not convinced by the utility of your example. What's wrong with:

        foreach (var obj in objects) {
          AddButton("Delete " + obj.ToString(), obj.Delete);
        }

This is even simpler and doesn't use closures at all.

<comment><USER17> Doh!

It would have made more sense if I had some other piece of information to inject in, like if you had a database reference that needed to be passed in to the Delete() method.

Then:

      AddButton("Delete " + obj.ToString(), () => obj.Delete(db));

Vs.

      var d = new DeleteHandler(obj, db);
      AddButton("Delete " + obj.ToString(), d.DoDelete);

EDIT: fixed

<comment><USER18> Yup, makes more sense now! This is a good example, I think, to give to people who are used to objects being used for everything. Nice, clean, functional syntax.

(And of course you mean "d.DoDelete")

</comment></comment></comment></comment><comment><USER19> A closure enables you to keep local state in a functional language. Think of it as an object (a really abused word, I know, but it conveys the idea).

So what are the mechanics? Follow me (I'll use Arc):

Lesson 1) A function can return a function:

      arc> (def adder-factory () [+ 1 _])
      #<procedure: adder-factory>
      arc> (= add-1 (adder-factory))
      #<procedure>
      arc> (add-1 10)
      11

Lesson 2) A created function can hang on to information which you pass in:

      arc> (def adder-factory (c) [+ c _])
      #<procedure: adder-factory>
      arc> (= add-17 (adder-factory 17))
      #<procedure>
      arc> (add-17 13)
      30

Lesson 3) The information a function hangs on to can be mutable local state.

      arc> (def make-point ((o x 0) (o y 0))
                "Constructor for creating point objects"
                (let methods (obj
                        get-x (fn () x)
                        get-y (fn () y)
                        set-x [= x _ ]
                        set-y [= y _ ])
                    (fn (method . args)
                        (apply (methods method) args))))
      #<procedure: make-point>
      arc> (= pt (make-point))
      #<procedure>
      arc> (= pt (make-point))
      #<procedure>
      arc> (pt 'get-x)
      0
      arc> (pt 'set-x 17)
      17
      arc> (pt 'get-x)
      17

And that is a "closure". The name comes from the fact that the scope of the created function "closes over" the local variable.

Helpful or noisy?

</comment><comment><USER20> Closures are functions with state.

Your claim that Joe is a talented programmer isn't very persuasive. Edit: maybe I should say why. I have known many programmers of the 9-5 type who do a passable job, but are not interested in learning anything. It is as if they had a limited supply of energy for learning and used it up when they were getting started. This is a common type of working programmer and you made it sound like Joe might be one.

</comment><comment><USER21> Closures are different from objects in only a couple of ways: (1) the creation protocol is extremely concise (lambda) (2) the access interface is the function call

Say that closures lower the syntactic overhead of accessing the same flexibility he normally turns to objects for.

So if he uses closures he will effectively use objects in more situations simply because it becomes easier and this will increase the flexibility of his code.

</comment><comment><USER22> Closures are the _context_ in which a function executes. The best way to demonstrate this is with a silly example that sticks in the mind:

      def learn_how_to_greet(formal=True):
        if formal:
          string = "Good day, Mr. {last_name}."
        else:
          string = "What's up, {first_name}?"
        def greet(**kwds):
          return string.format(**kwds)
        return greet

<comment><USER3> What happens if you do:

      def learn_how_to_greet(formal=True):
        if formal:
          string = "Good day, Mr. {last_name}."
        else:
          string = "What's up, {first_name}?"
        def greet(**kwds):
          return string.format(**kwds)
        ret = greet
        string = "WHOA! Look at me!"
        return ret

In other words, at what point do the variables used in the "greet" function get saved off? And what is saved, the variable name itself, or the data in it?

<comment><USER23> It should be saved as its value at the point of greet's definition, but Python appears to not have real closures, so the change in the value of string afterwards changes it in greet too.

<comment><USER24> Why do you say that the value should be saved at its definition? I realize Java does that (with anonymous classes & final), but allowing mutation of closured state lets you fairly easily write things - like an OO class system, if you want to.

</comment></comment></comment></comment><comment><USER25> A lexical closure is similar in many ways to the _class_ of an object-oriented language. In fact, lexical closures can be used to create an object system.

A class in PHP, for example, can have any number of class variables and for this demonstration consider these variables to be "private" (not accessible outside of the class or its own instances). One can, however, write methods or functions in the class that can provide an interface to operate on or access these private class variables.

That is, essentially, what a lexical closure is but without the overhead of an object system (remember, an object system can be created using closures!). They are a remarkably useful pattern of encapsulating certain kinds of logic.

Continuations, are another fun topic related to lexical closures too...

</comment><comment><USER26> I have been in this position, and what I've found is that formal definitions don't make sense. You have to encounter an example that makes you sit up and realize that something is going on that you don't know.

Two examples where I tried to induce that kind of brain lock in Perl programmers are <http://www.perlmonks.org/index.pl?node_id=34786> and <http://www.perlmonks.org/index.pl?node_id=50132>.

</comment><comment><USER27> I've got the following matlab code:

      eta1=0.7;
      omega=10;
      f = @(t) eta1*sin(omega*t) + (1-eta1)*sin(2*omega*t)

I can call

      f(2)

and return a scaler value. I could just make a function in a separate document, but then I would have to pass in my parameters eta1 and omega. By using a closure, I just have to set those parameters in my code beforehand. Also, if I want to change my forcing term, by adding new parameters, I don't have to change the function definition, I just add those parameters right in.

</comment><comment><USER28> I wrote an article about the closure aspect of Ruby blocks that was intended for beginners:

<http://darwinweb.net/articles/41-ruby_blocks_as_closures>

It really focuses on just one aspect of closures that Ruby's syntax makes especially convenient, which is that they enable you to write generic functions that don't need to know a single detail about what kind of data they are being applied to.

</comment><comment><USER29> [http://www.iode.co.uk/blog/pdrummond/i_finally_understand_cl...](http://www.iode.co.uk/blog/pdrummond/i_finally_understand_closures.html)

</comment><comment><USER30> A method remembers its context? I am not sure how to not understand it. Understanding all the implications might be another problem.

</comment><comment><USER31> I wrote this to answer that question: <http://www.jerf.org/iri/post/2542>

In particular, I focus on showing an example that is noticeably more complicated without closures, but also a real case that could conceivably come up.

</comment><comment><USER32> Simple Clojure example:

      user=> (defn add-n [n] #(+ n %))
      #'user/add-n
      user=> (def add-2 (add-n 2))
      #'user/add-2
      user=> (add-2 5)
      7

</comment><comment><USER33> Imagine you need a task to be done. Normally, you go and do it yourself. With a closure, you write the instructions and just hand it off to someone :)

</comment><comment><USER34> I'm going to assume you mean closures as in Scheme, not closures in a pure functional language.

For that, what I would try is an operational approach:

"Joe, you know how local variables are allocated on a stack?" If he says "no" I'm not sure what the next move is but if he says yes, get him to briefly explain it back to you. E.g., get him to say, at least in vague terms, that on entry to some function the local variables get "pushed on the stack".

"Ok, good. So, what happens when the function returns?" Hopefully he can come up with "the variables are popped off the stack".

"Right. Now, how does the program find the variables on the stack?" Hopefully, Joe can come up with the idea of a stack pointer.

"Cool. [Draw a little picture] So, the stack pointer is kind of like a pointer to a structure. The variables are the fields of the structure. See?" Hopefully Joe says "yes".

"Here's an alternative: instead of using a stack, we could allocate that structure just like any other structure. Instead of popping things off the stack at the end, we could just free/delete/whatever the structure. Make sense?" Hopefully he's still with you.

"Only, we don't actually have to free/delete the structure right away. Suppose I write a function inside this other function, like this [write pseudo-code for an anonymous function with some free variables bound to locals. Have the containing function return this anonymous function.]"

"You might think that when we return a 'function pointer' that we're just returning a pointer to the code. But in this case, our 'function pointer' is really two pointers: a pointer to the code and another pointer to the structure containing the local variables it refers to. So now, we _DON'T_ free/delete that structure of local variables when returning. It sticks around. It's used by this 'function pointer' where returning. When we call that function pointer, it gets passed a sekrit hidden magic parameter which is a pointer to that structure. So the function can still keep using those variables." Hopefully Joe is still with you but ask some questions to find out.

"It's a little bit like that structure of local variables is an object, but an object with only one 'method' and that one method is the nested function we wrote. Get it?"

I think that should get a typical Joe (at least one who has some clue about stacks and stack pointers) to a first-level, rough and ready, operational understanding of closures. If it does, you can mention that actual optimized implementations tend to be a lot hairier, that GC is important, that there are deep connections to lambda calculus, etc.

Again, if on the other hand Joe doesn't even have the slightest awareness of an operational model of how a stack-based language works - I'm not sure what you can do for him.

</comment><comment><USER35> Closures are functions that exist inside a variable. Therefore an entire different level of scope, now exists inside that variable. The variable then becomes like an object in that respect.

Easy.</comment>


Visualising the amount of microplastic we eat - T-zex https://graphics.reuters.com/ENVIRONMENT-PLASTIC/0100B4TF2MQ/index.html <comment><USER3> The Reuters article is based on an article published by the WWF about a study they commissioned at the U. of Newcastle (Australia). Press release is here ([https://wwf.panda.org/wwf_news/press_releases/?348337](https://wwf.panda.org/wwf_news/press_releases/?348337)) and the summary is here ([https://www.dropbox.com/s/nxvyl3v5s9d0a1v/PLASTIC%20INGESTIO...](https://www.dropbox.com/s/nxvyl3v5s9d0a1v/PLASTIC%20INGESTION%20Web%20spreads.pdf)). If I'm reading this right, the study itself was a analysis of 50 other studies, not original work. A brief about the methodology is here ([https://www.newcastle.edu.au/newsroom/featured/plastic- inges...](https://www.newcastle.edu.au/newsroom/featured/plastic-ingestion-by- people-could-be-equating-to-a-credit-card-a-week/how-much-microplastics-are- we-ingesting-estimation-of-the-mass-of-microplastics-ingested)).

And, given the language "people could be ingesting...", "suggests people are consuming...", I'm a bit suspicious of the numbers given. The study itself is said to be under review for publication and has been for over six months now. Anyone know if that's a long time, normal or short?

Not sure if this matters, but the naive math doesn't really work... they say "about 2000 pieces a week" and that they were "fibers", and "about 5 grams". The pieces are stated to be < 1mm in size. Assuming an average of 1mm x 0.1mm x 0.1mm "fibers" (rather large IMO), that's 20 cu mm or 0.02cc. Given plastic's density that's 0.03g, not 5g. I wonder if someone misplaced a decimal point or confused mg with g.

<comment><USER4> Not long ago I watched a tv show from Spain that wanted to make some awareness about this topic. They bought some fish and prawns and more seafood that should contain "lots of microplastics".

They took all of it to a laboratory and the laboratory found nothing at all. The presenter told the audience that it was surprising for him, and that they thought that the results were a letdown for the purpose of the documentary but that it was "good news" that we can still enjoy food without microplastics...

I would say that the results will vary vastly depending on the place you obtain the samples, but anyway, we should change our relationship with plastic...

<comment><USER5> So we eat tons of the stuff every year. Now what? Try searching for "what happens to ingested microplastic". To kill the suspense, most everyone looking to scare you with huge numbers also seem to avoid answering that more interesting question. But from the small amount of information that I could gather, I suspect that the answer is too big of a let down (figuratively and literally) to make interesting news. Happy trails to all looking for answers.

<comment><USER6> Everything I've heard is microplastics can cause infertility.

[https://www.sciencemag.org/news/2014/06/can-plastics- cause-i...](https://www.sciencemag.org/news/2014/06/can-plastics-cause- infertility)

[https://environmentjournal.online/articles/microplastic- poll...](https://environmentjournal.online/articles/microplastic-pollution- number-one-threat-to-humankind/)

[https://www.theguardian.com/us-news/2019/may/24/toxic- americ...](https://www.theguardian.com/us-news/2019/may/24/toxic-america- sperm-counts-plastics-research)

None of this is conclusive, but there's more and more evidence that microplastics might be causing serious reproductive issues in humans.

</comment></comment></comment></comment><comment><USER7> I wish I had more options to consume less plastic.

I'm pretty sure most of the plastic I use doesn't get recycled for various reasons, although I can estimate 90% of it by weight I do put in the proper recycling can.

I also care enough to avoid plastic if given a reasonable alternative.

However for a bunch of consumer goods there is no reasonably priced alternative.

I wish I could vote with my wallet and spend a significant (but not prohibitive) percentage more for detergent or shampoo or whatever in another container.

I can't help but feel like policy could help here.

<comment><USER8> For shampoo, I'd recommend going with a solid bar. They're hard to find outside of health food stores and the like, but oftentimes you can find them being sold with only a simple paper wrapping for packaging, and a $5-10 bar will easily last many times longer than bottled shampoo as long as you're keeping it somewhere where it can get a chance to dry out between showers. Conditioner is trickier; I've yet to find a solid conditioner that I like.

For detergents, we've recently switched to Dropps for both laundry and dish detergent, and I've been quite happy. It's mail order, so not zero packaging, but about as low as you can get, and they put some thought into designing a box that's easy to re-use.

For dry foods, if there's a grocery store that sells in bulk in your area, that can make a big difference. We made some cheap muslin bags that we take to the store when we're stocking up; most food co-ops and Whole Foods will let you provide a tare weight so you don't have to pay an extra $0.10 for the weight of the bag. People like to malign Whole Foods for being expensive, but their bulk section tends to be priced comparably to packaged options at traditional grocery stores.

For razors, double-edge safety razors are an option, but a bit tricky to learn to shave with. I've found I can also keep a standard Gillette Mach3 cartridge going for a good 3 months by drying it after each use (and keeping it dry - <AUTHOR> storing in the shower), and "stropping" it on a tea towel before shaves. My hypothesis is that it's corrosion, not use, that is the main limiter of a blade's life span.

<comment><USER9> >For razors, double-edge safety razors are an option, but a bit tricky to learn to shave with.

Beyond reducing your plastic footprint, this method of shaving is _substantially_ cheaper - albeit with some upfront costs. I switched years ago, and paid about $150 for a nice weighted blade handle, brush, and soap dish and now I spend maybe $60 a _year_ on new razors and soap. The one draw back I can think of, aside from the fact that you have to learn how to shave like your grandfather (which isn't really a drawback, if you ask me) is that you can't bring these razors through airport security in your carry-on.

<comment><USER10> I've switched to a shaving knife/razor a couple of years ago and don't regret it. The knife maybe needs sharpening once a year or even less if you take care to use the razor strop before every use. It was a one time investment and now the costs are $0 (except for soap/gel).

<comment><USER9> Yeah, I plan to go full old-school soon. My fiancée's dad does it and while it takes longer to shave it's quite clearly a) a better, closer shave and b) less likely to irritate the skin, which I'm prone to.

</comment></comment></comment></comment></comment><comment><USER11> From the article: "but the scientific community is still only scratching the surface of understanding just how much plastic we consume and how harmful it could be."

Zero harm, so far. That's phrased like they're racking up lists of harm it causes. But so far, zero. So 'scratching the surface' means 'haven't found anything'?

<comment><USER12> > Zero harm, so far. That's phrased like they're racking up lists of harm it > causes. But so far, zero. So 'scratching the surface' means 'haven't found > anything'?

They've found an awful lot. They've determined that plastics containing endocrine-disrupting chemicals for which there's no determined safe dosage are floating around in our water and food in concentrations that were previously unsuspected. Determining how much harm that is causing is, necessarily, the last and most difficult step.

<comment><USER13> So, there is a hypothesis that those levels "could" be unsafe, but no evidence?

<comment><USER12> That's a true but especially obtuse way of looking at things, yes. It would be more intellectually honest to say that we're still measuring how much damage these substances are doing to human health.

<comment><USER11> Again, that's speculation. With not a lot of evidence behind it. Folks have been using plastics for what? 100 years now? Where's the epidemiological evidence from that period? Where's the public health crisis?

No, I think this is overblown.

</comment></comment></comment></comment></comment><comment><USER14> It's unlikely that I wouldn't notice eating a piece of plastic the size of a sesame seed. Maybe occasionally, sure, but I sure notice tiny fish bones or the slightest bit of grit in clam chowder, or egg shell in a cookie. If I'm eating a bottle cap worth of plastic a week I would notice on a daily basis.

<comment><USER15> Microplastics are generally smaller than sesame seed. Think of getting a drink from fast food in a styrofoam cup. The acidity of tea or, particularly, soda will eat away the styrofoam into microparticles which you then drink. Tasty drink, yes?

<comment><USER16> >> a drink from fast food in a styrofoam cup

This is effectively not a thing in the United States. The war on styrofoam is nearly complete here.

<comment><USER17> Maybe in a single oddball city in the USA like Portland (though I would still be surprised). Unfortunately, styrofoam is alive and well ubiquitously in the USA outside of whatever bubble you're writing in from.

From the cups stacked at the free coffee booth in the lobby of a bank branch to the vessel that a pho restaurant will use when you ask to take home the rest of your soup to the McCafe I just bought this morning.

</comment></comment></comment></comment><comment><USER18> I'd like to see how much of it doesn't leave our digestive systems.

<comment><USER19> This.

Obviously, my grandma isn't 40% plastic.

</comment></comment><comment><USER20> up to 5mm long pieces are called microplastic. That seems huge to me. I'd expected microplastic to be microscopic in size.

I was imagining things like plastic molecules wearing off the inside of an overused water bottle and consumed with the water

<comment><USER13> I would definitely notice a 5mm plastic fiber in my food. At least occasionally.

</comment></comment><comment><USER21> > In our lifetime, 20kg of plastic

Yeah and you can be pretty sure that kind of quantity does not stay in the human body over 50 years+. So there is a factor of how much is in, and how much gets out. This, and not all plastics are equal, and some (most?) of hydrocarbons are fundamentally inert and unreactive and whether or not they cause harm is a big question mark.

<comment><USER22> The dumpster was a stark and seemingly intentional choice. They're trying to communicate "we're trashing the planet, and our bodies"

</comment></comment><comment><USER23> It would be interesting to see how micro-plastics differ from silica/ sand. Something most of us have been exposed to, especially if you live near a beach or other sandy environment.

One thing I do know is that not all sand is alike. There's the normal sand that has been ground & rounded over millennia and 'sharp sand' used in construction. Getting normal sand on your skin is a minor annoyance, and I'm not aware of any real damage if some are inhaled. Sharp-sand is much more irritating to the skin/ eyes, it feels more like fibreglass than the beach variety, and I believe the sharp particles are the reason for silicosis as they are not easily removed by mucus.

It would be interesting to know which category microplastics fall into. You would think (hope) micro-plastic would be more like the natural 'soft' sand variety than the more troublesome sharp sand.

</comment><comment><USER24> Having just watched them movie Dark Waters[1], I'm surprised I hear more about this than I do of that [2].

That said, while I'm glad that they're doing these studies, I'd like to here something more conclusive.

[1] [https://en.wikipedia.org/wiki/Dark_Waters_(2019_film)](https://en.wikipedia.org/wiki/Dark_Waters_\(2019_film\)) [2] [https://www.nytimes.com/2016/01/10/magazine/the-lawyer- who-b...](https://www.nytimes.com/2016/01/10/magazine/the-lawyer-who-became- duponts-worst-nightmare.html)

</comment><comment> GuB-42 Is eating plastic really a problem? Plastic is inert, that's actually the reason why there is so much of it in the oceans. But it also means that it should go straight through our body, untouched.

The problem about microplastics seem to be more about its effects on marine microorganisms than the fact that we are eating them.

<comment><USER25> The plastic is inert, but the stuff stuck to the plastic might not be safe. Microplastic is a lot of tiny pieces, which means it has a high surface area. That can attract pollutants that stick to it.

Also, some of it is pretty small. It can be small enough to enter the bloodstream when eaten, and we don't know what that will do.

So far we don't know if it's a problem or not.

</comment></comment><comment><USER26> Are there any like X-ray/etc. images of microplastics actually accumulating in peoples' bodies? I know that plastics are a huge problem, and there's been a lot of talk about microplastics in the past couple years, but I haven't seen any definitive proof of it being a problem in our bodies.

<comment><USER27> > but I haven't seen any definitive proof of it being a problem in our bodies.

Plastic can be toxic...see BPA a building block for certain plastics.

BPA is a known endocrine disruptor, and numerous studies have found that laboratory animals exposed to low levels of it have elevated rates of diabetes, mammary and prostate cancers, decreased sperm count, reproductive problems, early puberty, obesity, and neurological problems.

<comment><USER28> > BPA is a known endocrine disruptor, and numerous studies have found that > laboratory animals...

the U.S. Food and Drug Administration (FDA) has said that BPA is safe at the very low levels that occur in some foods. This assessment is based on review of hundreds of studies...

[https://www.mayoclinic.org/healthy-lifestyle/nutrition- and-h...](https://www.mayoclinic.org/healthy-lifestyle/nutrition-and-healthy- eating/expert-answers/bpa/faq-20058331)

<comment><USER29> Sorry, but the FDA isn't really trustworthy to the rest of the world anymore...

<comment><USER30> Whose claims DO you believe about BPA, and what are those claims?

</comment></comment></comment></comment></comment><comment><USER31> I'm more concerned about dissolved plastic residues than the bigger plastic particles. The particles have more of a chance of passing through your body untouched. The unstudied plastic residues dissolved in your hot coffee are much more likely going to be absorbed into your body.

</comment><comment><USER32> Monsieur Lotito would like to have a word.

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

</comment><comment><USER33> I wonder what the long term healh implications are going to be...

<comment><USER34> Many types of cancer, infertility, birth defects, damaged DNA as far as I remember.

<comment><USER35> Remember from what?

<comment><USER36> Nothing, nothing! OP is _not_ from the future if that's what you're implying.

</comment></comment></comment></comment><comment><USER37> I wonder how much that would be on the carnivore diet, if you eat unprocessed, it's probably less than anyone else consumes in plastic parts.

<comment><USER38> Would be more than a plant based diet since there are more chains in between where plastic can accumulate (similar to heavy metals in fish)

</comment></comment><comment><USER39> We also consume a great deal of sand, dirt and indigestible organic matter.

The microplastic has been in the environment for a long time - reacting with the ecosystem and potentially passing through quite a lot of digestive systems before it gets to us.

The question is whether environmental micro plastic is any more harmful than the micro quartz crystals we've been digesting and expelling since the dawn of time.

Trying to trigger the yuck factor with visualisations isn't science. What's the actual risk here?

<comment><USER40> Microplastics tend to attract other persistent pollutants [1] to their surface and are linked to endocrine disruptors like BPA which have an undeniably negative effect on human health. And the fact that microplastics (which generally used to be macroplastics) have indeed passed through lots of other digestive systems doesn't make them safer. It means the same microplastic particles can kill over and over and over [2].

[1] [https://cen.acs.org/articles/90/web/2012/08/Ocean- Plastics-S...](https://cen.acs.org/articles/90/web/2012/08/Ocean-Plastics- Soak-Pollutants.html)

[2] [https://ocean.si.edu/ocean-life/seabirds/laysan- albatrosses-...](https://ocean.si.edu/ocean-life/seabirds/laysan-albatrosses- plastic-problem)

<comment><USER39> The first article is full of 'could'. Where's the 'undeniable' bit at the quantities we're talking about? The second article is large pieces of plastic, not small pieces?

<comment><USER40> We could have a really long exchange about this but instead I'll just ask you what you think happens to big pieces of plastic over time. The answer is that they just keep getting ground down, killing over and over as they work their way down the foodchain, killing smaller and smaller organisms, until they eventually end up nanometer-sized. Nothing digests them. Who knows what those do to individual cells. You should be worried.

<comment><USER39> We need to have a long exchange over this. My null-hypothesis - supported by the evidence you have provided - is that the large plastic is doing the killing and when it gets small it passes through with little effect - <USER2> grains of sand. Because clearly grains of sand are bigger than nanometer and they don't block up digestive tracts. The albatross didn't die from endocrine disruption did it.

That's how science works. From your evidence my null hypothesis is proven.

We _should_ know what it does to individual cells - particularly if we are creating scare stories around it.

</comment></comment></comment></comment></comment><comment><USER41> 5g of accidental plastic consumption per week sounds bogus to me. No link to the actual study. Probably BS.

</comment><comment><USER42> Has there ever been any case studies on people who have deliberately consumed large quantities of plastic?

</comment><comment><USER34> Tasty! That's a lot indeed.

Which types of diet contain more plastic than others?

I'm a vegan for example. Does this mean more or less plastic than average?

Which materials do not end up as microplastic? I assume natural fibres don't but besides them?

<comment><USER43> Are you a vegan that eats an exceedingly safe and clean diet?

Like, I'm pretty strictly Paleo, which means heavy on the whole foods, heavy on the real ingredients from organic and safe sources, local if possible, the only major difference between us _should_ be just that I eat meat and you don't.

Reason I say this is, I know vegans out there who eat fake food because its vegan... but its still fake food. If you are one of the vegans that eats like me, people like us should be avoiding most of the plastic in the diet just by our choices in where the food comes from.

You can't escape it due to the whole "biodegradable/recyclable plastic will save the world" bullshit movement (which is where most of the microplastic is coming from, sadly), but we should be avoiding most of it.

<comment><USER34> I guess by fake foods you refer to processed foods etc. but I'm not sure you are right.

As far as I understand organic fruits and vegetables growing exposed to air and rain would end up polluted a lot more than indoor farming products for example.

Eating local also depends on where you live. Apparently most of the microplastic that is around stems from car tires so that produce farmed near highways or cities will be more polluted with microplastic than the one they transport by plane from New Zealand.

</comment></comment></comment><comment><USER44> The numbers in this article don't pass the smell test, and there's no evidence of harm anyway. The sky is not falling.</comment>


PISA 2006: Science Competencies for Tomorrow's World Executive Summary [pdf] - <AUTHOR> http://www.oecd.org/dataoecd/15/13/39725224.pdf

<comment><AUTHOR> I like the greenhouse question (page 17). I can not imagine that the authors does not know that correlation does not imply causation [http://en.wikipedia.org/wiki/Correlation_does_not_imply_caus...](http://en.wikipedia.org/wiki/Correlation_does_not_imply_causation)</comment>


The Winter Getaway That Turned the Software World Upside Down - <AUTHOR> https://www.theatlantic.com/technology/archive/2017/12/agile-manifesto-a-history/547715/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+TheAtlantic+%28The+Atlantic+-+Master+Feed%29&single_page=true <comment><AUTHOR> _Ken Schwaber—the cofounder of Scrum and founder of Scrum.org—says Waterfall 'literally ruined our profession. It made it so people were viewed as resources rather than valuable participants.'_

That's how I feel about Scrum now.</comment>


We Need More (PayPal) Mafias - <AUTHOR> http://jasonlbaptiste.com/commentary/paypal-mafias/ <comment><USER2> There is so much ambiguity in evaluating startups, investors rely too heavily on evaluation crutches such as being a previously successful entrepreneur. Sure there is some signal present in that metric but also a lot of noise, and I think more noise than most people admit (taking a kind of "fooled by randomness" thesis here).

It seems to me that second time entrepreneurs end up being bad for first time entrepreneurs because of it, funneling money to established successes. At least, thats the way it seems to me. A bit nepotistic. What we need is more opportunities for first time entrepreneurs, like YC.

<comment> barry-cotter "If you're so smart why aren't you rich?" If you've got a metric with higher s/n than the VCs and seed firms have come up with, you have alpha, and that's always in demand. YC and its clones are a consequence of the history and development of the tech industry thus far. Without them, without the embedded cultural nous that's in the Valley, Boston the barriers would be even higher.

</comment></comment><comment><USER3> Summary: people who get rich from founding high-tech startups tend to found and fund more high-tech startups later on. Nothing new there. Article's author badly lacks historical perspective (HP; Shockley, Fairchild, Intel; Sun) and basic proofreading skills. Article not even worth skimming.

<comment><USER3> ...and after I posted that, everything I'd commented in the last 24 hours got downvoted. I wonder who did that?

</comment></comment><comment><USER4> The use of the term "mafia" here is really distracting from the main point.

</comment><comment><USER5> therefore, we need more IPOs.

Google has created tons of great companies since its IPO. Loads of its engineers now run awesome startups.</comment>


Show HN: bypass AppStore review process with iOS codeless native apps/widgets - <AUTHOR> https://github.com/faviomob/WidgetKit#ios <comment><USER2> Cool stuff but this is a great way to get your apple dev account revoked, FYI.

</comment><comment><AUTHOR> You can now create native apps for iOS using JSON and Storyboards only. Native app can be downloaded as a bundle (not executable), and thus can be kinda web page. Isn't it cool?</comment>


Windows Phone 7 Shipments Have Topped Two Million - <AUTHOR> http://mobilized.allthingsd.com/20110126/windows-phone-7-shipments-topped-two-million-units-last-quarter/ <comment><USER2> Shipped to carriers, that is --- figures on sales to consumers are harder to come by. (This is obvious from the article --- first sentence, in fact --- but not so much from the headline.)</comment>


Ask HN: security for new Win7 desktop? - <AUTHOR>

I got a new Win7 desktop, promptly removed the mcaffee stuff and got M$ security essentials installed.
At times I know there are thumbdrives/cd's with viruses coming into contact with my computer. What else should I do to customize & protect it?
Thanks! <comment><AUTHOR> Also welcome: any other suggestions for customizing a new Win7 install.

So far I'm very pleased, the desktop is superfast, 6Gigs of ram, much faster than any laptop I've had and only 600$. I do want to avoid it slowing down over time, and definitely want to avoid it getting infected with malware. I live in Colombia and a lot of CDs etc. here are full of viruses.

</comment><comment><USER2> Disable Autorun

<comment><AUTHOR> Good one, doing that now. Other suggestions? Is M$ security essentials enough?

<comment><USER3> I highly recommend MalwareBytes Anti-Malware: <http://www.malwarebytes.org/>

The free version is really good, but it's also worth the $25 investment for the real-time protection of the full version.

<comment><AUTHOR> In other words, M$ security essentials isn't enough protection?

<comment><USER2> Security Essentials is actually pretty good and catches the majority of things lurking out there on the web. It's lightweight and takes little resources. Much better than a Norton or McAfee install -- good god.</comment></comment></comment></comment></comment>


Problems Found at Theranos Lab - <AUTHOR> http://www.wsj.com/articles/problems-found-at-theranos-lab-1453684743 <comment><USER3> Friend recently told me that when Theranos first hit the news as a darling startup, his MIT Microfluidics PhD friends went to see what the novel science was about. Naturally they read her paper and ... They couldn't find anything new/special in the paper and were left scratching their heads.

Maybe VC stronger connections with scientists, not just technologies when doing due diligence?

By the way this is a non sequitur but I find it poetically ironic that Theranos HQ is located on Page Mill Road where WSJ's Silicon Valley branch used to be located back in the day.

<comment><USER4> I've been maintaining for a while that Theranos is a very cynical investment vehicle, and has little to do with medicine. The backgrounds of those connected, of her family, of the trajectory and direction of the company (everything has been _very_ PR and financial press oriented) suggests that their key mission is to grow the value of the company, rather than do anything novel.

The sad thing is, this seems to be an increasingly common strategy in a certain segment of the business world, and it brings value to nobody ultimately - it just separates optimistic investors who just see a wunderkind and incredible new technology from their money.

<comment><USER5> _their key mission is to grow the value of the company, rather than do anything novel_

I propose that this is the majority of startups and an even higher percentage of companies generally.

I even wrote about that distinction last week ([https://medium.com/@andrewkemendo/startups-need-to-start- val...](https://medium.com/@andrewkemendo/startups-need-to-start-valuing- themselves-on-impact-not-valuation-8276690ae862#.icg4lm7iy)) and the response was basically: The only way anything should be evaluated is based on return.

Very few of us actually give a shit about doing something novel.

<comment><USER6> > Very few of us actually give a shit about doing something novel.

Most novelty presents outside of business in general, including startups. Startups generally are applying the novelty (that is no longer novel) that is perceived as potentially valuable to see if it actually is.

Ideally, startups should be focused on doing something _well_, rather than doing something _novel_. To the extent that novelty occurs, it should be a side effect of that objective.

<comment><USER5> I think the whole ethos behind a high-tech startup is that you do something well by implementing a novel (in the sense of adoption rate) process or technology.

There is certainly room for disagreement, but all of the "high tech startups" that make up the startup zeitgeist, were exactly that.

<comment><USER6> > I think the whole ethos behind a high-tech startup is that you do something > well by implementing a novel (in the sense of adoption rate) process or > technology.

That might be the ethos, but it isn't the reality. Most startups aren't first movers, and most of the ones who succeed aren't either.

Throwing in "in the sense of adoption rate" is kind of silly though, no? Every mom & pop shop has its own unique process that hasn't been widely adopted.

I swear, those Zappos shoes are just like the ones you get on other web sites.

<comment><USER5> _Most startups aren 't first movers_

I'm not talking about those, and it's not even necessary to be a first mover so long as the startup is overhauling how things get done outside of the current dominant market leader.

I'm talking about Microsoft, Uber, Amazon etc... the ones who have literally changed the way people live.

Those are the ones that actually held up the ethos.

<comment><USER6> > I'm talking about Microsoft, Uber, Amazon etc... the ones who have literally > changed the way people live.

...or they road a wave...

You didn't mention Walmart. ;-)

Uber has had a number of competitors, back in their day when they were "changing the world", so did Microsoft & Amazon. Hell, Microsoft's operating system ride started with an operating system they _bought_ from someone else.

If you grow at a crazy fast rate to become a household name, you inherently are riding some kind of wave change. I don't think that was what the MIT Microfluidics PhD friend was referring to as "novel". If you want to call that "novel", then you are going to have a much harder time making the case that Theranos isn't trying to be novel.

<comment><USER5> _You didn 't mention Walmart. ;-)_

Well they are the ones being disrupted currently. They did it in the 80s and 90s to Sears and the rest.

 _you are going to have a much harder time making the case that Theranos isn 't trying to be novel._

I actually think Theranos is trying to be novel, my initial response was that maximizing value isn't something new in the valley. I have no clue on whether they are or not in reality, but they portray themselves as actually making new technology - my guess is that they just can't do it and are trying to buy time.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><AUTHOR> "UCSF charges Theranos more than $300 for a comprehensive metabolic panel, said a person familiar with the matter. Theranos's website shows that patients who get the same test at one of the company's blood-draw sites pay just $7.19. A comparison of all the tests done by UCSF for Theranos shows that the company appears to be incurring losses on many of those tests."

If correct, anyone have a legitimate rationale for Theranos doing this?

<comment><USER7> According to Wikipedia the comprehensive metabolic panel is a series of 14 tests:

[https://en.m.wikipedia.org/wiki/Comprehensive_metabolic_pane...](https://en.m.wikipedia.org/wiki/Comprehensive_metabolic_panel)

"The tests are performed on machines based on the AutoAnalyzer invented in 1957."

Is there some reason that this should cost $300 58 years later? No Moore's Law in medicine?

<comment><USER8> _" The tests are performed on machines based on the AutoAnalyzer invented in 1957."_

That's like saying that modern PCs are based on the IBM 360 architecture from 1964. To the extent it's true, it's true in a way that makes sense only to a tech-illiterate journalist.

<comment><USER9> That quote comes from the Wikipedia article, not the WSJ.

<comment><USER8> That doesn't make it any more meaningful. It's a ridiculous thing to say in any context.

<comment><USER9> No argument there...just wanted to point out that the author of the submitted article didn't make such a claim, as that _would_ cast some doubt about the assertions of the reporting.

<comment><USER8> True, for some reason I read his post as both linking to Wikipedia and quoting from the original article; my bad.

</comment></comment></comment></comment></comment></comment></comment><comment><USER10> Theranos operates under the explicit assumption blood Is homogeneous for a large number of markers and that any two nanotainer sized samples will be identical. If they are not, then in principle nanotainers can not work because the sample size is too small.

<comment><USER11> > If they are not, then in principle nanotainers can not work because the > sample size is too small.

I am the last person who wants to defend Theranos, but theoretically if there are only a finite number of ways for tissue contaminants to enter a sample, these contaminants could be corrected for with statistical methods and accurate results could still be possible.

<comment><USER12> You can't correct for inadequate sample sizes with statistics and still expect a clinically relevant result (the confidence interval would be too large). The issue isn't contamination in small samples, it's that the biomarkers they need to measure may not be accurately measurable at such small volumes - <USER2> particular with the value ranges required for the test.

It may just be that their "nanotainer" tests may only be viable for boolean tests like their herpes test (herpes DNA present - yes / no).

</comment></comment></comment><comment><USER13> I am just so amazed Theranos was able to raise so much $$ on basically a wink and a smile without and due diligence by the investors. Everyone was distracted by the blonde blue eyed Stanford dropout in the Steve Jobs outfit! And now Theranos is blowing through investors $$ outsourcing their tests to UCSF because their tech has failed. Hope WSJ keeps kicking the tires on this.

<comment><USER14> Let's also not underestimate the insanely powerful board of directors that was assembled.

You have a handful of US Senators, a couple of CEOs from megacompanies like Bechtel and Wells-Fargo, the ex-director of the CDC, and two ex-Secretaries of State including _Henry Kissinger_.

How many other 19 year-old college dropouts can put that board together?

<comment><USER15> Amazing. But I also have to wonder: _why_ put that board of directors together? It smacks of gee-whiz marketing from the beginning.

<comment><USER14> Launching a new medical device is hard. You have multiple walls to scale including the FDA, the insurance companies, Medicare, and the providers themselves (hospitals, doctors, labs, storefronts, etc).

Having this group in place seemed to send the message of "don't worry, we'll just tunnel through those hurdles" when it came to all the red tape.

</comment></comment></comment></comment><comment><USER16> It looks like the WSJ has it in for Theranos. Is there some backstory behind it? Did Elizabeth do something to Murdock?

<comment><USER17> It's shaping up to be the biggest, juiciest business story of the past year or so, bordering on scandal. It looks like the WSJ is doing its job.

</comment></comment><comment><USER18> I can't help but shake the feeling some of the bad vibes in this thread, and at Theranos in general, are people excited about seeing a woman CEO fail publicly because it protects the narrative that women are getting undeserved special privileges in today's society. I feel like similar stories of "fake it til you make it" are often valorized here.

Of course I have no reason for believing that. Hopefully I'm wrong. But my spidey sense is tingling. Am I miscalibrated?

<comment><USER19> Yes. What you're seeing is how our community deals with charlatans. It has absolutely nothing to do with the CEO being a woman.</comment></comment>


Introduction to Boosted Trees [pdf] - <AUTHOR> http://homes.cs.washington.edu/~tqchen/data/pdf/BoostedTree.pdf <comment><USER2> Same content in prose rather than slides: [https://xgboost.readthedocs.org/en/latest/model.html](https://xgboost.readthedocs.org/en/latest/model.html)

</comment><comment><USER3> One interesting thing about Boosted Trees is the author's software (XGBoost[1]) reliably outperforms other implementations (in terms of accuracy of results[2]). I'm not entirely sure why this is - I know there is an open ticket in the Spark GBT implementation to investigate this.

[1] [https://github.com/tqchen/xgboost](https://github.com/tqchen/xgboost)

[2] It's also very fast in terms of absolute speed.

</comment><comment><USER4> It's worth checking out Friedman's "Gradient Boosting Machine" paper (as mentioned here in the references) from 1999 -- this has a good description of "boosting" from the general perspective of function optimisation.

Here's a copy: [pdf] [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.31....](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.31.869&rep=rep1&type=pdf)

</comment><comment><USER5> I haven't read much about XGBoost boosted trees. Does each tree have additive independence? Is the tree ensemble of two trees better than one tree?

It seems like additive training that removes all constants in addition to regularization of model complexity would shape the tree ensemble into a baseline model that defines minimum assumptions. So, what's its success rate in predicting favorable outcomes vs. tree learning focused on heuristic specialization (impurity)?

</comment><comment><USER6> In the first example, being male is one of two features that predict playing video games, and (surprise!) only the boy and the old man are classified as gamers. Talk about casual sexism! Can you imagine taking this class as a woman (who maybe, just maybe, happens to enjoy video games) and having to forgive/ignore the instructor's cluelessness in order to get through the material? So incredibly tone-deaf and lazy, ugh.

<comment><USER2> If it actually bothers you, then do something about it.

The author of these slides provided two versions of this material, one in prose (linked from my other comment in this thread) and these slides. Send a pull request to the XGBoost GitHub repo to update the prose version[1]. Once you're done with that, send an email to the author with the new images, _non- abrasively_ explain why you're providing them, and _politely_ ask the author to replace the slides on his website. Be sure to point out which slides need to be updated (8, 9, 24, 25, 28, 31) and which images go with which slides.

It's possible your email will get ignored (PhD students are busy and don't necessarily have time to maintain two year old teaching material), but I'm almost certain the pull request will be merged.

[1] [https://github.com/dmlc/xgboost/blob/master/doc/model.md](https://github.com/dmlc/xgboost/blob/master/doc/model.md)

PS: If you don't do this, I'll call you tone-deaf and lazy. ;)

<comment><USER6> It actually does bother me, and I wish I had the time to fix it, but fixing it involves much more than the comically large amount of work you're asking of me: it means convincing this PhD student that he made a genuine mistake that betrays his sexism, and getting him to acknowledge that mistake by fixing his own slides.

I wish the instructor was more aware of his own sexism when he created this material, so that neither he nor I nor anyone would have to fix this problem now. He chose this careless example, and so it's his responsibility to fix it, no matter how busy he may be as a PhD student. We're all busy, but these slides have his name on them, and demonstrating that he knows better now is something only he can do.

<comment><USER7> Well, I could do it, change it to a more neutral example, then take a screenshot of your post and merge it to the repo. This would take maybe 2 hours (but I am familiar with git).

Fixing it would go very far to prove that you are sincere about the problem and isn't a hell of a lot of work. Going that far to fix it is more likely to convince him that it actually matters than anything else you could do.</comment></comment></comment></comment>


1995 DOS game opensourced, needs hacker love - <AUTHOR> https://github.com/LaPingvino/The-Puzzle-Pits

<comment><USER2> Just had to have a look, love the following tidbit from FILE.C

        char cryptkey[]={'M'-4,'i'-8,'n'-12,'d'-16,'y'-20,0};

        LONG Encrypt(char far *data,char *key)
        {
          LONG i=0,keypos=0;

          while(data[i]!=0){
            data[i++]^=key[keypos++];
            if(key[keypos]==0) keypos=0;
          }
          return i;
        }

Coupled with the following quote from the preface of Bruce Schneier's Applied Cryptography

"The simple-XOR algorithm is really an embarrassment; it's nothing more than a Vigenère polyalphabetic cipher. It's here only because of its prevalence in commercial software packages, at least those in the MS-DOS and Macintosh worlds [1502,1387]."

<comment><USER3> But if I switched "Mindy" to some other girl's name, would you know how to break it? :)

</comment></comment><comment><AUTHOR> Biggest question for me: is someone motivated enough to fork it and lead further development? Or should I create a mailing list and ask people to join there?

<comment><USER4> Biggest question for me: what _is_ it? Have any screenshots / text examples? I've never heard of it, and now that this has been done, it's impossible to Google for.

I'm semi-perversely interested in porting it to Javascript :) But it'd strictly be a spare-time-when-I-feel-like-it-and-am-not-on-HN kind of project.

<comment><AUTHOR> You can find it on Home of The Underdog. The official site got lost some rewrites ago, but there will probably come some new site again. I could add compiled versions to the repository for reference... It's a sokoban-like game, but a lot more enjoyable.

The .exe and the data files: <http://plasmaworks.com/files/pits/pits95.zip>

The level editor (Source Code got lost, but Apache-license is also valid for this one. If someone can disassemble it and create some maintainable sourcecode from it, very welcome) <http://plasmaworks.com/files/pits/pitsedit.zip>

Screenshot for reference (more googling for puzzle pits): [http://www.google.com/imgres?imgurl=http://www.old- games.com...](http://www.google.com/imgres?imgurl=http://www.old- games.com/screenshot/3759-1-puzzle-pits.jpg&imgrefurl=http://www.old- games.com/download/3759/puzzle- pits&usg=__z2HRRCWdpM6cc5JR6jPpBXn7NbE=&h=170&w=220&sz=7&hl=pt- BR&start=0&sig2=YfMF67ToeVNu2vOcjrZjkA&zoom=0&tbnid=kgEJvNXBJB5rYM:&tbnh=83&tbnw=107&ei=OCvsTenlCIm_gQe4y_zYCQ&itbs=1&iact=hc&vpx=188&vpy=149&dur=542&hovh=83&hovw=107&tx=80&ty=34&page=1&ndsp=25&ved=1t:429,r:0,s:0&biw=1280&bih=714)

<comment><USER5> You should add some screenshots to the GitHub repository.

</comment></comment></comment></comment><comment><USER6> Does this currently compile in a DOS emulator using djgpp?

<comment><USER7> You might need to factor out the TASM code hidden in pragmas in SETMODE.H first. Better yet, remove all asm and retarget for something less arcane, like Allegro or even SDL.

If you want to keep it as is, Turbo C is free online, from Borland.</comment></comment>


Show HN: Blockchain calm: A blockchain playground - <AUTHOR> https://lorenzoongithub.github.io/blockchaincalm/ <comment><AUTHOR> Hi there,

Like many, I have stumbled on tons of articles on the blockchain. Some very good, some not so good. But I never stumbled on some easy blockchain simulator where I could try things out.

So if you are like me, and you don't like being told things as much as you like coming to the conclusion yourself then you really need to give blockchaincalm a chance.

thanks,... and any feedback is good feedback

<comment><USER2> checkout [https://blockchaindemo.io/](https://blockchaindemo.io/) and [https://anders.com/blockchain/hash.html](https://anders.com/blockchain/hash.html)

<comment><AUTHOR> Thanks. I was not aware of those two sites. Similar ideas but different results.</comment></comment></comment>


Flying Car Crashes In British Columbia - <AUTHOR> http://www.cbc.ca/news/canada/british-columbia/story/2013/05/10/bc-flying-car-crash.html <comment><USER2> Every time I've ever seen an article or report about some new flying car concept, I have pretty much zero interest in it. The flying car will only be a reality _after_ the self-driving car. The reason is that although, I would personally love to have a flying car, I would under no circumstances want all of my neighbors to have one.

You can do a lot of damage with a regular car which is why we put fences and guardrails between our streets and buildings, but just imagine how much damage you can do if you add a 3rd dimension. It would be like visiting Flatland. No way the FAA is going to allow flying cars for the masses until they are basically self-piloting.

<comment><USER3> There are two completely unrelated kinds of flying car.

First is the Jetsons version of the flying car. This is the aviating equivalent of the personal automobile. You get in, you fly it to work from your driveway, land it on the roof of your office building, and walk in.

Second is what this was: a machine that's both a road car and an airplane.

The first one is at least conceptually very neat. If it worked, it could completely eliminate traffic jams, eliminate pedestrian-vehicle accidents, and vastly improve the efficiency of local transport. There's been little attempt to build such a thing. It basically demands VTOL operation, which _vastly_ restricts its range and increases its cost and noise. The Moller Skycar is the only real-world attempt at this one that I can think of, and it didn't get very far.

The second one is _completely pointless_. The "flying car" as it actually (barely) exists, as in this example, is just a car that is also an airplane. You drive it to an airport, reconfigure it to be an airplane, fly it to another airport, land, reconfigure it to be a car, and drive off.

The problem is that design tradeoffs mean that such a "flying car" is both a bad car and a bad airplane. They have inherently different needs for things like wheels, engines, drivetrains, etc. Putting both into the same machine means it's not going to do either one well.

For every "flying car" out there, you can take the same money and buy a better car, a better airplane, a _second_ better car to keep at your most frequently used destination airport, and have enough money left over to rent cars at other airports for years and years. This is unlikely ever to change.

The Jetsons idea is interesting, but roughly nobody is working on anything at all applicable to it.

<comment><USER4> The most workable concept at the moment is basically a powered parachute/paraglider trike beefed up to be like a dune buggy. I always felt this was cheating though, because when I hear "airplane" I think of a fixed wing design.

EDIT: ... which is exactly the design that crashed. AFAIK these don't require a pilot's license, but that doesn't mean they're easy to fly.

<comment><USER3> It does seem less awful than other concepts, but still... why? It's a worse dune buggy and a worse airplane than you could build if you took the same resources and built the two separately.

As for being hard to fly, I believe the rationale behind not requiring licenses is simply that you're unlikely to kill anyone _else_ when you crash, so do what you will. At least in the US, licensing requirements for different kinds of aviation scale fairly directly with the number of innocent civilians you can take out if you screw up too badly. Not 100% the case, but a decent approximation.

<comment><USER4> Oh, I'm not disagreeing with you, just commenting on flying car design.

AFAIK licensing requirements scale with aircraft size and complexity -- which does correlate nicely with its danger to bystanders.

<comment><USER3> Yep, I was just elaborating a bit.

You're right that licensing requirements go up with size and complexity, but it's a bit beyond that as well. For example, carrying people in exchange for money has stricter licensing than carrying people for fun, because the idea is that 1) you'll do it more often and 2) people paying you for services are less aware of the risk they're taking.

</comment></comment></comment></comment></comment></comment><comment><USER5> I would call that an enclosed motorized paraglider. They've been around for a long time in that format(since late 90's or so(?) I'd have to check with friends). Once upon a time I was going to take lessons to learn how to paramotor, but the instructor had a fatal accident.

<comment><USER4> Badly designed, too. I cannot believe it has no propeller cage, that's asking for an accident.

I always felt that calling this design a flying car was cheating this was cheating -- when I hear "airplane" I think of a fixed wing design.

</comment></comment><comment><USER6> Is it bad that this article still makes me want to have one of these?

<comment><USER7> I think it's a pretty neat device (based on the last time I checked out their website, a year or so ago.) Generally safe since it's a dune buggy under a parachute, and entirely appropriate or so it seems for their mission, flying a few supplies in and out of Africa and other places with no roads.

And even readily field reparable.

(I am a bit shocked by the $100K price tag.)

<comment><USER8> > _...flying a few supplies in and out of Africa and other places with no > roads._

Maybe you should re-word that.

<comment><USER8> Re: downvotes

Haha, I guess whatever the hell I drove on today is not a road because I am in Africa and Africa has no roads.

<comment><USER3> Yeah, but I bet there was a no-road _right next to_ that road.

</comment></comment></comment></comment></comment><comment><USER9> I think the Back To The Future flying car highway appears in 2015.

</comment><comment><USER10> At least we have such headline in 2013

<comment><USER11> I suppose, but in my mind a true "flying car" is VTOL. Anything else is neat but doesn't fit the vision.

</comment></comment><comment><USER4> parasail != paraglider/parachute

Sad because they mention the name of the actual vehicle, which has "powered parachute" in it.

</comment><comment><USER12> Where are all the Harry Potter references?

</comment><comment><USER13> before reading the article: Yay! we are in the future, finally.

after reading the article: oh, it's just a steerable parachute powered by a propeller attached to a something like a car.

I guess this is how sensationalist headlines work.</comment>


Businessing: The Kama Sutra of Success - <AUTHOR> http://getbusinessing.com/ <comment><AUTHOR> Self-submitted: For her pleasure.</comment>


Io.js 1.3.0 released - <AUTHOR> https://github.com/iojs/io.js/blob/v1.x/CHANGELOG.md#2015-02-20-version-130-rvagg <comment><USER2> Good stuff: RC4 is officially removed from the (edit: default set of, thanks ewegrump) cipher suites.

Some background: [https://community.qualys.com/blogs/securitylabs/2013/03/19/r...](https://community.qualys.com/blogs/securitylabs/2013/03/19/rc4-in- tls-is-broken-now-what)

<comment><USER3> It's not removed, it's just not in the default list anymore. You can re-enable it with an option if you really do care.

<comment><USER4> Correct, RC4 will still be supported until OpenSSL drops it, which is probably never.

</comment></comment></comment><comment><USER5> Nice, but to be fair, nothing much to see here.

Another point release, the future marches on, Node continues to fall behind. Everyone happily continues to not care what happens to it as the Node foundation... does whatever it is it's doing.

We don't all need to get up and clap every two weeks when they release a new version; this should just be life as normal really.

<comment><USER6> Do you know any major player supporting iojs? Like aws, heroku.

<comment><USER7> heroku is: [https://devcenter.heroku.com/changelog- items/595](https://devcenter.heroku.com/changelog-items/595)

</comment></comment></comment><comment><USER8> Isaac Schleuter and Mikeal Rogers was recently in Javascript Jabber talking about io.js and mostly answers questions below. [http://devchat.tv/js- jabber/147-jsj-io-js-with-isaac-schleut...](http://devchat.tv/js- jabber/147-jsj-io-js-with-isaac-schleuter-and-mikeal-rogers)

</comment><comment><USER9> External curious observer (don't do anything Node-related) here. Hadn't heard of io.js before. Interesting.

Is this genuinely more popular than Node, or is this one of those cases where the HN crowd is skewed in its favour? Does it look like it'll take over as the standard server-side async JS system?

Also how close is it to being a drop-in replacement for Node?

<comment><USER4> It's a 0.12 drop-in replacement with some minor API enhancements and a lot of bug fixes.

Also, all current v8 ES6 features are enabled in io.js by default, while they still require the --harmony flag on node.

<comment><USER10> Not all of the features, just those marked as stable in v8.

</comment></comment></comment><comment><USER11> I've read the Changelog, the Readme and the FAQ, and I still don't understand what is it. Am I an idiot?

<comment><USER11> Instead of downvoting, could you please explain? All I see there is some node- but-not-so-joyenty stuff without much substance. What is the problem being solved?

<comment><USER12> Read the other comments: [https://news.ycombinator.com/item?id=9081053](https://news.ycombinator.com/item?id=9081053)

<comment><USER11> Why that is not a part of the Readme/FAQ?

<comment><USER13> You're looking at the Changelog. The README is next door, and it explains:

> This repository began as a GitHub fork of joyent/node.

> io.js contributions, releases, and contributorship are under an open > governance model. We intend to land, with increasing regularity, releases > which are compatible with the npm ecosystem that has been built to date for > Node.js.

<comment><USER11> That doesn't tell me anything. It assumes the reader is somehow familiar with the context and shares the authors' sentiment, although that is not true.

This is what should be explained there:

1\. What is the problem with Node.js?

2\. What is wrong with Joyent?

3\. Why the fork was the only adequate solution?

4\. How come this is beneficial (and not harmful) to the community?

5\. Is it a drop-in replacement? How does it affect existing projects?

6\. How the future looks like from this point of view?

However hard I look at that paragraph in Readme, I still can't see these questions answered.

Edit: typo

<comment><USER14> You didn't try very hard, did you?

1\. answered by readme & faq (predictable release cycles)

2\. answered by readme & faq (open source governance)

3\. nonsensical question (who said io.js is the only adequate solution?)

4\. loaded question

5a. mostly, look at the ES6 page or just try it out

5b. obviously no simple answer

6\. subjective question. It looks bright to me.

<comment><USER14> Downvoter, please tell me where I'm wrong?

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER15> What is the reasoning behind the version jumps?

1.0.3->1.0.4->1.2.0->1.3.0

Sure, it's just a number, but the changelog isn't that big. Version inflation for no particular reason, apart from marketing, seems a bit silly. What am I missing?

<comment><USER16> This is a case of the Semantic Versioning doing the job it was designed for.

The 1.3.0 release just broke some poor regex I had written, since url.resolve now returns a trailing slash. Since it's a commonly used function, I have a feeling it might break a few apps out there. You shouldn't be making that kind of change in a PATCH number update. Hence the MINOR number update, perhaps.

EDIT: url.resolve not path.resolve.

<comment><USER17> That's semver doing the job people wish it were designed for, not semver doing the job it was designed for.

If it broke actual user code, then it MUST be a major version bump: "Bug fixes not affecting the API increment the patch version, backwards compatible API additions/changes increment the minor version, and backwards incompatible API changes increment the major version." The idea with semver is that you can ask for 1.2.0 or any greater 1.x.y, and your app will still work. This was broken.

Maybe there's an argument that the break didn't matter that much, but it's still a spec violation. Which is why you get a bunch of annoyed people who care deeply about ABI compatibility, when asked to switch to semver, saying, "Do you really want me to release version 172.0.0?" If the rule is, bump major versions when the project maintainers think it matters, bump minor versions when they think it matters less, bump patch versions when they're pretty sure it doesn't matter, that's exactly what gets derided as "Sentimental Versioning" ([http://sentimentalversioning.org/](http://sentimentalversioning.org/)), just dressed up as semver, which is more harmful.

If you've got to pay attention to every release's changelog and run regression tests anyway, just in case the package maintainers disagree about what's important enough for a major version bump, then you have version lock problems anyway. If semver is just guidelines and not a spec, then it should make that clear.

<comment><USER10> Though it broke behavior, technically the previous behavior was a bug... the minor bump reflects that bugfix (that changes behavior).

<comment><USER17> There's nothing in the semver spec that allows bumping just the minor version for a backwards-incompatible API change because a change was a bugfix. The rules are:

> increment the MAJOR version when you make incompatible API changes,

> MINOR version when you add functionality in a backwards-compatible manner, > and

> PATCH version when you make backwards-compatible bug fixes.

Minor versions aren't for less-important API breaks. They're for new functionality. If it breaks API, it's a major version; if not, it's a patch.

It is to semver's credit that it doesn't allow the maintainer any discretion here; many communities (like the Linux kernel community) have learned through experience that determining whether something is "just" a bugfix is impossible. Google for 'don't break userspace' and you'll find Linus flaming people for changing _which error code_ gets returned from certain operations. Semver's rule is backwards-compatibility, which is a bright line: if the bug was that an interface didn't work at all in some or all cases, or it returned unusable results, then that failure is not part of the API and it can be fixed. If it caused something to have worked _differently_ , in ways that people could have written software to assume the "wrong" but workable behavior, then it's part of the API.

It is not to semver's credit that it doesn't define the terms "backwards- compatible" or "public API," but I think those terms have clear enough meanings in practice. In particular, anything documented and in use is part of the public API, even if the docs don't match the actual behavior.

If a project really wants to say "semver, but our docs define the API, not the implmentation", they can do that, assuming their docs are in fact thorough enough that you can write a correct program without having a copy of the implementation. But that's also getting really close to "semver, except when we don't feel like it"... which is probably what everyone does in practice.

</comment></comment></comment></comment></comment><comment><USER18> So the Node.js is dead now?

<comment><USER19> Doesn't seem like it, it's just the "RHEL" edition when compared to "Fedora" \- slower, steadier release pace that focuses on stability, not features.

EDIT:

Downvotes ahoy.

Let's be honest here. Stable code (especially stable threaded code) requires QA time after adding new features. There are commits in this release which are less than 5 days old. 5 days is not enough time to shake out bugs.

Given that the developers are human, unit tests are incapable of finding all issues, and QA resources cost money, there is no way that this release could be considered to be stable.

A company would deploy this at their own risk, knowing that it's likely to have bugs which will have to be reported and fixed.

Not all companies can afford to take on that kind of risk, ergo a release like Node.js, which trails behind the bleeding edge of these technologies, makes sense to exist.

<comment><AUTHOR> From what I understand, the "stability" argument, made by many for node.js, is a bit meaningless.

Node.js uses an old V8 version ( Google doesn't support it anymore, and they don't even apply security patches to it ) while io.js has the latest V8, plus all the security patches and bug fixes from the io.js codebase, that node.js does not have.

Same story with libuv, the "main" library under the hood.

( most of this explained in this podcast [http://devchat.tv/js-jabber/147-jsj- io-js-with-isaac-schleut...](http://devchat.tv/js-jabber/147-jsj-io-js-with- isaac-schleuter-and-mikeal-rogers) )

If older === more stable, then I guess you should use the oldest version in everything. Makes no sense.

<comment><USER19> Google offers support for v8 outside of Chrom(e|ium)? I can't find anywhere that Google lists what their supported versions of v8 are. Can you point me towards that list?

More importantly, has Google shown genuine interest in supporting embedding v8? Their last blog post about this was in 2012.

As for libuv, I would rather use a battle tested version, than stay on the bleeding edge. Threading is hard, and race conditions are rarely caught by tests. I'm happy to let others break their production and identify the regressions before I commit to it.

Wanting to use proven software has no relation to using the "oldest" version. As software is used, bugs are found. The longer you wait to transition to using new features, the fewer bugs you will encounter when you make the transition. What's nonsensical about that?

<comment><USER20> Even "proven" software gets bug and security fixes. The version of v8 they're using doesn't. Therefore, unsupported.

</comment></comment></comment></comment></comment><comment><USER21> So what is the NPM of io.js?

<comment><USER22> npm stands for "no problem meatbag", not "node package manager" ;)

It's the package manager for javascript and will continue to be. The module system in io.js is not going to be changing anytime soon.

</comment></comment><comment><USER23> > The official name is _io.js_ , which should never be capitalized, especially > not at the start of a sentence, unless it is being displayed in a location > that is customarily all-caps (such as the title of man pages).

<comment><USER24> The official name of Io.js in English is Io.js as it's a name, it is stylized as io.js. In Canada here, we have a company Telus, which stylizes it's name as TELUS. However, when discussing the company in non-marketing environments, such as Wikipedia, it's called Telus. The rules for English trump a creators stylization rules in many situations.

<comment><USER25> That's not true at all. You shouldn't capitalize a brand name like iPhone, for example.

[http://english.stackexchange.com/a/9065](http://english.stackexchange.com/a/9065)

<comment><USER26> At least in my communications department, we follow a style guide — like Bloomberg's — and capitalize for our own purposes, rather than to further the marketing of another company.

E.g., "iPad, iPod, iTunes. Follow the company style for capitalization in text: iPad, iPod, iTunes. In headlines, capitalize because the words are nouns: IPad, IPod, ITunes."

Winkler, Matthew (2011-10-14). The Bloomberg Way: A Guide for Reporters and Editors (p. 304). Wiley. Kindle Edition.

And: "When a name begins with a lowercase letter, capitalize the first letter in all references: EBay, not eBay; EasyJet, not easyJet."

Winkler, Matthew (2011-10-14). The Bloomberg Way: A Guide for Reporters and Editors (p. 271). Wiley. Kindle Edition.

<comment><USER25> As far as I can tell, The Bloomberg Way is the only major guide that encourages that, and Bloomberg's own editorial standards are inconsistent such that they only use it half of the time: [https://www.google.com/search?q=site:bloomberg.com+iphone](https://www.google.com/search?q=site:bloomberg.com+iphone)</comment></comment></comment></comment></comment>


Ask HN: How to mitigate DNS provider issues? - <AUTHOR>

I had several sites become inaccessible yesterday due to the DDOS on Namecheap's DNS servers: http://status.namecheap.com/?p=3739
Everything appears to be back to normal for us right now, but this has definitely rattled us a bit.  We've never had problems with Namecheap before.  Admittedly, DNS / Nameserver routing is not something I have a lot of expertise in.  Like many developers/ dev ops people, DNS is something I set once and mostly leave alone.  I had not considered it a vector for failure.
Several question:
1) What are the best practices in mitigating something un-forseen like a DDOS attack on your DNS / Nameserver provider? It seems like redundancy is the only good option, since any provider we go with could get DDOS-ed.   What are good redundancy setups?
2) I've heard people say 'don't do DNS with your registrar'.   But I'm not clear on exactly why not.  Are registrars just inherently worse at DNS & nameserving?
3) Out of curiosity, does anyone know why Namecheap was DDOS-ed?  Was it just for the lolz? <comment><USER2> Really, the best thing you can do is make certain you're with a good, stable, Anycast provider. Preferably one that's been beefing up their network. I've been using DNS Made Easy for a few months now for the ability to have vanity name servers and have noticed a significant boost in speed since. I also started using their failover service to help avoid going down since they included 3 records with my membership anyway :P. They're also crazy cheap for the features I'm been getting: <http://www.dnsmadeeasy.com/enterprisedns/pricing.html>

As for why Namecheap got hit, who knows. Could be a malicious attack on a site using the service, could be a prank. Maybe just for lolz. There's any number of reasons. Unless they release that info, I don't think you'll find a clear answer any time soon :-/.

</comment><comment><USER3> I've seen a lot of praise for easyDNS, but I've never used them myself. They have failover DNS, which is interesting. <http://support.easydns.com/Failoverfaq.php> I guess you could technically use 2 (or more) different hosts for DNS, which would give you some redundancy, but I've never seen anyone do that.

I usually don't like to host DNS with the registrar because they tend to be kind of bad as far as flexibility. GoDaddy's DNS controls are pretty good, but I still tend to host my DNS elsewhere.

</comment><comment><USER4> I sure wish some company would step-up and offer a reasonable, quality registrar/DNS offering, but I have yet to find that one. Until that time, I will keep them separate, and would suggest using DynDNS. It really depends on your needs and/or budget. I would check out this page: <http://www.dyndns.com/services/dynectsmb/>

If that looks like overkill, you might consider this plan: <http://www.dyndns.com/services/upgrades/>

</comment><comment><USER5> You really can't do that much. Pick a good provider.

I'm using route53 from Amazon. It's dirt cheap and they no slouches when it comes to reliability. It's still relatively new though.

<comment><USER6> If you use route53 aren't you still storing the nameservers at Namecheap in this case, thus, not eliminating the problem since they are still part of the route?

<comment><USER5> Nope. Only problems with the root servers or Amazon would be an issue.

</comment></comment></comment><comment><USER7> Hire dyndns and don't worry about it again.</comment>


Jesse Schell talk at The Long Now Foundation: Visions of the Gamepocalypse - <AUTHOR> http://fora.tv/2010/07/27/Jesse_Schell_Visions_of_the_Gamepocalypse

<comment><AUTHOR> I just subscribed to The Long Now Foundation, and I suggest you do the same. Their speaker series is amazing. <https://www.longnow.org/membership/>

</comment><comment><USER2> Highly recommend this - one of the more compelling presentations on how gaming is changing marketing in general.</comment>