Snapchat's Evan Spiegel: 'We Need to IPO' - <AUTHOR> http://www.latimes.com/business/technology/la-fi-tn-snapchat-ipo-20150527-story.html <comment><USER2> Facebook at the time of IPO in 2012:

-= 526 million daily actives (1)

-= $1b net cash flow / yr

-= Last money in pre-ipo values it at $50b pre-money (2011) (4) when daily actives were 372 million

-= $90b market cap after 1st day

Snapchat today::

-= 100 million daily active users (2)

-= ?? net cash flow

-= Last money in values it at $15 billion pre (3)

\- - - - -

I understand that's not a perfect proxy to measure value / traction as SnapChat is quick to point out - eg their users watch a lot more video than FB users =- etc

So the revenue-per-user metrics may sway.

But, at the same token, FB at IPO time didn't have as favorable of a growth market (they handn't figured out mobile yet, where today mobile = all of the things)

Will be interesting to see.

(1) [http://www.zdnet.com/article/facebook-ipo-final- numbers/](http://www.zdnet.com/article/facebook-ipo-final-numbers/)

(2) [http://www.businessinsider.com/snapchat-daily-active- users-2...](http://www.businessinsider.com/snapchat-daily-active-users-2015-5)

(3) [http://www.bloomberg.com/news/articles/2015-03-11/alibaba- sa...](http://www.bloomberg.com/news/articles/2015-03-11/alibaba-said-to-plan- snapchat-funding-at-15-billion-valuation)

(4) [https://www.crunchbase.com/funding- round/37bd05f961af726ba3c...](https://www.crunchbase.com/funding- round/37bd05f961af726ba3c1b279da842805)

(5) [https://tctechcrunch2011.files.wordpress.com/2013/05/faceboo...](https://tctechcrunch2011.files.wordpress.com/2013/05/facebook-q113-dau.png)

<comment><USER3> Great comment! The data shows a quickly growing social network and ad business (despite a lot of the naysaying in these comments).

From my personal observations, younger folks are spending a lot more time on Instagram and Snapchat, and a lot less time on FB and Twitter. And on Instagram, a lot of Snapchat content gets re-posted with their username in the comments.

Also, the amount of content I see created by people on Snapchat is way larger than what you see anywhere else. The expectation of curation is much lower so engagement is higher.

A few things about the product that I really like that illustrate Snapchat's transformation into a revenue generating business:

\- The new "Live" stories from different places around the world are amazing and one of the most intimate forms of cultural exchange outside of physically visiting a place that I've experienced. Advertising has started in these streams already.

\- The attempt with Discover to replace conventional TV programming with a mobile-first format is bold and has the potential to grow as younger folks find themselves consuming more media on their phones and as Snapchat builds out better relationships with content creators in the LA area.

\- Snapcash is a smart first attempt at getting people's payment information so that peer-to-peer but eventually brand driven commerce can happen on the platform.

<comment><USER4> Indeed, Snapchat seems to be doing well. Facebook, not so much:

[http://www.google.com/trends/explore#q=facebook](http://www.google.com/trends/explore#q=facebook)

Snapchat and Instagram was born on mobile whereas Facebook have been scrambling to adjust their offering to a different form factor than it was created for. With all of the technical debt Facebook seems to be saddled with no wonder they're not doing so good.

<comment><USER5> You put an awful lot of faith in a graph with no numbers...

<comment><USER6> Move our cursor over the graph. The numbers pop up when hovers over the line.

That being said, this graph is a weak indicator. Facebook is doing well in the ad space.

</comment></comment></comment></comment></comment><comment><USER7> > Spiegel also said he believes there is a tech bubble that will eventually > burst.

My cynical reading of this is that Snapchat wants to grab as much of retail investors' money before consumer tech valuations implode.

<comment><USER8> If he actually thinks there's value in his company, the tech bubble bursting would only help him as salaries should be pushed downward.

<comment><USER9> That would be true if there was a salary bubble. There isn't. On the contrary, salaries for engineers are still low relative to the scarcity, and tech startups are only a small portion of the IT job market. And most startup jobs are actually underpaid compared to "boring" IT.

There may be a bit of an impact in SV, but not much beyond. Same as last time.

<comment><USER10> > And most startup jobs are actually underpaid compared to "boring" IT.

Most tech workers don't realize this. I can work an exciting, below market startup job (infrastructure/devops), and then hop back into enterprise IT (it manager/vp engineering/senior linux admin) when the going gets tough and get paid more (ie market rate) until the next startup wave comes through.

</comment></comment></comment></comment><comment><USER11> Snapchat reportedly has minimal revenue, and is already discovering that advertisers aren't going to pony up $100 CPMs[1].

When Facebook went public, it was already generating more than a billion dollars in revenue a quarter. When Twitter went public, it was generating well over $100 million a quarter.

There is no doubt that Snapchat is an important platform and can generate revenue - perhaps significant amounts of it - but it has a long way to go before it can justify a public market valuation anywhere near its current private market valuation.

For comparison, Twitter is currently worth about $23 billion and generated more than $400 million in revenue last quarter.

Snapchat, in its current state, might be an interesting public market investment at a few billion. Above that, there are much better risk-reward opportunities.

[1] [http://recode.net/2015/05/08/snapchat-lowered-its-ad- rates-f...](http://recode.net/2015/05/08/snapchat-lowered-its-ad-rates-for- discover/)

<comment><USER12> But snapchat has huge unlocked revenue potential. they can 'flip' a switch and instantly monetize those millions of users by launching an advertising platform similar to the one Google and Facebook has. Facebook deliberately waited years before generating meaningful revenue, so did Google.

<comment><USER11> You're confusing the subject of potential with the subject of valuation. If Snapchat goes public at a valuation anywhere near its current private market valuation, the revenue potential will be more than built in to the valuation, with minimal discount for risk I might add.

As a public equities investor, this is entirely unappealing unless you believe that Snapchat could deliver a multiple far in excess of comps like Facebook and Twitter and at a time when valuations are already so rich.

At this point in the cycle, I do not believe it would be wise to be chasing an issue that has retail investor appeal but minimal revenue. If you're bullish on social, you could do a lot worse than to invest in the company that has the best working model.

<comment><USER12> that's why it has the valuation it has. the valuation is pricing in the potential . People thought Google and Facebook would not deliver, but they did. Maybe snapchat will, but maybe not. I think they will.

</comment></comment></comment></comment><comment><USER13> One could attribute Spiegel's "tech bubble" to the very ecosystem Snapchat is a part of. Consider the current cycle of money:

\- Venture capital goes into StartupX

\- StartupX two biggest costs: Infrastructure, Advertising (to varying degrees)

\- Infrastructure money goes to BigCorpY hosting platform

\- Advertising money goes to BigCorpY advertising platform

\- BigCorpY acquires StartupX

\- Money and BigCorpY stock goes into pockets of StartupX stakeholders

In this case, Snapchat spends all its infrastructure dollars on google cloud platform. Even when though Snapchat is not profitable, it still gives millions of dollars per month to Google.

(Snapchat, as far as I know, has not spent much on advertising, but some startups do not have that luxury.)

How fragile is an ecosystem built around ad dollars funded entirely by venture capital? What happens when Facebook misses earnings due to declining ad spend? Do venture capitalists reduce investment due to lowered expectations of highest possible reward?

Is this a house of cards?

</comment><comment><USER14> Am I the only one here who is impressed with Evan Spiegel + optimistic for Snapchat?

Everyone keeps citing the fact that the company is pre-revenue and pre- profits, but FB was too for a while. Snapchat can easily turn on the revenue and profit hose if they so choose to.

1.5 ads a day x $20 CPM x 100m DAU x 365 days/year = 1.095B in revenue a year from advertising alone! With Snapchat's explosive growth, we can assume it will eventually hit 200m DAU. That means 2.2b in annual revenue, just from advertising! Add in monetizing things like the discover feature, Snapchat, to even things like local event promotion, and that company can hit in 2.5b

The kicker here is that Snapchat can be instantly profitable. 1000 employees will cost at max 100M, and infrastructure costs will only cost a few hundred million. On 2B in revenue, that's insanely profitable.

The big question mark is if ads reduce user growth and engagement metrics. However, it seems like Snapchat is a platform uniquely similar to TV, hence I personally don't care when I see a high quality ad or two. Moreover, they are putting a lot of attention to this issue, which is awesome.

Just for a comparison, Twitter made 1.4b in annual revenue and has never posted a profit, and is worth 24 billion. If Snapchat makes 2.2b in annual revenue, and got the same P/S ratio, it would be worth 36bn. Not bad to get in at a 15bn valuation if you ask me.

</comment><comment><USER5> I wrote this here a few weeks ago:

Mind you, I've never used it, but Snapchat has 100 Million monthly uniques.

I can't think of a single company who has reached a critical-mass consumer audience and not been able to monetize. Sure, winds change, MySpaces rise and fall, but it wasn't a monetization failure.

Anecdotally, just a month ago I was walking and because i live in San Francisco I happened across a corner (Howard and New Montgomery) where there were ~20 girls about 13 years old being polled about their tastes, and the questions I heard waiting for my light was "Do you guys like smartphones?" ("yes", duh), "Is your phone more important than your TV?" ("yes", duh), and "What is your favorite app?" and the answer was unanimously Snapchat.

Snapchat is the teenagers answer to the question many millennials have fretted about -- "how will ppl born today deal with having all 18 years of their development online". The answer is: they don't put it online. It's peer-to- peer and temporary by social contract, even if the technology is imperfect.

So far, snapchat has played a savvy game. As an engineer, if they were based in SF, I'd consider working for them. They have tapped into something. Because my 28 year old wife has also been hooked on Snapchat for what seems like a lifetime now. Her most frequent contacts? Both of her 60+ year old parents, numerous cousins and aunts, etc. Her dad uses it to send stupid pictures that you might not expect from a 65 year old white haired CEO-type whose work is about as far away from tech as you can get.

<comment><USER15> >> I can't think of a single company who has reached a critical-mass consumer audience and not been able to monetize.

Twitter, just about every news site, Pinterest, WhatsApp, Digg, ...

<comment><USER12> digg never got big enough. Pinterest, Whatsapp are intentionally delaying revenue generation to build the userbase, a common strategy and not at all proof that they cannot monetize.

<comment><USER16> If they believe that whatever monetization method they're planning is going to stop their userbase growth, they might just as well give up. There's a lot of competition and the users can switch in an instant to something else. LINE had monetization in mind from the beginning and is still growing. Meanwhile Whatsapp is continuing to be a money sink for FB.

</comment></comment></comment></comment><comment><USER10> "We need to cash out before investors realize we have little value."

<comment><USER17> They were offered _three billion_ dollars that they turned down. That is the best offer they will _ever_ receive, and they fucked it up.

They fucked up big time.

The value of a company pre-IPO is what someone (or relatively few people) is willing to pay to acquire you. The value of a company post-IPO is essentially how much your shares are selling for. The prices of your shares are largely dictated by the opinion of a much larger number of people.

<comment><USER18> Come on. Even if snapchat rapidly declines I am guessing Spiegel is going to end up doing alright. Why not go for it like Zuckerberg did instead of selling?

Can't succeed if you don't try. Good for the founders for deciding to run with it.

<comment><USER19> Oh surely he will be fine. You would be a fool if you did as well as they did now, and ended up in really dire straights on a personal level.

Having said that, I agree. It was likely a huge mistake to turn that down. FB has whats app, and there is now so much competition in this space its uncanny. From iMessages, to FB Messenger, to Whats App, and smaller players like Kik, it seems like a congested market.

</comment></comment></comment></comment><comment><USER20> If something like this happens, it's definitely a sign that a bubble will burst. It's worrying that normal start buying shares from a unicorn with 0 cash flow.

</comment><comment><USER21> It seems like it's hn's general consensus that snapchat isn't worth that much(or anything), so why would anyone invest in it when it IPO's?

<comment><USER22> For the same reason people bought over-priced homes a few years ago: greater fool theory.

</comment></comment><comment><USER23> Any reason to assume it would only spread the (debatable) existence of a bubble?

</comment><comment><USER24> Since this makes absolutely no business sense, you can bet it's being done to cash out investors and shareholders, before the clock runs out on the party.

They can raise all the private funding they need, but they can't cash out that way.

<comment><USER25> Actually the fonders have been cashing out I'm pretty sure. Employees get antsy if there's no way to cash out. Not to mention venture investors, for whom this is (assuming the price stays up and they sell before the stock can start nosing its way down) a huge payday they can bank and look good to their LPs, so they can raise the next fund.

</comment></comment><comment><USER26> ... because we aren't actually making any money.

</comment><comment><USER27> Let me complete the sentence in the title "... before this cycle of the tech bubble bursts"

</comment><comment><USER28> This guy sounds like an asshole :S

"because it's more fun that way"

That's it? that's the reason to stay independent? fun?</comment>


Ask HN: Where can I find info on low-latency audio programming? - <AUTHOR> As a cognitive neuroscience grad student, I have a sudden need for low-latency audio stimulation.  In short I have two needs:
1.  I need to reduce jitter between programmatic audio playback and actual response in the headset.  This is the biggest priority.
2. I need to reduce latency between the aforementioned systems.
3. I need to accurately track the time at which audio playback occurred.
Where can I learn more about this stuff?  What basic vocabulary do I need to make relevant google queries? <comment><USER2> If you're coding for low latency not only do you need to tune your system you want to learn jackd and use jackd library for your app [https://github.com/jackaudio/jackaudio.github.com/wiki](https://github.com/jackaudio/jackaudio.github.com/wiki)

<comment><AUTHOR> This looks like what I need. Many thanks!

</comment></comment><comment><USER2> Arch has a lot of good info [https://wiki.archlinux.org/index.php/Pro_Audio](https://wiki.archlinux.org/index.php/Pro_Audio)

And the raspberry pi wiki has info that if relevant for any linux audio hardware [http://wiki.linuxaudio.org/wiki/raspberrypi](http://wiki.linuxaudio.org/wiki/raspberrypi)</comment>


WebSockets for Fun and Profit - <AUTHOR> https://stackoverflow.blog/2019/12/18/websockets-for-fun-and-profit/ <comment><USER2> Author here - thanks for sharing! I really enjoyed peeking under the hood of WebSockets, and learned a bunch. Hope this is helpful to others as well!

<comment><USER3> Why did you use the word profit on the title? Did I miss something?

<comment><USER4> "for fun and profit" is a common English idiom used to describe things that are both interesting and potentially earn money. Since this is stackoverflow, they earn money with this tech and features of the site.

[https://english.stackexchange.com/questions/323606/whats- the...](https://english.stackexchange.com/questions/323606/whats-the-meaning- of-phrase-for-fun-and-profit)</comment></comment></comment>


Cancers Can Vanish Without Treatment, but How? - <AUTHOR> http://www.nytimes.com/2009/10/27/health/27canc.html?_r=1&ref=instapundit

<comment><USER2> This is not especially new information, by the way.

The important thing to emphasize here is: You've got lots of precancerous cells in your body right now, and most of them will either die or will sit around harmless for the rest of your life. A few might grow into a tiny tumor, which in turn is overwhelmingly likely to sit around, or eventually die.

By the time you've got a tumor that you or your doctors can find, that tumor's odds of being vulnerable to a full spontaneous regression are rather low -- because, if they were so vulnerable, the odds are that they would have regressed before growing numerous enough to be detected.

It does happen, though, to the extremely lucky ones.</comment>


Google as a password cracker - <AUTHOR> http://www.lightbluetouchpaper.org/2007/11/16/google-as-a-password-cracker/

<comment><USER2> There's a well-known effective attack using "rainbow tables" that's _far_ more reliable than the crude approach of just Googling for the hash. There's tons of rainbow table based cracking services for MD5 on the web. Just google for "Rainbow Table MD5 Crack" or "RainbowCrack MD5".

This is just yet another reason to salt your passwords with bits from a good random source.

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

<comment><USER3> The "randomess" of your salt is irrelevant. With rainbow tables you will find _every_ letters+digits combination shorter than X chars. So what really matters is if your salt is long enough.

</comment></comment><comment><USER4> I want an acoount at webmail.rr.com,i cant bcos i could not register.here is my email address email@example.com send me the username and password. thanks</comment>


your boss doesn't want you to die at your desk (but you still might) - <AUTHOR> https://www.haleymbryant.com/blog/dont-die-at-your-desk <comment><AUTHOR> it took me about a year to figure out that my boss wasn't out to get me. now, i'm trying to save others some of the anxiety of working really hard (to the point of burnout) and not really getting anywhere.</comment>


Don't make your college essays too good - <AUTHOR> http://www.boston.com/news/education/higher/articles/2008/02/12/college_applications_can_be_too_good/?page=full <comment><USER2> I suspect that parental assistance on college admission essays has happened for decades. However, with the hyper-competitiveness to get one of a very limited number of admission slots, some parents (wanting to give their kids what they want, not what they need) are doing anything to help them. The modern "helicopter parent" is the stereotype of this type of parent.

The current application process is a bit archaic. Clearly, with the advent of the Internet and the quick and easy exchange of information, colleges should ask for portfolios of sample, graded school work. These portfolios should supplement applications and may be referenced when there's a need to compare the relative quality of two seemingly equal candidates or any question about the authenticity of the a student's application (including essay).

(On a side note, I'm surprised that more software developers don't keep and share their own portfolios of sample work for prospective clients/employers. A representative body of a person's work is clearly more of an indicator of the quality and skill of a person than any statements/certifications on a C.V. or résumé could possibly be.)

<comment><USER3> I think that portfolio's of software get messy in exactly the same way that joint research papers get messy: how do you figure out who did the work?

That said, I think you're right that in a large body of work you see the little eddies in the programmers mind, and thats an evaluative tool without comparison.

</comment></comment><comment><USER3> This is a topic that used to bother me before I graduated and left academia behind. When I attended a private middle and lower school, parents would call my mother and ask her how she completed the current project. The level of penetration of this practice was such that it was assumed that the parents would do their children's work. And this was for students younger than 14.

Did any of that work actually matter? Probably not, but the parents felt strongly enough about it to spend hours writing 4th grade reports on Gettysburg or the Cherokee Indian tribe.

With parents willing to go that far, I don't think its surprising that they're shelling out so much money for admissions editors or are writing the essays for their children.

Really, though, I think its just symbolic of how far the American education system has strayed from its imagined mandate to educate. Children don't learn how to write or research when they are thusly coddled, and they don't learn how to deal with new and challenging situations when their parents go along for their first job interviews and browbeat the interviewers.

I think that these misguided parents are elongating childhood in a society where childhood already lasts longer than it ever has before, and are stunting their children in their efforts to give them a foothold above their peers. These parents won't be thwarted by reason, and will find some other mechanism to 'help' their kids advance. I don't think trying to neutralize them will ever be a good investment of one's time.

</comment><comment><USER4> My brother was threatened with expulsion were he to not stop 'having his parents write his essays'. But they were entirely his own. It took until eleventh grade before teachers started to appreciate this.

</comment><comment><USER5> "Essays with some rough edges are not only authentic, they are better reads."

Next strategic refinement for advisers: sabotage the perfect essay a little bit to make it more credible.

<comment><USER6> or write both your essay and your SAT writing sample well

</comment></comment><comment><USER7> "colleges should ask for portfolios of sample, graded school work."

There is some merit to this suggestion. It would make the counselor's job easier, the admissions officer's job easier, and the student's job much easier! But one concern is that this would tend to advantage students in private or top-tier public high schools even more than the current system does.

<comment><USER8> Google "helicopter parents" Some parents feel that it is within their rights to write their children's high school papers.</comment></comment>


But – A way to pass along a callback with just a single argument - <AUTHOR> https://github.com/bevacqua/but <comment><AUTHOR> There's also `butt` if you have more complicated needs. Feel free to use it.

[https://github.com/bevacqua/butt](https://github.com/bevacqua/butt)

<comment><USER2> Why not allow an optional 2nd argument that defaults to 1 on your `but` library to do this?

<comment><USER3> Why complicate things? If it means so much to you, you can just

      var butt = require('butt');
      var but = function(fun) {
        return butt(fun, 1);
      };

or even

      var but = function(fun) {
        return function(arg) {
          return fun(arg);
        };
      };

</comment></comment></comment><comment><USER4> Sigh ...

      module.exports = function (fn) {
        return function (first) {
          fn(first);
        };
      };

</comment><comment><USER5> Can anyone explain to me why I couldn't write

      n.forEach(console.log);

Just tested on Chrome, it gives me an error

      TypeError: Illegal invocation

<comment><USER6> When you use `console.log` that way it gets `this` set to `null`. When you call `console.log("hello")`, `this` is set to `console`. Your code would work if you set an explicit `this`.

        n.forEach(console.log.bind(console));

I don't think there's any reason for this library to exist after you understand `this` semantics but I may be missing something.

e: was, in fact, missing something. Apologies for the disparaging comment, see replies.

<comment><USER2> Well it's not just about `this` but the arguments to pass to console rather. In this case:

        n.forEach(console.log.bind(console));

forEach is passing console all of its callback arguments, resulting in logging of keys, values, and array.

EDIT: Forgot array

<comment><USER6> Ah, I understand. It reminds me of how the `cut` function could be used in Scheme.

</comment></comment></comment></comment><comment><USER7>
         function butter (){
           fn=arguments[0];
           return function(){
             var args = [];
             for( var n=1; n<arguments.length; n++ ) {
                args.push(arguments[n]);
              };
            return fn.apply(this,args)
           }
         }

_edit: I know my loop is totally anachronistic, but I 'm short on time for testing this._

<comment><USER3>
      function butter(fun, count) {
        count = count || 1;
        if (count < 1) {
          throw new Error('Can't butter no toast');
        }
        return function() {
          return fun.apply(this, Array.prototype.slice.call(arguments, 0, count));
        }
      }

<comment><USER7> This is a dumb question, but I feel like maybe I'm failing to pick up on something with respect to the necessity of the count parameter. It doesn't seem like it should be necessary, but both 'butt' and your version here use it. What is it for?

<comment><USER3> It specifies how many arguments the returned function should take; in my implementation, it defaults to 1 (so you can use it like "but"), but accepts other values (so you can use it like "butt").

The reason why it's necessary to specify how many arguments are of interest is because

Of course, since this is just common or garden partial application in a language with first-class functions and a liberal attitude toward signatures, it could be trivially generalized thus:

      function partial(fun) {
        var applied = Array.prototype.slice.call(arguments, 1);
        return function() {
          var args = applied
            // clone the already applied args, so we don't mistakenly modify when we...
            .slice()
            // ...tack on the args we received in this function's call
            .concat(Array.prototype.slice.call(arguments));
          return fun.apply(this, args);
        };
      }

      var addThreeNumbers = function(a, b, c) {
        return a + b + c;
      };

      var onePlusTheseTwo = partial(addThreeNumbers, 1);

      var threePlusThisOne = partial(onePlusTheseTwo, 2);

      assert(addThreeNumbers(1, 2, 3) === 6);
      assert(onePlusTheseTwo(2, 3) === 6);
      assert(threePlusThisOne(3) === 6);
      // -> all true

It only looks like wizardry if you're not used to dealing with higher-order functions, wherein I think is meant to lie the joke, if any.

<comment><USER7> I don't encounter higher-order functions very often, and I certainly am not mentally flexible with them. Nonetheless, I have heard of partial application, yes. I understood what the count parameter was _doing_.

What I was having trouble understanding was why it was being used; specifically, why 'but' would have a strict arity of one in the first place, and why a second function (specifying arity) would be necessary. It doesn't follow very clearly from the examples given at all.

 _edit: ...was this whole thing actually a joke? I thought he was serious._

<comment><USER3> Oh! Sorry, no, that's because ECMAScript (Javascript)'s historical baggage and lax attitude toward arity produce a combinatorial explosion of stupidity.

See, you can't just

      ['1', '2', '3'].map(parseInt)

because:

0) All Javascript functions are variadic; the signature specified at definition time is largely advisory, and has semantic meaning only in that the language will automatically declare and bind named arguments. Arguments named in a function's signature, but not passed at call time, are undefined; arguments not named in a function's signature, but passed at call time, are not automatically bound to named variables, but can be accessed via the _arguments_ binding, which is a unique object magically bound within a function's scope, but which will be overridden by a named argument "arguments" if one exists in the signature,

and

1) Array.map and friends pass their callbacks three arguments: the value of the element, the _index_ of the element in the array being mapped over, _and_ a reference to the _entire_ array being mapped over,

and

2) Number.parseInt requires one argument, the value to cast to integer, and accepts an optional second argument, specifying a radix between 2 and 36 inclusive.

So our naïve mapping above expands to the following series of calls:

      parseInt('1', 0, ['1', '2', '3']);
      // -> 1
      parseInt('2', 1, ['1', '2', '3']);
      // -> NaN
      parseInt('3', 2, ['1', '2', '3']);
      // -> NaN

tl;dr: None of this would be necessary in a language whose collection methods did sane things. Since Javascript is not such a language, this is what we have to do.

 _...I 'm not actually sure this whole thing was a joke, but it reads to me a little like it might've been written with the sort of smirk you tend to see academic FP purists directing at industry engineers._

</comment></comment></comment></comment></comment></comment><comment><USER8> Extremely powerful library</comment>


Google starts testing "Hands Free" payments - <AUTHOR> https://get.google.com/handsfree/#?modal_active=none <comment><USER2> Is there actual progress on this? Anyone seen it live? Because the video and site are from May 2015.

<comment><AUTHOR> From what I've heard, they are handing out ads in the Bay Area and targeting a small crowd, starting with Mountain View. I've had friends who got one, they come with a 25$ coupon.</comment></comment>


Dalin – A C++ non-blocking network library on Linux - <AUTHOR> https://github.com/leohotfn/Dalin <comment><USER2> From a short review I don't like this much.

\- It's containing it's own abstraction over pthread instead of std::thread/std::mutex/... \- It passes shared_ptr via reference (yeah, this saves an increment and decrement on the refcounting, but the code is not tuned that much) \- it prints directly to sterr (via fprintf) making it hard to redirect errors somewhere else \- It seems not to be prepared to be ported to other platforms \- It could make use of std::chrono instead of int64 timestamps \- no build system (no CMake or anything) \- tests not integrated, look verbose, all tests individually recompile all files, makes it hard to work test-drive

In summary I see no compelling reason over boost asio or such and potential issues.

<comment><USER3> I agree with the last sentence. Nevertheless, if it's mainly a learning project for the author, I don't think there's anything wrong with writing it.

Some technical review for the presented library:

\- It doesn't seem to support any kind of backpressure, which is basically a nogo if you want to build something reliable on top. On the receiving side you will always get data pushed via callbacks without the possibility to stop it. On the sending side it will always return void and queue the data internally if it can't be send immediatly. A slow, malfunctioning or attacking remote can DOS you through that. Ways to implement backpressure are pull-style operations like in boost asio (you start a read and get a single callback when it's done) or some pause/unpause functions and buffer treshold indicators (like in node.js). I personally prefer the first model now, especially if the single operations return something like a promise.

\- That brings me to the next point: The framework does not seem to have a good way to build composable operations. E.g. build a function that reads a websocket frame from the socket. Or another function that performs the websocket handshake by reading the HTTP handshake request and sending the associated response, but leaving the stream intact for any following user to to be able to use if for sending websocket frames. And ideally all operations should be trivially boundable by timeouts. With having a single receive callback for available data there's mostly a need for complex callback-driven state machines.

\- Imho a new good framework should also provide a sophisticated and universal story for cancellation of composed operations. Like backpressure that's a thing which can be avoided for demo applications, but for battleproof production environments it is necessary.

\- Thread safety and data races: There seem to be a few issues, e.g. TcpConnection::state isn't synchronized and used from multiple threads. loop_->runInLoop([&](){ this->shutdownInLoop(); }); will segfault or cause undefined behavior if the TcpConnection object was deleted befor the queued functor runs. There also might be some reentrancy issues: In each callback to the user (like MessageCallback) the user might fiddle around with the object and change it's internal state. If that isn't expected and guarded against then code that runs after the invocation of the callback might not work as intended. By the way: That's the situation where js-style promises shine: As the callbacks are not immediatly invoked but in the next eventloop iteration there is less rooom for errors. But of course it costs additional performance.

If these things now sound as a harsh critique let me try to bring it back into relation again. First of all: Network programming is super hard because of "concurrency everywhere". There are always some execution paths that one hadn't thought about before, and it takes a lot of time to learn all the gotchas. I do that stuff now for 8 years, probably had worse assumptions and code for quite some time, and still learn now things every day. It's for sure not a bad idea to write an own library in order to learn these things. For users the well-known libraries (asio, libuv, QT Network, etc.) might be a more solid choice.

Also in my opinion even the big and well-known libraries have some dark corners, there hasn't been a golden solution to network programming yet:

\- asio is hard to use, callback that are happening on invalidated objects or operations that are still running and use invalidated buffers are are common problem for non-experts. It get's worse if you use asio with multiple threads (especially one io_service and multiple threads). Composed operations are possible but hard to write efficiently (best put all shared-state between operations in shared_ptr's and write a state machine. Maybe it's better with coroutine support.

\- libuv is generally well engineered, but is still doesn't offer lots of support for higher level composed operations and cancellation.

\- Netty has some dark corners to watch out for. E.g. if handlers are exchanged during runtime (e.g. for websocket upgrades) or handlers are running in multiple threads there's quite some room for errors on the user side. Otherwise it's a well engineered framework in many areas.

\- node.js stream abstractions with their multiple modes can be tricky to understand and to use for higher-level abstractions. I guess if networking would be based on promises with async/await support it would be easier now - but those weren't available back then.

Imho the most promising concepts for network programming are the coroutine based ones. Go's model works well, is on the easier side to use (even though goroutines/threads introduce more possibilities for race conditions). It ticks most boxes, e.g. backpressure is naturally available through sync APIs. Cancellation could probably be improved.

Martin Sustriks experiments with libdill also look interesting. As well as Kotlins coroutine model.

The promise based models with async/await are also quite promising, e.g. in C# or node.js. However I find those models fall a little bit down as soon as they go to support both multiple threads and an event loop. Having to remember which callbacks/continuations run on which thread and what is allowed there is cumbersome. Imho either multiple threads with synchronous code or a single thread with an eventloop is ok.

Ooops, that was now a little bit more text than I intended to write. But maybe it helps someone.

<comment><USER4> Recently modified a legacy C++ program at work that was using 'bare' socket code, that now needed to support multiple connections. First approach using Asio worked, but as you mentioned involved scattering logic in various callbacks and transferring state around everywhere. And that was just the 'pure' connection establishment code; the business logic part of things also needed to occasionally do comm, and it wasn't really viable to rip up the legacy call hierarchy to convert things into callback form.

Enter Asio + stackful coroutines. Migrating the old business logic was nearly effortless. Just had to be wary of accidentally blowing the stack, and watch for exceptions in the various coroutines' mains. But otherwise able to preserve all that old, functioning code while meeting the new requirements.

<comment><USER5> I love that we came to the same conclusion. [https://github.com/kurocha/async](https://github.com/kurocha/async)

</comment></comment></comment></comment><comment><USER6> "Only runs on Linux"

C/C++ doesn't really have good general networking libraries that fit all purposes. On that note, I say: yes, great topic!

However.

Portability is one of the key features of C++, and why people still choose it for new projects. If one can constrain project to Linux I'm sure the project constraints would allow a more productive language to be used altogether.

<comment><USER7> On the one hand, you're right -- in that I can see and respect why you say that.

On the otherhand, what the heck is wrong with using the syscalls? Every time I write a new high performance networking application, sure, i lose a day or two building primitives out of send recvmsg listen accept and splice, but once i'm done, i'm done, and things work.

I'm confused why people feel the need to make paper thin abstraction layers covering the berkeley sockets API. In the time it takes one to learn how to use the flavor of the month, one probably has gotten halfway there to understanding how to Really do networking.

It's not like networking on Linux is even a shred harder than easy... __mumbles off into the distance __unlike BLE on Windows10 (and linux)....

Tangentially, I positively can't WAIT for Networking support in c++20 -- that and Concepts I've been waiting for with baited breath.

[EDIT: apologies, i think my tone got away with me.. stupid aspie tendencies... what i MEANT to say somewhere in there, directed to the author, was: "Good Job!!" It's hard work to put yourself out there and enjoy accomplishment. Please do let the rest of the community know if you'd welcome help in porting it to other platforms and adding features and improving performance. Best!]

<comment><USER8> > On the one hand, you're right -- in that I can see and respect why you say > that.

> On the otherhand, what the heck is wrong with using the syscalls? Every time > I write a new high performance networking application, sure, i lose a day or > two building primitives out of send recvmsg listen accept and splice, but > once i'm done, i'm done, and things work.

...

> Tangentially, I positively can't WAIT for Networking support in c++20 -- > that and Concepts I've been waiting for with baited breath.

You know that the networking support in c++20 is just Boost.Asio with namespace std, right ? You could have been using the exact same API today (or ten years ago for what it's worth), which is header-only, and supports TCP, UDP, Unix sockets, SSL, serial port communication, and all of this either synchronously or asynchronously, etc...

> I'm confused why people feel the need to make paper thin abstraction layers > covering the berkeley sockets API.

Because:

* there are more efficient ways than the sockets API. For instance on windows the preferred way is IOCP: [https://msdn.microsoft.com/en-us/library/windows/desktop/aa3...](https://msdn.microsoft.com/en-us/library/windows/desktop/aa365198\(v=vs.85\).aspx) which allows for far better behaviour when multi-threading than select / poll.

* that's like saying "std:string is a thin abstraction layer over const char* and strlen". There is __much __more to this in big networking libraries: event loop handling, thread pools, etc.

<comment><USER9> And on macOS BSD sockets are on their way out, as the new networking stack (user space based) doesn't support BSD sockets (page 15).

[https://devstreaming- cdn.apple.com/videos/wwdc/2017/707h2gkb...](https://devstreaming- cdn.apple.com/videos/wwdc/2017/707h2gkb95cx1l/707/707_advances_in_networking_part_1.pdf)

</comment></comment></comment></comment><comment><USER10> It would be great if there was an obvious example of some sort in the README. I really have no idea what this offers other than "Linux-only" and "async"

</comment><comment><USER11> How does this differ from, eg, asio?

<comment><USER7> "asio requires boost"

<comment><USER12> Not necessary to pull whole boost

<comment><USER13> You are missing gp's point.

Any boost dependency is an instant no-go in a lot of projects.

<comment><USER14> Why is that? Most of the modern c++ features were directly borrowed from boost

<comment><USER13> Given the universality of C++, everyone effectively ends up writing in their own dialect and there is a sizeable faction that uses it as "C with Classes" and "C with templates". So there is a lot of C++ projects that explicitly steer clear of modern C++ features, especially derived from the mother of all unholy abominations and the manifestation of everything that is wrong with the modern C++, the boost library.

Give or take.

<comment><USER9> Usually those are the projects where CVEs are a common feature..

<comment><USER15> They are also the projects that get the most attention. I wouldn't rule out that python/javascript/whatever projects have just as many, if not even more, security flaws than your typical widely-used C library. They are just not interesting enough to warrant the required attention. The flaws are likely to be more subtle than simple buffer overflows too, think of all the abstractions involved.

<comment><USER9> My point was "C with Classes" and "C with templates" versus modern C++ best practices.

C++ code can be quite safe, providing people stop writing C with C++ compilers.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER16> Its interesting that I can't find a comment in this thread that speaks to API design or how easy it is to use.

</comment><comment> dis-sys had a quick look at the src/tests, from what I can tell, it is more like a hobby project started for learning c++11/networking. a few of those tests are really more like examples

<comment><USER17> Good, because the readme is severely lacking in any samples. With a claim of "Simple API", not providing samples in the readme is a sin.

</comment></comment><comment><USER18> Why is it not using C++ 14? Not a criticism, honest question, I only write C++ occasionally.

<comment><USER18> Why is this being downvoted? I don't know why one would prefer either.

</comment></comment><comment><USER19> The link seems to be gone.

<comment><USER20> Indeed. I hope it has not been deleted because many comments here are mostly negative…

</comment></comment><comment><AUTHOR> Apology for my rudeness, I deleted this repository two days ago.

</comment><comment><USER21> Can you make a small web server on top of this to demonstrate the performance?</comment>


Backstage: an open platform for building developer portals - <AUTHOR> https://github.com/spotify/backstage <comment><USER2> Member of the Backstage team here. Sorry if the messaging is unclear; we'll work on it.

Allow me to tell you about Backstage in the form of a story. Assume you're at a medium-to-large-sized company, in a team tasked with boosting developer productivity. You've developed a kick-ass pipeline to calculate test flakiness based on historical build logs and some data from your internal userinfo service. Problem is, userinfo has suddenly started exhibiting p99 response times in the 10s of seconds. It's not feeling well.

You go to backstage.yourcompany.net and search for userinfo. You reach the overview page for the service. It shows a ton of information, some of it pertaining to who owns and operates the service. Apparently it's the devcore team, they're on #devcore-support on slack according to the page but they're in the US west coast timezone so they're asleep. Well you are using the PagerDuty plugin in Backstage so there's a big "page us" button right there.

So now you've got the issues solved and you need to expose the pipeline output somehow. Cool, you go to backstage.yourcompany.net and click "Create", and select one of the templates. It scaffolds a Go service in your GitHub org, according to your company's best practices. All the builds and deployments are already set up and hot. You add some code to your service and shortly it's up and running and serving the pipeline output with caching out of S3. You check backstage.yourcompany.net to see how all aspects of your service's runtime status is looking. All good. Now, how do you actually get that useful data into your company's other devs' hands?

Well you COULD make an entire microsite, or some CLI tool orrrr... Come to think of it, they are already all using backstage.yourcompany.net, and there's already an integration in there showing all builds for all services, and it has all of the utilities and auth and bells and whistles already in place for you. So you make an internal backstage plugin. You find that it's pretty much a matter of cloning your internal backstage repo, running a create-plugin script, and boom you are up and running. You add a data source feeding off of your new Go service, you add a column to the builds table ... and you have your own team review and merge it because it's covered by CODEOWNERS. And everybody rejoiced and told you how useful this new column was to them. You start getting a bit famous on your internal Slack, actually.

Now you are getting greedy. You feel that actually, this plugin could be useful to the general public - as long as the build logs are in a known format, you can eat them. You start open sourcing the pipeline, and the service - and, critically, also the backstage plugin.

This is how things are internally at Spotify today. What we released here today is not this entire story yet, but we are lifting more and more out into the open at a rapid pace. Check the repo and microsite for more info, and hold tight.

More is coming.

</comment><comment><USER3> Predictions so far:

\- "to me it seems like it's a way of abstracting all the different infrastructure tooling that a large-scale company has."

\- "It looks like an onboarding tool, monitoring, and knowledge database."

\- "So it's a frontend to put in front of your existing frontends so developers can infrastructure the infrastructure?"

\- "Seems like a developer-oriented version of Confluence, if I'm reading it correctly, but I'm also a bit unsure."

\- "Seems like a competitor for Datadog and other monitoring tools to me."

That message really couldn't be more unclear.

<comment><USER4> A sort of meta lesson here for bootstrappers and technical founders is that explaining in simple terms what your product does is actually extremely difficult. YC hammers that point a lot too.

Good example here is the "open, plugin etc." feature being almost right the top. I don't care if it's open or that I can make a plug-in if I have no clue what it does.

<comment><USER3> Also, start with the problem. Get people engaged first, then offer a solution.

</comment></comment></comment><comment><USER5> For the people here that are confused as to what it does, to me it seems like it's a way of abstracting all the different infrastructure tooling that a large-scale company has.

Consider a team that wants to deploy something to the cloud in a company. They are probably engineers who aren't necessarily well-versed in all cloud tooling, yet they are required to know and understand Terraform, GCloud/AWS/Azure CLIs, Gitlab CI, Prometheus, various monitoring and alerting tools, Kubernetes, Docker, etc. And this is just to deploy their application. Once other resources come into play (databases, queueing, etc), they need even MORE knowledge.

A tool like Backstage allows developers to get a uniform overview of all their resources, regardless of how and where they are running. I'm not sure if it also allows the creation of new resources, but I guess that would be a fairly obvious direction to go in.

It won't solve the need to _at some point_ know a bit more about the technical details about all the underlying tools, but it can allow teams to gradually learn about all this new tooling instead of having to know about everything upfront.

<comment><USER6> Borg, Kubernetes, et al? Abstracting complexity away is great, but at a certain level you just can't hide it, I think. Would love to be proven wrong, though.

</comment></comment><comment><USER7> This is by Stefan Ålund from Spotify, who was (is still?) product manager for System-Z. System-Z is Spotify's internal service catalog and developer productivity suite. (I'm not sure if they still use the name System-Z internally).

Here's an old talk about it (2016): [https://www.youtube.com/watch?v=7XDA044tl8k](https://www.youtube.com/watch?v=7XDA044tl8k)

and here's some slides from a newer talk (2017): [https://microcph.dk/media/1024/conference- microcph-2017.pdf](https://microcph.dk/media/1024/conference- microcph-2017.pdf)

In a nutshell, the aim is to make it easy for developers to find out info about other services as well as make changes to the services they own.

It looks like Backstage is about open sourcing big parts of System-Z so that others can build on it.

Disclosure: I'm CTO @ OpsLevel, where we make a SaaS-based service catalog product.

</comment><comment><USER8> I just skimmed much of their website, and felt like I was left still wondering what Backstage actually _does_.

<comment><USER9> It's a god system. It tries to do everything, but in the end does nothing well.

<comment><USER10> as a user of it, I beg to differ.

</comment></comment></comment><comment><USER11> Is it me or is this really unclear? I get it is supposed to simplify the back- end for developers but for what exactly? Scheduling tasks? looking at metrics? I get I can install plugins but what plugins? Maybe this isn't for me, but it is unclear to me precisely what scenario this is solving for?

</comment><comment><USER12> So it's a frontend to put in front of your existing frontends so developers can infrastructure the infrastructure?

<comment><USER13> The first read I had on this (which sounds like it's not correct based on other posts) is that it's a simply-extensible frontend for creating portals from a series of disparate frontends of existing systems.

In our case, I might want to use that to create a frontend for QA to see relevant information summaries from GitLab, build information from Jenkins, and current test plan status from our integration testing system.

For managers, I might want a frontend that shows them activity on certain branches of certain repos, the number of open merge requests/change orders, and the % of progress towards a milestone.

I hope I'm right, because that could be super useful.

</comment></comment><comment><USER14> I agree with other comments here about unclear.

The juiciest part is the animated gif, but all I want is a lot of screenshots and bit of text explaining each feature.

(Now I need to take my own advice and revisit my projects. hahaha)

</comment><comment><USER15> That's really useful for big companies having problems with documenting their ecosystem without relying on tons of Word documents.

</comment><comment><USER16> Looks like a developer portal similar to the AWS[1] and Azure[2] open source offerings where a non-developer can execute API calls in the web browser.

[1] [https://github.com/awslabs/aws-api-gateway-developer- portal](https://github.com/awslabs/aws-api-gateway-developer-portal)

[2] [https://github.com/Azure/api-management-developer- portal](https://github.com/Azure/api-management-developer-portal)

</comment><comment><USER17> Seems like a developer-oriented version of Confluence, if I'm reading it correctly, but I'm also a bit unsure.

</comment><comment><USER18> Sounds like similar to the pitch for [https://buoyant.io/2019/11/18/announcing- dive/](https://buoyant.io/2019/11/18/announcing-dive/), which is in closed beta and I haven't tested yet.

Any other competitors / SRE dashboard/metric aggregators that folks like? I think this is a level of abstraction above raw datadog/grafana dashboards.

Gitlab seems to be moving into this space a little with their deploy boards and k8s monitoring tools.

</comment><comment><USER19> New thing aims to help developers deal with the overhead of having too many things to worry about, uses plugins.

</comment><comment><USER20> It needs clearer messaging, but I think this looks great! Like a turbo CMS built for developers.

Integration with GCP/AWS is also great, I know plenty of people on my team that struggle with their UIs - this would really help them out

</comment><comment><USER21> Wow, so a dashboard + backend? Or a framework? Or both?

</comment><comment><USER22> Seems like a competitor for Datadog and other monitoring tools to me.

<comment><USER10> its not a monitoring platform (though we have our own in-house opensource tool for that), its a portal for developers and engineers to mange...everything. create new components, manage capacity and deployments, see your CI builds, find documentation, etc etc etc. ties all the separate systems and tools together into a single site.

<comment><USER23> So it's an extensible dashboard / intranet site? A lot of people here are having a hard time understanding what this project is for. I think the README needs work.</comment></comment></comment>


Measuring GC latencies in Haskell, OCaml, Racket - <AUTHOR> http://prl.ccs.neu.edu/blog/2016/05/24/measuring-gc-latencies-in-haskell-ocaml-racket <comment><USER2> Well, Today I Learned that Racket is GCed; I assumed the contrary due to John Carmack being enthusiast about it in the context of video games.

I understand the fact that not everything in a game belongs to the critical 16ms budget (and know about e.g. Unity, which lets you talk C# to it), but I'm still puzzled; can someone expand on:

\- Which are these non critical parts? Rendering / physics / animation are certainly in the critical path. That leaves only simple "client" game logic out of it, right? What else?

\- For these non critical parts, what are the typical acceptable time boundaries? For example, the article mentions _" maximal latencies of around 22ms"_ for Racket. How is it acceptable for non-critical-path parts? How much would still be acceptable? 50ms? 100ms? _" That depends"_?

\- And regarding Haskell and OCaml, which I only vaguely know about, I had never asked myself how they handle memory. Which makes me ask: are there non- GCed functional programming languages? Does it make sense? (Especially given the kinds of deep complex data structures produced by the immutability that often comes with these languages.)

<comment><USER3> > _Well, Today I Learned that Racket is GCed_

I'm curious how did you expect Racket to work without a GC or any Lisp like language for that matter or did you just assume because of video game usage?

> _\- And regarding Haskell and OCaml, which I only vaguely know about, I had > never asked myself how they handle memory. Which makes me ask: are there > non-GCed functional programming languages? Does it make sense? (Especially > given the kinds of deep complex data structures produced by immutability.)_

Rust and C++ depending on your definition of FP. I believe there are some old ML languages as well (and even some _old_ lisps).

<comment><USER2> > _" I'm curious how did you expect Racket to work without a GC or any Lisp > like language for that matter or did you just assume because of video game > usage?"_

Just because of video game usage and my perception of Carmack as a performance freak who wouldn't compromise on performance. (Sloppy reasoning, I know! Thus, my questions on where GC makes sense in games)

<comment><USER3> I actually was curious and not trying to be snide. For example I wasn't sure if Carmack or whoever might be using Racket for code generation (ie multi- stage programming) which in theory would avoid GC. I wasn't sure how he was using Racket.

<comment><USER2> No problem, your comment was clear and I didn't perceive it as snide, at all. Thanks for your carefulness in the discussion.

</comment></comment></comment></comment></comment><comment><USER4> I have a really dumb question about the Haskell GC, which I've never been brave enough to ask, but here goes:

I thought everything in Haskell was immutable? If so, wouldn't that imply that it's impossible to create cyclic references (i.e. A and B can't both reference each other, because one of them has to be created first, and once created, it's immutable)?

Couldn't you then just use reference counting to decide when to recycle objects instead of having full-blown GC pauses? Or is it too expensive to keep a reference count on all those objects and keep it updated? Whatever cost it has, it seems much more preferable to me compared to 50 ms GC pauses for relatively simple code.

<comment><USER5> Not a dumb question at all! You can create cycles in Haskell thanks to lazy evaluation. I can make a circular list in Haskell with the following:

x :: [Int]

x = 0 : y

y :: [Int]

y = 1 : x

And thus we have a circular list with the elements 0 and 1. It's technically an infinite-length list with 0 and 1 repeating forever, but Haskell will represent this in memory as a circular list.

<comment><USER4> Ah, I see, I figured that there might be some case like that. I would have expected that to be a compile-time error because `y` is an unrecognized identifier by the time `x` is defined, but I guess it makes sense with lazy evaluation to not make that kind of ordering matter.

<comment><USER6> Lazy evaluation is not important item here. It is merely the semantics is defined in a way that the order of declarations does not matter.

Other languages have this property too - say, C# (not entirely true, but pretty close - at least if you think about top level methods etc.).

Also an example where the order of declarations does not matter at all, because there is just one declaration:

       x :: [Integer]
       x = 0 : 1 : x

</comment></comment></comment></comment><comment><USER7> Why is it that GC technology is so hard to transfer from one language to another? I'd kill for a FLOSS implementation of Azul's GC, or a good small- heap-specialized GC for .NET.

It seems far too often we run into popular languages whose growth has stalled due to their GC, or features that have been held back by GC, or whatever. And then other languages have several different GCs with different characteristics that can be swapped out with a simple CLI flag.

Is it something that is deeply and strongly coupled to the language structure? Is the parameter space for tuning just too large to practically swap one GC for another? Incompatible algorithms? Maybe one of those situations where you get 80% of the way with an ounce of effort, but to get to 81% takes years?

<comment><USER8> Some answers that come to mind:

      - Azul's GC requires cooperation from the kernel; I believe it
        specifically uses the virtual memory mechanism to implement a read
        barrier.  Basically you need a patched Linux kernel.
      - Real-time GC will assuredly lower overall throughput, and increase
        complexity.  At the very least you need either a read barrier or a
        write barrier.  I don't think anyone uses read barriers normally;
        write barriers are often used for generational GC, but I *think*
        the write barriers used for real-time GC involve more work than
        those for generational GC.
      - Adding a read or write barrier to a language implementation that
        doesn't already have them means you need to guard every single
        place where someone reads or writes what might be a pointer.  This
        is easy to screw up.
      - Several real-time GC algorithms punt on moving objects, and are
        thus vulnerable to memory fragmentation.  This obviously reduces
        the robustness of the runtime system.  (Others use stop-the-world
        to do compaction, and thus are not real-time.)

</comment></comment><comment><USER9> Follow up: [https://blog.pusher.com/golangs-real-time-gc-in-theory- and-p...](https://blog.pusher.com/golangs-real-time-gc-in-theory-and- practice/) and HN: [https://news.ycombinator.com/item?id=13086059](https://news.ycombinator.com/item?id=13086059)

</comment><comment><USER10> I don't know Haskell but it sure has some odd syntax:

        type Chan = Map.Map Int ByteString.ByteString

is odd looking. Why the duplication?

<comment><USER11> That's what you get by importing qualified and being too verbose.

This same can be written as:

      type Chan = Map Int ByteString

People do prefer importing Map and ByteString qualified, so their functions will have a prefix of their choice. But very few people import ByteString as "ByteString", most use something shorter.

<comment><USER12> Gotta say, I'm Team Qualified Import. Use it all the time in my Clojure code. I want to know where things come from.

<comment><USER11> On Haskell you don't even get much choice. The community is so biased towards qualified importing that most modules clash, and you'd need some incredible stretching to use them unqualified.

As most things in Haskell, it tends to work greatly. The usual problems go away due to some combination of Haskell's features and the main problems are things you wouldn't think about.

</comment></comment></comment></comment><comment><USER13> so can we reasonably surmise that Ocaml outperforms Haskell massively on GC pauses? What's the catch, if any?

<comment><USER12> Catches with OCaml? Mutable strings, unchecked integer arithmetic. It's got its fair share of ugly corners.

<comment><USER13> it seems to me that ocaml/(ocaml zealotry) > haskell/(haskell zealotry). This of course does not suggest that Ocaml>Haskell, only that one must probably apply some coefficients in favour of Ocaml given that it is extra-anglo-saxon domain and therefore probably suffers some marketing disadvantage.

Just a casual observation of the commento-sphere after a lay imperative programmer's cursory research of functional programming. This post, sample-of- one hugely notwithstanding, seems in the absence of counterpoints to suggest that, as potentially narrow as the benchmark may be, Ocaml has some very strong arguments against Haskell on the compiler implemenation front.

I can't help but wonder if this GC outperformance is the flipside of the coin of Ocaml's much maligned lack of multi-core capability.

<comment><USER14> Well said, and I feel exactly the same way (as an interested observer)

</comment></comment></comment></comment><comment><USER15> This reminds me of the Great Programming Language Shootout.

Anyone here who knows what happened to that great site?

<comment><USER16> It evolved into The Computer Language Benchmarks Game.

[https://benchmarksgame.alioth.debian.org](https://benchmarksgame.alioth.debian.org)

<comment><USER17> Roll the credits :-)

[http://benchmarksgame.alioth.debian.org/sometimes-people- jus...](http://benchmarksgame.alioth.debian.org/sometimes-people-just-make-up- stuff.html#history)</comment></comment></comment>


Don't Copy a Design — Steal It - <AUTHOR> http://www.usabilitypost.com/post/7-dont-copy-a-design-steal-it

<comment><USER2> He's just rejiggering the words so that he has a good title. He could have just as easily said "don't steal a design -- copy it" and defined the words backwards, and the article would have worked equally well.

The concept is fine, but the wording is poor.

</comment><comment><USER3> <http://www.sitepoint.com/article/copy-great-designers-steal>

Another article I remember reading a while ago to elaborate on this.

Many people think smart designers spend endless hours just going through iteration after iteration of seeing what's good or bad. While iteration exists a lot in design, doing something entirely from scratch is like trying to write a program entirely in a native language, without any frameworks or libraries, and without any open source references to look at.

Design isn't as high of a competitive advantage (or really intellectual property) as it's made out to be. It's like trying to say an idea is more important than the execution, it's not. If you feel bad after "stealing" a design and improving it, just remember the famous quote by Bill Gates in Pirates of Silicon Valley:

Gates: Every car has a steering wheel, but nobody can call it their own.

Of course he was referring to the mouse, the UI, and much of the OS that Microsoft ripped straight from Apple (who in turn ripped it from various R&D groups at larger companies), whose own motto was "Good artists copy, great artists steal." Microsoft played Apple at their own game.

<comment><USER4> _(who in turn ripped it from various R &D groups at larger companies),_

Much of Mac influence was from Xerox PARC and the Alto. Fascinating history and a lesson that Xerox had it all and could have done so much more. PARC had so much innovation, GUI, OOP, Ethernet, and so much more.

<comment><USER5> ...and postscript, leading to Adobe.

</comment></comment></comment><comment><USER6> This immediately made sense to me - when you steal something, you make it your own.

<comment><USER2> When you steal something, the person you stole it from no longer has it.

<comment><USER7> This makes sense more to artists and musicians. When you "steal" a riff or a lick and make it your own, the person you "stole" it from still has it. I think he means stealing in this sense.

</comment></comment></comment><comment><USER5> _A copy ... remains one step behind._

True for startups too.

When imitators win, it is because they grasped the heart of the idea, and grasped/did it better/differently.</comment>


.NET Fiddle adds F# - <AUTHOR> http://dotnetfiddle.net/AT4DxW

<comment><USER2> I found F# to be rather neat. This is a great way to see for yourself.

<comment><USER3> I've done very little but it seems really concise. I like that.

One place some predict it will emerge is in the Web API arena, and I could totally see that happening.

<comment><USER4> Why? What makes it better than C# in web Web API area? (honest question)

<comment><USER5> Type providers for one: [http://msdn.microsoft.com/en- us/library/hh156509.aspx](http://msdn.microsoft.com/en- us/library/hh156509.aspx)

[http://channel9.msdn.com/posts/Tomas-Petricek-How-F- Learned-...](http://channel9.msdn.com/posts/Tomas-Petricek-How-F-Learned-to- Stop-Worrying-and-Love-the-Data)

<comment><USER6> Anything specific on F# applied to Web API?

<comment><USER7> F# has asynchronous workflows, which is a nice API for task parallelism built on computation expressions, which are sort of tamed monads.

That edge dulled quite a bit with C# 5.0 and async/await, though.

</comment></comment></comment></comment></comment></comment><comment><USER8> Cool to "see" F# in action.

Like the union types, but not so much the list operations; seems more natural to:

[1;2;3;4] filter isEven sum

vs.

List.filter isEven [1;2;3;4] |> List.sum

in Scala it's: List(1,2,3,4) filter isEven sum

Of course I'm not familiar with F# so don't know all of the WIN within (Type Providers, for example, are very impressive, would love to see that on the Scala side of the fence one day).

<comment><USER7> I've got little experience with Scala, but judging from your sample it looks like what's happening is that Scala follows more Java-y idioms for how code is structured.

So in

      List(1,2,3,4) filter isEven sum

it looks like filter and sum are instance methods on the List class, and I'm guessing isEven is a predicate that's being passed as an argument to the filter method.

F# leans closer to its functional roots in this respect, so it's more idiomatic to keep object-oriented constructs at arm's reach in most your code. The language has full support for OOP, it's just that you're not expected to trot it out except when you're writing public interfaces that are meant to be consumed by code that might be written in C# or VB.NET. So the List class mostly sticks to static methods in its public interface because that approach fits better with traditional functional idioms.

That gets you as far as something like this:

      List.sum (List.filter isEven [1;2;3;4])

The next step is the "pipeline" operator, which is defined as

      let inline (|>) x f = f x

So it's just letting you swap a function and its argument, which facilitates reorganizing the code so that the functions are listed in the order in which they execute. That's what gets you to the example you give - or better yet:

      [1;2;3;4]
      |> List.filter isEven
      |> List.sum

which I think captures some of the natural expression that you were talking about while still sticking with functional idioms instead of object-oriented ones.

<comment><USER9> > So the List class mostly sticks to static methods in its public interface > because that approach fits better with traditional functional idioms.

And also fits perfectly with the C# and VB.NET extension method syntactic sugar, which was used extensively for LINQ. They're really just static methods in the .NET VM and bytecode.

<comment><USER10> > that approach fits better with traditional functional idioms

Just interested, what's the real value here? "Familiarity" alone seems to be a pretty poor reason.

> They're really just static methods in the .NET VM and bytecode.

Doesn't this mean that either your methods won't be dynamically dispatched or that you would need to rewrite your code if you ever change from e. g. List to Array?

Looks like a bad compromise to me.

<comment><USER9> > Doesn't this mean that either your methods won't be dynamically > dispatched...

The MSIL (.NET bytecode) for calling an extension method and a static method are exactly the same. So yes, it will not be dynamically dispatched. Specifically, it emits a "call" and not a "callvirt" instruction.

However, the compiler will always prefer a class method over an extension method of the same signature. Meaning that extension methods can be specifically implemented by a class and the compiler will emit a "callvirt" instruction for that instance method instead.

> ... or that you would need to rewrite your code if you ever change from e. > g. List to Array?

I'm not sure what you mean here. Arrays implement IList, so if you need random access, you would just write a method against IList. If you don't need random access, you should write it against IEnumerable, which all collections implement.

<comment><USER11> Perhaps what the parent is saying is that if you implement an extension method to IList, you can't subsequently implement an extension method to Array and expect it to be called on an Array _stored in an IList variable?_ Which is true for exactly the reason you state.

<comment><USER9> Ah, yes. That would be true.

</comment></comment></comment></comment></comment></comment></comment><comment><USER12> Can anyone comment how F# compares to other functional languages? Just curious.

<comment><USER13> F# is very un-functional in many ways. Immutable variables are the default but mutable variables are made with just the "mutable" keyword. There are also lots of imperative control structures, like while, and for. Those two combined means that imperative algorithims typically have two distinct translations into F#.

First you can translate it literally, where F# looks like a slightly more verbose version of Python. Second you can exploit all the functional features of F#, and using immutable variables, recursion and pattern matching.

F# also has extensive support for OOP, and uses it where OCaml-ers might use modules or functors.

In that way, F# can be a sort-of stepping stone between the imperative, OOP C# to more functional features of F#.

<comment><USER14> Un-functional might be a bit misleading for an ML-based, default immutable language. Impure might be slightly more accurate.

Having seen F# written by C# coders who've just learnt the syntax, and haskell programmers who are having to work in a .net environment, I'd say F# does a fairly good job of supporting both. It does make some trade offs to allow easy interop with the rest of the .net world (it's type system is much less powerful than Haskell, Scala or (especially) Idris) but depending on your environment that can be out weighed by the massive scale of the .net ecosystem, easy interop with your existing .net code and very, very good tooling.

<comment><USER13> Yeah, perhaps unfunctional wasn't the best word I could use. Either way, I'm a huge fan of F# and I think it's imperativeness is all-in-all a very good thing for adoption of the language.

</comment></comment></comment></comment><comment><USER15> Anybody managed to install F# on Ubuntu? There are recommended steps [0] but they've never worked for me even on a new 13.04 (& later) image on DigitalOcean.

[0] [http://fsharp.org/use/linux/](http://fsharp.org/use/linux/)

<comment><USER16> I use F# on Windows and FreeBSD, but I've used it on Ubuntu a few times before for testing. Here's how I did installed it:

      git clone git://github.com/mono/mono.git
      cd mono
      autogen.sh
      sudo make install clean
      cd ..
      git clone git://github.com/fsharp/fsharp.git
      cd fsharp
      autogen.sh
      sudo make install clean

It takes a while to build Mono from scratch, but this way has always worked for me.

<comment><USER15> Your steps are almost the same as the one I linked. But I tried them, just in case. And it still does not build. The fsharp build fails with some error about casting types. Do you have version details?

<comment><USER16> Try building the 'fsharp_30' branch instead. The master branch just switched over to F# 3.1, so its possible they haven't worked out all of the bugs for every possible system yet.

When I ran F# on Ubuntu before, it was on the x86 version of 12.04 LTS. I used whatever the latest version of Mono was; I don't remember specifically, but it was almost certainly one of the 3.2.x versions.

Would you mind posting the build output from your F# build that fails (e.g., to pastebin or Gist)? I can forward it along to the right people so it gets fixed. Or, post it as a Github issue: [https://github.com/fsharp/fsharp/issues](https://github.com/fsharp/fsharp/issues)

</comment></comment></comment></comment><comment><AUTHOR> Small interruption. Looks like scaling to 2 servers on Azure to handle extra traffic crashed the original one.

<comment><USER17> Azure will reset your VMs when you update their configuration. Normally this involves a rolling reset but as you only have one instance this was not possible.

<comment><AUTHOR> Thanks for the info. I thought changing Scale would keep original server and just add new ones. But I guess it is a bit more intrusive.

</comment></comment></comment><comment><USER18> I would like to see an interactive loop to fsi. Seems like you could use websockets for this.

<comment><USER19> Another option you might want to look at is [http://www.tryfsharp.org/Create](http://www.tryfsharp.org/Create) Runs code locally via Silverlight.

</comment></comment><comment><USER3> I'm getting my fizz buzz on.</comment>


Doradus – A graph-based data model, advanced indexing and search for Cassandra - <AUTHOR> https://github.com/dell-oss/Doradus

<comment><USER2> informative pixels here: [https://github.com/dell- oss/Doradus/wiki/Architecture%20(Spi...](https://github.com/dell- oss/Doradus/wiki/Architecture%20\(Spider\))

</comment><comment><USER3> What advantages does this have over Titan?

<comment><USER4> Giving a quick look, "graph" here seems used more like a "relational nosql" than an engine to do perform complex/custom graph traversal or implement algorithms.

</comment></comment><comment><USER5> Does anybody know of something similar for time-series based models?

<comment><USER6> The Cloud Monitoring team at Rackspace developed a time-series database on top of Cassandra called BlueFlood DB. You can find information here: [http://blueflood.io/](http://blueflood.io/)</comment></comment>


Top 100 CEOs will get $4.9B for retirement – same as 41% of Americans - <AUTHOR> http://www.thenation.com/article/top-ceos-have-4-9-billion-saved-up-for-retirement-13-of-workers-have-nothing/ <comment><AUTHOR> "...The report identifies stark gender and race gaps, too. The 10 largest retirement packages belong to white men, for a total of $1.4 billion. The funds of top female CEOs adds up to $280 million, while the top 10 executives of color have a combined fund of $196 million. The disparity is even greater at the bottom of the income ladder: while about two-thirds of white workers have at least some retirement savings, 62 percent of African-Americans, and 69 percent of Latinos of working age do not..."

<comment><USER2> US distribution of wealth

[https://imgur.com/a/FShfb](https://imgur.com/a/FShfb)

[http://www2.ucsc.edu/whorulesamerica/power/wealth.html](http://www2.ucsc.edu/whorulesamerica/power/wealth.html)</comment></comment>


The #Twitterjoketrial - <AUTHOR> http://www.newstatesman.com/blogs/the-staggers/2010/09/paul-chambers-betjeman-cps The appeal is being heard right now. I just hope obvious, blatant, staring you in the face, common sense prevails. <comment><USER2> I'm not expressing an opinion on the case either way, but comparing Paul Chambers to John Betjeman is rather flawed. There's a big difference between "I wish someone would bomb X", and "I'm going to blow X up".

Even out of context, Betjeman's line couldn't possibly be interpreted as a threat.</comment>


Ask HN: How to improve your BATNA whilst unemployed? - <AUTHOR> Hi, I'm a NEET with several years of software development experience. I usually do not have another job lined up when I lose my current one, so I've been taking one mediocre job offer after another to make ends meet.<p>While I'm seeking work, I want to know what I can do in the meantime to improve my BATNA (best alternative to a negotiated agreement) when I am not in a strong bargaining position to get a good job offer. Outside of the usual errands, improving my resume and sending out job applications, I spend my spare time self-studying to keep my programming skills fresh. <comment><USER2> > I usually do not have another job lined up when I lose my current one, so > I've been taking one mediocre job offer after another to make ends meet.

This is your problem: _to make ends meet_. You're a programmer by profession, your salary should be enough to have significant savings.

<comment><AUTHOR> I'm not a typical programmer, though. My savings are used up whenever I am unemployed, and I've probably spent 1/3 of my post-college time unemployed. I want to know how to increase my bargaining power while I'm in this situation of making ends meet.

<comment><USER3> What if you didn't wait until you're unemployed to start thinking about the next opportunity?

What about contributing to a community, with open source code or a tutorial or a conference presentation?

<comment><USER4> Regarding your last statement- while doing these things help, the lack of doing these things isn't necessarily the cause of the problem.

I know that plenty of programmers have never contributed to open source, nor written a single line of code outside of work, and they still have no problem finding or maintaining jobs.

</comment></comment></comment></comment><comment><USER5> Is there a theme to the reasons you've been let go? That may also relate to how long it takes to find a new job and to your negotiating position when you do. You may have a weakness other than programming skills that needs shoring up.</comment>


An Introduction to Kubernetes - <AUTHOR> https://www.jeremyjordan.me/kubernetes/ <comment><USER2> This is a great intro. Also, this site was very pleasant on mobile :)</comment>


In the beginning was the command line by Neil Stephenson - <AUTHOR> http://www.cryptonomicon.com/beginning.html

<comment><USER2> This is a really great essay. I go back and read it every year or so. There is actually an 'updated' version, not done by Stephenson but with his blessing. It takes into account the rise of OS X (which Stephenson loves) and updates some of the other arguments. Here is the updated text <http://garote.bdmonkeys.net/commandline/index.html>

<comment><USER3> Great for people we read the original first, too. As the update consists of clearly marked comments.

</comment></comment><comment><USER4> This is an incredible essay by one of today's leading techgnostic writers. It's the earliest writing I know of that talks about the commoditization of software regarding open source projects.

<comment><USER5> The "Halloween documents" (I and II) by Vinod Valloppillil and Josh Cohen were talking about it the previous year: they were written and leaked in 1998.

<http://www.catb.org/~esr/halloween/>

<comment><USER3> "This page originally continued with an anti-Microsoft jeremiad. On reflection, however, I think I'd prefer to finish by thanking the principal authors, Vinod Valloppillil and Josh Cohen, for authoring such remarkable and effective testimonials to the excellence of Linux and open-source software in general. I suspect that historians may someday regard the Halloween memoranda as your finest hour, and the Internet community certainly owes you a vote of thanks."</comment></comment></comment>


Show HN: Dead simple playlist-style internet radio - <AUTHOR> https://sync.haus/ <comment><AUTHOR> This is the first thing I built during quarantine—I wanted a way to listen to music with my friends, but wasn't keen on everyone having to pay for something like Spotify. Enjoy!

</comment><comment><USER2> Can't get an email, tried 2.</comment>


Ask HN: At what point does a 'website' become an 'application'? - <AUTHOR>

I'm struggling a little with this rather mundane question of terminology: even the simplest of my personal 'websites' are built in Rails. They interact with a database, they are stateful, they are tested. Are they just a 'website', or are they an application?
I ask this from the perspective of discussing the site/app with other people, which is not really something I had done much of before.
What are your thoughts? What terminology should I use to minimize confusion during discussions? <comment><USER2> imho that's just semantics.

Make the terms clear at the start of the discussion - argument why you're using a term application instead of a website.

Wouldn't that clear it up?

<comment><AUTHOR> Probably, I'm just curious as the way you speak can radically alter the impression people get of you, and your project.

In my mind referring to something as a 'site', rather than an 'application' or 'web-application' makes you seem less serious. Just a thought...

<comment><USER2> Do you consider facebook as a site which has applications or is it an application?

If someone were to speak about the functionalities of the site called facebook - then would using the term "site" make facebook sound less serious?

<comment><AUTHOR> Good point!

Thanks for your thoughts, it's a small thing but it helps to know what other people are thinking.</comment></comment></comment></comment>


Police Bodycam Company Bans Facial Recognition 2 Months After Receiving Patents - <AUTHOR> http://www.nytimes.com/2019/06/27/opinion/police-cam-facial-recognition.html <comment><AUTHOR> Apr 2019: Axon receives patents for facial recognition (1)

May 2019: SF bans facial recognition (2)

June 2019: Axon bans facial recognition (OP)

1\. [https://www.google.com/amp/s/amp.ft.com/content/c2300a60-5a2...](https://www.google.com/amp/s/amp.ft.com/content/c2300a60-5a2b-11e9-939a-341f5ada9d40)

2\. [https://www.nytimes.com/2019/05/14/us/facial-recognition- ban...](https://www.nytimes.com/2019/05/14/us/facial-recognition-ban-san- francisco.html)</comment>


First robot cop to join Dubai Police by May, official says - <AUTHOR> http://gulfnews.com/news/uae/emergencies/first-robot-cop-to-join-dubai-police-by-may-official-says-1.1993347 <comment><USER2> There's some pretty scary stuff in that article:

> We planned for a security system for the future of the city to tackle future > crimes. By 2025, Dubai will be one of the best five cities in the world on > security level," he added.

> By 2030, all police buildings will be 50 per cent self-power-generated and > the country will build a DNA data bank. "By 2030, there will be no > mysterious or unknown crimes in Dubai and the police will have the biggest > DNA data bank in the country."

> Meanwhile, Brigadier Khalid Nasser Al Razouqi, General Director of the Smart > Services Department at Dubai Police, told Gulf News that the first police > robot will join the force in May. "We are looking to make everything smart > in Dubai Police. By 2030, we will have the first smart police station which > won't require human employees," Brigadier Al Razouqi said.

If it wasn't on a reasonably reputable news source you'd think someone was pulling a prank. But then again, these Sheiks, Emirs and their cronies will only remain in power through the most draconian measures once the oil wealth dries up and they need to move now if they don't want to end up roughly like Nicolae Ceaușescu.

The cost of the police force will be a major factor if they want to stem the tide so they're planning accordingly.

<comment><USER3> >these Sheiks, Emirs and their cronies will only remain in power through the most draconian measures once the oil wealth dries up and they need to move now if they don't want to end up roughly like Nicolae Ceaușescu.

They've done pretty well at decoupling from reliance upon oil wealth in the country by turning Dubai into a sort of playground-sanctuary for the super- wealthy. Only ~30% of their GDP is oil/gas.

This appears to be part of that. Rich people like to feel secure in their paradise.

<comment><USER2> A country size gated community.

<comment><USER4> Point taken, but it's really more of a city-state isn't it?

<comment><USER2> Yes, but what Dubai does is leading for all of the UAE, it's 1/3rd of the population and a very large part of the total wealth.

Abu Dhabi (Nominally the capital) is about 1 million inhabitants and Dubai about 3, only a small fraction of all UAE inhabitants are citizens.

</comment></comment></comment></comment></comment><comment><USER5> I have to admit that I was one of the people who thought that when automation came to the police force, it would come to SWAT first a la Chappie[1]. Bulletproof robots armed with nonlethal weaponry. No SWAT teams putting infants in comas with flashbangs[2] or shooting people. Robots kick down the door and taze criminals.

However it makes a lot more sense like this, as a cost saving measure. It doesn't seem like these robots are meant to offer any real assistance. Rather dystopically they apparently scan faces to look for fugitives. Still- the more "routine" police work is automated, the better. Parking and speeding tickets being automatic are better for everyone. Robot cops that can actually offer assistance, particularly in many languages, would be great.

[1] [https://www.youtube.com/watch?v=lyy7y0QOK-0](https://www.youtube.com/watch?v=lyy7y0QOK-0)

[2] [http://www.cnn.com/2015/07/22/us/georgia-indictment-flash- ba...](http://www.cnn.com/2015/07/22/us/georgia-indictment-flash-bang-case/)

</comment><comment><USER6> These kinds of advancements make me nervous, not because I'm a technophobe luddite, but because I don't think the implications and side effects have been thought through enough.

Of course the people making the decision to move forward do so with the assumption that they will always have power/control over the situation so the bad parts won't apply to them, but this may not be the case.

</comment><comment><USER7> I didn't notice a name. I hope they go for Enforcement Droid 1. Only 208 models to go by 2043 then.

<comment><USER8> Subtle RoboCop reference (this movie is now old enough that lots of HN-ers probably haven't seen it). ED-209 [1] [2] is an AI-driven competitor to RoboCop (cyborg/zombie).

"Your move, creep."

[1] [http://robocop.wikia.com/wiki/Enforcement_Droid_Series_209](http://robocop.wikia.com/wiki/Enforcement_Droid_Series_209)

[2] [https://www.youtube.com/watch?v=mrXfh4hENKs](https://www.youtube.com/watch?v=mrXfh4hENKs)

<comment><USER9> "I'd buy that for a dollar!"

</comment></comment></comment><comment><USER10> This sounds like a PR move more than anything else. What exactly is it going to do?

</comment><comment><USER11> I do not understand this desire to endlessly fight crime. It is just the nature of some people. Crime will never cease, fighting it with an iron fist only prevents real problems from getting solved. Problems such as then homelessness, the hungry. Solve those problems and crime will decrease forever.

<comment><USER12> Dubai was built on slave labor... I don't think anyone there cares at all about homeless or hungry people, as long as they're in the outskirts or out of sight.

Here's a quora link: [https://www.quora.com/To-what-degree-has-Dubai-been- built-by...](https://www.quora.com/To-what-degree-has-Dubai-been-built-by- slave-labor)

Google if you want a legitimate news source - I've been seeing articles since at least 2009 covering this issue and there are even books.

</comment></comment><comment><USER13> Any takers on when the first ED-209 event will take place?

Actually this reminds me of a kids' cartoon I used to watch called C.O.P.S. (not to be confused with the Fox police reality show Cops). It was pretty cyberpunk for a kids' show and centered around an elite team of cybernetically enhanced police officers from the near future. In one episode, a city councilman had agitated for beat cops to be replaced with AI robots called Instant Justice Machines, presumably as a cost-saving measure. In reality he was on the take from the local criminal organization, whose activities the robots cheerfully ignored. Which highlights another failure mode of delegating police duty to robots: how do we know their programming matches up with our understanding of the law?

</comment><comment><USER14> I fear the future when rulers no longer need the loyalty of the police or military, the last check on their power.

Such a future is not inevitable - the development and production of autonomous human-hostile machines can and should be banned with the same fervour as making biological weapons.

</comment><comment><USER15> I'm skeptical that the robot will work as well as one might expect, but the real gem in this article is that Dubai is building a DNA bank. Let's see how _that_ pans out.

<comment><USER2> > Let's see how that pans out.

You will know how well it works by who is _not_ in it.

</comment></comment><comment><USER16> Reminds me of this story:

> Scott Simon notes the plight of a British citizen who has been sentenced to > four years in prison in Dubai for having a microscopic amount of marijuana > on the bottom of his shoe.

[http://www.npr.org/templates/story/story.php?storyId=1884201...](http://www.npr.org/templates/story/story.php?storyId=18842015)

</comment><comment><USER17> This was written in March and it's June 1st now. So, did it happen?

Found this: [http://www.telegraph.co.uk/news/2017/06/01/first-robotic- cop...](http://www.telegraph.co.uk/news/2017/06/01/first-robotic-cop-joins- dubai-police/)

</comment><comment><USER18> May be it's Time to get revise this - [https://willrobotstakemyjob.com/33-3051-police-and- sheriffs-...](https://willrobotstakemyjob.com/33-3051-police-and-sheriffs- patrol-officers)

</comment><comment><USER19> "The announcement was made by Bin Sultan during a presentation at the 11 Best Police Practices Forum held in Dubai." "Brazilian football legend Ronaldinho also attended the forum" WTF?

</comment><comment><USER20> Photo 2 in the slider

> A delegate trying his hand at virtual spiner training game at the 11th > International Symposium for Best Police

It shows somebody with a Vive on his head and a big old sniper in his hands. Any more infos on that?

</comment><comment><USER21> First tip to employing robot drones in your police force: Don't make them vulnerable to being pushed over.

I seriously doubt that thing would get up on its on recognizance, after a nice shove.

</comment><comment><USER22> They might have to work on it's face and appearance a bit. It doesn't look very commanding or authoritative.

<comment><USER2> Nothing a baseball bat can't fix. Of course they will put re-arranging these robots external features at the same level as 'assaulting an officer'.

</comment></comment><comment><USER23> What does the robot do? Can it write tickets, arrest people, shoot, direct traffic?

Kind of a hollow article.

<comment><USER24> terrible article and I suspect it was written by a robot. You see this more an more with articles in mainstream press. The article consists of a catchy title with 8 paragraphs that restate the title different ways and never provide the detail a human reader would want

<comment><USER25> Meh, maybe they are catering to their main user base, the bot scrapers?

</comment></comment></comment><comment><USER26> Can smart police be smart if they enforce ignorant and unjust laws?

</comment><comment><USER27> bring on the robot criminals</comment>


Patrick Rothfuss calls The Game of Books ill-conceived bullshit...then loves it. - <AUTHOR> http://blog.patrickrothfuss.com/2012/12/a-game-of-books/ "I plan on spending no more than ten minutes on the phone with this guy. I'm going to be polite, thank him for wanting to involve me with the project, and ask a few questions that will confirm my suspicions that this whole project is well-intentioned but ill-conceived bullshit." <comment><USER2> If you are a reader or gamer and want to encourage and reward that kind of activity then here is your chance. Wage battle with your reading friends or encourage the young ones in your life to become active readers. Support this great project from Aaron and his crew.

</comment><comment><USER3> Cool. Just the thought of driving kids to read more books is fantastic. Even older farts like me think this would be fun.</comment>


Peter Sunde (Pirate Bay Co-Founder) Seconds The Idea Of An Alternative Root DNS - wh-uws http://techcrunch.com/2010/11/29/peter-sunde-seconds-the-idea-of-an-alternative-root-dns/

<comment><AUTHOR> I'm having mixed feelings about this. Aside from the security aspect mentioned by the author, I'm also unsure about whether this will really fix what seems to be the core problem. The way I understand it, this idea is meant to prevent domain seizures - yet there is still nothing that prevents ISPs from blocking the IP addresses.

If one was to evade IP blocking, the most obvious way to do that would be by using a SOCKS5 proxy - which would mean that you also have the opportunity to do the DNS lookups remotely.</comment>


"Nice Ivy League Degree. Now If You Want a Job, Go to Code School" - <AUTHOR> http://www.bloomberg.com/news/articles/2015-05-07/coding-classes-attract-college-grads-who-want-better-jobs <comment><USER2> "The 22-year-old graduated last year with a bachelor's degree in psychology and studio art that cost more than a quarter-million dollars." ....how is this even possible?

<comment><USER3> 60k per year * 4 years = 240k, with 0 scholarship

<comment><USER4> I was one of the students quoted in the article (you can probably guess who by my name). I went to a school that ostensibly costs that much but very few people there didn't have some kind of financial aid. Based on the wording of the article I don't think the person he mentioned paid full price, either.

I don't regret going to a liberal arts school one bit, and it wasn't as if there were no jobs available to me when I graduated. To be honest, I'm surprised at how one-dimensional this article reads, because he makes it seem like there is no gray area in what makes a good education.

One of the main reasons that these bootcamps are successful is that the majority of the students have some kind of college education (he mentions 70% in the article but that includes the less impressive camps who will literally take anybody). Boot camp grads are competitive because they have skills (communication-wise) that come with diverse degrees. The fact that the author is dismissing those skills makes me think he really missed the point.

</comment></comment></comment><comment><USER5> "bachelor's degree in psychology and studio art".

The fact that you might need vocational training when trying to get a job that's outside your area of study surprises people ?

</comment><comment><USER6> This part shocked me:

      Homework swallows her nights and weekends—a big change from Dartmouth,
      where after a few hours of class "you could just do whatever," Feng says.

At MIT it was at least one all-nighter a week, not counting getting up in the middle of the night so shlep across campus and adjust a machine. I hear it's unchanged today.

What kind of life is Dartmouth preparing them for? Makes me glad I "rebelled" by choosing MIT.

</comment><comment><USER7> Why wouldn't they need to go to a coding bootcamp if they don't have any relevant experience or haven't studied a related subject? They've all chosen to retrain to find jobs in new fields.</comment>