"We have decided not to integrate the Dart VM into Chrome" - <AUTHOR> http://news.dartlang.org/2015/03/dart-for-entire-web.html <comment><USER2> I think Dart is sort of like CoffeeScript in that it was an experiment and influenced a lot of JavaScript standards people.

A lot of the features of CoffeeScript are being integrated into JS with ES6 and ES7. The same is actually happening to the unique features of Dart such as typing and SIMD and better modules.

Typing is so cool: [http://wiki.ecmascript.org/doku.php?id=harmony:typed_objects](http://wiki.ecmascript.org/doku.php?id=harmony:typed_objects)

SIMD is amazing: [https://github.com/johnmccutchan/ecmascript_simd](https://github.com/johnmccutchan/ecmascript_simd)

So, thank you Dart for showing us the way!

My only worry is that the innovators behind Dart are going to be stuck on the Dart project while JavaScript gains their features and even more momentum. I would suggest that they let Dart die and not be stuck with it for years after it has stopped being relevant -- that would be a waste of their talents as they did really see what the future would be.

<comment><USER3> Good for lulz, but this is really uninformed, if not made up from whole cloth.

The influence of Dart on ES6 and 7 apart from SIMD (John McCutchan shout-out, John did the Dart work and then worked on [https://github.com/johnmccutchan/ecmascript_simd;](https://github.com/johnmccutchan/ecmascript_simd;) I had some small helpful role to do with the project involving Mozilla and Intel, too) and the courage and validation -- not the idea, which pre-dates Dart -- of giving the for (let...) loop a binding per iteration in ES6 as in Dart, there has been no influence or help from Dart.

Modules in ES6 have nothing to do with Dart, and the work started in 2010, well before Dart ("Dash") leaked. Classes too pre-date Dart, in some ways they go back to JS2/ES4 of the 1999-2003 era, and ES4 of the 2006-8 era.

CoffeeScript owes a lot to Ruby and Python, of course, and I did design- champion fat arrow functions into ES6, inspired in part by CoffeeScript. ES6's for-of loop is responding to the same gravity-well as CoffeeScript's for-of, but it differs in substantial aspects. And so on.

Languages influence one another -- news at 11 -- but Dart did very little intentional uplift work for JS. SIMD is the big and very good exception to this norm. Better late than never, I say. Now is a good time to help get value objects including bignums into ES7.

[https://code.google.com/p/dart/issues/detail?id=1533](https://code.google.com/p/dart/issues/detail?id=1533)

<comment><USER2> > Good for lulz, but this is really uninformed, if not made up from whole > cloth.

To be clear, I didn't say that Dart or CoffeeScript associated people actively meant to be a guide for JavaScript (I'm pretty sure that having CoffeeScript and Dart effectively subsumed into JavaScript wasn't the goal), but the fact that these languages existed and has neat features did served as a guide for evolution of JavaScript.

Thus I am making the case of much weaker case of languages influencing each other, rather than a stronger case. And there is massive influence going on here, whether intentional or not -- the speed at which features of Dart and CoffeeScript being pulled into JS is very rapid.

I think your comments actually bare this out -- Dart people helping with SIMD, and you being inspired by CoffeeScript.

<comment><USER3> You wrote "influenced a lot of JavaScript standards people." Please name two.

You wrote "The same is actually happening to the unique features of Dart such as typing and SIMD and better modules." My reply: no, yes (thanks to bottom-up work by John McCutchan, not "Dart people" plural -- there you go again), and nope. Any types for ES7/2016 or beyond are likely to be based on TypeScript, Flow, and V8's SoundScript experiment, not on Dart. Modules in ES6 have no relation to Dart modules/packages.

Really, "exaggeration" doesn't being to capture the false overreach of your first comment, and walking back from it to vague "everything's influencing JS" isn't helping.

Apart from SIMD, Google by investing in Dart at cost to JS (recreated V8 team; replace-not-embrace strategy for ~5 years) missed out on uplifting ES6 to have bignums and other things that would materially aid correctness and performance of dart2js, which is now the only way forward for Dart in browsers.

I hate playing Cassandra, but the good news is that Troy didn't fall: JS prevailed, at some unnecessary cost, and as predicted. See [https://news.ycombinator.com/item?id=2982949](https://news.ycombinator.com/item?id=2982949) et seq.

<comment><USER2> Weird, I really didn't expect this conversation...

(1) I am referring to the high level features of Dart and CoffeeScript, not the specific implementation of features. Specifically I am referring to the clear reduction in CoffeeScript/Dart positive differentiators over the past few years, mostly because future JavaScript (es6/es7) is moving aggressively to close the gap and then go beyond Dart/CoffeeScript. This is a great thing.

(2) I am a complete outsider to the standardization process - I actually know no one involved in the process. So why did I make the inference then so confidently? I've been doing software product development in competitive industries for a couple decades now. I know how it works. People are always influenced by competitors to push ahead faster and smarter, especially competitors that try to jump ahead.

This comment of mine from two years ago sums up my feelings of Dart and its influence on JavaScript: [https://news.ycombinator.com/item?id=5728786](https://news.ycombinator.com/item?id=5728786)

<comment><USER4> I think what Brendan is trying to say is that Dart simply had no influence on ES6 and ES7 except for the idea of SIMD. That means no specific implementations, and no high level ideas.

Any resemblance you might find between Dart and ES6/ES7 would be because of Darts resemblance to either CoffeeScript or TypeScript, languages that did in fact influence ES6 and ES7.

My personal view: I don't think Dart is the sort of language Javascript wants to be like at all. Also, totally off topic regarding your comment of 2 years ago: Java has _never_ kept up with C# has always been years behind and still lacks many features that C# has had for ages. The only reason people still use Java is that C# had no enterprise backing on non-Microsoft platforms and its main implementation was proprietary. These things are changing, and I think that will be the end (finally) of Java.

<comment><USER5> "These things are changing,"

There is still no end to end story for dev on Linux/Mac with _MS backed_ tools (Mono is not .NET).

"and I think that will be the end (finally) of Java."

just day after Google will take C# as main dev lang for Android...

IMHO It's more likely that Dart will become new Android's main lang.

<comment><USER6> Actually, MS recently open-sourced the .NET framework (".NET Core") and announced they will be adding support for Linux and Mac OS X: [https://github.com/dotnet/corefx](https://github.com/dotnet/corefx)

...seriously. April the first is still 5 days away.

<comment><USER5> "Actually, MS recently open-sourced the .NET framework (".NET Core")"

I know that. My point is you go to dartlang.org and get the IDE with SDK with single download for Mac, Linux or Windows and use it now.

With .NET you can't do the same now on non-Windows (you can use Mono but it's not MS project) Dart is designed to do webdev and .NET isn't

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER7> A bit unrelated, but yesterday, after beeing fed up trying to fix unexpected behaviors of a js code base, i decided to rename my file .ts and compile it with typescript. Without doing anything, the compiler found type mistakes and variable declaration errors.

And now today i'm coding in typescript adding type informations wherever i think it could be useful, and looking at typescript documentation to see in which way i could refactor my code to make it safer.

That's probably the fastest migration process you could imagine. Maybe dart would be more popular if they chose that route.

<comment><USER8> Maybe you should use JSHint. You can configure your editor to run it automatically. It is a bit unfair to compare TypeScript with its compiler against raw JavaScript, when the JavaScript ecosystem has tooling, too. I am not argueing, that TypeScript is not the safer or even better choice, I am just saying, that a properly set up JavaScript environment could have saved you the hassle as well.

</comment></comment><comment><USER9> Good! This will quiet the noise, so that everyone can focus on advancing Dart and its ecosystem. Let's be honest: getting the Dart VM into non-Google browsers was always destined to be far, far away if not impossible, regardless of the team's excellent work or Dart's merits. Getting it into Chrome is just a decision, but one fraught with perils, namely that our community has an arguably healthy aversion to go-it-alone on the web, and untamed fear amongst the hoards that Google will shove it down our throats does not bode well for Dart.

And is it really worth it? As someone all in w/ Dart (I chose to build my product with it), dart2js serves me well, and the resulting JS is said to be more performant than raw JS. JS itself is improving (see ECMAScript 6 and TypeScript), which means Chrome's compiled JS will improve with it. Of course, having the Dart VM in a version of Chromium they call Dartium has been important, as it eliminates the need to compile until I care to test on other browsers. But there's exciting work ongoing on incremental compilation, so that in theory you'd just see your results in any old browser ([http://goo.gl/EHJcK9](http://goo.gl/EHJcK9)) a la interactive programming. Bottom line: the Dart development cycle is already great and always getting better, no VM in Chrome needed.

As well, the Dart team can focus on more important priorities: the incremental compilation I mentioned, better JS interop (it's not bad now), improvements like async/await (coming in 1.9), even better concurrency primitives (see Fletch), Dart for native apps (again see Fletch) and more.

And remember, this decision can change later when the climate changes or other factors are in play. But for now, it makes a whole lot of sense to abandon any push, or notion thereof, to get the Dart VM into Chrome.

IMHO, Dart (I mean the language, libraries and tools combined) is hugely underappreciated. Folks will continue to focus on improving it and building awesome apps with it, and this news should quiet some of the noise.

<comment><USER10> > the resulting JS is said to be more performant than raw JS.

This claim always bugged me. The output of dart2js _is_ raw JS. Same with CoffeeScript (which makes a similar claim). So these claims are totally reliant on parameters that haven't been defined, ie. what constitutes "equivalent" handwritten code?

<comment><USER11> it is up to every test to specify. I think they did explain what kind of hand written js they compared to and if I recall correctly the tests the dart team mentions is compared do js written by experienced js developers to solve the exact same problem. Of course there is a possibility that the hand written code could be further optimized but the comparison is still interesting.

<comment><USER12> What am I missing that makes this only a "possibility" rather than a certainty? For any Dart program found to be faster than a JS program, the JS program could be made equally fast by being equivalent to the Dart output, right?

<comment><USER13> By going through the dart compiler first they can do optimizations that you wouldn't do by hand. Google runs all their js through their Closure compiler for this (JS -> JS compiler) with a ton of optimizations turned on (constant folding, method inlining, deadcode elimination, replacing of multiline conditionals with ternary operator, etc, some of which I believe are in the open source version and possibly some proprietary).

In that case, they literally are writing JS and using a compiler to get JS that is faster than any normal handwritten JS would be. You could write your JS that way but it would be completely unreadable and unmaintainable.

<comment><USER12> Thank you for the clarification. I think we are saying the same thing.

In principle, it's always a certainty that JS can be written as performant as Dart, never just a possibility. The possibility part only comes in with respect how optimally the JS code is written.

The interesting part here is I think is how often does this happen? How often can significant improvements be made that would be impractical, or even unlikely for a developer to match?

<comment><USER13> I suspect that depends on your definition of significant. I suspect any legible code can always get a few percent speedup by doing things that would make it unreadable and unmaintainable.

</comment></comment></comment></comment></comment></comment></comment><comment><USER14> Here's what I don't understand: why is there any focus on alternative VMs for _specific_ languages? Surely all this effort should be going into a VM for some kind of highish-level intermediate representation that's trivial to generate from any source language? That way no language has a monopoly and there can be peace on Earth.

It seems odd to be arguing for generic computation abilities in the place where most "computation" is done nowadays. Can you imagine what could be achieved if the browser vendors and standards bodies put business considerations aside and spent a good couple of years designing such a thing? We could have an almost endless list of goodies: threads, code isolation, multiple number types...

Just like Intel, AMD, and the rest _in effect_ control (much to Alan Kay's despair) hardware architectures, the vendors & standards bodies are a sort-of natural cartel controlling upwards of, what, 50%? 80%? the code end users actually interact with. The quality of the decisions they make has deep repercussions beyond the tech community and it's simply not possible for any of us to know what they all are. Even if they were bona-fide saints, this would still be too much power to tie up in such a small group.

<comment><USER15> > Here's what I don't understand: why is there any focus on alternative VMs > for specific languages? Surely all this effort should be going into a VM for > some kind of highish-level intermediate representation that's trivial to > generate from any source language? That way no language has a monopoly and > there can be peace on Earth.

I've always wondered: why not LLVM? It's low-level, so the speed is there, and I think should be trivial to compile as it arrives at the browser. Tons of stuff already compiles to it. You can compile it to JS. Of course, you'd need to make sure it doesn't make a syscall that's not allowed (and I'm not sure how hard that is), and that it has bindings into JS APIs and/or the DOM, but aside from that…

I'm sure some people will suggest things like the JVM or the .Net CLR, but I feel like those have certain qualities (e.g., GC) that don't appeal to all languages.

<comment><USER16> > I've always wondered: why not LLVM?

Because LLVM is not hardware independent.

<comment><USER17> Also, LLVM IR has undefined behavior and was not designed as a network format (it's large).

LLVM is simply not a good starting point for the problem here, nice as LLVM is for what it does do well.

</comment></comment></comment></comment><comment><USER18> This isn't surprising. Dartium has always been a nifty project, but you'll never get all the major players to agree on a radical change like this. It was always destined to be a "second VM" like VBScript.

asm.js illustrated the right political approach -- build something that degrades nicely now, then get the vendors to optimize it.

<comment><USER19> So what if all the major players don't agree to it? Someone has to take the initiative.

<comment><USER20> Not even Google took the initiative. Why didn't Google integrate the Dart VM in Chrome instead of Dartium?

<comment><USER19> I'm saying that Google should have integrated the Dart VM into Chrome even if it won't be supported by the other browser makers.

</comment></comment></comment></comment><comment><USER21> I believe a lot of Dart criticism comes from people who haven't actually used it. I personally find it almost always more enjoyable than JavaScript. I've also used other languages that transpile to JS but there some features that I find superior in Dart:

1\. Tree shaking. The compiler can detect unused code and remove them automatically from the JS output, resulting in smaller files. (Yes I know that Hello World is a bit big, but real projects are not hello world)

2\. A really nice IDE with autocomplete, error highlighting, code formating, refactoring, debugger, profiler. It really makes a difference.

3\. A VM that's actually faster than JavaScript useful for writing server side applications.

4\. A nice an well integrated standard library.

</comment><comment><USER22> They're putting a positive spin on it, but it seems Google decided not to focus on Dart, considering all the other javascript's they're invested in.

<comment><USER23> We try hard to avoid spin.

From the article:

Google Ads, one of Dart's biggest customers, is committed to Dart and supports this new strategy. Scott Silver, VP of Engineering for Ads, says, "We are committed to building our next-generation web apps with Dart, and a renewed focus on generating optimal JavaScript helps us deliver great apps to everyone with a modern browser. Dart has significantly improved our engineers' productivity and our ability to quickly launch and iterate. We currently have one million lines of Dart code and the number is growing fast." Many other teams inside of Google, such as Google Fiber, Google Express, and Google's internal sales team, use Dart for business-critical apps.

<comment><USER24> one million lines of Dart code? All this work for displaying ads on the web. Something is not right with this world...

<comment><USER25> "Ads" is a short word but it covers a lot of complexity. There different formats for ads, different kinds of ad customers, different places where ads can be displayed, different ways of buying and selling ads, and then you have localization to different countries, etc. There are complex UI's that automatically reconfigure themselves based on the customer's needs.

A million lines of code is relatively small when you're trying to be all things to all ads customers in the world.

Still, could it be simpler? I hope so.

<comment><USER26> I read Google Ads as the business unit, not the "displaying ads". I don't really know how anyone would read "Google Ads" and "million lines+" and think wow, all that for banner ads?

Alas, I'm writing this and reading the above..

</comment></comment></comment></comment></comment><comment><USER19> I'm disappointed. Where is the innovation? We'll be stuck with JS forever.

<comment><USER27> Just today I was reminded of how terrible JS is:

           new Date(2015, 1, 1)

Guess what date that object represents (hint: It isn't January 1st 2015).

<comment><USER28> Is it that you don't like zero-indexing, or that you don't like it together in the same function with one-indexing? b^)

Actually I think it's pretty terrible how few languages have literal expressions for dates. Once you have to type "new Date(", it's not _much_ more annoying to have to remember that January is zero.

<comment><USER29> Apropos, you can easily make your own date syntax in Dart:

      class Month {
        static const List<String> names = const <String>[
          "JAN", "FEB", "MAR", "APR", "MAY", "JUN",
          "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"
        ];
        final int month;
        const Month(this.month);
        MonthDay operator -(int day) => new MonthDay(month, day);
        String toString() => names[month - 1];
      }

      class MonthDay {
        final int month;
        final int day;
        MonthDay(this.month, this.day);
        DateTime operator -(int year) => new DateTime(year, month, day);
        String toString() => "${Month.names[month - 1]}-${"$day".padLeft(2, "0")}";
      }

      const Month JAN = const Month(1);
      const Month FEB = const Month(2);
      const Month MAR = const Month(3);
      const Month APR = const Month(4);
      const Month MAY = const Month(5);
      const Month JUN = const Month(6);
      const Month JUL = const Month(7);
      const Month AUG = const Month(8);
      const Month SEP = const Month(9);
      const Month OCT = const Month(10);
      const Month NOV = const Month(11);
      const Month DEC = const Month(12);

      main() {
        print(MAR-25-2015);
      }

<comment><USER28> Kudos! Truly, Dart has redeeming qualities! Incidentally, this code is the best argument I've seen for "American-style" date writing, with the month first. Or would it be as easy in Dart to override integers with a "DayMonth" operator?

</comment></comment></comment></comment></comment><comment><USER30> Very pleased to hear this. I'd much rather have resources funneled into making v8 and JavaScript in general more performant. It already has so much momentum behind it.

</comment><comment><USER31> The problem is still that even with Dart we have so little choice of languages. What is needed is a way to implement _any_ language of choice on the web, probably through a sandboxed low-level virtual machine that supports threading, and which has no garbage collector (so languages can implement their own if desired).

<comment><USER32> > which has no garbage collector (so languages can implement their own if > desired).

The problems with that are:

1\. It means every web app basically has to push its own GC down the wire every time the user hits myawesomeapp.com. That's a lot of overhead.

2\. You'd have to define what the memory model between the code running in the VM and the browser's native stuff is. What does it mean for the code to have a reference to a DOM element? How does the browser hold a reference to an event handler in the VM?

3\. The set of people who can implement an efficient GC is very very small. Forcing each source language to do that themselves wastes a lot of effort. (For example, look at how primitive Python and Ruby's GCs were for most of their histories.)

Now a low-level VM _with_ GC. That's something I'd be excited about.

<comment><USER31> Interesting points.

1\. Caching, content-distribution-networks, and possibly shared-libraries could solve or at least ameliorate this.

2\. This is relatively easy. The sandboxed code could "open" handles by calling into an API, and the code could "close" them when no longer needed.

3\. In many cases, the GC is tied intimately to the semantics of the language, so enforcing a style of GC could be too limiting in terms of performance. Instead, it could be better to implement a GC'ed VM on top of the low-level one.

The biggest problem is to get something like this turned into a standard, and accepted in all browsers. Perhaps a viable route is to write the standard of this low-level virtual machine for the web (LLVM/W) on top of ASM.js (and implement threading by emulation), and then wait for general acceptance, and for browser vendors to implement LLVM/W directly.

<comment><USER33> > 2\. This is relatively easy. The sandboxed code could "open" handles by > calling into an API, and the code could "close" them when no longer needed.

That's easy to _specify_ , but is it good for the user? You've just opened the door to memory leaks on _my_ machine in poorly-written "javascript".

<comment><USER31> Contrary to popular belief, it is still possible (and in fact very easy) to have memory leaks with a GC. Consider for example this situation: fill a list with a large number of items, and hold on to that list, without ever accessing the items again. In principle, the contents of the list is "unreachable" (since the code never re-visits the items), but the GC isn't aware of this (too difficult to prove) and conservatively assumes that the reference to the list means that the items in it can still be accessed.

So, even in Javascript, it is very easy to have memory leaks.

The main way to deal with this, is to simply set a limit on the amount of memory a browser-tab can use. This limit can be dynamic, and depend on what other tabs (or processes) are doing, but it doesn't need to be. This is also the current way browsers deal with this problem.

</comment></comment></comment></comment></comment><comment><USER34> This is a great move by the Dart team. There is now a single story for the web development, their efforts can be more focused, and accusations regarding trying to break the web will stop. Win-win-win.

After developing with Dart for quite a while, I can just not see myself going back to JavaScript, the platform is just that much better.

</comment><comment><USER35> Lets instead try getting the Qt QML engine integrated into browsers. I'd love to write webapps in QML instead of mutant document markup =P.

<comment><USER36> Never let go of your dreams! If you start a petition I'll be the first to sign it.

</comment></comment><comment><USER37> Good. We don't need another VBScript. Whatever Dart's technical advantages, the standard for browser scripting is Ecmascript. Use it as a compilation target. Don't go breaking the Internet. We don't need another Internet Explorer.

</comment><comment><USER38> So I'm pretty disappointed now. I didn't hear the reasons why they ditched Dart? Compilation to ES6/7 cannot be the technical reason, as there is a huge run-time and memory overhead by using only ES6/7 compared to Dart. Looks more like a marketing decision, Dart not have gained enough momentum or such.

<comment><USER39> > I didn't hear the reasons why they ditched Dart?

They didn't.

They ditched plans to integrate DartVM into Chrome from browser-side Dart in favor of continuing to use dart2js for browser-side dart.

</comment></comment><comment><USER40> I'm really excited about this new direction.

I also hope some great Mozillians will take a second look at Dart now that the main objection (adding another VM to Chrome) is out of the way.

</comment><comment><USER41> Let Dart stay and transpile. Let them continue to make Dart better. Even if it exists only to transpile into JS like CoffeeScript and TypeScript and not run natively in the browser -- as long as they keep innovating with the language, the ideas can inspire the next version of JS with ES8 and beyond.

Evolution by inspiration.

</comment><comment><USER42> Another twenty years of JavaScript. Joy.

<comment><USER43> Would you really have been happy with a monoculture based around a very similar but slightly different and less mature language if it had gone the other way?

<comment><USER44> Why would there be a monoculture? JS would still exist for a good while after that, and if anything, it would've likely inspired more competition to flourish in the browser space.

Secondly, while the language may appear similar, a large number of its strengths come from actually breaking away from the JS ecosystem, and daring to take the 'less mature' approach. Without all that legacy, it turned out with significantly cleaner libraries and APIs, more intuitive semantics, and and an ecosystem+workflow is worlds apart from the JS style. The difference a few small changes can make in simplicity to lower cognitive overhead is astounding. Building a large, complex app in dart actually feels totally manageable! Yet, regardless of how many new JS tools and libraries come out, it always still feels completely overwhelming. Thankfully they decided to keep this part of dart in tact.

</comment></comment></comment><comment><USER45> It seems logical since no other browser is going to support it. Although it is kind of a shame, as it is clearly an improvement over Javascript, the writing has been on the wall for a while.

Considering the lack of other browsers jumping on board, I think it is better that Google gradually phase out Dart and let everyone concentrate on making Javascript better (both by improving the language itself, and the libraries). I predict they will stop new development entirely within a few years.

</comment><comment><USER46> This has been pretty much inevitable from the beginning.

<comment><USER47> This wasn't inevitable at all; you're not giving Google enough credit. They could easily have decided to force Dart VM into Chrome and that would have been bad for everyone.

<comment><USER42> Like it was with SPDY?

<comment><USER42> Apparently that was a touch too glib.

But where was the "bad for everyone" when Google rolled SPDY into Chrome and its own services, and showed not only tangible improvements to HTTP/1.1 but also an actual conviction in its efforts? It took a few years, but there was a good amount of industry momentum behind SPDY even before its ordainment as HTTP/2 became certain.

All Dart ever got was a Chromium fork; how was it ever meant to make inroads without Google putting any wood behind it?

<comment><USER47> I like SPDY and I don't like Dart VM; I think that reflects the broader consensus as well. Dart VM just isn't better enough to justify switching the entire web to it. SPDY is.

Personally I wouldn't support _any_ proposal for a new web VM unless it could achieve no-compromise full-speed execution of transpiled C/C++ code in the web sandbox. That's the #1 most important feature and #2 isn't even close.

</comment></comment></comment></comment></comment><comment><USER19> JavaScript as a compilation target should only be a temporary measure.

<comment><USER48> Probably not. While it wasn't intended to be so, JavaScript has become the lingua franca of web browsers and is therefore heading towards a future of being a compilation target. If your program can't compile to JavaScript, it doesn't really run on browsers (in much the same sense as "If your program can't be compiled to x86 assembly, it doesn't really run on computers").

[https://www.destroyallsoftware.com/talks/the-birth-and- death...](https://www.destroyallsoftware.com/talks/the-birth-and-death-of- javascript)

<comment><USER49> > heading towards a future of being a compilation target

Having to trace/debug compiled javascript from another language is a horrific future. In your analogy, C programmers would have to debug assembly.

I agree it's the most probable future, but let no one call it innovation when it's simply resignation from lack of options.

<comment><USER50> There's no reason Javascript can't get better at being the assembly language of the web, including making debugging of other languages easier.

</comment></comment></comment></comment><comment><USER51> This blog post is really weirdly written, with press-release-style blurbs from other people. I can't tell what genre it's supposed to be: a report of a technical decision by language maintainers? A press release? An advertorial?

<comment><USER52> Well, it's a big decision. The post actually includes a quote from the company I work for (DGLogik). It's kinda a press release in a way.

</comment></comment><comment><USER53> [http://techcrunch.com/2015/03/05/microsoft-and-google- collab...](http://techcrunch.com/2015/03/05/microsoft-and-google-collaborate- on-typescript-hell-has-not-frozen-over-yet/)

<comment><USER23> This is unrelated.

Angular2 has been TypeScript from the beginning to support both JS and Dart development.

Angular2 is a better story for both Dart and JS developers.

More info: [http://work.j832.com/2015/03/angulartsjsatdartwtf.html](http://work.j832.com/2015/03/angulartsjsatdartwtf.html)

The latest preview release of Angular2 Dart was yesterday - [https://pub.dartlang.org/packages/angular2#versions](https://pub.dartlang.org/packages/angular2#versions)

</comment></comment><comment><USER54> Now dart won't be in browsers. Soundscript already is another way to improve Javascript from Google. If I choose one I miss the other. Is there any way to integrate both of them, maybe generate soundscript out of dart.

dart2js or soundscript - which one is the preferred way. If sound script, dart will fall before reaching the goal of structured webapp. Dart on server doesn't excite me as much as single language for end to end development. There is a vaccum created due to soundscript in web development in Dart, these questions should be answered.

</comment><comment><USER55> I read that post but I'm lost in the logic reasoning part....Dart is that great but then it's not included in Chrome, what am I missing?

<comment><USER52> @kevmoo has said he will be posting the reason for the decision on his blog [http://work.j832.com/](http://work.j832.com/) later.

</comment></comment><comment><USER56> I hope Google developers who were working on the Dart VM will now be able to move to V8 and accelerate its ES6 support.

<comment><USER57> The VM development will continue for use on servers, embedded, and mobile, they just have no plans to integrate it into Chromium.

<comment><USER20> The Dart blog post was unclear about the future of the Dart VM. I don't see why Google will continue to maintain the VM. Does Google use the Dart VM on servers or mobile? Dart would be nice a nice replacement for Java on Android.

<comment><USER58> Dart VM is an essential part of the Dart ecosystem.

Dart tools: pub's (package manager) client, analyzer, dart2js compiler, etc are all written in Dart.

We have a good story for server side developement and we are not looking to abandon it but rather we are looking to expand it, e.g. we just released a package to facilitate creation of REST APIs[1]. Pub's server side is being rewritten into Dart as we speak[2]

Among cool internal users of Dart VM I could mention Google Fiber - they'll share their experience during the upcoming Dart Summit[3].

[1] [http://news.dartlang.org/2015/03/create-your-own-rest-api- wi...](http://news.dartlang.org/2015/03/create-your-own-rest-api-with- dart.html)

[2] [https://github.com/dart-lang/pub-dartlang-dart](https://github.com/dart- lang/pub-dartlang-dart)

[3] [https://www.dartlang.org/events/2015/summit/sessions/google-...](https://www.dartlang.org/events/2015/summit/sessions/google- fiber-and-dart/)

<comment><USER40> Now that the Dart VM story is less controversial I hope more people will take a fresh look at the VM (in non-browser settings) and appreciate its merits.

</comment></comment></comment></comment></comment><comment><USER59> I wonder if the dart team will support a debugging-to-js experience. With that I mean 1) write dart 2) refresh browser 3) debug javascript. This requires partial transpilation from dart to js with updated sourcemaps. This would enable debugging in for example Spartan or Firefox.

<comment><USER32> [https://github.com/dart-lang/dev_compiler](https://github.com/dart- lang/dev_compiler)

<comment><USER59> Awesome. Looking to the dev activity, I must conclude this project is red-hot in development.

<comment><USER32> Yes, this is the full-time focus of a number of people on the team right now. We really really really want a fast, pleasant iteration loop when compiling to JS.

<comment><USER60> Any plans to collaborate with sdbg [1] for the Eclipse/debugging/source mapping side of the developer experience?

(AFAIK sdbg is just one guy who regularly copy/pastes code out of the Dart IDE + does some polish for GWT projects. Would be great to have a more formula/official collaboration, since it seems like a lot of "debugging language X via source maps with browser Y" could be shared infrastructure.)

[1]: [https://github.com/sdbg/sdbg](https://github.com/sdbg/sdbg)

</comment></comment></comment></comment></comment><comment><USER61> Does this say something about the javascript engines in modern browsers that a dart VM couldn't improve on the performance of them even with its stronger typing? There isn't a big enough advantage to integrate a dart native over translated to js.

</comment><comment><USER62> The Angular cross-compiling insanity and eventual switch to TypeScript is the likely catalyst. Still, I hope to see a technical discussion of why the VM had to go.

Looking forward to better interop with JS, but can't help feeling a bit sad.

<comment><USER63> Angular had nothing to do with it. Them switching to TypeScript from AtScript was just de-fragmenting the JS-superset language space, which is a good thing. Hopefully TypeScript goes away when types arrive in JS.

<comment><USER64> Js will never have types.Ever.It could have had type back in 2007, Microsoft creator of typescript said NO.

</comment></comment></comment><comment><USER65> I wish for a browser with Scheme as the underlying language in which all is expressed. A Racket browser. No html/script/css distinction. Just s-expressions. A page is just code and it is run in a sandbox.

</comment><comment><USER66> As a Dart user, I already knew this in my heart.

</comment><comment><USER67> this announcement seems to be like a sign of losing attention from the management team. So maybe some time later, it will be another R.I.P product from google.

</comment><comment><USER68> Good. News.

</comment><comment><USER69> Dart? Who's Dart?

The Web couldn't care less.

</comment><comment><USER70> Good boy google, good boy! ...now sit... lol.

Besides, I think people will really come to like ECMA 6, or whatever it's called this week? I've been using it and love it.

<comment><USER63> I write in ES6 every day now, after using Dart for a few years. ES6 is a great improvement on ES5, but trust me, it's no Dart.</comment></comment>


DeepStack: Expert-Level Artificial Intelligence In Heads-Up No-Limit Poker - <AUTHOR> http://fermatslibrary.com/s/deepstack-expert-level-artificial-intelligence-in-heads-up-no-limit-poker#email-newsletter <comment><USER2> How can one create visualisations like Figure 3 (assuming it's latex)[0]? I have to write my Bachelor thesis soon and need to improve my latex-skills. I only know to to use the math-mode and write text.

[0] the paper: [https://arxiv.org/pdf/1701.01724.pdf](https://arxiv.org/pdf/1701.01724.pdf)

<comment><USER3> Hi - I'm one of the authors on this paper. We had professional designers do the figures for this paper; Fig3 in particular was far better than what we could do ourselves.

<comment><USER4> Just working my way through the pseudocode to try and gain a little insight. I think there may be a small typo. Line 29 VALUE should be VALUES?

</comment></comment></comment><comment><USER5> With regards to Texas Hold'em, Conterfactual Regret Optimisation [1][2] was already able to beat humans in limit games, while it seems that this new approach is able to do the same in no-limit games. My naive understanding is that no-limit games are harder to crack because there are more possible outcomes, thus the available information (poker is an "imperfect information" game) becomes "even more imperfect".

[1] [https://arxiv.org/abs/1407.5042](https://arxiv.org/abs/1407.5042) (yes, the author is the same Oskari Tammelin who created Jeskola Buzz, a popular piece of music software).

[2] [http://www.nature.com/news/game-theorists-crack- poker-1.1668...](http://www.nature.com/news/game-theorists-crack- poker-1.16683)

</comment><comment><USER6> One thing I haven't seem come up in discussions or media coverage about this is that the heads up game is entirely a different thing than playing with 5 other players.

<comment><USER7> For what is worth, heads-up is a very popular game, and from reading the paper, the approach should more or less be applicable to 6max or full ring, except it will be way more computationally expensive (but not unfeasibly so like before).

<comment><USER8> In my understanding the approach is based on game theoretic principles that do not extend naturally to more than two players. If that's correct then it's not only a computational issue. See [http://www.nature.com/news/how-rival-bots- battled-their-way-...](http://www.nature.com/news/how-rival-bots-battled- their-way-to-poker-supremacy-1.21580)

<comment><USER9> Yip, exactly this. The CFR algorithm they speak of is based on finding a nash equilibrium for each strategy-pair in the game tree. Something that I think can only be computed for 2 players, and no more.

<comment><USER7> Surely you can adapt it to compute an approximation of a mixed Nash equilibria. My game theory isnt at a high level, but there are similar computations you can perform, and when I used to play poker, you'd have common calculations based on it for more than 2 players when you are playing with a limited stack. I dont see how that wouldnt be adaptable (abeit more computationally expensive) for more players, but I might be missing something.

<comment><USER8> I'm not sure Nash equilibrium exists for more than two players in this game.

<comment><USER3> Nash equilibria are still guaranteed to exist. But it's only the 2p zero-sum perfect recall case where an equilibrium has useful properties, like being robust against any opponent strategy, including a worst-case opponent who knows your strategy. In a multiplayer (> 2 players) game, opponents can collude against you and playing your part of a Nash gives no useful guarantees on performance. Even if they aren't colluding, in poker games, the presence of a bad player just before you in turn order can hurt your EV worse than their own. And even if all players independently compute their own Nash equilibria (there can be many) and use the piece for their position, then that combination of strategies may not _itself_ be a Nash equilibria.

<comment><USER8> Thanks for the explanation. I will also appreciate a reference to a good survey paper if you are in the mood :)

<comment><USER3> I don't know of a survey paper on CFR for multiplayer, but it's been showing up in conference papers and theses.

Here's a link to a shorter conference paper where CFR _does_ converge to a Nash, in 3p Kuhn poker. It describes a family of equilibria, where one player (the second to act, IIRC) has a parameter that can't affect their own EV (...or else it wouldn't be a Nash), but _does_ determine how much the other two players win/lose from each other. This illustrates the problem in equilibria for multiplayer games: if you're players 1 or 3, then even if you are playing a Nash, and everyone else does too (albeit different equilibria), then you can still lose. [https://webdocs.cs.ualberta.ca/~games/poker/publications/AAM...](https://webdocs.cs.ualberta.ca/~games/poker/publications/AAMAS13-3pkuhn.pdf)

For a longer read, the best I know of is probably Rich Gibson's PhD thesis. He focussed on CFR for multiplayer games.

[https://webdocs.cs.ualberta.ca/~games/poker/publications/gib...](https://webdocs.cs.ualberta.ca/~games/poker/publications/gibson.phd.pdf)

<comment><USER8> Thanks again. So I guess for multiplayer games a better approach would be reinforcement learning with no game theoretic heuristics?

<comment><USER10> Game theory is always applicable to games :-)

Nash equilibrium is just one aspect of some games.

<comment><USER8> Game theory is domain specific. Generic methods in AI tend to dominate domain knowledge over time. Although I agree that other game-theoretic techniques might help here.

<comment><USER10> Game theory is specific to the domain of agents optimizing outcome in adversarial, cooperative, or (rarely) solitary systems. That's a pretty big domain.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER4> Anyone know where to find the pseudo code? It references item 10 in the References and Notes which states See Supplementary Materials.

<comment><USER11> They're included in the arXiv version of the paper: [https://arxiv.org/abs/1701.01724](https://arxiv.org/abs/1701.01724)

</comment></comment><comment><USER12> Pretty helpful with the annotation along the way, explaining mbb/g and what it means, for instance.

</comment><comment><USER13> Any hints on how to implement CFR-D on the GPU?

</comment><comment><USER14> This seems to be a major threat to online casinos. Is there any study on how they plan on fighting the AI's that will likely be flooding the market soon ?

<comment><USER15> Heads-up is a contrivedly simple scenario compared to solving poker in general. There have been bots for a long time that have co-existed with real players, and we're likely not close to a scenario where bots can reliably beat real players in general for real world scenarios.

However, in theory even a break-even bot could be a gold mine because it can earn loyalty points. That's how it was the last time I was playing online, I don't know if loyalty programs still work the way they used to. Of those programs would just go away if abused enough.

<comment><USER7> Loyalty points are paid out of (and lower than) the rake, so the bot still needs to be better than break even.

<comment><USER16> Online poker has the concept of "bonus whoring" where one takes advantage of various loss-leader promotions offered by different sites.

A typical promotion would be offering a 20% bonus on a $1000 deposit, with the caveat that you must play in, say, 1000 raked games before cashing out. It's possible to play in games where the total expected rake if the user breaks even is, say, $100, leaving $100 profit.</comment></comment></comment></comment>


Hillary Clinton's sysadmin left VNC, RDP exposed to the internet - <AUTHOR> http://www.theregister.co.uk/2015/10/14/hillarys_sysadmin_next_to_the_pillory <comment><USER2> how else are you supposed to work on it remotely? /s</comment>


The Era of General Purpose Computers Is Ending - <AUTHOR> https://www.nextplatform.com/2019/02/05/the-era-of-general-purpose-computers-is-ending/ <comment><USER2> This seems kind of ridiculous. All (classical) computers are functionally equivalent, according to Turing, so we're not going to stop making "general purpose computers." Ever.

While there's definitely a benefit in ASICs for some applications like crypto mining, the flexibility to run _anything_ is a huge advantage of modern chipsets. It's led to the Internet of Things, to Raspberry Pi, to emulators for old devices, and countless other useful applications of general purpose architectures.</comment>


Why Nature Prefers Hexagons (2016) - <AUTHOR> http://nautil.us/issue/35/boundaries/why-nature-prefers-hexagons <comment><USER2> "Why does Nature prefer hexagons" also makes for a fantastic interview question ;)</comment>


Free .DESIGN domain and email hosting for a year - <AUTHOR> https://porkbun.com/flawless <comment><USER2> It's really free, what's the catch?

<comment><USER3> Getting stuck paying 35 USD yearly when you could have payed less than 9 with the same provider for a better known tld like ".com"

<comment><AUTHOR> I had such idea firstly, but there is an issue with popular providers like ".com"

You can't find good free website names. So in our case, we took .io domain, which costs us $50/year. That's very expensive, but we have branded website name on .io

<comment><AUTHOR> so $35 yearly s a good deal, if you find there free and good name. I will not switch from our current $50 .io domain because it's cool.

and when we bought .io 2.5 years we spent several days looking for a cheaper option. For dev tool having some shitty website name or provider is suck

</comment></comment></comment></comment><comment><USER4> Wow! Looks like an awesome opportunity for the personal design portfolio site.

</comment><comment><AUTHOR> nice deal for folks, who need .design domain for portfolio, design & development tools or blog.

After the year it will cost $35, which is still a nice deal. Hope, it will be useful for someone.

</comment><comment><USER5> Love it!</comment>


Ask HN: Whats the Equivalent GCP Service to AWS SES? - <AUTHOR> I own a domain, whats the Google Cloud Platform service that provides a managed email server?<p>Preferably with an option for a webmail interface. <comment><AUTHOR> I'd also prefer not to have to transfer my domain over to Google.</comment>


How can I get cheaper Internet service? - <AUTHOR>

My Comcast internet bill was $70+ for this month in Huntsville Alabama, and I don't have cable TV or phone services. This is way too much money for the little they provide. Does anyone know how to get a better deal? <comment><USER2> Is there a DSL company or another cable company in your area? Talk to them and find out what introductory rates they have. Call Comcast and see if they can match or beat that offer (in both speed and price). If they won't, switch to the other company. I've found that companies will almost always give you a better deal to retain you, but if they won't, you can bounce back and forth every 6 months.

Never rent the modem, buy your own.

If there is no competition from DSL, your options are a bit limited. Look into wireless ISPs in your area (they tend to be slower and have severe caps though, at least in my part of the country).

<comment><AUTHOR> Thanks Xiamai. I did what you suggested and saved $40 per month at Comcast!

</comment></comment><comment><USER3> get cell phone with unlimited data; tether

Your speeds wont be nearly as fast, but you'll manage to save a fair amount of money.

<comment><AUTHOR> I've heard that Verizon is a good choice for this. I'm going to be looking into this soon.</comment></comment>


Amazon Only Does What's Best For Amazon - <AUTHOR> http://mikecanex.wordpress.com/2011/09/11/amazon-only-does-whats-best-for-amazon/

<comment><USER2> Wow, that's some serious FUD.</comment>


David Hornik: Y Combinator Rocks - <AUTHOR> http://davidhornik.vox.com/library/post/y-combinator.html?_c=feed-rss-full

<comment><USER2> 30 people whose company got bought out is amazing - kudos to YC, and to each of them. Each one is an extraordinary achievement

Just reminding myself I've also done something cool: I think one has a right to that statement after the first sale of one's product. "I made something people want". And for me, that was an amazing experience. Thanks for reminding me of it. :-)</comment>


The British Etsy Quietly Racks Up Millions In Sales - <AUTHOR> http://startupstats.com/the-british-etsy-quietly-racks-up-millions-in-sales-2012-03/ <comment><USER2> Practically speaking, your average person does not want to deal with international shipping. It tends to be expensive and slow and tracking is not as good which leads to troubles for the site. It would be smart for a site to segregate people in their own country. When you don't do that, you get situations like this, where a competitor becomes you with a different TLD.

</comment><comment><USER3> This reminds me of the latest Who's Hiring post, where the top commenter was complaining that he'd never heard of Etsy, and they should really explain who they are in their job posting.

Clearly, anyone reading this article is expected to know Etsy as well, so I wasn't off in my thinking that he picked a pretty poor example to make his point.

</comment><comment><USER4> The line between 'competitor' and 'clone' is right here: the site layout and elements are startlingly similar to Etsy.

<comment><USER5> I honestly had that thought as well going into this piece. But now that I've visited the site, I can say that I disagree. This is not a clone or a competitor, this is the same business idea executed in a different market, with a ( slightly )different focus, and yes with similar design stylings. A clone for me is a site that is pixel for pixel copied. Saying this is a clone is like saying Mountain Mikes Pizza is a clone of Round Table. and personally, I'd rather have Folksy in the US then etsy, Folksy was everything Etsy should have been.</comment></comment>


Stanford releases latest iOS 5 programming class - <AUTHOR> http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=473757255

<comment><USER2> The previous class on iTunes was extremely useful to me. I'm a college student and the fact that it was in a lecture format made it easy for me to digest.

Reading a book is one thing, but watching someone give a lecture in little chunks made it really easy.

I wonder how ARC changes the way they teach memory management.

<comment><AUTHOR> I had the same experience on the book vs lecture question. I first read Kochan's Objective-C book, and then started the Big Nerd Ranch iOS programming book. But I never really grokked core concepts, like MVC, that I easily grasped watching Hegerty's lectures.

</comment></comment><comment><AUTHOR> The related walkthroughs and assignments were just released today at <http://www.stanford.edu/class/cs193p/cgi-bin/drupal/>

</comment><comment><USER3> is there any way to get these to download on Ubuntu?

<comment><USER4> You could have a friend with a Mac or Windows computer download them then give them to you on a flash drive or something. Also, old versions of iTunes are known to run in Wine.

I don't see the point though; the iOS SDK is Mac only.</comment></comment>


The problems with creating a new template language - <AUTHOR> https://utcc.utoronto.ca/~cks/space/blog/web/TemplateLanguageProblems <comment><USER2> The reason to not create a new template language is because they are a terrible idea that has lived this long since a) most languages lacked a nice multi-line string equivalent, b) XML, a great way to represent markup, did not have first-class support in programming languages.

Neither of these are true anymore, so it is time we let template languages go.

The essence of templating is string interpolation. That is what ERB, Jade, HAML and similar languages do. ES6's Template Strings are fantastic at this. They are multi-line, and they allow interpolation.

Even if we supposed that the notion of separation of view and view-logic was a reasonable one, the baggage that a dedicated templating language brings in is simply not worth it.

Here are examples of the baggage: 1) the choice of picking a templating language is almost of a religious nature (HAML vs ERB).

2) Custom syntax and needs for each language - the `surround`, `suffix`, and `precede` helpers in HAML.

3) Templating languages almost always reinvent programming constructs poorly. Greenspun's tenth rule is really apt here:

 _Any sufficiently complicated templating language contains an ad hoc, informally-specified, bug-ridden, slow implementation of a turing complete programming language._

These days I rely a lot on JSX, which is rigorous and catches errors, thanks to compile-time parsing, and well-integrated into the language so that I can use programming language abstractions without wringing them through ill- defined extension points in a templating language.

<comment><USER3> I can also say smart things:

Template language is useful not because it allows to do things, but because it limits what can be done.

<comment><USER2> It limits useful things that can be done, but comes up with worse way to do the same.

Code/view reuse for example is done through partials in template languages: you can either learn `<%= render partial: "filename" %>` syntax for ERB (with Rails), or `include filename` syntax for JADE, or the `{% include template_name %}` syntax in Django.

Or you could simply use functions: compose them, curry them, put them in objects and call them, and even remote execute them; it is all code.

Logic is similar: every template language has their own syntax for conditionals and loops. Learning these does not teach us anything new nor make us better at our craft. These are simply useless tediums.

Another pet peeve is Template Inheritance. Jade has `block` and `extends` keywords; RABL similarly has an `extend` keyword. Programming languages have an arguably better way to do inheritance.

This is my rule of thumb: if a library/template language brings its own semantics for inheritance, be wary.

<comment><USER3> I disagree that the way is "worse".

I like that in templates, string handling is _enforced_ to be different. For example, when you manipulate strings in template, you can be reasonably sure all output is escaped, unless you specify otherwise in a very few precise cases with explicit syntax.

A good template language allows you to create/limit available tools/helpers for your particular project. That is especially important in larger projects and larger teams, where everyone is not immediately expected to know intended good practice to follow. Creating DSL in template _is_ a way of documenting intended good practice.

A good template language does not pretend not to be turing-complete: instead, it provides comprehensive error handling and error messages, so that users know exactly where some error or type occurred.

One more reason to use the language is because it is a language. If someone used something like Django, the Twig will be quite familiar and easy to pick up.

Template engine can optimize-away, pre-compile things, just like languages do.

With separate template language you don't need to recompile whole build if you change a template (presuming hosting language is compiling to binary and template engine is interpreted).

Full disclosure: I am currently rewriting Twig in another language, and believe it's completely worth the effort.

</comment></comment></comment></comment><comment><USER4> Funny thing, I have created a few template languages (one of the first I created was used to build a local EU commission site and was programmed in ansi C because Java was not mature yet for web, this was time of Altavista for those who remember..) and the more I have seen and created them the more I tend to think that less is more.

IMHO the best templating language available widely at this moment is mustache (and/or handlebars) as it's almost as simple as it can get and that's the way it should be. Logic should be at code and templates should just render text given to them.

</comment><comment><USER5> A lot of these problems are mitigated by just keeping it simple. You don't, for example, need to design the templating language. Use an existing, successful language, and invert how it parses strings, and add a nicety for expressions. You can probably even reuse most of the parser, and then output code that runs by the language's eval. This gives you all of the language's constructs nearly for free. Python/Ruby/Lua/Elixir/Julia would be great for this. This also produces a better result: I can't tell you how maddening it is to not have basic language constructs in, say, Django templates, because the template designer decided to write a whole second much crappier language inside the language you're using. And this method will likely be more performant.

</comment><comment><USER6> My company uses a variety of templating languages, and we've been able to create a really nice work flow by building a custom asset pipeline around them.

Recently however we had to push something out really quickly, and opted to avoid our own pipe line in order to put out some raw html, css, and js, very quickly.

Although I cannot imagine how it would be, I wonder if their will be some kind of process in the near future that abstracts away the build pipe line an allows me to continue to write jade/scss/es6 without having to put any effort in putting it in production..

</comment><comment><USER7> Just invent shorthand syntax for XSLT, output your data for the template as XML and let the xlst transformer do the template instantiation for you.

</comment><comment><USER8> Why use template languages after all? We can use just Javascript to create components and glue them together, why do we still need to do the extra parsing?

<comment><USER5> Because you might want Google to index your website.

Because you might want an integer or a float type.

Because you might want to be able to test the logic of your code on one environment, the only environment where it will be run.

Because you might want a reasonable dependency tree.

Because you might not want to rewrite portions of your code to run them on the server side.

I could go on.

<comment><USER9> But if we are talking about server code it could run js on the server and solve most of these points.

<comment><USER5> But if we are talking about server code it could be written in a better language.</comment></comment></comment></comment>


Drift Republic: Men's jeans, built for your life - <AUTHOR> http://www.kickstarter.com/projects/634324578/drift-republic-mens-jeans-built-for-your-life

<comment><AUTHOR> This project is put together by my lifelong friend Gabe Wallace. He's been working on this company for years so I am really excited to be able to help him launch his product!</comment>


Email service Hey is selling two-letter email addresses for $999 a year - <AUTHOR> https://twitter.com/dhh/status/1272690224267575296 <comment><AUTHOR> And here's a HN post that links their blog post about acquiring hey.com

[https://news.ycombinator.com/item?id=22504582](https://news.ycombinator.com/item?id=22504582)</comment>


This Monitor just needs an Ethernet Cable - <AUTHOR> http://www.i4u.com/47243/samsung-nc220-monitor-cisco-upoe-worlds-first

<comment><USER2> It's funny how we're slowly heading back toward mainframe computing. Granted, they're dynamically virtualized across 48 cores and 192 GB RAM, but still.

<comment><USER3> I would love to have mainframe quality virtualisation on my desktop. I expect it will come one day soon.

<comment><USER2> I think within 10 years we'll either be using dumb terminals using cloud servers for processing (streaming video ala OnLive), or we'll be using dumb terminals using our phones as the CPU (and using cloud storage).

Either way, lots of dumb terminals where you can just sit down anywhere and have access to your entire computing environment instantly.

</comment></comment></comment><comment><USER4> Does this essentially work like a remote desktop? Are mouse and keyboard commands sent over the network to the server, the server does the processing and sends images back back to the monitor to display. (which might not even by how RD works, but it's how it works in my mind).

<comment><USER5> Yes and no. RDP does most of the processing on the server, but still uses a local processor on the workstation for rendering graphics, communicating with the server, and so on.

This looks like a custom protocol for VMWare systems (see also [http://www.samsung.com/us/consumer/learningresources/mobilec...](http://www.samsung.com/us/consumer/learningresources/mobilecomputing/faq.html)); it's too early to tell if it will see wide adoption or not. A clear downside is the extra horsepower that will be needed on the server; the upside is that you won't have to mess about with PxE booting or the like.

It's definitely the right time for this stuff, though. We've been working on a project in this space, too; we just demoed something (sorta kinda) similar to our largest client a week ago, to see if they'd like to be our pre-alpha tester. Still waiting to hear back. If we can get traction, we'll be able to have a pretty big impact in IT for SMEs.

Looks like we'd better hurry. :-)

<comment><USER6> > This looks like a custom protocol for VMWare systems

VMWare had something that resembled VNC a lot.

> A clear downside is the extra horsepower that will be needed on the server

Some of the work could be done inside the network interface. I suspect Cisco has (or will have, shortly) a chipset for that.

</comment></comment></comment><comment><USER7> this is not quite what it makes out to be. of course at one level you only need an ethernet cord, but at some level you need to supply power to the cord itself. That power requires a power cable + PoE box if done close to the monitor, or you can buy a rack PoE unit and do it further away, which will have a limit on how far away from the unit you can be.

PoE units are useful when having only one cable enter the housing for waterproofing issues. otherwise, why go to all the hassle?

<comment><USER8> In environments like hospitals, needing only one cable and one jack, I think this is a major advantage. Techs only need to unplug/plug one cable, there is less cable to get cluttered up, you only need half the amount of different types of cables in stock (no more different power and comms cables), ...

When renovating a section of a building, you only need to put in one new jack; that's half the cost saved, because you only need one guy running cable, not two (often different companies run electricity and network cables). So it's a major saving in installation costs.

</comment></comment><comment><USER9> Samsung also has a monitor that works with just a USB cable.

<comment><USER10> Not quite the same; that's a monitor with an integrated graphics chipset, it still requires external power from a separate power cord.

<comment><USER9> My point was that Samsung generally tries the new stuff.

<comment><USER11> Except when Samsung copies Apple Design

<comment><USER9> OT, but you could argue that Apple is copying Samsung design if you wanted: Samsung has had Kies for ages. The next version of iOS will have something very similar.

</comment></comment></comment></comment></comment><comment><USER6> The IBM 2260 is back!

</comment><comment><USER6> You can find more info at <http://www.teradici.com/></comment>


Show HN: Golden Draw – An App for Hackers and Painters - <AUTHOR> http://www.goldenspeak.com/goldendraw.php

<comment><AUTHOR> We built Golden Draw to hack the drawing / painting process. With GD, anyone can draw or paint any picture - even if you have no artistic ability. The app works by breaking a picture into tiny boxes, where you draw each box one by one. It's sort of like a computer monitor breaking the screen into pixels, rendering each pixel one at a time.

</comment><comment><AUTHOR> Oh, just saw that the post title converted the ampersand between Hackers- Painters to the word AND. This was supposed to be a subtle reference to Pg's book, which uses the ampersand. It is a great read if anyone is interested in either subject.

<comment><USER2> The essay uses "and" ([http://www.paulgraham.com/hp.html](http://www.paulgraham.com/hp.html)), but the book uses the ampersand. Both seem correct.

</comment></comment><comment><USER3> Is this supposed to make you a better painter? Does it?</comment>


Ask HN: How do you secure your Mac? - <AUTHOR> Apart from full disk encryption and a password manager:
Do you use antivirus? Which antivirus?
Do you use two-factor SSH?
Do you use IDS?
What else do you recommend? <comment><USER2> The thin I do that I think is most important is use Little Snitch ([https://www.obdev.at/products/littlesnitch/index.html](https://www.obdev.at/products/littlesnitch/index.html)) to track/block/approve incoming and outgoing network requests.

It's how I caught a new Seagate external hard drive making calls to Baidu and Google. [https://fosstodon.org/@lukewrites/100907932236227641](https://fosstodon.org/@lukewrites/100907932236227641)

<comment><USER3>
      > When it loads, the disk is unwritable; you have a choice of
      > a Mac executable or a Windows executable.

That's ridiculous. How do they justify that?

</comment></comment><comment><USER4> I am a security professional and have thorough knowledge of macOS internals and the built-in security protections.

Almost all antivirus or security products on the Mac App Store should be treated with extreme skepticism. I recently saw that one of the top grossing apps was an antivirus product called Thor Antivirus. Looking under the hood, it was just ClamAV, and their claims about its protections were unsubstantiated. They probably made tens of thousands of dollars before Apple took them down in response to my report.

Several years before that, I audited SecureMac's MacScan[0], a once-popular antivirus app that had received accolades from MacWorld for years. It turns out it just checked file metadata such as modification times, and didn't even look inside.

Apple's app reviewers are not able identify bogus security products, and the result is that you might damage your system by allowing some half-baked program to run amok.

I don't run any third-party antivirus myself, but when I was investigating a piece of Mac malware, I discovered that Malwarebytes had beat me to the punch and published a great blog post on their investigation. I vaguely recall using their software to clean up a relative's Mac successfully.

By the way, at the time of writing, a program called Antivirus Zap - Virus & Aware is #6 on the Top Paid list of the Mac App Store. Antivirus VirusKiller is #41. I guarantee you they're both shit. (Antivirus Zap also uses ClamAV.)

0: [https://web.archive.org/web/20110719013009/http://rgov.org/2...](https://web.archive.org/web/20110719013009/http://rgov.org/2011/01/19/macscam/)

</comment><comment><USER5> My primary concern is someone physically stealing my Macbook or iMac. They are personal devices and the content on them would not be much of interest to others, foreign governments or other entities.

I have Prey[1] installed. On both devices, I have "admin" credentials taped to the back. The account is actually a locked down user-level account with very little authority, other than being able to get on wifi/browse the internet, etc. I suppose this would be a honeypot of sorts. My thought being if someone walks off with it, I want to be able to gather as much info on them as possible. I haven't given a whole lot of thought to this, so definitely curious if there are issues with this approach.

[1]: [https://preyproject.com/](https://preyproject.com/)

<comment><USER6> Your comment reminded me of this:

DEF CON 18 - Zoz - Pwned By The Owner: What Happens When You Steal A Hacker's Computer: [https://youtu.be/Jwpg-AwJ0Jc](https://youtu.be/Jwpg-AwJ0Jc)

<comment><USER7> This is wonderful.

</comment></comment></comment><comment><USER8> I try to use Touch ID for everything it can be used for.

Touch ID for sudo [http://osxdaily.com/2017/11/22/use-touch-id-sudo- mac/](http://osxdaily.com/2017/11/22/use-touch-id-sudo-mac/)

Touch ID for SSH [https://github.com/sekey/sekey](https://github.com/sekey/sekey) (uses secure enclave)

I use this for 2FA [https://krypt.co/](https://krypt.co/) (uses secure enclave on your phone)

Touch ID for password management [https://1password.com/](https://1password.com/)

I upload dotfiles and other credentials in a keybase encrypted repo

<comment><USER9> So I assume your threat model is exclusively keyloggers? It's certainly not physical access. Your fingerprints are all over the device's surface, so a determined attacker can easily duplicate them. (And to a non-determined attacker, Touch ID does not make much of a difference to passwords.)

<comment><USER10> Having your ssh key password protected would be a lot more annoying than having them touch id protected. The threat model would be someone using your Mac if you left it unlocked for a minute or something.

</comment></comment></comment><comment><USER11> I follow some parts on Bejarano's [0]. It was discussed on HN [https://news.ycombinator.com/item?id=18099835](https://news.ycombinator.com/item?id=18099835) (6 months ago)

macOS Security and Privacy guide [1] also a recommendation you can try.

[0]: [https://blog.bejarano.io/hardening- macos.html](https://blog.bejarano.io/hardening-macos.html)

[1]: [https://github.com/drduh/macOS-Security-and-Privacy- Guide](https://github.com/drduh/macOS-Security-and-Privacy-Guide)

</comment><comment><USER12> I used to use little snitch and now came across lulu [0].

> LuLu is the free, open-source macOS firewall that aims to block unknown > outgoing connections, unless explicitly approved by the user.

I would love to know if anyone else has switched over and what's missing. I haven't had a whole lot of time to do a thorough investigation.

[0]: [https://objective-see.com/products/lulu.html](https://objective- see.com/products/lulu.html)

<comment><USER13> I have been using lulu for several months and love it. The interface for managing rules is easy to follow.

</comment></comment><comment><USER14> Little Snitch [1], 1Password [2], macOS Filevault, {BlockBlock, RansomWhere, OverSight, ReiKey} by Objective-See [3]

Few years back I was a big fan of Little Flocker, which now is part of F-Secure as XFENCE [4]. But haven't used it since its rebranding, anyone using it anymore?

[1] [https://www.obdev.at/products/littlesnitch/](https://www.obdev.at/products/littlesnitch/) [2] [https://1password.com/](https://1password.com/) [3] [https://objective- see.com/products.html](https://objective-see.com/products.html) [4] [https://campaigns.f-secure.com/xfence/](https://campaigns.f-secure.com/xfence/)

</comment><comment><USER15> What exactly is your threat model? Are you a developer of a very public software project? Are you a politician or a journalist? Or someone in HR? Or are you just an average Joe?

And what software do you use regularly? Do you pirate software?

These are important questions to answer, before you come up with how to secure your Mac.

That said, I'm just an average developer. I hardly run anything non-standard. I do make sure to not leave my laptop unlocked, but that's it.

<comment><AUTHOR> Assume it's for a software developer.

Regarding software: only system apps with the exception of say a password manager, code editor and git.

</comment></comment><comment><USER16> I basically follow the NIST Guide to Securing Apple macOS: [https://csrc.nist.gov/publications/detail/sp/800-179/rev-1/d...](https://csrc.nist.gov/publications/detail/sp/800-179/rev-1/draft)

</comment><comment><USER17> Shameless plug since it's relevant:

We built a Slack bot [0] that shames (in good humor) people in the office who leave unlocked laptops unattended. We had a similar system at Twitter where we would tweet a certain codeword on unlocked laptops and it was very effective in stopping that behavior.

[0] [https://sniped.app/](https://sniped.app/)

<comment><USER18> We, at Accenture, invite our colleagues 5-15 invitees to a cake celebration, from the person's unlocked laptop and Outlook a week into the future.

It's pretty hilarious because the person usually go through with it.

</comment></comment><comment><USER19> Hardening macOS [https://blog.bejarano.io/hardening- macos.html](https://blog.bejarano.io/hardening-macos.html)

Guide to Securing Apple OS X 10.10 Systems for IT Professionals: A NIST Security Configuration Checklist [https://www.nist.gov/publications/guide- securing-apple-os-x-...](https://www.nist.gov/publications/guide-securing- apple-os-x-1010-systems-it-professionals-nist-security-configuration)

Securing macOS in 2018 [https://www.davd.eu/securing- macos/](https://www.davd.eu/securing-macos/)

Free OS X Security Tools [https://objective- see.com/products.html](https://objective-see.com/products.html)

Lynis - Security auditing tool for Linux, macOS, and UNIX-based systems [https://github.com/CISOfy/lynis](https://github.com/CISOfy/lynis)

</comment><comment><USER20> For me the most important aspect is the use of a VPN, security software, and the combination of multiple layers of authentication. These are of course just general good practices, but how you implement them is what's unique compared to Windows or Linux. A full list would be too long for an HN comment, but a few months ago I put together something of a reference guide listing the methods I apply to secure Macs in a roughly organized fashion. It's brief in most aspects, but but hopefully it can be of use to someone. It's licensed under Creative Commons, so feel free to redistribute it. I've uploaded it to iTunes[1], but if Freedom is a concern I can email[3] a PDF of it directly.

[1] [https://itunes.apple.com/us/book/kickstart-security-macos- mo...](https://itunes.apple.com/us/book/kickstart-security-macos- mojave/id1451794169?mt=11)

[2] firstname.lastname@example.com

</comment><comment><USER21> As others have mentioned, Little Snitch + Block Block is a powerful combination that lets you (1) see what is phoning home, and (2) know what crap apps are installing in the background.

I like to set up a lock screen message with your name/phone. [https://support.apple.com/en-us/HT203580](https://support.apple.com/en- us/HT203580). Not "security" per say, but can help get your computer back to you if stolen.

Set a firmware password to prevent your mac from being reformatted: [https://support.apple.com/en-us/HT204455](https://support.apple.com/en- us/HT204455)

If you're using Filevault, you may want to ensure you are not backing up your recovery key to iCloud. There's a terminal command (I think) to discover if it is.

You should also go in and show hidden files. In terminal: "defaults write com.apple.Finder AppleShowAllFiles true"

</comment><comment><USER22> I don't do any of the above! I lock it, keep it up to date and are not foolish about what to run/download.

</comment><comment><USER23> While I strongly advise avoiding traditional "antivirus" software like Symantec, EtreCheck[1] if a wonderful diagnostic tool for checking your Mac's general health. Included in that health check is a full disk sweep for any known adware. I used it just this past year to help identify and remove some adware on my parents' computer just this past year, and would highly recommend.

[1] [https://etrecheck.com](https://etrecheck.com)

</comment><comment><USER24> Filevault, no antivirus (except what comes with macOS), Objective See's Do Not Disturb [1], 2F SSH depending on the host.

What's your threat model? My recommendations are going to be based wholly on that. Are you an average Joe/Jane, or a reporter for The Intercept?

1\. For evil maid attacks. [https://objective- see.com/products/dnd.html](https://objective-see.com/products/dnd.html)

</comment><comment><USER25> Anti virus - Sophos home Free & according to me the only real antivirus Little snitch is excellent for severing unintended network connections Search engine - startpage.com. This one has been excellent as I get privacy + search results same as Google I use adguard... Very effective. Dns 18.104.22.168 from cloud flare

</comment><comment><USER26> My friend built this audit / lockdown tool for enhancing security defaults in Mac. Maybe you will find it useful :) [https://github.com/0xmachos/mOSL](https://github.com/0xmachos/mOSL)

</comment><comment><USER27> FileVault, strong system password, Little Snitch.

Everything else (2FA, password manager) is not macOS specific.

</comment><comment><USER28> Full disk encryption, that's it. When I get up, I lock the screen.

<comment><USER15> To add to this: the shortcut key for locking the screen is Cmd+Ctrl+Q. There's also the possibility of configuring a Hot Corner for this.

<comment><USER29> I use Ctrl+Shift+Esc to put my screen to sleep (which locks it).

<comment><USER15> Is this a default shortcut key?

<comment><USER30> yep

</comment></comment></comment></comment></comment><comment><USER31> If you're paranoid:

\- Full Disk Encryption \- Use Little Snitch \- Don't use iCloud \- Disable SSH except for your account \- Turn off remote login \- Run developer software in Docker containers

<comment><USER32> Genuine question: Is iCloud any more insecure than any other cloud service? I was thinking of shifting a lot of stuff to it.

</comment></comment><comment><USER33> in addition to FileVault I have uBlock Origin installed on all browsers and Malwarebytes running. but I have no idea if these programs are working, are looking for the correct threats or potentially have malware themselves. so far so good...

</comment><comment><USER34> I follow this: [https://spreadprivacy.com/mac-privacy- tips/](https://spreadprivacy.com/mac-privacy-tips/)

Not really an exhaustive list, but at least gets you started off.

</comment><comment><USER35> saaspass.com for 2FA on MAC OS

SAASPASS Authenticator for regular 2FA

SAASPASS Browser extension for autofill of 2FA Authenticator codes

SAASPASS Password Manager for websites

[https://saaspass.com/download/apple-mac-two-factor- authentic...](https://saaspass.com/download/apple-mac-two-factor- authentication-2fa-computer-connector-os-x/)

And here:

[https://saaspass.com/downloads/](https://saaspass.com/downloads/)

[https://m.youtube.com/watch?v=qkf9VraKuDU](https://m.youtube.com/watch?v=qkf9VraKuDU)

</comment><comment><USER36> 2fa all the time. And I dont usually join public connection.

</comment><comment><USER37> I don't. I keep my super sensitive data in my head. I never believed in computer security and never will. But the I never believed in security in general. Why on earth you would need an antivirus for a Mac ? I don't even remember the last time avast gave me a virus warning on Windoom 10. Nowadays it's mostly worms, ransomeware and spyware , rarely a Trojan horse. The age of virus has long gone after the start of the age of not slow internet.The only thing I do is to backup my data via Dropbox and megasync.

If you really need security, get a computer , disconnect it from the internet. The end.

</comment><comment><USER38> If the concern is ransom-ware, what works well?

</comment><comment><USER39> I don't. Never had an issue. 2FA for secure web needs if it is offered.

</comment><comment><USER40> most useful tools: \- Little Snitch \- Firefox with lots of privacy settings + umatrix + decentraleyes

I use them more for privacy, but security is an added benefit.

</comment><comment><USER41> it doesn't matter what you do, Apple controls and share your data.

My recommendation stay offline as much as you can.

</comment><comment><USER41> it doesn't matter what you do, Apple harvest and share your data..

My recommendation stay offline as much as you can.

<comment><USER42> Do you have any evidence that Apple harvests data stored on Macs and shares it with third parties? If so, that would be big news given Apple's stance on security and privacy.

</comment></comment><comment><USER43> I update my hosts file to stop communication with the bad guys: [https://github.com/StevenBlack/hosts/blob/master/alternates/...](https://github.com/StevenBlack/hosts/blob/master/alternates/fakenews- gambling-porn-social/readme.md)</comment>


Foreigners in Japan are evil … at least what Tokyo Shinjuku ward belives - <AUTHOR> https://www.preining.info/blog/2016/05/foreigners-in-japan-are-evil/ <comment><USER2> The part where they feel the need to point out that shoplifting is a crime is a bit condescending, but if a polite pamphlet is the worse form of discrimination you're facing in Japan then you should probably not complain.

<comment><USER3> You would think that, but I did study abroad years ago in japan, and some guys got deported for shoplifting. Another guy I knew there also had a very liberal attitude toward property ownership (as in, if it wasn't locked up, the original owners must not care about it), but never got caught.

</comment></comment><comment><USER3> This is downright friendly. TL;DR: Here are basic norms, laws, and some common scams, please be aware.</comment>


Proving the Lottery Ticket Hypothesis: Pruning is All You Need - <AUTHOR> https://arxiv.org/abs/2002.00585 <comment><USER2> The lottery ticket hypothesis is IMHO the single most interesting finding for deep learning. It explains why does deep learning works (vs shallow neural nets), why is initial over-parametrization is often useful, why deeper is often better than shallow, etc.

I recommend for an overview:

\- the original paper "The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks", [https://arxiv.org/abs/1803.03635](https://arxiv.org/abs/1803.03635)

\- "Deconstructing Lottery Tickets: Zeros, Signs, and the Supermask" [https://eng.uber.com/deconstructing-lottery- tickets/](https://eng.uber.com/deconstructing-lottery-tickets/) showing that if we remove "non-winning tickets" before the training, the trained network still works well

<comment><USER3> This is really not a new idea for anybody that has studied numerical optimization or done a lot of much simpler linear modeling. It has to do with the gradients, which are basically random steps in high-dimensional spaces unless you align with a 'large' eigenvector of the Hessian. This explanation didn't go over well at all with the ML cargo cultists until someone gave it a name. Interesting how things work.

<comment><USER2> Could you point to concrete papers, showing that empirically?

(Many things were rediscovered over and over, sure.)

> random steps in high-dimensional spaces unless you align with a 'large' > eigenvector of the Hessian

In this case, the main observation is different than this one, and has much more to do with sparsity (and an exponentially growing number of connections with each layer).

<comment><USER4> Nocedal has some papers in this direction.

</comment></comment></comment></comment><comment><USER5> If "pruning is all you need" that does feel like a way of explaining how intelligence could come out of a mass of neurons such as our brain. Or at least that sounds like a thing that makes it understandable to me. Basically add a bunch of connections relatively randomly, start pruning slowly until you hit a point where the system changes... I'll keep hand waving until somebody who knows this stuff can chime in.. :)

<comment><USER6> In psychology class the professor told me that the number of connections in a human brain increases only two times in life, during infancy and during adolecense, at all other time the number of connections is decreasing.

<comment><USER7> I think the jury is still out on that one.

[https://www.scientificamerican.com/article/the-adult- brain-d...](https://www.scientificamerican.com/article/the-adult-brain-does- grow-new-neurons-after-all-study-says/)

</comment></comment></comment><comment> IX-103 This is really neat and has a lot of implications for porting larger models to limited platforms like mobile. Unfortunately you still have to train the larger network, so the gains are somewhat limited. Some other papers I read show that you might be able to prune the network in the middle of training, which would make larger models more practical to work with.

<comment><USER8> The implications are unclear to me. We already know how to prune models for inference. For example [https://arxiv.org/abs/1710.01878](https://arxiv.org/abs/1710.01878), along with earlier work (and more recent work). There's also work showing that you can take advantage of the sparsity to achieve practical speed gains: [https://arxiv.org/abs/1911.09723](https://arxiv.org/abs/1911.09723).

We can also train networks that are sparse from the beginning of training (without requiring any special knowledge of the solution): [https://arxiv.org/abs/1911.11134](https://arxiv.org/abs/1911.11134). It remains to be shown that this can be done with a speed advantage.

<comment><USER9> Without reading: I think that the importance is that before we had methods that _could_ do that. Now we know that there is an algorithm that _can_ do that. They proved that it is always possible, not in some subset of the networks.

In the other hand, it will trigger research on reducing the size of the networks. That is important, as most researchers don't have access to the computing power of Google and the like.

<comment><USER8> It's unclear this algorithm would be useful in practice. Training the weights will lead to a more accurate network for the same amount of work at inference time.

</comment></comment></comment></comment><comment><USER10> Am I understanding this right? Surely, I must be missing the entire point because...

This looks like to me, adding more and more bullshit to a model while managing to increase its accuracy, eventually leads to a "smaller" model with less bullshit?

That is to say, adding correlated or endogenous variables to a model (over- parameterization), so long as it increases its accuracy, will one day yield, a smaller, more optimized, model with less variables?

If so; why is this news? Isn't this like the fundamental process of most statistics and optimization problems? Or like isn't adding more data (when available) a fundamental method of solving/fixing with multicolinearity?

<comment> nil-sec I think you do misunderstand. They do not add "correlated variables" to a model. The idea is that if you have an overparameterised model for a specific problem, this model contains a smaller model, that has similar performance to the trained large model, _without training_! That means gradient descent is in fact equivalent to pruning weights in a random network. There is no algorithm for how to do this efficiently (as they show) but that does not mean that there are no (so far unknown) heuristics out there that would get you close. This is exciting as it means a potential alternative for backprop is out there. This would be cool because it might mean more efficient algorithms and something I haven't seen mentioned in the paper, an alternative to backprop that might be easier to understand in a biologically plausible way.

<comment><USER11> I think you misunderstand. Especially

> this model contains a smaller model, that has similar performance to the > trained large model, without training

The point is the opposite. There is a small net X within big net Y, such that training only X gives the same performance as training all of Y.

<comment> nil-sec What you are stating is the original Lottery Ticket Hypothesis. What they prove in this paper is the stronger version, empirically noticed here [https://arxiv.org/abs/1905.01067](https://arxiv.org/abs/1905.01067) and referred to as "supermasks". To quote from the paper posted here: "within a sufficiently overparameterized neural network with random weights (e.g. at initialization), there exists a subnetwork that achieves competitive accuracy".

Edit: See also [https://arxiv.org/abs/1911.13299](https://arxiv.org/abs/1911.13299)

<comment><USER11> Seems like a "Library of Babel" type of thing. I'd have to read the full paper for how they find the subnets, but their mere existence is not so surprising. There's a huge sea of possible subnetworks. Basically SGD is replaced by whatever procedure you use to traverse the space of parameter subsets. Definitely interesting direction.

</comment></comment></comment></comment></comment><comment><USER12> I have a question. They show that any given depth-ell network, computing F, is w.h.p. approximated by some subnetwork of a random depth-2ell network.

But there is a theorem that even depth-2 networks can approximate _any_ continuous function F. If the assumptions were the same, then their theorem would imply any continuous function F is w.h.p. approximated by some subnetwork of a depth-4 network.

So what is the difference in assumptions, i.e. what's the significance of F being computed by a depth-ell network? What functions can a depth-ell+1 network approximate that a depth-ell network can't? I'd guess it has to do with Lipschitz assumptions and bounded parameters but would be awesome if someone can clarify!

<comment><USER13> The theorem you mention is true for networks whose widths tend towards infinity.

This paper assumes a nn is given with fixed width n and fixed depth l. The main result is that there exists a subnetwork of a nn with depth 2l and width polynomial in n and l that can approximate it arbitrarily well.

</comment></comment><comment><USER14> As a potentially naive thought experiment, if you just generated in advance a number of random networks of similar size to the pruned lottery ticket, and then trained them all in parallel, would you eventually find a lottery ticket? If so how many would you have to train to find a lottery ticket with high probability? Why is training one big network and then pruning any better than training lots of different smaller network? Assume in all of the above that you have a rough idea of how big the pruned network will be be.

<comment><USER15> The number of subgraphs increases exponentially with the number of additional layers (and neurons). If you started off with a network the size of the final pruned network, you would have a dramatically lower chance of finding a winning ticket compared to the oversized network you start with.

</comment></comment><comment><USER16> ELI5 someone please.

</comment><comment><USER17> So in other words, a sufficiently large set of monkeys with typewriters contains a subset which approximates the works of Shakespeare.

</comment><comment><USER18> This paper formally proves what everyone already intuitively knows, right?

It's mathematically interesting, but not a practical advance.

</comment><comment><USER19> I've always felt the there is a deep connection between evolution and thought, or more specifically, genetic algorithms (GAs) and neural networks (NNs).

The state of the art when I started following AI in the late 90s was random weights and hyper-parameters chosen with a GA, then optimized with NN hill climbing to find the local maximum. Looks like the research has continued:

[https://www.google.com/search?q=genetic+algorithm+neural+net...](https://www.google.com/search?q=genetic+algorithm+neural+network)

All I'm saying is that since we're no longer compute-bound, I'd like to see more big-picture thinking. We're so obsessed with getting 99% accuracy on some pattern-matching test that we completely miss other options, like in this case that effective subnetworks can evolve within a larger system of networks.

I'd like to see a mathematical proof showing that these and all other approaches to AI like simulated annealing are (or can be made) equivalent. Sort of like a Church–Turing thesis for machine learning:

[https://en.wikipedia.org/wiki/Church–Turing_thesis](https://en.wikipedia.org/wiki/Church–Turing_thesis)

If we had this, then we could use higher-level abstractions and substitute simpler algorithms (like GAs) for the harder ones (like NNs) and not get so lost in the minutia and terminology. Once we had working solutions, we could analyze them and work backwards to covert them to their optimized/complex NN equivalents.

An analogy for this would be solving problems in our heads with simpler/abstract methods like spreadsheets, functional programming and higher- order functions. Then translating those solutions to whatever limited/verbose imperative languages we have to use for our jobs.

Edit: I should have said "NN gradient descent to find the local minimum" but hopefully my point still stands.

Edit 2: I should clarify that in layman's terms, Church-Turing says "every effectively calculable function is a computable function" so functional programming and imperative programming can solve the same problems, be used interchangeably and even be converted from one form to the other.

<comment><USER20> > All I'm saying is that since we're no longer compute-bound, I'd like to see > more big-picture thinking. We're so obsessed with getting 99% accuracy on > some pattern-matching test that we completely miss other options.

There are so many people working in this field now, you can be sure a lot of them are doing big picture thinking.

> I'd like to see a mathematical proof showing that these and all other > approaches to AI like simulated annealing are (or can be made) equivalent. > Sort of like a Church–Turing thesis for machine learning:

Maybe I'm misunderstanding what you are saying, but I think the different optimization techniques/Metaheuristics you're talking do actually have provably different properties.

<comment><USER19> What I was trying to say is that all of this comes down to finding transforms in a very large search space that convert certain inputs to certain outputs. So maybe there are generalized algorithms that can do that better than GAs or NNs or any of the other specific approaches.

Look at all of the effort that has been put into optimizing rasterization in 3D graphics. But meanwhile a student can write a ray tracer in a page of code. I would have preferred that the industry put more effort into the ray tracing side because the abstractions are so much simpler that it would have progressed the state of the art further. Instead we ended up with relatively complex and proprietary implementations of SIMD and that's great and everything but that completely overshadowed the alternatives.

And at the end of the day, users don't care if their 3D framework uses ray tracing or rasterization. All they really see is performance or efficiency under the current paradigm.

So when I see pages and pages of relatively cryptic NN code, I wonder to myself if maybe some other simple curve-fitting or hill-climbing algorithms would produce the same results. Or maybe even spitballing with a GA and letting the computer discover the algorithm would work just as well. It seems like with 10 times the computing power, we could use algorithms that are 10 times simpler. But I'm not really seeing that.

Ok to be a bit more concrete: say you have teams all competing to write the best sorting algorithm. Maybe they all independently derive each of the main ones listed here:

[https://en.wikipedia.org/wiki/Sorting_algorithm#Comparison_o...](https://en.wikipedia.org/wiki/Sorting_algorithm#Comparison_of_algorithms)

But none of them read the fine print to see that big-O complexity wouldn't be judged, just code size. So the bubble sort team ends up winning with the simplest implementation.

Maybe the judges are running the contest in order to find the smallest code that performs sorting. Maybe they have a special computer with a billion cores that can only hold 256 bytes of code each. But the contestants are still thinking linearly in terms of serial execution so submit solutions that really don't help.

I feel like everyone is focusing on the details of whether to use RNNs or CNNs or any of the other types of NN:

[https://medium.com/@datamonsters/artificial-neural- networks-...](https://medium.com/@datamonsters/artificial-neural-networks-for- natural-language-processing-part-1-64ca9ebfa3b2)

When we should really have "classifier" algorithm that works like a "sort" function in a programming language. The computer should use the best machine learning model for the use case automagically and not trouble us with implementation details. Then we should be able to build up larger constructs out of those basic building blocks.

I'm not articulating this very well. Just trying to express a general frustration I've had with AI from the very beginning and trying to point out alternatives that could get more people involved and bring us artificial general intelligence (AGI) sooner.</comment></comment></comment>