Fixing the callback spaghetti in node.js - <AUTHOR> https://github.com/koush/node/wiki/%22async%22-support-in-node.js node.js is a fantastic platform, but it suffers from your code quickly turning into callback spaghetti and a mess of functions. I modified the V8 parser to support the await keyword that allows C# to handle this quite elegantly. <comment><USER2> Very cool, but it's too bad you have to deal with all that to begin with.

I've been using LuaJIT embedded in Nginx (LuaNginxModule). Lua supports coroutines, so a function can just yield. Here's a brief example:

        -- Query a database using an http backend.
        -- Yields and handles other requests until the reply is complete.
        local record = util.getUserRecord(userId)

        -- Send some text to the client. Yields control while
        -- the actual transfer is in progress.
        ngx.print( "Result=" )

        -- Send the result, encoded as JSON, to the client
        -- Again, this call doesn't block the server.
        ngx.print( cjson.encode(result) )

With code like the above I can easily handle into the thousands of concurrent connections per second on the lowest end Linode VPS node available, with barely any load on the box -- and I'm told it should be able to handle 40k+ connections per second, if I were to do any tuning. Oh, and I have only 512Mb of RAM, which it doesn't even get close to under load. And the longest request took less than 500ms at high load.

I've been using OpenResty [1] which has the Lua module and a bunch of others all configured together. Works great, and I can't complain about the performance.

Someday I'm sure I'll hand the maintenance of this off, and then I might regret not using one of the "popular" frameworks. But the code is SO straightforward using this stack -- and what I'm using it for is so simple -- I think not.

[1] <http://openresty.org/>

<comment><USER3> IIRC, the original plan for Node involved coroutines (maybe even Lua?). But, they were scrapped because they introduced a lot of the same problems as full threading. You never know if the state of the world is going to change in ways unrelated to the function you are about to call because some deep-nested subroutine might yield.

<comment><USER4> The real reason will be that V8 does not support co-routines.

<comment><USER5> I think corysama is referring to Ryan Dahl experimenting with Lua (as well as C and Haskell) before settling on JS/V8.

 _I had several failed private projects doing the same on C, Lua, and Haskell. Haskell is pretty ideal but I'm not smart enough to hack the GHC. Lua is less ideal but a lovely language - I did not like that it already had a lot of libraries written with blocking code. No matter what I did, someone was going to load an existing blocking Lua library in and ruin it. C has similar problems as Lua and is not as widely accessible. There is room for a Node.js- like libc at some point – I would like to work on that some day.

V8 came out around the same time I was working on these things and I had a rather sudden epiphany that JavaScript was actually the perfect language for what I wanted: single threaded, without preconceived notions of "server-side" I/O, without existing libraries._

[http://bostinnovation.com/2011/01/31/node-js- interview-4-que...](http://bostinnovation.com/2011/01/31/node-js- interview-4-questions-with-creator-ryan-dahl/)

<comment><USER6> The threading model in Haskell (GHC) would be ideal, as it's essentially abstracted away from the developer. There's certainly the potential for a performance advantage there as well as easier to maintain code. The advantage Node.js has, is that the vast majority of web developers already know javascript. It doesn't need to be the "perfect" server-side implementation, it just needs to be good enough. It's success is due to it's easy of accessibility, something he would have missed out on had he gone the Haskell path.

<comment><USER7> Its not just potential - all the major Haskell web frameworks can handle more concurrent requests than node.js and scale to multi-core. [http://www.yesodweb.com/blog/2011/03/preliminary-warp- cross-...](http://www.yesodweb.com/blog/2011/03/preliminary-warp-cross- language-benchmarks)

I don't think node.js is good enough because you have to deal with the issue being discussed here. In Haskell, as you said, you just write normal code with no worries about mutable state messing with your thread.

</comment></comment></comment></comment></comment></comment><comment><USER8> I have been writing Node since late 2009 and Javascript with Rhino before that and Javascript with Rails before that. Before Node, I was used to linear program execution and was hesitant to switch to writing asynchronous code.

My mental model of code was one-dimensional: do this, then do that, then do that. So I was used to exception handling for errors, and my programs were like trains on a track. This was a comfortable abstraction, but the way in which my programs were written did not reflect what they were doing in the real-world: reading from disk, reading from the network, waiting for something, doing something, responding to something, receiving something in chunks.

Now, looking back, I prefer writing code that reflects what my programs are doing. There is more headspace, another dimension, no longer one thing after another, but a stack of things hovering and happening at the same time, interacting with each other, moving forwards through time.

Now, instead of trying to make concurrent work appear non-concurrent, I prefer to embrace concurrency and see how I can write for concurrency. This is almost certainly different to the way in which I would have written synchronous code. Code for me is less complex now and shorter now than when it was synchronous. It feels richer and more descriptive of the work being performed. It's also faster and more reliable. In essence, I have learned to write better concurrent code.

<comment><USER9> FWIW, "Javascript with Rhino" supported co-routines, and frameworks like Apache Cocoon took advantage of this to play tricks similar to Smalltalk's Seaside. (That said, you might have meant something different, as Node and Rails are both web tiers, whereas Rhino is an engine like V8.)

</comment></comment><comment><USER10> Callback spaghetti is a sign that you're doing something wrong.

The first example from this page shows a request handler initialising a database connection and then executing a query. That's terrible separation!

Callbacks "spaghetti" actually does a great job of highlighting when you're not abstracting enough, any more than about 5 indents and you should be seriously considering refactoring your approach.

Thus

        app.get('/price', function(req, res) {
          db.openConnection('host', 12345, function(err, conn) {
            conn.query('select * from products where id=?', [req.param('product')], function(err, results) {
              conn.close();
              res.send(results[0]);
            });
          });
        });

becomes something like

        app.get('/price', function(req, res) {
          products.fetchOne(function(err, product) {
            res.render('product', { product: product });
          });
        });

Also, as other posts on this page mentioned, try{}catch{} is not how errors are handled in Node.JS, plenty of async operations will gain a fresh stack, and cannot be caught in this way.

<comment><USER11> _becomes something like_

You comfortably omitted the error handling (admittedly the original snippet didn't have that either).

However in production code it's not optional, and that's where node.js code tends to get really nasty.

<comment><USER10> On this point I don't disagree, for this case you'd expect the data access layer to deal with all the database errors and return something useful to the request layer:

        app.get('/price', function(req, res) {
          products.fetchOne(function(err, product) {
            if (err) {
              res.render('error', { error: err });
            } else {
              res.render('product', { product: product });
            }
          });
        });

<comment><USER11> _you'd expect the data access layer to deal with all the database errors and return something useful_

There you nailed the problem. It's a constant headache, especially since library authors have different ideas about the format and semantics of "something useful".

Before you know it you have re-invented your own half-baked exception- framework, to normalize/wrap/re-throw those ErrBacks. And then a week later you notice that rollback/retry and event cascades need a whole new level of treatment.

There's a reason why mature event-frameworks such as Twisted have never quite taken over the mainstream. It's sad to see node burn all its powder on a niche programming-style that just doesn't fly for the majority of applications.

</comment></comment></comment></comment><comment><USER12> I really like this idea, but it doesn't seem to do error handling correctly.

This is not going to catch most errors occurring in an asynchronous APIs:

        try {
          asyncOperation(function(err, result) {
             // ...
          });
        } catch (e) {
          // ...
        }

Most errors will occur asynchronously, thus the convention of "err" being the first argument to asynchronous API callbacks in Node.

Unless this supports that convention, your code should actually look like:

        async function magic() {
          try {
            // code here
            await err, bar = doSomething();
            if (err) {
              throw err;
            }
            // more code here
            await err, boo = doAnotherThing();
            if (err) {
              throw err;
            }
            // do even more stuff here
          }
          catch (e) {
            // handle the error
          }
        }

...or something similar. It's better than the alternative, but not great.

This certainly could support the "err" first convention, but APIs that don't use that convention wouldn't work correctly.

<comment><USER13> Not necessarily. A callback function with the standard signature under the hood is implied. If the author is controlling flow into and out of these execution contexts there is no reason an error passed to the implicit callback cannot cause an exception to be thrown into the original execution. Throwing exceptions into coroutines is a fairly normal pattern.

<comment><USER12> True, but the existing Node APIs don't do that, they return the error as an argument to the callback.

<comment><USER14> The wiki page says:

        // these two lines are equivalent
        await a, b, c, d = moo(1, 2, 3);
        moo(1, 2, 3, function(a, b, c, d) {} );

So I don't see why not...

        // ...these two lines would be also equivalent
        await error, foo = bar(1, 2, 3);
        bar(1, 2, 3, function(error, foo) {} );

<comment><USER12> Exactly. The error object is a return value of the "await"-ed function, not an exception that's thrown.

Here's a concrete example. Normally in Node you do something like this:

      fs.readFile('/etc/passwd', function (err, data) {
        if (err) {
          // handle error
        }
        // normal processing
      });

The await version would look like this:

      await err, data = fs.readFile('/etc/passwd');
      if (err) {
        // handle error
      }
      // normal processing

Ideally it would look like this:

      try {
        await data = fs.readFile('/etc/passwd');
        // normal processing
      } catch (error) {
        // handle error
      }

<comment><AUTHOR> This is certainly something that is doable and crossed my mind, but I did not want to have the await be restricted to functions that conform to the typical return arguments. For now at least.

<comment><USER15> How about

      try await foo = bar(baz)

as shorthand for

      await error, foo = bar(baz)
      if (error) throw error

</comment></comment></comment></comment></comment></comment></comment><comment><USER16> I wrote a library (30 loc) to handle sequence and parallel flows.

Using only that, I rarely go over 80 character column limit that I impose on myself. There is absolutely zero callback spaghetti whether it's 2 or 25 functions deep in the chain.

Tbh, callback spaghetti only happens to newer async programmers in the same way that a newer programmer will write arrow code with if/else statements.

It's simply not a problem that needs to be addressed other than educating people who are new to node.js with some example tutorials that use an async helper library.

<comment><USER17> So instead of spaghetti code (a tangled mess) it now is macaroni code (small pieces of code everywhere, with unclear execution flow)? :-)

At least that's my experience with structuring asynchronous event-driven programs (without coroutines).

<comment><USER18> Yes :) Still waiting for a proper execSync ( <https://github.com/joyent/node/issues/1167> ).

Without it small build/utility scripts turn into macaroni cheese unless you resort back to Python/Ruby/Bash - more languages, harder to maintain.

</comment></comment></comment><comment><USER19> This is why I'm planning on diving into Go when I eventually have a serious realworld need for a lot of concurrency. None of this kind of mucking around is necessary.

</comment><comment><USER14> There was some discussion of adding this to CoffeeScript. The issues on GitHub seem stalled. Would really love to see it happen soon!

<comment><USER20> My understanding is that the CoffeeScript status is won't fix because the transformation violates some constraints about the complexity of the mapping that CoffeeScript values.

</comment></comment><comment><USER21> C#/.Net is planning on async/await features for its .Net 5 release: [http://blogs.msdn.com/b/csharpfaq/archive/2010/10/28/async.a...](http://blogs.msdn.com/b/csharpfaq/archive/2010/10/28/async.aspx)

<comment><USER22> and in current release F# (current being pre-Build 2.0, i.e. RTM for over a year, tho I can't comment on whether you'd really like to have VS Ultimate to make it work)

<http://tomasp.net/blog/csharp-fsharp-async-intro.aspx>

<http://news.ycombinator.com/item?id=2999260>

<http://bvanderveen.com/a/owin-buffering-async/>

<http://devtalk.net/csharp/async-await-and-c-vnext/>

[http://msmvps.com/blogs/jon_skeet/archive/2010/10/29/initial...](http://msmvps.com/blogs/jon_skeet/archive/2010/10/29/initial- thoughts-on-c-5-s-async-support.aspx)

(read comment)

<comment><USER23> The current release is included in VS Professional, Ultimate isn't required. It seems like the last recent installer for VS Shell is the CTP, so expect some difficulties if you want to go the free route on windows, although it's possible that SharpDevelop integrates with the latest source drop.

Anyway, it shouldn't be too difficult to build the compiler yourself and set up a basic emacs/vim + mono environment for linux.

</comment></comment></comment><comment><USER24> I think every competent programmer who comes to Node for the first time thinks "hoo boy, better fix this callback stuff first", and immediately writes a module to do just that. I know I did! :)

koush just took this to the next level.

But you know what. Just stop fighting the callback model. Adapt your coding idioms and move on...

</comment><comment><USER25> In JavaScript callback spaghetti would kill me, but in CoffeeScript it's a breeze and NOT something I want to "abstract away" at all for various reasons. I suggest the solution to JavaScripts concoluted anonymous functions syntax is CoffeeScript, or not inlining.

</comment><comment><USER26> That "callback spaghetti" is called continuation-passing style.

"Programs can be automatically transformed from direct style to CPS." [1]

Do the math.

[1] <http://en.wikipedia.org/wiki/Continuation-passing_style>

<comment><USER23> I don't fully understand why this makes callback hell better just because it is known under a nicer name. CPS has it's use cases, but application code is not one of them.

<comment><USER27> Specifically, CPS was intended as a mechanical program transformation to remove the stack, not a style for programmers to actually write their programs in.

</comment></comment></comment><comment><USER28> You don't have to use inline functions all the time, you can do it like this:

      function foo () {.... }
      function bar () {....foo(); }
      function barfoo () {....bar(); }

      doSomething(barfoo);

<comment><USER29> And remember that 'bind' can save your life

this.io.sockets.on('connection', this.onConnection.bind(this));

</comment></comment><comment><USER30> The proper fix is to introduce coroutines.

<comment><AUTHOR> That's exactly how this was done. I'm going to implement "yield" as well when I have some time. They both just leverage coroutines.

<comment><USER13> node-fibers is one attempt to put coroutines into node. I like it because it uses libcoro, which is nice and tight and uses ucontext, and because it works as a module without forking the core of node. Once you've 'fiberized' the server modules to start each request in its own fiber and implemented a call- with-current-continuation on Function.prototype, we're pretty much at the same place you've arrived but without new keywords.

</comment></comment></comment><comment><USER31> How does this compare to <http://chris6f.com/synchronous-nodejs> ?

<comment><AUTHOR> Not sure to be honest! I am still very new the to scene so I am unaware of this project. At first glance, we seem to have different approaches towards the same goal though.

</comment></comment><comment><USER32> Addressing the same problem (and more) in both node and the browser, via compiling-JS-to-JS: <http://onilabs.com/stratifiedjs>

(disclaimer: I am the guy who worked on the now-defunct `defer` support in Coffeescript, and am now working with the onilabs folk on the stratifiedJS runtime)

</comment><comment><USER33> This is great, but I'd rather not use a fork of Node, and Joyent isn't going to integrate this, unfortunately. I wish that Google would just add yield to V8, but they won't do that unless Apple adds it to whatever the hell their interpreter is called now (Squirrelfish?).

</comment><comment><USER34> In the node.js project I just finished, I was also forced to write some "async" c# for a separate system that the node.js project communicated with. Now, I'll be the first to admit, I don't know c#... but, it was the first time I had used both node.js AND c#. I have to say, the c# approach was a horrible exercise in pain and agony. I started to run into significant nesting in node.js, then realized it was because my approach was flawed. I abstracted more, and I also started using async.js (<https://github.com/caolan/async>), and everything was well in the world.

</comment><comment><USER35> 1) use async.js (classic javascript) 2) learn asynchronous patterns 3) profit

</comment><comment><USER36> It's a lot of syntactic sugar for one very specific type of monad. Why not just patch the language to allow easy interoperation with any monad?

For example, F#'s let! binding works with any monad not just async.

<comment><USER37> I'm not sure monads work so well in languages without type-checking. That's certainly my experience.

</comment></comment><comment><USER38> This is very elegant. Just a couple of questions -

Using await - is the program flow suspended until the corresponding function returns , or does await keyword act more like a 'pause and continue' mechanism.

<comment><AUTHOR> It exits the function, and resumes it when the callback completes. So other requests can be processed while the async function is (a)waiting.

<comment><USER38> Perfect :).

</comment></comment></comment><comment><USER39> I like how the buzz around server-side javascript is progressing slowly from "the next big thing!!!" to "okay, it has its shortcomings".

You will pry Python from my dead, cold hands :)

<comment><USER40> Seriously, it sounds like Python handles these sorts of cases much better, with "yield". I wonder why everyone suddenly discovered JS for asynchronous programming and rushed to it when Twisted has existed for years. Is it because of V8?

<comment><USER41> It's partly because of the performance of V8 (my SMTP server, Haraka, is about 8-10 times faster than the Perl version I worked on, Qpsmtpd, for example), and partly because of the "sync library" problem - with Perl (or Python) most libraries that access things on the network or on disk are written synchronously. That's not the case with Node - everything is assumed to be async.

I've written a LOT of async code in Perl and C, and ran across this problem countless times. It really is a blessing to not have to worry about it.

</comment></comment></comment><comment><USER42> I definitely think the iterator case needs work:

<https://github.com/koush/node/issues/2>

</comment><comment><USER43> Will Conant wrote a great article discussing three different libraries (StratifiedJS, Streamline, node-fibers) to do with the problem: [http://blog.willconant.com/post/7523275566/continuations- in-...](http://blog.willconant.com/post/7523275566/continuations-in-node-js)

<http://tamejs.org/> also has a good write-up.

</comment><comment><USER44> Man, just use python+gevent and be done with it...

</comment><comment><USER45> Changing JS is just not a great idea and I think Node.js has been wise to avoid it.

If you're going to innovate, then design a language that compiles down to JS that provides the innovation. CoffeeScript.

If you want to take that a step further, look at ClojureScript. Want delimited continuations? Fine. All w/o requiring you to fork Node.js or CoffeeScript.

</comment><comment><USER46> It's great to see coroutines becoming more mainstream. I think every programming language could do well with some way to abstract over the program counter like this - ie. code that appears sequentially being executed interleaved with other code (deterministically, unlike threading).

</comment><comment><USER47> Very nice. I've also been using the async node.js module which is quite handy for some other patterns. Of course, having direct support directly in node would be the best. Can't wait for the yield keyword!

</comment><comment><USER48> Did anyone checkout Jscex? It basically has the same goal but implement as a library. <https://github.com/JeffreyZhao/jscex>

</comment><comment><USER49> Or you can just do this:

       foo.step1 = function(){ do_some_thing(foo.step2) }
       foo.step2 = function(arg){ do_another_thing( ... ) }
       foo.step1()
       # enjoy

</comment><comment><USER50> I don't accept that there's a "problem" that needs "fixing".

<comment><USER13> There's room for improvement. Most programmers shouldn't need to know how to write asynchronous code just as they shouldn't need to know how to write concurrent code. Consider mutexes vs Java's 'sychronized' vs transactional memory: there's a way forward, and it's to reduce complexity for the average programmer.

Remember that not everyone is as awesomely brilliant as you are.

<comment><USER50> Reduce complexity: sure. But if we have requirements that can be well defined within an async FP paradigm, then maybe an async FP environment isn't such a 'problem'... and many of us "average programmers" already know lisp. If nodejs doesn't suit everyone, probably not everyone should use nodejs. But if we're going to have a go at it, let's not immediately dismiss node's natural style as "an absolute mess"

</comment></comment></comment><comment><USER51> I've been wanting to implement something like this for a while! Great job. It looks elegant and basically pushes the continuations into the background.

</comment><comment><USER52> koush, nice! I use your code every day when I reboot my phone, but I appreciate this useful extension to node almost as much. :)

</comment><comment><USER53> It seems the async variables are just like Mozarts data flow variables

</comment><comment><USER54> Perhaps it would be interesting to see how it was done in Twisted: [http://twistedmatrix.com/documents/current/api/twisted.inter...](http://twistedmatrix.com/documents/current/api/twisted.internet.defer.html#inlineCallbacks)

We'd like to think that the C# guys were looking our way when they came up with async/await, but there's no proof. :3

<comment><USER55> I love the way Twisted does it. Completely part of the way the language is supposed to work. It's a work of art IMO.

</comment></comment><comment><USER56> JavaScript itself gives developers enough power to beautify messy async code, already. Below is the rewrite of the first example in that page, with async function composition:

====

/* <https://gist.github.com/1250314> */

var db = require('somedatabaseprovider'),

          compose = require('functools').compose;

compose.async(getApp, connect, select)({ url:'/price', host:'host', pass:'123' }, function(error, shift){

      shift.conn.close();

      shift.res.send(shift.products[0]);

});

====

It's that easy to abstract those messy callbacks using some functional tools.

</comment><comment><USER57> theres this great thing called npmjs.org that is a place for stuff like this if I am not mistaken</comment>


Startup Genome makes it even easier to explore your startup community - <AUTHOR> http://www.startupgenome.com/blog/next-iteration-startup-genome/

<comment><USER2> I'd love to know what the HN community thinks about the concept of Startup Genome. Do you think it's valuable, what questions come to mind, etc?

<comment><USER3> So this is unrelated to [https://www.startupcompass.co/](https://www.startupcompass.co/) and [http://blog.startupcompass.co/](http://blog.startupcompass.co/) and [https://angel.co/startup-genome](https://angel.co/startup-genome) ?

</comment></comment><comment><USER4> Great work Shane and team. Love the new look and excited to see this thing grow.</comment>


Copenhagen Suborbitals Successfully Launches Active Guided Rocket - <AUTHOR> http://www.arcticstartup.com/2013/06/24/copenhagen-suborbitals-has-another-successful-launch

<comment><USER2> What this means is that the major obstacles for going into space have been cleared (reliable engine, logistics around sea launch, active guidance) so the next launch will be Heat2x, which has the potential to reach an altitude of 130 km. Space starts at 100 km.

Disclaimer: I'm involved with Copenhagen Suborbitals, and managed the livestreaming of the event.

<comment><USER3> Did you see the joke comparing your achievement to the resekort situation[1]?

[1] [https://www.facebook.com/photo.php?fbid=10151666565407048&se...](https://www.facebook.com/photo.php?fbid=10151666565407048&set=a.159725812047.118433.826732047&type=1&theater)

<comment><USER2> yes - it was hilarious! Rejsekortet is such an embarrasment to Denmark, my only constellation is that I once had sex with the CEO's daughter.

<comment><USER3> That escalated quickly.

</comment></comment></comment></comment><comment><USER4> Would that make Denmark the fourth nation to independently achieve manned space flight, behind Russia/USSR, USA and China? Or is it disqualified for not being government run?

<comment><USER5> It was unmanned. Their final goal is to launch a human into space.

<comment><USER4> Hence why I wrote 'would' and not 'does'. My question is if it counts _once_ they actually manage.

</comment></comment></comment><comment><USER6> The youtube channel is the best way to catch up with the project. There are some cool videos of engine tests and a handful of very professionally edited videos of the team explaining different stuff

[http://www.youtube.com/user/CphSuborbitals?feature=watch](http://www.youtube.com/user/CphSuborbitals?feature=watch)

</comment><comment><USER7> Should other nations start watching out for space Vikings?

<comment><USER8> Anyone else get the H. Beam Piper reference?

</comment></comment><comment><USER9> Nice, though I wonder what is so notable with the ground track offset.

<comment><USER2> It shows that the active guidance works as expected. Active guidance is extremely difficult. The hardware is difficult because you need to design jetvanes that work under extreme pressure, and in a 3000 degree jet exhaust. The software is difficult because it needs to be extremely reliable while still compensating for a lot of factors such as wind, spin, air density, etc. and you can't test it, so there is no space for bugs.

No amateurs have ever even attempted active guidance before, and getting it right in the first go is a huge accomplishment.

<comment><USER10> Regarding testing, aren't there any possibilities of testing just parts of the software, possibly via simulation, or is everything so inter-dependent that a live physical test is the only way to go? It's pretty impressive to get something so complex right in the first try! Props!

<comment><USER2> You can of course test subsystems, how they play with each other, I/O, etc. But the main job of actually sending the rocket straight up is not testable. You could build simulations, but they wouldn't help much since there are so many parameters, unknowns, etc. that building an accurate simulation would probably be as expensive as a test.

Besides, tests are much more fun!

<comment><USER11> Just build it in Kerbal Space Program!

</comment></comment></comment></comment></comment><comment> workhere-io Short launch video: [http://www.youtube.com/watch?v=rva9J_3njnI](http://www.youtube.com/watch?v=rva9J_3njnI)

<comment><USER12> Cool. Thanks.

Does anyone know why the flames appear to "stutter" from the rocket in slow motion? Is that expected behavior?

<comment><USER13> It looks like turbulence or presure spikes on the chamber at ignition, depending the magnitude that could lead to a explosion (I just an aficionado, so take this opinion for what it´s worth) I also follow the sugar rocket to space project, and I think they had some problems with this, and with cracking in the propellant. Is the data from the launch available?.</comment></comment></comment>


A whirlwind tour of Go's runtime environment variables - <AUTHOR> http://dave.cheney.net/2015/11/29/a-whirlwind-tour-of-gos-runtime-environment-variables <comment><USER2> They should let this author commit changes to the runtime package docs, because this explanation of GOMAXPROCS is much more clear than the official docs.

This article: "the number of CPUs (whatever your operating system considers to be a CPU) visible to the program at startup."

Official docs: "The number of logical CPUs on the local machine can be queried with NumCPU." and "NumCPU returns the number of logical CPUs usable by the current process."

The problem with the official docs is they don't mention that the value of NumCPU is locked in at startup and never changes.

<comment><USER3> The fact that it's locked in at startup might be an implementation detail that they don't want people generally relying on, but I personally don't know if that's the case.

<comment><USER2> That may be, but the docs for NumCPU are still just wrong. NumCPU does not return the number of logical processors in the machine. It returns the population count of the cpu mask, at the moment the runtime was initialized.

</comment></comment></comment><comment><USER4> Site's down for me.

[http://webcache.googleusercontent.com/search?q=cache:OXupz2Z...](http://webcache.googleusercontent.com/search?q=cache:OXupz2ZeSOAJ:dave.cheney.net/2015/11/29/a-whirlwind- tour-of-gos-runtime-environment-variables&hl=en&gl=us&strip=1&vwsrc=0)

<comment><USER5> Maybe he should use Go instead of PHP.

<comment><USER6> As a strong proponent of both, I'd say PHP is the better fit for a small blog.

</comment></comment></comment><comment><USER7> There's also GO15VENDOREXPERIMENT in Go 1.5. It enables dependency vendoring with a vendor/ directory for each package.

More details here: [https://golang.org/s/go15vendor](https://golang.org/s/go15vendor).

<comment><USER8> I'm using this now. Looks like they will be releasing an official vendoring mechanism for 1.6. [https://blog.golang.org/6years](https://blog.golang.org/6years)</comment></comment>


Ask HN: If you could enact one Law, what would it be? - <AUTHOR>

With all the bickering in politics and inertia in many areas I've always asked myself what I would do in a position of power. How would I be different?
In that spirit, I would love to know what others here would do given the premise:
You find yourself in a position to enact one Law (or small number of related laws) - what would it be?

  Without writing a thesis, being too legalistic, or being
  too USA-centric, here is what I would do:

  Like paying taxes, jury duty, I would also make it a legal
  obligation to vote. You can abstain if you wish, or spoil your
  vote, but you need to turn up in person to do so. You don't vote,
  you pay a fine (much like a traffic violation...)

  All those in office, or running for office, are forbidden from
  any donations or gifts. Instead a legitimate candidate would
  be given a set budget and a certain amount of ad and airtime in
  the relevant locality - this would be reviewed every 2 years
  to account for local costs (ex. New York versus Little Rock and
  changes in pricing, inflation etc)

  With that in mind, voting would take place over a long weekend
  which in itself would be a national holiday.

  Political candidates would be obliged to take part in publicly
  accessible or viewable debates.
 Yes, there are a ton of holes in the above and ideas that need much explanation, but you get the idea.
Okay - your turn... <comment><USER2> <sigh /> My ideas about how our legal system should change are pretty radical (anarcho-capitalist / libertarian here), so it's hard to say just one simple law without making it either something that sounds glib, or something that I actually consider fairly insignificant.

That said... As long as we have our more-or-less current government, I'd say maybe more term-limits at all levels of government. Something to try and prevent the existence of "career politicians." I'd like to cycle these folks through quick enough that they don't have time to become totally corrupt.

Edit:

Oh, wait, here's one I'd like to go with that could actually help. Require judges to inform all juries of their right to nullify based on finding the law invalid, regardless of the facts.

<http://en.wikipedia.org/wiki/Jury_nullification>

</comment><comment><USER3> Any new law must wait 6 years after approving before going to production.

That way corruption and making holes in law on purpose will be less worth it, and people would be sure law won't change under their business in short term.

</comment><comment><USER4> I would enact a more strict system against those who attempt to create regulations based on religious ideas. For example, trying to outlaw anything on the basis of long-taught religious ideas would instantly be thrown out. From a legal perspective this would push the first amendment under the umbrella of stare decisis and allow a court to overturn any law found to be based on those religious ideas.(<http://en.wikipedia.org/wiki/Stare_decisis>)

</comment><comment><USER5> A law is only good if you can enforce it... and I don't see anyway you could enforce any of these. So what would be the point? And do we _really_ want everyone to vote in the USA?</comment>


The Crisis of Connected Cars: When Vulnerabilities Affect the CAN Standard - <AUTHOR> http://blog.trendmicro.com/trendlabs-security-intelligence/connected-car-hack/ <comment><USER2>
      our attack can be enabled with any remotely exploitable
      vulnerability that allows the attacker to reprogram the
      firmware of an ECU (e.g., the infotainment system).

I will be honest, it seems very unprofessional if vehicle safety engineers have allowed complex, network-connected entertainment systems to have write access to the same CAN bus that the brakes and throttle are on.

After all, if a hacker can remotely reprogram anything on that CAN bus, for sure they can remotely trigger a fatal crash.

<comment><USER3> I know that Volvos have two separate CAN buses, one for important safety critical systems and one for interior functions and infotainment.

They are joined with a proxy/firewall that provides separation and limits the functionality available between the two.

I'm guessing this attack would only work in this case if the attacker could physically access the OBD port to gain entry to the safety critical bus.

<comment><USER4> I believe devices on the CAN can typically see, and therefore spoof or simulate, packets from other devices. I'm not sure that physical access is really necessary because modern vehicles ship with networking capabilities (e.g. OnStar) that already have access to the CAN.

[1] [http://opengarages.org/handbook/ebook/](http://opengarages.org/handbook/ebook/)

</comment></comment></comment><comment><USER5> Generically (and IMHO) the original "bad" idea remains that of mixing together the actual "security related" and "vehicle operation" items with the entertainment and navigaton system AND allowing external connections (via SIM or similar, OTA and the like).

It is just like most computer vulnerabilities, the ones requiring physical access have in my opinion an almost null impact in practice (if such a physical access is made difficult or impossible), whilst anyhting "remote" is really preoccupying.

One of the suggested mitigations of putting the OBD-II connector inside a hardware locked case (presumably with a mechanic lock with key, IMHO safer than an electronic one with a password) goes in this direction, no physical access, less risk.

<comment><USER4> > One of the suggested mitigations of putting the OBD-II connector inside a > hardware locked case (presumably with a mechanic lock with key, IMHO safer > than an electronic one with a password) goes in this direction, no physical > access, less risk.

As long as we give owners the key. Reminds me of farmers who can't service their own tractors [1].

[1] [https://www.theguardian.com/environment/2017/mar/06/nebraska...](https://www.theguardian.com/environment/2017/mar/06/nebraska- farmers-right-to-repair-john-deere-apple)

</comment></comment><comment><USER6> tl;dr if you have physical access to the CAN bus, you can cause enough errors to render it inoperable, by tampering with CAN frames and flipping bits around.

If you have physical access to the CAN bus you can also make it inoperable by shorting the two wires together... not sure the takeaway is supposed to be with this.

<comment><USER7> The takeaway is that by tampering only with CAN messages sent by a particular system, you can force that system to disconnect from the network. For example, an attacker might use this exploit to disable the airbag, or disable the engine while the car is driving, or cause other safety problems.

</comment></comment><comment><USER8> As I'm currently on vacation I don't have the means to study this further, but on the quick lookout I found at least one problem in how this is described. If I understand correctly it alters frames so that the device goes off bus. From their claims this is not detectable with modern tools. If I'm not missing something then I can guarantee you that the dashboard reports errors when a device is off bus. Also at least modern VW and BMW vehicles offer a lot of data (to the diagnostic tool) on the state of the can networks (dropped frames/etc). I'll have to dig deeper, but on the first glance it looks like they found a way to buss off devices, but over-prpmise on the stealthines of the vuln.

Edit: typos

</comment><comment><USER9> Interesting in that fixing it would be difficult, as it's a documented part of the protocol.

I suppose, though, manufacturers could at least focus on isolating the OBD-II port from most of the CAN bus, and putting the unfirewalled CAN bus connectors in a place that's harder to get to. There seems to be a lot of variation there now. Some cars isolate at least some functions, others have the OBD-II port completely connected to everything.

<comment><USER10> The problem is not OBD-II. Rather the risk is when another vulnerability occurs on another system attached on the CAN bus like an infotainment system. If that infotainment system is vulnerable and the vulnerability allows to control the CAN bus then you have the real problem.

<comment><USER9> I don't see the difference. Both have no need for unfettered access to the entire CAN bus.

See this for example: [https://www.autoblog.com/2015/01/21/2-million- progressive-sn...](https://www.autoblog.com/2015/01/21/2-million-progressive- snapshot-customers-may-be-at-risk-for-car/)

OBD-II messages are a subset of CAN bus messages, identified by bits in the header, so it should be simple to filter/firewall down to just what's needed for that physical port.

</comment></comment></comment><comment><USER11> I am surprised how this is news seeing how it is an obvious mechanism to anyone working with CAN. If you have access to the CAN bus you can pump whatever message you want on the bus since it has no authentication.

</comment><comment><USER12> Techmeme summary: _Researchers find indefensible vulnerability in CAN protocol that controls airbags and sensors including antilock brakes in all modern vehicles_

</comment><comment><USER13> I mean... isn't CAN a trusted unauthenticated bus? So if you have access you can pretty much do anything you want. Right? Am I missing something?

</comment><comment><USER14> CAN should have authentication built in. That's the root of the problem, and without fixing it everything else becomes hard.

<comment><USER15> That's easy to say but if you look at CAN it's just a set of small serial frames over RS-485 designed to be usable by an 8-bit (or smaller) processor. Like a simple SPI/TWI bus, but off-board.

Sure, I _am_ upset that it's not more secure, as I am about the same thing with SCADA and (shudder) MODBUS, but I recognize where how the problems emerged: these busses are, by current standards, _old_.

<comment><USER14> While you're not wrong, it wouldn't require throwing out 8-bit MCU support to bring CAN into this century. In particular, replacing the CAN CRC with a short auth tag would not be beyond the capability of many small MCUs at low speeds (10s of messages/s).</comment></comment></comment>


Is TOMS "selling out" for profit? And why does this bother us? - <AUTHOR> http://joycorps.org/is-toms-selling-out/ <comment><USER2> I disagree with the basic premise that Tom's was a source of good before the purchase, let alone that it is one now. Flooding the markets of developing countries with free clothing -- ie, goods that those countries already have the skill and infrastructure to create and sell -- is harmful to their economies.

Throwing free shoes at these markets shuts down the people trying to make a living for themselves making shoes. We're not talking about software here, it doesn't take a great deal of skill or resources to make shoes. 2/3rds of readers' clothing here probably comes out of the developing markets that Tom's floods.

I will consider Tom's a "charitable organization" when they build and hand over ownership of factories and farms for free.

<comment><USER3> Your argument is fundamentally mercantilist; 'dumping', which is what you are describing, is only harmful to businesses in the industry being undercut, but it helps everyone in the country, and to a much greater extent than any harm which may inhere.[1][2] Please consider whether we should allow energy and lighting services to simply be given to the people of these countries for free all day, thus undercutting the utilities, lighting fixture manufacturers, light-bulb makers, utilities, and all the related industries; if you agree that this 'dumping' is bad, we should blot out the sun.[3]

[1] [http://en.wikipedia.org/wiki/Mercantilism](http://en.wikipedia.org/wiki/Mercantilism)

[2] [http://en.wikipedia.org/wiki/Dumping_(pricing_policy)](http://en.wikipedia.org/wiki/Dumping_\(pricing_policy\))

[3] [http://bastiat.org/en/petition.html](http://bastiat.org/en/petition.html)

<comment><USER2> If energy is being provided for free to these countries, then income is immediately opened up as the new power utility (which of course should be owned by the public or its workers) in the form of jobs needed to keep the plant running. It opens up opportunities for all manner of products, jobs, and factories that were previously not possible before -- I mean, light bulb makers are about as useful in a country without electricity as shoe stores are in a country with free shoes.

Furthermore, if a country has little-to-no access to electricity, providing it is unlikely to impact anyone negatively. And besides, workers/citizens/the state ought own the utilities; this is the case in most of the world and I've had nothing but crap experiences with the privately owned kind.

Are you going to dump seeds and irrigation systems into the same bucket as free shoes too?

Sure, choosing what to charitably give without causing more harm than good must be done carefully, I'll give you that, but I'm not following the all-or- nothing extension of that argument.</comment></comment></comment>


Ask HN: Sites and resources for designers learning tech? - <AUTHOR> A friend is a talented graphic designer, specializing in packaging, but after reading the latest "Design in Tech Report" wants to learn the tech behind web and mobile sites.<p>What are some good recommendations in that regard?<p>[1] https://designintechreport.wordpress.com/ <comment><USER2> For somebody coming from graphic design background [https://processing.org](https://processing.org) would be and excellent place to learn about programming. It was designed with creative types in mind, has large communities, many resources including books and courses and a newer JavaScript version. I would also recommend Generative Design book: [http://www.generative-gestaltung.de/about](http://www.generative- gestaltung.de/about)

Learning Processing would not be directly useful for building web and mobile sites, but in my opinion be an excellent stepping stone for a graphic designer towards the world of technology and creative uses of programming. Using JavaScript (P5.js) to create visuals could be an interesting path for designer as an end goal and/or relevant and engaging way to learn coding concepts that can be later applied towards building sites or apps of any type.

</comment><comment> gingerbread-man For someone whose goal is to program websites, his first goal should almost certainly be to learn how to program in javascript.

Eloquent Javascript by Marijn Haverbeke is an excellent introduction to programming. It's freely available online at [https://eloquentjavascript.net](https://eloquentjavascript.net).

</comment><comment><USER3> As a technical resource for CSS/JS/HTML, the Mozilla Developer Network is by far the best in town – [https://developer.mozilla.org/en- US/](https://developer.mozilla.org/en-US/)

</comment><comment><USER4> Conference talks might be a good option -

[http://findlectures.com/?p=1&class1=Technology&type1=Confere...](http://findlectures.com/?p=1&class1=Technology&type1=Conference&category_l2_Technology=Programming%20Languages&talk_type_l2_Conference=Software&category_l3_Programming_Languages=JavaScript)

</comment><comment><USER5> I come from a different background (marketing) with a different goal (become a professional developer), but I believe he/she will gain a lot from the same resource I uses at first: www.freecodecamp.com</comment>


The story of the Avignon papacy and an acclaimed Rhône wine - <AUTHOR> https://www.laphamsquarterly.org/roundtable/papal-indulgences <comment><USER2> If you're into Historical novels, there are two books that take place during the Avignon papacy: _The Dream of Scipio_ (Iain Pears) and the series _The Accursed Kings_ (Maurice Druon). The first one is quite well written (being a Iain Pears novel), and both are fairly accurate with regard to the period, being written by historians.</comment>


Ubuntu now available from the Windows store - <AUTHOR> https://blogs.msdn.microsoft.com/commandline/2017/07/10/ubuntu-now-available-from-the-windows-store/ <comment><USER2> This removes one of the major reasons to use a Mac for Linux development. Many people used Macs because they had nice hardware that just works, as well as a Unix (but not Linux) environment. Now, you can buy a Windows laptop and have Windows manage all the tricky bits like power management and graphics while having a bona fide Linux distro for development. Plus, you can also play games :)

<comment><USER3> As someone who just switched from windows to Mac, when you pick windows you also gain periodic show stopping problems, kafkaesque hoops to jump through randomly in the middle of your workflow, a slightly terrible security architecture and the ability for family and friends to see you using windows and are clearly an expert and then ask you to fix their crapware ridden death boxes. At least you gain thousands of google results for every problem coming your way.

Incidentally yesterday I ran out of disk space on my old windows laptop. There was a windows problem reporting process that ate 100MiB once an hour. Eventually over the space of weeks you lose your entire disk then spend an hour googling the numerous incantations that need to be applied to fix this most of which don't work. Random shit like this happens at least once a week or so and just ruins an afternoon.

Also don't think that the built in ubuntu or windows shell stuff actually works properly. There are many horrible bugs. Nothing on windows works properly for months if not years. Even with creators update, I used putty and virtual box because it was _that_ bad.

Also you're going to miss things like keychain in OSX.

Edit: also my old T440 which I was running windows on, Lenovo couldn't ship working drivers for creators update and the moment that got rolled out TSHTF. This resulted in the SATA controller hanging for 30 seconds every five minutes and locking the machine up. I wasted six hours trying to find a combination of drivers and PM config that actually didn't do this. That's a whole day of work down the pan.

There is just ZERO quality on the platform and I'm done with it.

<comment><USER4> Same here, also you can't really map NTFS to Linux filesystems (perms + max path length, have fun using Go with vendor / NodeJS), so you run into stupid issues where the only solution is to boot up a VM anyways - and then, most of the time, the VM file sharing does not support proper permissions. After dealing with that for about a month, I was pleased to hear that NVidia released drivers for 10-series GPUs for OSX, so I transformed a Haswell-E 8-core workstation into a Hackintosh and I get best of both worlds (except some USB soundcard issues, but it automatically switches to Bluetooth when it dies, so it's all fine).

Regarding notebooks, I paid the premium over Windows notebooks just to get a MBP. The quality is far superior to anything I could find and for some reason there's no equivalent of a MBP15 in terms of performance, size and portability. Everyone's stuffing the low-TDP 2-core i7s and 14 screens into their "ultrabooks" and calling it a day.

<comment><USER5> This, this on so many levels! But this issue affects VMs too, the shared folders are always mounted with strange permissions, this is propagated to Docker too so Docker XP on Windows, in any configuration is seriously affected by the NTFS, put simply, awful. For developers this is critical. I don't know, maybe a software layer on top of NTFS permission might be able to emulate Posix style perms. The difference between Windows and Unix is too big compared to OSX, that is why OSX will always be more ergonomic.

But this does not mean that it is not to be appreciated, they did an awesome job. Maybe one day things will be solved, maybe you will be able to start native windows apps from UOW, maybe even Docker will be supported, maybe permissions will be cleverly emulated ... the work they did so far clearly focuses on getting things running, the QA period will be there soon too.

</comment></comment></comment></comment><comment><USER6> For me one very important aspect of Linux is that the OS is decoupled from any kind of "consumer experience". In other words nothing in the OS is ever asking me:

Who I am

For Payment Information

Would I like to see an Ad

Do I need additional products or services

So I appreciate that this is handy for some people, but to me it's like avocado ice-cream. A bad idea that tastes like crap.

<comment><USER7> Wow, you haven't even tried the thing once clearly.

Can you elaborate on what is it that is bad about WSL being on Windows? How does it make things bad for anybody? It's called choice.

<comment><USER6> I have been in my day a very heavy user of Windows. What I object to on both Windows and Mac is the whole "store" experience. When my personal computer asks me for a credit card, I find this to be a profoundly uncomfortable experience - whether that's rational or not is a separate question.

So that's why to me it's like Avocado Ice Cream: a choice many people are free to make and enjoy....like the maniacs they are.

<comment><USER8> The only time your mac ask for your credit card information is when you are trying to pay something with your Apple account and you don't already have it.

If you don't want to be uncomfortable then simply don't try to pay for something with your Apple account.

<comment><USER9> Not wholly true. My mac ecosystem is currently blocking the download of a free app until I verify my CC information (which consists of entering the CCV for the hundredth time, but that's a separate rant).

<comment><USER10> Defiantly not totally true, I have multiple accounts on the mac store and I've never once been asked for a credit card, I download free apps via the store at will.

If that bothers you, you can always just download the app from the dev's website and not bother with the store completely.

What probably happened is that you have an existing expired CC on your account, so just remove it and continue on...

<comment><USER9> What is actually happening is my Apple account gets locked out about once a week (completely outside of my control), so they want me to verify everything again, even to make "free" purchases. A real PITA.

> you can always just download the app from the dev's website and not bother > with the store completely

This makes a number of assumptions - namely that the developer has made the app available via their website (which is not common if they use in-app purchases).

</comment></comment></comment></comment></comment></comment></comment><comment><USER11> Even clicked the linked articles and never came across a satisfying answer to the question: why? And I mean practical use cases where one would pick WSL over Linux. Once bitten twice shy, I would not hold against them if people were to be skeptical when MS decides to embrace competing products.

<comment><USER12> > And I mean practical use cases where one would pick WSL over Linux.

You don't. You choose it over MSYS2/MinGW/Cygwin.

<comment><USER13> Except for the fact that you cannot launch (or otherwise control) Windows processes from the Linux environment. That's one serious limitation.

<comment><USER14> You can now! You can run .exe files directly from WSL, and we append your Windows path to your Linux path by default to make this easy.

</comment></comment></comment></comment><comment><USER15> Today in "headlines that would have been April Fools jokes ten years ago"

<comment><USER16> I think that would be more like "Windows now available from Ubuntu package manager"...

</comment></comment><comment><USER17> I never quite get developers that don't use a system most similar with they _deployment target..._ If I develop web apps intended to run on -nix, I use Linux, if I develop Windows stuff, I use Windows etc.

It creates a huge understanding gap that slows you down and makes you miss so many shortcuts...

Windows, Macos, Linux are all _good enough to get shit done_ these days... so pick whichever suits current needs best. (I reboot to different OS depending on project since this also helps me avoid my dangerous tendency for multitasking... and productivity/office tools are all web apps for me so I can use them anywhere, including phone and tablet).

<comment><USER18> My company lives on Outlook. My dev is fully targetted on Linux. How should I use Linux on my laptop/workstation?

<comment><USER19> Run Outlook in a Windows VM on Linux instead of doing your real work in a Linux VM on Windows.

<comment><USER19> So, someone wrote this reply and it got downvoted to death or they're hellbanned or something, I want to reply to it anyway.

They said: not possible due to company policies. you wouldn't be able to connect to our network with Linux desktop anyway. welcome to corporate world

The responder reveals themselves to be an "inside the box" thinker. You could shrink your windows partition, install Linux, boot Linux natively, boot the existing Windows partition as a VM in VirtualBox, assign your physical NIC to the Windows VM, and use the Windows VM as a gateway to the network.

<comment><USER20> Being able to do something doesn't mean you are able to do it. Good luck with that setup if you are working in finance and something fucks up or there's an audit.

<comment><USER17> > Good luck with that setup if you are working in finance and something fucks > up or there's an audit.

...don't most companies have a clear separation between (1) _software engineers_ , whose job is pushing out code to cloud/servers/other-users (and who nobody should care what they use to develop that code that they push out), and (2) _software users_ , who actually use the apps to push money/data around?!

If you're working in finance you're _either_ in group (1) where you can use mostly anything compatible with security policies, or in group (2) where you can use ONLY what's whitelisted. If you're the rare snowflake sitting in both groups at once, then _you just use 2 different separate computers._

And auditing only touches group (2) because they are the only ones handling money and real data, unless you're in a criminal case or something, where auditing would be done by computer security forensic experts anyway, who's by able to handle auditing the "exotic" setups of group (1).

And if somebody is auditing the tech side, they would be looking at git repositories, ci servers, etc. ...not the places where code is pushed _from._

</comment></comment></comment></comment></comment></comment><comment><USER21> PSA: filesystem performance in WSL isn't great, but it's absolutely fantastic under windows' hyperv hypervisor.

As a dev env I run CentOS on hyperv and putty into it, and map the drive with dokan+winsshfs, and it's just as performant as Linux/Mac on the same hardware

<comment><USER14> Do you ever need to go the other direction, e.g. access NTFS-hosted files in the VM?

<comment><USER21> For that, samba/cifs share from windows, then mount from VM should work fine. I haven't tried it though.

</comment></comment></comment><comment><USER22> It's the 5th result for me (when searching Ubuntu), after a Linux Cheat Sheet, some PasteBin program and WepUpd8 (whatever that may be), then when I click it, the first line says: "This title is powered by great new feature of the windows insider program, please join at..."... Now should I, do I need to do that? The Get button is greyed out, but no indication why (probably because me company hasn't approved the anniversary update yet). What a crappy experience.

</comment><comment><USER23> That's a reverse first bug :-).

<comment><USER24> For the sake of completeness:

"Microsoft has a majority market share" Bug #1 (liberation) reported by Mark Shuttleworth on 2004-08-20

[https://bugs.launchpad.net/ubuntu/+bug/1](https://bugs.launchpad.net/ubuntu/+bug/1)

</comment></comment><comment><USER25> I just don't care anymore - I keep windows on VM it's way easier (eg. WSL doesn't support docker). I don't use any other Windows app except: VS (from time to time) and Word. VirtualBox is more than enough for this (my host linux desktop is beefy machine though)

</comment><comment><USER26> I have a Linux laptop and a windows laptop. I bought the windows laptop for games and to hobby in game development , blender and unreal engine but I can't stand windows even for those basic purposes the popups for updates and other "do you want to set this setting now" when I just quickly want to open a browser and google something drive me nuts. Put notifications in the toolbar in the right with some annoying icon and leave me alone. I know what Linux is doing all the time and if not it's easy to look up but windows Microsoft magic makes me feel like I need tons of more security apps than I would like to have running. I need a windows lite.

</comment><comment><USER27> I just wish the issue with symlinks not being interoperable between Windows and the Linux subsystem (and vice versa) could be fixed.

</comment><comment><USER28> Microsoft has one problem - it struggles with it being irrelevant.

Years after years of shaming from angry penguins did their job. Now Linux is cool and Win is not. Well, Mac is now supposed to be even cooler.

Windows can't regain even a second place as a development platform unless, ... , it stops being windows. The negative connotation and "uncoolness," just sticks to anything that remotely touches Microsoft. Unless they can do something like a total market and product production approach U-turn as a company, they can't change their trajectory into the dustbin of history.

<comment><USER29> Oh, hi guy from Starbucks with lots of stickers on his macbook writing nodejs apps in VIM.

Linux was never cool and will probably never will. Mac is cool because they had the amazing marketers, but nowadays it's getting more and more lame.

<comment><USER30> You try and defend windows, but give absolutely no defence other than the fact that Unix isnt cool.

<comment><USER29> I had no word "windows" in my comment. Windows never was cool and never will be cool. It just works.

</comment></comment></comment></comment><comment><USER31> Doesn't this break every policy the app store has about what programs can and can't do? This has full system access and every other app is constraint to the file dialog to get write permissions.

<comment><USER32> Windows store also has full/legacy Win32 apps. See the Evernote app in the store, its regular old Win32

<comment><USER31> I thought it had "full win32" support, ie, you can run win32 apps but they have to be modified. It's clear as mud though, MS says one thing but their windows store migration guide says another. The existence of the migration guide is rather telling though.

<comment><USER33> Desktop Bridge (Centennial) apps are modified to use the same appx packaging and installer format used by UWP apps. Unlike true UWAs they run with user privileges, not inside an app container, and so they have the same filesystem access as the user.

They can be distributed through the store but the onboarding process is much more arduous than with true UWAs (for which the Store acceptance process is largely automated since they're relying on the app container for security). AIUI to submit an unsandboxed app they expect you to already be an established developer and submit a request, wait for them to do a bunch of manual investigation of who you are and get back to you, etc.

</comment></comment></comment></comment><comment><USER34> Very excited! Been using the WSL for a bit now to do tensorflow and python stuff. Just a bit of tweaking to get it all to work (less than an hour), and I get to dual boot less frequently now.

<comment><USER35> Why not installing tensorflow on Windows directly? The WSL does not currently support accessing hardware like GPU so there is no benefit of using tensorflow on WSL.

<comment><USER34> I am not too familiar with developing on windows directly. Don't feel like learning all the tools when I am already so comfortable in Unix like environments.

</comment></comment></comment><comment><USER36> Never used the Windows Store - do I need to register or can I download Ubuntu without a Microsoft account?

<comment><USER37> No, everything that is free can be downloaded without account. It's actually the only platform I'm familiar with (android, iOS, MacOS) that allow users to do so. Really convenient for computers that we install at costumer site.

<comment><USER38> Well i'll be damned. When i looked into this a while back i had to register (used an old hotmail account i have sitting around for when i have to interact with MS) before getting anything done.

<comment><USER38> Responding to myself here to document a few things.

Seems that MS distinguishes between a desktop/laptop install and a tablet install.

I have a cheap 8" x86 tablet i picked up, and there i have to log in to grab even free apps. But if i use my laptop, i can grab free apps without logging in.

</comment></comment></comment></comment><comment><USER39> how are file endings handled with WSL? last time I tried using git & sublime text on Windows with some version of cygwin it would checkout a repo with windows file endings, which broke all the bash scripts. if it uses POSIX file endings, how about opening the files with windows applications like VS?

Edit: Also, does the windows terminal now have some sane colour scheme? I could never make it work to not show me some completely unreadable colors, like dark blue text on black ground or light yellow on white.

<comment><USER14> WSL doesn't change the line endings, so you'll want to make sure that if you use Git for Windows along with it, you set it up to use Unix line endings. Most decent editors (including VS and VSCode) can handle LFs just fine. The most annoying gap is Notepad.

We are definitely aware of the problems with the terrible color scheme. I don't remember right now if we have done anything about it quite yet... but it should be coming. In the meantime you can adjust the colors manually.

<comment><USER40> Btw: I can recommend Notepad2-mod: [https://xhmikosr.github.io/notepad2-mod/](https://xhmikosr.github.io/notepad2-mod/) It can replace Notepad and understands LFs.

You can install it with Chocolatey [https://chocolatey.org/packages/notepad2-mod](https://chocolatey.org/packages/notepad2-mod) which will automatically set it up as a Notepad replacement :)

</comment></comment></comment><comment><USER41> It's a bit misleading. Unless you're on Windows Insider builds this isn't available until the windows 10 fall update.

</comment><comment><USER42> 2017: the year of the Linux desktop.

<comment><USER13> With no actual Linux kernel code. Oh, the irony.

At least they have the decency to call it Ubuntu and not Linux in the promotional material.

Personally, I would have called it Line (Line Is Not an Emulator) or Eniw

<comment><USER43> LINE was a real thing 16+ years ago, probably still on sourceforge. It allowed you to execute native Linux binaries on Windows, similar to WSL.

[https://sourceforge.net/projects/line/](https://sourceforge.net/projects/line/)

</comment></comment></comment><comment><USER44> Is it worth installing Ubuntu via the Windows store or would we be better off running it through VirtualBox?

</comment><comment><USER30> Is this different from the linux subsystem microsoft already supports? Which is nice, and would,be worthwhile if i had enough motivation to use windows gui programs, but is limited given that you have to jump through an extra hoop to run linux gui programs, and cant even access your linux partitions from it

</comment><comment><USER45> Did you mean gnu/windows?

-rms

:)

<comment><USER46> It's actually gnu/nt. WSL completely bypasses the windows APIs and talks to the kernel directly, AFAIU.

<comment><USER13> That's because Dave Cutler (of DEC VMS fame) specifically designed the NT kernel to make it easy to add new ABIs. NT originally supported running Win32, OS/2, and POSIX executables. Now apparently they added Linux executables.

</comment></comment></comment><comment><USER47> While Windows is in a good place right now, its not great.

I have been a Windows guy for a long time but for the past couple of years I have been waiting for the day when I can finally ditch it and move over to a pure _nix platform.

I want to do this because I understand _nix, specifically have worked with Debian for a long time so I am aware of how good the base architecture of Unix-Like OSes are - its that good because it was well thought out from the early days.

Being a .NET developer I am literally waiting for the moment when I can unshackle myself from Windows 10.

Windows 10 is good, its about as good as we will get with the current bloated architecture and while I suspect the direction the OS will take is to become a VMlike app on a version of "windows-is-linux-not-bash" offering from Microsoft that day is a long way off.

Its all the little things that destroy productivity and become major time sinks. Individually we could say they are related to whatever product is causing them but collectively they can seriously eff up your professional working day.

MacBook's are great, hardware is where Apple really excels and no one can take away the great productivity to be had on the operating system which is based on the awesome BSD but the buy-in is ridiculously expensive.

As someone said pound-for-pound we can get better offerings from other vendors which will soften the shitty experience on Windows however what you get with Apple is quality and you can confidently state that you will get a good experience (provided you get good enough Apple hardware).

Here is where the problem is, the buy-in is expensive and then you are hurt even more when you realise you need to upgrade to get a better experience later down the line.

Conversely we can argue that because the BSD-like OS requires less resources it operates much better for less hardware.

I really do hope Windows becomes an "experience" on some BSD/Unix like OS that would open up a world of possibilities.

</comment><comment><USER13> At least they have the decency to call it Ubuntu and not Linux in the promotional material, seeing as it does not contain any Linux kernel code.

Personally, I would have called it Line (= Line Is Not an Emulator) or Eniw.

</comment><comment><USER48> How can I have it run a server in the background/after I close the window? (Either that or it already runs in the background)

</comment><comment><USER49> But can I access to my desktop, documents, music folder and create archives or more folders to development environment?

<comment><USER50> Yes.. save file in cd /mnt/c/Users/$"%USERPROFILE%"/(Desktop|Documents|Downloads|Music|Video)/

</comment></comment><comment><USER51> Its really nice</comment>


$12B in Private Student Loan Debt May Be Wiped Away by Missing Paperwork - <AUTHOR> https://news.slashdot.org/story/17/07/17/2246236/12-billion-in-private-student-loan-debt-may-be-wiped-away-by-missing-paperwork <comment><AUTHOR> Sounds like something from Mr. Robot</comment>


Ask HN: Any advice for a developer transitioning into a data scientist role? - <AUTHOR>

I work at a small company, and there are some great opportunities to delve into deep data analysis. I'd like to transition into such a role, and I currently have a bachelors in CS with a concentration in scientific applications (which basically just means I took a lot of math). From what I understand, I technically have the foundations for the data scientist role, but I'm a bit rusty after a long foray into app development (been out of school for 6 years). Any advice or resources that current analysts may have for a data science rookie? I have maybe a year to really hone my initial skill set. <comment><USER2> > Any advice or resources that current analysts may have for a data science > rookie?

As a practical matter, the quickest way to gain solid experience is to simply execute a few data rich projects.

Suggest meeting with the individual heads of Sales, Marketing, & Operations inside your company-- pitch them your idea as a side work project & useful learning exercise. You might be surprised how receptive they'll be. Congratulations, you've just become an indispensable internal consultant.

Here's an HBR article from 2012> [https://hbr.org/2012/10/data-scientist-the- sexiest-job-of-th...](https://hbr.org/2012/10/data-scientist-the-sexiest-job- of-the-21st-century/)

</comment><comment><USER3> Off-topic but this is a good discussion about data scientist v. data analyst.

[http://www.edureka.co/blog/difference-between-data- scientist...](http://www.edureka.co/blog/difference-between-data-scientist- and-data-analyst)

</comment><comment><USER4> You might be interested in data science competitions, e.g. www.kaggle.com

<comment><AUTHOR> Thanks! That looks cool once I know enough to start practicing on big data sets.

</comment></comment><comment><USER5> Side question: Any advice for a stats junkie wanting to transition into data science? I did graduate statistics on small data sets so I'm missing the big data piece of the puzzle.

<comment><USER6> Apply to openings/work with a recruiter perhaps - I am missing the actual stats part of the experience and I scored interviews solely based on my being a pure math PhD dropout.</comment></comment>


Nexus Q launch delayed indefinitely, no longer available for pre-order - <AUTHOR> http://arstechnica.com/gadgets/2012/07/nexus-q-launch-delayed-indefinitely-no-longer-available-for-pre-order/ <comment><USER2> I much prefer the headline "Google redesigns Nexus Q, refunds every pre-order and promises to ship a free one to everyone who preordered" since it seems more accurate and less like random Google bashing.

Feedback from previewers meant they needed another cycle. That's good, since the same detractors tend to be the ones who accuse Google of shipping half- baked products.

<comment><USER3> The headline is stating the facts, what you are suggesting is stating the google spin. Its usually a better idea to report the facts rather than the spin. There is no Google bashing in that headline.

There was a lot of negative feedback to this, and this is probably a good step. Its also nice to see the goodwill gesture of fulfilling preorders for free.

<comment><USER4> I think both the real and proposed headlines are stating facts; the question is which facts to emphasize.

<comment><USER5> Thats only a question fanboys from both sides keep bringing up.

</comment></comment></comment></comment><comment><USER6> Well, this does seem to fit in well with the "Customer Development" phase of startups, doesn't it? After all, they demoed a prototype, received (negative) feedback, and are now iterating the product to make it better tailored to the customer's needs.

It's easy to snap-criticize, but as a start-up community, maybe HN'ers can look at this in a positive light.

<comment><USER7> For those of us who wanted a Nexus Q for what it was, this is a fantastic outcome. I still get a Nexus Q but I get my $300 back.

<comment><USER8> yeah, all product launches should be done this way!

<comment><USER7> No, but certainly all failed launches should end this way.

</comment></comment></comment></comment><comment><USER9> Just remove the stupid amplifier. Or release one without and one with. God knows why someone thought including an amplifier was a good idea.

<comment><USER10> I personally think integrating an amplifier is a good idea, although I don't think the Q is a great implementation.

I would think that - at a given price point - a combined box would offer better quality and better feature integration (e.g. volume control, balance etc). Physically, I also don't want a separate amplifier box - can you explain what benefits a separate amplifier box offers vs the integrated approach?

<comment><USER9> It's as much an individual preference thing as anything else, but I much prefer high-quality discrete components that I've selected myself. Digital amps have come along a lot recently (see nu-force), but if it were me, I've already got a really good system that I could be tempted to augment with the Nexus Q - so that rules out me and others like me. Then there's the college student argument, but they've probably got a pair of logitech or similar powered computer speakers or an HT-in-a-box system which are more than enough for a party in a flat/hall of residence.

At the end of that, I can't really imagine too many people willing to pay all that money for a box which they still have to go and buy a pair of passive speakers for - particularly because the people in the market for passive stereo speakers wouldn't event glance sideways at the nexus q as a serious amp choice.

<comment><USER11> Do you know what the amp in the Q was like? I'm not trying to be accusatory- i just haven't heard sound quality ever mentioned when discussing the Q.

<comment><USER10> I have one here and haven't actually wired it up yet to speakers, because it uses banana clip connectors (another slightly odd decision).

My guess is that the sound quality is good, but not excellent. Better than computer speakers, better than the cheapest bundled units, nowhere near good enough for audiophiles. But that is only a guess based on what should be achievable.

With the limited functionality, it's just too much effort to order banana cables / connectors. I was hoping Google would announce it was now "unlocked" and they were supporting running more apps (the hardware & software are fully capable of running general Android apps with the Android SDK tools, but there's no easy way to interact with the apps). It looks like that's not going to happen now.

<comment><USER11> No offence but your 'guess' is not very useful.

e: really, is downvoting appropriate here? I can quite easily speculate that i don't _think_ the nexus Q sounds that great (and thats what i'd put my money on), but the electronics exist, and cheap enough, to allow it to potentially sound fantastic. I was hoping someone might have some first hand experience to get better than speculation.

</comment></comment></comment></comment></comment></comment><comment><USER12> This is something that awes me about Apple every time they do it.

At the press event:

"Great new product..."

"We think it's the best ever iYada, yada yada yada..."

"And you can order it today."

How the hell do they do that?

<comment><USER13> Tim Cook.

...and a world-class supply chain, which might best be summarized as: Tim Cook.

</comment></comment><comment><USER14> I wonder if this means they didn't get enough interest to bother making a larger run of the device. (I assume they're not giving away millions of dev units to the existing preorders.)

<comment><USER7> They sold out, so presumably they got more interest than they were expecting.

</comment></comment><comment><USER15> This really isn't surprising at all. They basically came out and said "We wanted to launch this at I/O, but it's not really done. We'll release it to the general public when it's done."

<comment><USER16> This isn't surprising? When in the history of humanity have you previously heard of a company abandoning pre-orders, giving out free devices to pre- orderers, and saying they'll relaunch it when they add more features because of customer feedback? Name one other example in history.

Isn't surprising at all? This is the most unexpected thing that could possibly happen. Maybe losing only to all shipped devices turning into flying pigs who shoots laser from their tails. Other than that, this is the most unexpected thing that could happen.

</comment></comment><comment><USER17> I'm actually wondering if it's entirely because of Ouya. I'm sure someone at Google saw that Kickstarter explode and took a look at the trickle of Q preorders.

</comment><comment><USER18> Is it just me or does the Nexus Q look like the Empire's probe droid from the Empire Strikes Back?

<comment><USER7> It looks nothing like the probe droid from Empire Strikes Back.

</comment></comment><comment><USER19> It's the right move.

I've used my Nexus Q for all of 20 minutes since I installed it. Without Netflix, without Hulu, without streaming from my desktop computer, it _simply isn't useful_. Yet it's the same cost as my much more capable Xbox 360 and three times the cost of an Apple TV or Airport Express (with its audio out port).

Getting a piece of pure consumer electronics into the market is a big move for Google. Pausing to re-tool the software harms their credibility far, far less than launching an obvious dud.

Shaking things up in the stagnant living room tech space can only be good news for consumers. So I want these guys to succeed. A nicely hackable piece of hardware is a fantastic counterpoint to Apple's polished but locked-down approach.

But no wine before its time.

<comment><USER20> I don't get why they don't just make a Nexus TV settop box that combines the full Google TV Android experience with the music sharing stuff the Q was supposed to do.

Makes more sense than the Q by itself and it would tie nicely into their Google Fiber tv service for those lucky enough to have it.

</comment></comment><comment><USER21> This is a bit embarrassing for Google. They have always released a product that have stayed in Beta long after it has launched. That probably works for a software product but not for hardware.

<comment><USER22> Why not? Kickstarter trends certainly seem to be showing otherwise

<comment><USER21> What credibility a promoter of a failed kickstarter would have if they launched a useless hardware product that over-promised and under-delived? Would Google want to be in their shoes? The free dev devices is just a PR stunt they stole to make them look a little less bad.

</comment></comment></comment><comment><USER23> I'm guessing it's related to one of the following: Google Fiber, the Kickstarter Android game consoles (and/or hackers getting games running on the Nexus Q "dev units"), the high availability of cheap media-pc-on-a-usb-stick Android devices.

(I presume they really are improving, didn't mean to imply they were running or anything).

<comment><USER24> Simpler: it's more limited than the two existing devices closest to it: the Sonos and Apple TV (in the context of Apple's ecosystem), and three times the price of the latter. A third-party API of some kind would go a long way towards making that price tag much easier to swallow.

<comment><USER25> A third party API? Isn't it a full fledged Android device?

<comment><USER24> Technically. Out of the box, all it's capable of doing is streaming music and video from Play and YouTube.

<comment><USER23> That's kind of my point. I think they saw what "hackers" did with it and saw the reactions and put two and two together. I think if they tossed the amp and opened it up as a Google TV like device, it would pair great with Fiber, Nexus 7 and would give them a Google TV device that is similar to their Nexus devices in terms of their level of control, etc.

<comment><USER26> Absolutely. It was hard to see why you'd get a Nexus Q instead of (or even with), for example, a Vizio Co-Star. If it were "Nexus TV" (with a lower price point), though, it becomes much more interesting.</comment></comment></comment></comment></comment></comment>


Hi speed T-shirt removal - <AUTHOR> http://www.youtube.com/watch?v=QVYiHI4cGlE

<comment><AUTHOR> Related:

<http://news.ycombinator.com/item?id=468063> : Tying a shoelace

<http://news.ycombinator.com/item?id=1112715> : Folding a T-shirt

</comment><comment><USER2> This isn't nearly as high-speed if your T-shirts aren't a size or two too big.

A better method is to reach behind your head and grab the collar where the tag is, and then pull up and forward. It has a tendency to fold your ears the wrong way, so take it easy.

</comment><comment><USER3> I go to Reddit for this kind of content...

<comment><AUTHOR> Hmm, interesting. I don't go to Reddit at all, so I don't really know what's there.

The reason I find this interesting is the topological analysis behind how this works, but other similar tricks (such as a shirt) don't. It's similar in nature to the way you can remove a vest (waistcoat to the British) without removing your jacket (or coat). The vest was never really "inside" the jacket at all.

So can this technique be used to remove a pullover? In theory if your first grab is at the opposite arm's elbow then you can retract that arm, but then it's difficult to get the power and travel to get the pullover over the shoulder.

This is then related to some of my programming work where I'm trying to find paths for robotic arms through a weird topological space. It's got about 11 dimensions, and it has "holes" because there are positions the arm won't go through.

These are the things I think about when I see this kind of trick. I guess you don't. Your reply makes me realise that I need to explain more when I make this sort of submission. To that end your comment has value to me. Thank you.</comment></comment>


Automatoon: A HTML5 animation service on GAE written in clojure - <AUTHOR> http://www.automatoon.com/

<comment><USER2> I'm a founder and the technical lead- feel free to ask me questions!

<comment><USER3> I'm one of the people behind Scratch <[http://scratch.mit.edu>](http://scratch.mit.edu>); and I can tell you that Automatoon is seriously cool. I can already see a lot of our users would like your tool. Kudos to you for empowering amateur users!

<comment><USER2> yeah, definitely kindrid spirts, app-wise! Thanks for the kind words on automatoon!

<comment><USER3> I am a bit confused about the pricing model. Why did you decide to charge per creation rather than per month? Who is the expected audience? Again, great tool.

<comment><USER2> Most of our audience is just people who play with it because its fun and tweet/email it to friends. This is how we hope to get publicity. Our secondary audience is web developers who need just a little bit of animation for a site and don't want to lose weeks becoming proficient in Flash/ToonBoom and paying for all the pricey authoring tools. We hope the second category can expense the premium cost for their projects to clients and won't mind paying a reasonable per-project price.

However, we're certainly open to other pricing models... We just figure since the "iPhone App" era people are more comfortable paying one-time fees instead of signing up to a renewing prescription.

<comment><USER3> I see, but the iPhone apps people often pay for tools they can use to create multiple artifacts. Maybe it'd be best to charge less per creation (like $1) and remove more features from the free one (e.g. animations could expire in 1 day and can't be downloaded).

<comment><USER2> The reason we don't want to "cripple" the free version is because we have low overhead and can afford to make low revenue at the outset- We'd rather focus on capturing a larger market (though it's always hard to say what the market really is with a new product)

</comment></comment></comment></comment></comment></comment></comment><comment><USER4> I miss the "made with alien technology" badge on this site. Otherwise awesome work, drcode.

Edit: it needs a way to make parts or joints fixed when bending, so I can't turn my train upside down when I rotate a wheel.

<comment><USER2> Agreed- That enhancement is coming in the next point release. (the one about the train wheels :-)

</comment></comment><comment><USER5> Very cool indeed.

One minor issue was that the animation seemed to be running even when I switched back to the Draw or Animate tabs, pegging the CPU.

Didn't see any reference to Clojure on the site, reference?

<comment><AUTHOR> Clojure mailing list post. [http://groups.google.com/group/compojure/browse_thread/threa...](http://groups.google.com/group/compojure/browse_thread/thread/f6c3f45da106616a?hl=en)

<comment><USER5> Indeed, how did I miss that. Thanks.

</comment></comment></comment><comment><USER6> I have an Apple 27 inch cinema display, and with my browser window more or less full screen the animations seem pretty broken (they were fine after I made my browser window smaller and refreshed) -> <http://imgur.com/zdrYk>

Also, if it helps: running Safari 5.0.5

</comment><comment><USER7> Title should say "animation service" or "animation editor", not "automation service".

</comment><comment><USER8> Too bad that the video is in Flash.

<comment><USER2> You're right, youtube supports HTML5 video, doesn't it? I'll have to switch over the player so that people don't think the references to flash in the source are from my animation :-)

</comment></comment><comment><USER9> very nice! compliments!</comment>


Ask HN: Who was the first CEO in history? - <AUTHOR> <comment><AUTHOR> Who was the first CEO in recorded history? Also, when did the title of "CEO" start to become generally recognized? Did early CEO's have the same legal rights / responsibilities that the CEO's of today do, or were they different in their early history?</comment>


Anonymous did not attack Stratfor - <AUTHOR> http://pastebin.com/8yrwyNkt <comment><USER2> Man it's a good thing I have this pastebin post to discredit my other pastebin post.

<comment><USER3> When one anonymous person tells the other anonymous person that they were not responsible for the anonymous person's action, you better believe it.

</comment></comment><comment><USER4> It'd be funny if people started doing completely mundane things under the banner of Anonymous.

For example, posting the receipt from a Coinstar machine.

THIS CHANGE RECEIPT IS THE WORK OF ANONYMOUS

TOTAL: $1.35

We are Anonymous

We do not forgive

We do not forget

Expect us

</comment><comment><USER5> Anyone can call themselves Anonmyous, and use its name for anything.

<comment><USER6> So far as I have observed, while the group is loosely-knit, and really is in concept "anyone" -- in terms of general perception by media and people there rather actually is some consensus of who is more Anonymous than the other.

And that's on the basis of who historically carried out most of the attacks, as were reported/confirmed on Twitter by Sabu ( <https://twitter.com/anonymouSabu> ) and AnonymousIRC ( <https://twitter.com/AnonymousIRC> ). Sabu was the de facto leader of LulzSec (the most technically able person in LulzSec -- the only member of LulzSec who's in fact still on the run) and he seems to be promoting the leak pretty persistently. AnonymousIRC did also take responsibility for this one.

<comment><USER7> So really, we should view the attacks as committed by LulzSec members under the banner of Anonymous, but not Anon "proper", correct?

</comment></comment></comment><comment><USER8> For those who don't know who "Sabu" is: _Sabu is an alleged leader of the hacking group LulzSec. He features prominently in the group's published IRC chats, and is a supporter of the "Free Topiary" campaign.

The Economist refers to Sabu as one of LulzSec's six core members and their "most expert" hacker._

<http://en.wikipedia.org/wiki/Sabu_(hacktivist)>

</comment><comment><USER9> Unfortunately for Anonymous, false-flag ops against it are entirely too easy to pull off. Perhaps if it had some way of identifying itself with a public key...

</comment><comment><USER10> Live by the sword, die by the sword. If you claim a global mandate, it means you don't get to disavow anyone's actions.

</comment><comment><USER11> Yep, saw that coming. Some people tried to build a group identity and reputation around the name "Anonymous", made it fashionable, and now every spook, wannabe-spook, and random vandal uses the name, regardless of whether they're associated with the original group or not.

<comment><USER12> What original group?

It's _highly_ likely that the first people who used the identity never did any of the things that you've heard of.

</comment></comment><comment><USER13> As I said, it's tough to be anonymous and not be spoofed at the same time. Perhaps this is not the real anonymous? Or maybe it is. This group is vulnerable to having their aims completely diluted for precisely this reason - that they are anonymous :P

The question is - does anyone at Anonymous actually know if the other people were not also part of Anonymous? Why do they have any more right to be called Anonymous than someone else? Oh the anonymousness...

</comment><comment><USER14> the plot thickens?! <http://pastebin.com/DVNWEQDf>

</comment><comment><USER15> pastebin is the new Press Agency. Let me know how it works out for you.

Maybe I should pastebin to the world I invented the cure for cancer, or discovered cold fusion.

</comment><comment><USER16> "Some people are more Anonymous than others"

</comment><comment><USER17> We won't have the final word on this matter until we hear from <http://news.ycombinator.com/user?id=anonymous>.

</comment><comment><USER18> Here's what Anonymous did do this holiday: <http://www.techmeme.com/111220/p19#a111220p19>

</comment><comment><USER19> I have updated my post with that press release: [http://mikecanex.wordpress.com/2011/12/24/anonymous- antisec-...](http://mikecanex.wordpress.com/2011/12/24/anonymous-antisec- takes-down-stratfor/)</comment>


Show HN: Rent This Look - <AUTHOR> https://chrome.google.com/webstore/developer/dashboard/g07401231725744705842 <comment><USER2> The link goes to your developer dashboard, not to the app/extension detail page [https://chrome.google.com/webstore/developer/dashboard/..](https://chrome.google.com/webstore/developer/dashboard/..).

<comment><AUTHOR> Thanks. Will remove and repost</comment></comment>


Michael Moore Presents: Planet of the Humans - <AUTHOR> https://www.youtube.com/watch?v=Zk11vI-7czE <comment><USER2> Fantastic film, points out how the environmental NGOs have been taken over by heavy industry as a "green" cash grap. This is a must see.

</comment><comment><AUTHOR> probably going to get flagged.

wish there was a away to assess the impact individual actions/choices have on the planet.

When you think about the cobalt,aluminum, co2, all the various minerals which how do you know the true impact.

How would you even move forward?

What happens when the pyramid scheme runs out?</comment>


Tom Lehrer's last (math) class (2001) - <AUTHOR> http://www.buckswoodside.com/stories/tomlehrer.shtml

<comment><USER2> _His sudden withdrawal from a successful musical comedy career was a mystery to many._

Well, the official explanation was that Henry Kissinger's winning the Nobel Peace Prize in 1973 made musical comedy obsolete:

      "It was at that moment that satire died," says Lehrer.
      "There was nothing more to say after that."

[http://www.bbc.co.uk/bbcfour/documentaries/features/feature_...](http://www.bbc.co.uk/bbcfour/documentaries/features/feature_kissinger_profile.shtml)</comment>