Facebook HQ Urges Employees to Ditch iPhone for Android - <AUTHOR> http://mashable.com/2012/11/25/facebook-iphone-android/ <comment><USER2> Ah, irony. It's more than a little amusing that the people _writing the software_ need to be "encouraged" to use the platform that's more popular (by shipments).

Even in the days of Mac-vs-Windows, it wasn't really true that developers needed to be encouraged to write code for Windows. They migrated to the more popular platform, because that's where the action was. But these days, the action is in iOS, and Android is a clear second-tier player (amongst developers). The fact that Android is shipping more units is almost incidental.

In software, this pattern is historically kind of weird, but in consumer products, it's par for the course -- new innovations come out in high-end products, and eventually filter down to the masses. Perhaps this is a sign that software is finally becoming a commodity industry.

<comment><USER3> I think there are a few reasons for this.

First, there is the question of where Android's growth is. Apple is clearly going for the $200 price point on-contract. Yes, they sell their old models, but Android has a more diverse ecosystem. If we limited ourselves to equivalents (the top of the line iPhone and the several top of the line Android devices (Nexus 4, One X, GS III, etc.)) would there be so many more Android shipments? So, Android's shipments might be coming more on the low- end: the end that people like us don't purchase from as much.

Second, in the Mac vs. Windows era, there was a significant price disparity. If you're in the market for a top-of-the-line smartphone on-contract today, you're likely paying $200 for an Android phone or iPhone. Windows computers always had a significant price discount over equivalent Macs.

Third, in the Mac vs. Windows era, Macs often were under-spec'd. While Apple tried to make the best of the 603-G5 processors, Intel was just on a roll. You'd pay more and end up with less muscle. Today, the iPhone's A6 matches the quad-cores that Americans haven't been getting since LTE took precedence over quad-core in the GS III generation.

Fourth, in the Mac vs. PC era, Macs were technologically inferior for many years. I'm specifically talking about the Classic Mac OS. Mac OS 8/9 was beautiful. Windows looked like it was designed in crayon by comparison (to me). However, its cooperative multitasking was just sad. Windows 95 really showed that OSs could be better (even if I thought that its UI was sub-par). When OS X and Windows XP came out, OS X was dog-slow - slow to the point of unusable. Apple really improved it and made it into the OS that many of us (myself included) love today. However, I remember 2001 and how envious I was of Windows users.

Fifth, in the Mac vs. PC era, Macs were app-poor. There was just a lot of compelling stuff that you couldn't run as a Mac user. The move toward the web changed a lot of that and left Apple with a great way back into the market. With the iPhone, I find that the iPhone does a better job on web pages than Android (note, I haven't used Android 4.1 and 4.2). Stats on web usage on mobile phones seem to bear this out as iPhone web browsing tends to dominate Android web browsing. Likewise, the iPhone at least matches Android on apps, but I think it could be argued to be the primary platform for apps. So, there isn't a penalty to using an iPhone in the way that there was a penalty to using a Mac in the Mac vs. PC era.

Basically, the iPhone isn't more expensive at the top-of-the-line, the iPhone has specs that no one would deny are top of the line, iOS isn't an inferior OS (personal preference about certain features aside), and there isn't a penalty to using iOS (if anything, it could be considered the first platform). None of this is meant to say that the iPhone is better than an Android phone. I don't care what you enjoy using. It's meant to demonstrate that iOS doesn't have the same cost premium, that if we limit ourselves to the devices that people like us buy the marketshare disparity might not be there, that even if iOS is a minority platform it still gets as good attention or better from developers, the specs are equivalent which they weren't in computers for a long time, and iOS and Android are both great modern OSs. If you were an early adopter, iOS came a couple years before Android.

In the Mac vs. PC era, Windows was more popular not just because popularity breeds popularity. It was hugely cheaper, better spec'd, and a superior OS for a good while. If you loved computing, Apple's tidyness might have been well out-shadowed by Windows 95's multi-tasking, app availability, price, specs, etc. If you like iOS, why choose an Android device as your next phone? No reason really. Similarly, there aren't compelling reasons if you like Android to buy an iPhone - Android phones today have high-res displays, are starting to get serious on build quality, similar specs, etc. It wasn't hard to convince a Mac user in 2000 to switch to Windows: you got a better OS, more apps, a faster computer, for half the price. I could convince people to switch to Windows with good, logical arguments that really rang true. Today, how would you convince an iPhone user to switch to Android? I'm not saying Android is bad, just that it's a lot harder to make that argument.

<comment><USER4> I think there's another big reason: Facebook employees tended to be early adopters, and bought into smartphone back when iOS really was clearly the better platform. And then either got locked in to the ecosystem, developed brand loyalty, chose the path of least resistance, or just didn't notice when android became a worthy competitor. There are lots of good reasons to use an iPhone now if your first iPhone was four years ago. Fewer if your first smartphone is this year.

</comment></comment></comment><comment><USER5> The headline is misleading, they're encouraging more employees to use Android, but not encouraging everyone to switch. I'm not sure if it has changed since 2010, but when I was with the company you could choose between iPhone or BlackBerry as a company phone. The lack of Android choices was directly responsible IMHO for the Android app sucking.

<comment><USER6> I think it was intentional. "Facebook urged its employees in August to switch from iOS devices to Android so that flaws in the company's mobile app could be addressed more rapidly."

That statement was ironic. Satire, anyone? Maybe that's the reason why my FB app on Android is getting better? LOL

Google Plus' iPad app sucks to the bottom...... now I wonder what's the correlation...

</comment></comment><comment><USER7> Part of the problem is that there isn't just one Android, there are many, and they all behave just slightly differently. Testing on Android is a nightmare because of this.

I wish Google would make some efforts at fixing this problem -- it's the same problem Microsoft had with Windows. Windows on each piece of hardware was just slightly different and made testing just as hard.

Google, please learn Microsoft's lesson and make this easier for developers.

<comment><USER8> > Part of the problem is that there isn't just one Android, there are many, > and they all behave just slightly differently. Testing on Android is a > nightmare because of this.

In my experience, this issue is overblown, especially with Android 4.0+. Unless you're developing a game, the hardware differences should not be a huge concern. The Facebook app certainly shouldn't have problems because of this.

> I wish Google would make some efforts at fixing this problem

Google has and can have no control over how Android is implemented or updated by various OEMs, particularly when carriers are dictating terms. And when Google tries to go around the carriers, like they did with the Nexus 4, they get crucified for the lack of LTE. Seems to me they're between a rock and a hard place. Hopefully their plan to launch a wireless carrier with Dish Network will pan out and things will get better.

<comment><USER9> > Android 4.0+

Not sure if you know this but most apps are games. So that's a bit funny to say "this isn't an issue unless your making a game".

And I'm also not sure what you work on, but testing on an Android is a nightmare. Most of the issues on apps for Android are (My XYZ phone the app doesn't work). Just go through and read them, that's mostly what the issue is.

> Google has and can have no control over how Android is implemented or > updated by various OEMs

Yes it does, it's Google's OS it has complete control over what people do with it.

<comment><USER10> Games compose the biggest category of apps, but represent only 20%~ of total applications.

<comment><USER11> One fifth of all apps on the market is nothing to sneeze at.

</comment></comment></comment></comment></comment><comment><USER12> I'm sure Mike Matas and all the other rock star & ex-Apple designers they have hired will be cock-a-hoop about that.

</comment><comment><USER13> Android will soon be the linux of the client-side world. Ubiquitous, cheap OS. Facebook HQ wants to get into all Android devices, not just the mobile phones, hence the push on their employees. "eat your own dog food" is a good strategy for any software house.

</comment><comment><USER14> Given that Microsoft investment in Facebook [1] I am a bit surprised there isn't more interplay there. Seems WinPhone could use a killer Facebook app, kind of a win/win for the investor.

[1] [http://www.msnbc.msn.com/id/21458486/ns/business- us_business...](http://www.msnbc.msn.com/id/21458486/ns/business- us_business/t/microsoft-invests-million-facebook/#.ULKUm4fAeQA)

<comment><USER15> I don't think it would be wise for Microsoft to interfere with Facebook's day- to-day activities and Microsoft probably knows this.

<comment><USER14> Can you say a bit more about that? I am interested in how Facebook creating a killer product for one of their strategic investors can be construed as 'interference' ?

<comment><USER16> Facebook already integrates with Microsoft products: Bing is a search option on their site, and all of their embedded maps (Events, etc) use Bing Maps.

On the MSFT side, Windows Phone has always included deep integration with Facebook since the start, and their most recent acquisition, Skype, is the provider of video chat for Facebook's in-browser client.

Both companies already integrate with each other in multiple areas, and Facebook employees almost certainly aren't discouraged from using WP7/8 on their personal devices. The market realities (low market share, existing integration in the OS with no standalone, third party app to support) means that there's no need to push this on employees over iOS/Android.

</comment></comment></comment></comment><comment><USER17> FB has many employees that are not engineers! These are the people the posters are targeting.

</comment><comment><USER18> Are they buying people Androids a la Google style?

</comment><comment><USER19> Inferiority complex.</comment>


ACM is Searching for a CEO - <AUTHOR> https://www.acm.org/ceo-search <comment><USER2> Any idea why? The previous CEO apparently started only about 2 years ago [https://en.wikipedia.org/wiki/Robert_B._Schnabel](https://en.wikipedia.org/wiki/Robert_B._Schnabel)

And what does the ACM do that's different from the ACM President's role?

<comment><AUTHOR> Not sure, but looks like he took a new role at UC Boulder in November. [https://www.linkedin.com/in/bobby- schnabel-860b61b/](https://www.linkedin.com/in/bobby-schnabel-860b61b/)

</comment></comment><comment><USER3> I can't recall seeing CEO rolls advertised publicly before. Wouldn't this be frustrating for their top executives who see themselves as ideal an candidate?

<comment><AUTHOR> I was thinking the same thing. I've never seen a job posting for a CEO role. Especially from such a prominent organization. Something must be up.

<comment><USER4> I've seen a lot of CEO and ED positions advertised in magazines over the years. Usually they are in an upscale classified ads section near the back. I can't speak to why an organization would or wouldn't do that as opposed to a discreet approach, but internal candidates would know either way.

</comment></comment></comment><comment><USER5> I wonder why the ACM hasn't chosen an alternative governance model, like a DAO.</comment>


Ask HN: Good resources to learn AI using python? - <AUTHOR>

I did some search but was not able to find out any new updated good resource to learn AI, mostly was referring to Peter Norvig book on AI. Is there any other resource you guys came across which are good, please share. <comment><USER2> Don't get too distracted looking for Python-specific resources. Modern AI is more math than programming, and you really need to nail down the math.

Look out for stuff on probability theory, statistical machine learning, multivariate calculus, and linear algebra.

</comment><comment><USER3> Collective Intelligence examples are all Python.

[http://shop.oreilly.com/product/mobile/9780596529321.do](http://shop.oreilly.com/product/mobile/9780596529321.do)</comment>


How to improve problem solving skills - <AUTHOR> How can I improve problem solving skills like solving competitive programming problem or handle my personal life problem? <comment><USER2> If you want to get better at solving programming problems I would consider

[https://projecteuler.net/archives](https://projecteuler.net/archives)

If you want to get better at problem solving in general I would recommend a few books

How to Solve it by Polya

An Introduction to General Systems Thinking by Weinberg

<comment><USER3> Also have a look at:

1\. leverage points in systems

2\. demmings PDCA cycle,

3\. phase problems as questions

</comment></comment><comment><USER4> Learn from already solved problems</comment>


Uber drivers are comparing fares with riders to check their pay - <AUTHOR> https://qz.com/956139/uber-drivers-are-comparing-fares-with-riders-to-check-their-pay-from-the-company/ <comment><USER2> The original title was sufficient but not click-baity enough, so Quartz seems to have changed it. The URL reveals:

        uber-drivers-are-comparing-fares-with-riders-to-check-their-pay-from-the-company/

<comment><USER3> The HTML doc title too. Changed.</comment></comment>


Show HN: Design Custom Packaging in 3D – Built with ThreeJS - <AUTHOR> https://packlane.com

<comment><AUTHOR> Hey HN! Would love to hear any feedback or comments you have regarding Packlane.

P.S. We're also on Product Hunt today :) [http://producthunt.com/posts/packlane](http://producthunt.com/posts/packlane)</comment>


What's in a Docker image? - <AUTHOR> https://cameronlonsdale.com/2018/11/26/whats-in-a-docker-image/ <comment><USER2> I've been building some fairly sophisticated systems with and without Docker, and it is always easier to build such systems without Docker. See here:

[http://www.smashcompany.com/technology/one-write-point- one-r...](http://www.smashcompany.com/technology/one-write-point-one-read- point-one-log)

At the end of that essay I go into detail about a recent Docker/AWS/ECR/ECS system I worked on, much of which seemed like a whole lot of useless work that slowed the project and offered no benefits.

So I'm wondering, what is the biggest project success that people can point to regarding Docker? In the above post I link to an article where a developer talks about coming in under budget on a project where they used microservices and Clojure. Where are similar articles regarding Docker? I'd like to read an article where an individual software developer, preferably someone who already has a good reputation with the tech scene, writes an essay where the theme is "We thought this was going to take 6 months, but once we switched to Docker we were able to get everything done in 3 months." I find it stunning that there are basically no such articles. Meanwhile, it is very, very easy to link to all of the articles where developers have written about the problems they had when trying to use Docker or Kubernetes.

<comment><USER3> Docker isn't supposed to make development faster, it's supposed to give a standard way to package code and dependencies so that a small infra team can support a much larger dev team developing a large number of services with heterogeneous language and library versions.

<comment><USER4> Exactly this. I'm the DevOps lead at my current company and my life would be hell if I had to manage not only remote machines but also local dev machines and all the package versions, dependencies, etc, that can differ. Docker adds some overhead and some headaches, sure, but once we got our CI/CD pipeline running with Docker life got about ten times easier because we weren't spending hours in a Slack channel trying to chase down a package that someone forgot to upgrade or compiled with the wrong modules.

</comment></comment></comment><comment><USER5> Brilliant article. Kind of reminds me of the articles in Dr.Dobbs journal in the pre internet days where they used to dissect various file formats and explain how the file was organized so you can create your own viewer. That was the best way to learn about how the original program worked too.

<comment><AUTHOR> Thanks! I really like those articles too. With this topic, I found many posts online just stated information about containers almost like they are trying to rewrite the documentation, which didn't seem like a good use of writing an article. This experimental process is what I went through to learn the content and I felt as though it would be helpful for others to go through it too.

<comment><USER6> Enjoyed that. Demystified docker images for me. Can you do a follow up on how Docker actually runs the images please?

<comment><USER5> Yes I'd love to read that as well. It would really be the best resource for understanding docker.

</comment></comment></comment></comment><comment><USER7> A related big thread from the other day: [https://news.ycombinator.com/item?id=18528423](https://news.ycombinator.com/item?id=18528423)

</comment><comment><USER8> Sightly concerned that it's using a version of Ubuntu that's been end of life for 35 months.

<comment><AUTHOR> The official documentation used that as an example, and because I wanted to steal their image, I did that too. Of course, please don't use Ubuntu 15.04 for containers you care about.

</comment></comment><comment><USER9> The problem with docker is the Docker installation. In legacy system, you're out of luck.</comment>


Ask HN: Is go a system programming language or a web language? - <AUTHOR>

I ve seen many startups using go as a web language. Have i missed anything? <comment><USER2> It was initially built for writing concurrent network services and they called it a systems language for that reason.

Now they just call it a general purpose language.

It's not a web language per se but it's great for building web applications:

\- Compiled, performant

\- Elegant concurrency model

\- Bridges the gap between dynamic and static typing (it's statically typed but with ideas borrowed from dynamic languages)

Unlike Java, it's pleasant to work with.

Unlike Ruby/Python, it's very fast.

I've seen some python setups where you have 3 separate servers: one for serving static media (usually written in C), one for serving the main app (python), and one for providing websockets (node.js).

With Go, you don't need this convoluted setup. You can do all of these things from within Go.

Here's an example chat app that uses websockets:

[http://theplant.jp/en/blogs/10-techforce-building-a-web- chat...](http://theplant.jp/en/blogs/10-techforce-building-a-web-chat-with- the-go-programming-language-and-html5-websockets)

<comment><USER3> I am interested to know how your web application pushed the performance limits of Python. You should be able to get thousands of requests per second, even out of a laptop running a pure-Python server. (I'd defend Ruby the same way but I don't know its details - I doubt it is very different, though)

The bottleneck in almost any real web app is going to be the database, not the programming language.

If you can't scale horizontally then your language choice is not your problem. If you can then what performance metric is going to show the inadequacy of Ruby or Python running on a few servers?

Add the caching that you should be doing anyway and even slower Ruby/PHP/Python frameworks can perform quite adequately.

I don't dispute that Go is a cool language but this seems like FUD.

</comment></comment><comment><USER4> Go is a web language in the sense that its a great "networking" language. Its not gonna replace JS in the browser any time soon, but it does handle concurrency and everything large scale server side really (and I do mean really) well. Personally, from my limited (only been using / testing for couple months or so) experimentation with it, I think its a great lang for networking, building distributed services, and its concurrency primitives are clean and just fun.

<comment><USER3> It would be really interesting if Go could be used in the browser! I think client side programming is suffering from the Javascript monopoly.

</comment></comment><comment><USER5> The goals of Go, as stated in the 2011 I/O slides ([http://golang.org/doc/talks/io2011/Writing_Web_Apps_in_Go.pd...](http://golang.org/doc/talks/io2011/Writing_Web_Apps_in_Go.pdf)):

\- fun to work in.

\- efficient - performance approaching C for CPU-intensive tasks,

\- designed for modern hardware (multicore, networks),

\- aimed at software such as web servers,

\- ... but turned out to be a great general-purpose language.

</comment><comment><USER6> From my best understanding Go has its roots in the Plan9 project and it is very capable as a systems language. When it comes to the web it is very well suited to writing services. Bit like what you'd use NodeJS for - but with different trade-offs. Presently Go is not used on the client / browser side code. For that JavaScript is still the main game.

</comment><comment><USER7> Perl, Python, and Tcl all started life out as system programming languages.

<comment><USER8> Not for the common definition of "system programming language", as e.g. offered by John Ousterhout, author of the aforementioned Tcl (<http://www.tcl.tk/doc/scripting.html>)

(Never mind that "web language" ain't exactly a great term, either. I'd apply that to some integrated language like Opa, but most languages commonly used for web programming aren't restricted to that and do enjoy some common use outside of that area.)

<comment><AUTHOR> So can you tell me, what kind of tasks are best solved and evaluated in go? Is it a low level lamguage like c, or does it find best use in javascript like domain? Or is it like java/c#?

<comment><USER8> From a use case perspective, I'd put it in the Java camp. Can do low level, although probably not the best choice for really down-to-the-metal stuff (if you really need all the optimization you can get and don't want to deal with GC). Due to its pretty decent library support and compilation speed/build system, it's also a bit more suited to application where you might reach for a scripting language, as turnaround doesn't suffer too much. There's also a pretty strong concurrency support, using the CSP approach.

So no really narrow sweet spot. A good language for general network programming, which might include some framework web stuff, but also could involve writing your own custom servers and consumers.

There's probably a better language for each individual task, but go is quite solid at a wide spectrum of tasks. Good community, too, if a bit fanboyish.

<comment><AUTHOR> but still, i could go some degree low level, right?

<comment><USER8> Sure. It has signed and unsigned numeric types with specified sizes, and the "unsafe" module provides some alignment and even pointer arithmetic capabilities if you _really_ need to tell the computer everything.

I'd just except the very end of _low level_ stuff from it, mostly due to maturity and GC issues, so it wouldn't be my choice of language for a embedded real-time situation. If you're talking web server/3D game low-level, it's fine.

To me, go looks like C programmers copied Modula-3, whereas Java was Cobol programmers copying Modula-3...

</comment></comment></comment></comment></comment></comment><comment><USER9> Mu. It's an applications language.</comment>


Smood it Widget - <AUTHOR> http://smood.it/widget What to know how people feel about your resources on the web? Try Smood it widget. It'll collect users mood about your photos, videos, posts... <comment><USER2> there is no :| "meh" icon. which is what i feel most of the time.

<comment><AUTHOR> you can fine tune your mood using tags! all human emotions can be resumed into 6 "primary emotions" (Parrott, 2001)

</comment></comment><comment><USER3> thanks for the link

<comment><AUTHOR> you're welcome</comment></comment>


Whitehouse Petition to stop SOPA - <AUTHOR> https://wwws.whitehouse.gov/petitions#!/petition/stop-e-parasite-act/SWBYXX55

<comment><USER2> All online petitions are worthless wastes of time and energy.

Always.

<comment><USER3> I would disagree in this case, this petition has hit a threshold which will cause the White House staff to officially respond to it. At worst, if the response isn't what the constituents want, it may change their election votes.

<comment><USER2> What's the best case scenario, based on prior petitions?</comment></comment></comment>


Ask HN: Have you ever had strong emotional reactions to pieces of code? - <AUTHOR>

I just noticed that there was a bit of UI that I actually feared debugging. Having pulled it out and replaced it, it's remarkable how differently I'm feeling about debugging the UI portion of my app.<p>I've read a lot about code smells. I'm wondering what other emotional reactions have folks had to code they were maintaining/upgrading? <comment><USER2> The printing code for BCC desktop editition reads Abandon All Hope Ye Who Enter Here. It is a steaming pile, I don't understand why it works, I can't modify it without breaking it, and I can't reproduce the hardest feature in it. It makes me feel like sixth grade gym class: anxiety, shame, and certainty of physical pain. I've avoided it for something like three years now, and deprecated the desktop edition partly so I would never have to touch it again.

<comment><AUTHOR> I wonder if the scariest part of code isn't so much obvious badness but badness that somehow still works.

I've seen much worse code than what I was dealing with. But this particular stuff had all these calls Xlib to "aid" in the rendering of Qt windows. How could I reproduce that? (fortunately Qt by itself now does everything this code did)

</comment></comment><comment><USER3> I'm currently working on a project that needs one specific library that I didn't have time to code myself and there's only one other guy on the entire interweb that built something similar, but the code is... Oh, the code is so craptacular. Just spent the last 5 days hacking through it.

Emotional reactions? At first, joy to find the library. Then came disappointment, when I looked at the source. Soon followed by frustration, when I realized I had to go in. Anger as it proved harder to figure out the nonsense, quickly followed by fear and doubt when I wondered if I was going to make it. Hope, when I had a breakthrough yesterday evening and finally, joy again since I completed my changes about an hour ago.

</comment><comment><USER4> As much as I hate to say it, anything written by my old boss scares the pants off me to touch.

He was a genius perl programmer, but unfortunately carried many of his perl programming practices into PHP.

That and the fact that he used spaces and line breaks like they were made of gold.

Great guy, amazing programmer, but I would rather rewrite code from scratch than dig through the mines of his programs.

</comment><comment><USER5> The code that I wrote about 5 years ago? Terrified to touch it. I've stepped away from the keyboard for a week before due to my fear of this old code. This is despite using versioning.

<comment><USER6> Sounds like the code I wrote in University.

</comment></comment><comment><USER7> I recall being stunned when I first read the source to the <http://en.wikipedia.org/wiki/Bourne_shell> available here [http://minnie.tuhs.org/cgi- bin/utree.pl?file=V7/usr/src/cmd/...](http://minnie.tuhs.org/cgi- bin/utree.pl?file=V7/usr/src/cmd/sh)

<comment><USER8> Oh my. It uses all these inane macros (in mac.h):

      #define BEGIN	{
      #define END	}
      #define IF	if(
      #define THEN	){
      ...

Style was a little different in 1979!

</comment></comment><comment><USER9> The OCaml compiler is a work of art. Reading it fills me with awe.</comment>


Remember the Guy Who Gave His Employees a $70,000 Minimum Wage? - <AUTHOR> http://www.slate.com/blogs/moneybox/2015/10/23/remember_dan_price_of_gravity_payments_who_gave_his_employees_a_70_000_minimum.html <comment><USER2> I stopped reading at half the story, becuase the writer obviously wants to write about all the things except whether the firm survived.

So, did the firm succeed?

<comment><USER3> The article notes that the two owners were notationaly making a 40% profit before the wage change. (This money was being reinvested into the businesses to pay for expansion.) The plan with the raise is that the increased cost makes the owner's profits zero, but the busines lives on.

Everything would be fine, if not for that one of the two owners was not consulted beforehand, and objects to having a planned zero income in the future. Thus, lawsuit.</comment></comment>


How to evaluate and implement startup ideas using Hypothesis Driven Development - <AUTHOR> http://swombat.com/2011/1/7/how-to-evaluate-and-implement-startup-ideas-using-hypothesis-driven-development

<comment><USER2> A fourth question that came up for me was "Will I enjoy doing it if it is a success?" I only focused on this aspect after I asked the question can I make money from it and realized that it was not something I wanted to sustain in the long run.

Once the will I enjoy it question is answered, then Swombat's three questions are definitely the way to go.

<comment><USER3> That's definitely important for some people. As I said, the exact questions are unique per person/idea combination. What you prioritise first will depend on your skills, your concerns and fears, your past experiences, etc.

For example, if you got burned by building something great that no one actually used, "Can I find users?" will be pretty high up the list.

This is not a method for avoiding all mistakes - it won't save you from all your blind spots. But it gives you a better chance of leveraging your experience and getting somewhere.

I'll write another article at some point about how to generate those questions.

<comment><USER2> Looking forward to reading your article on how the questions are generated and what else goes forward. I have been thinking about this quite a bit after doing a failed startup, working at a startup with funds, and pursuing a startup currently. Thanks for the great blog post.

</comment></comment></comment><comment><USER4> Some hypotheses missing from Daniel's list:

       o customer problem or need
       o symptoms that indicate customer problem or need
       o description of benefits that customer will understand
       o features to support benefits / solution customer will accept

See also Ben Yoskovitz's "Useless Feedback" at <http://www.instigatorblog.com/useless-feedback/2010/06/14/> which begins:

       Asking a friend, "What do you think of my idea?" is almost completely useless.
       Asking a friend (or someone else who isn't as biased as your friend,
       "Do you have this problem, and how painful is it?" is a much more useful query.

<comment><USER5> Another useful method of opinion getting I have found to be useful, is to directly beg/ask for criticism.

"Please tell me all the bad things you can think about this idea." "Please tell me all the reasons you think this idea will not gain traction and will fail" "Please tell em why quitting my job to pursue this idea is a bad thing"

Questions that openly invite criticism are useful, since I think people think more imaginatively when they are being critical ... there are only so many ways to say nice things about something, but the insults can come from anywhere.

More than just finding fault with the idea, you will find assumptions you had implicitly made being challenged. So even if the idea is good, it might still be a bad idea to pursue it, lest you end up with a "the operation was a success, but the patient died" scenario.

If you have a cofounder, take it in turns, over two days, to defend/attack the idea. Defend your idea like Fort Knox on day one, and then attack it like it owes you money on day two.

</comment></comment><comment><USER6> The ACH method would be useful in conjunction with this: [http://en.wikipedia.org/wiki/Analysis_of_Competing_Hypothese...](http://en.wikipedia.org/wiki/Analysis_of_Competing_Hypotheses) (once you gather data to back your hypothesis)

</comment><comment><USER7> Seems very much like the practices of customer development part of Lean startups. But leaner.

<comment><USER3> Thanks, I'll take that as a compliment!

</comment></comment><comment><USER8> He missed to most important way to start testing your hypotheses: go talk to customers

<comment><USER3> I wasn't listing out ways to resolve the hypotheses, just a method for using hypotheses to drive the startup. Talking to potential customers is obviously an essential step in resolving questions like "what features are people willing to pay for?" or "will people be willing to pay anything for this?"

</comment></comment><comment><USER9> _Even better is to aim not for something you can get people to use, but instead try to build something you can charge for immediately_

I don't get this. If no one can use it, what are they paying for?

<comment><USER3> Convincing people to pay for something generally entails providing them with something they can use, or at least with the pledge of something they can use.

One common way to go about this is to create a paper prototype, pitch it to potential clients, get them to sign a non-binding letter of intent to buy the product if you develop it as per the specs, and _then_ develop the product and sell it to those people who already told you they'd buy it.

This is as contrasted with the somewhat more common, but often less successful approach of building something useful to a bunch of users, letting them use it for free while you develop the offering, and then asking them to pay.

</comment></comment><comment><USER10> This gives a fresh perspective on the matter. Never thought about evaluating questions this way. Ill give it a try !

</comment><comment><USER11> splitting a project in small steps and moving from step to step based on results analysis is something i've suggested even for contracting web projects</comment>


Automated Background Checks Freeze Out Renters - <AUTHOR> https://www.nytimes.com/2020/05/28/business/renters-background-checks.html <comment><USER2> Especially after Equifax, I'm a big believer that one of two things needs to happen when it comes to the kinds of databases that are used to decide whether people have access to critical things like housing and credit:

1\. The government takes them over and runs them

2\. The companies' high-level execs automatically have personal liability for mistakes when they accept the job

Since the latter is unlikely to ever happen, it's pretty clear to me that these kinds of things shouldn't be permitted to be handled by private enterprise (and I very much lean libertarian and believe that private companies are better than the government at most things most of the time). Capitalism is great, but it just doesn't work when there are human rights considerations (and I would say access to housing very much qualifies).</comment>


Build an ICO on Stellar in Less Than One Hour - <AUTHOR> https://goolge.io/post/launching_stellar_ico/ <comment><USER2> Sorry but I flag this due to your confusing domain. goolge? Seriously?. Even more hilarious is your faq page:

"FAQ Q: What's up with the name?

A: The name is a most likely vain attempt to lure some poor souls from the British Indian Ocean Territory who mistype the name of a well-known search engine into a web of hopefully interesting blog posts."

<comment><USER3> Considering the content, I don't think is fair to flag it. And he's honest with his intentions, without trying to "sell" anything.

<comment><USER2> In terms of ethics, it is not good. Even if you don't try to sell anything, making visitors confused with your domain is not by any means recommended. Who will make sure that he won't and never try to sell anything from now on. I am not arguing on the content, though. Whether it is good or not depends on the reader's assessment. You can't forgive one's evil act just because that act looks cool (to you).

<comment><USER3> I agree with what you are saying, but making visitors confused needs a bit more than just a misspelled domain name. People have brains... Ok, not all of them (brains) are so well developed, but I refuse to believe that landing on that website will fool anybody. Sometimes we try too much to be "fair" for the sake of being the "good guys" and we don't see things in context. Of course we don't know for sure that he will not try to sell anything or try to fool people that he's actually Google, but I'm only talking about the present. I don't think his act looks cool and I also don't think it's an evil act. And I don't even think his content is that good, but his content definitely doesn't try to fool anybody.

Anyway, because English is not my native language, it's a bit hard for me to explain why I don't think is fair to flag it up.

<comment><USER2> Don't worry I totally understand your point. Maybe I am a little bit harsh, but I still won't rollback my decision of flagging this. I understand that he doesn't try to fool anyone, but his attention vs what everyone perceives may conflict. I have to admit that on a site like Hackernews, the first time I look at this link at its address, I almost thought that Google is now interested in ICO, had it not been for the 1 minute that I try to look back at the domain and then go to its faq page.

</comment></comment></comment></comment></comment><comment><USER4> Stellar is problematic for ICO's because they require you to hold on minimum balance in wallet. So you need like 30-40 XLM just to be able to hold the tokens.

I am fan of XLM but they definitely have some strange things happening and while API is really easy to work with, minimum requirement for example is preventing you for making true apps.

<comment><USER4> To add, I think Wave platform or ERC20 Ethereum is better at the moment because it is more straight-forward way. Wave Platform is especially nice and have very nice wallet.</comment></comment>


Is There Any 3D Printer That Can Print A Copy Of Itself? - <AUTHOR> Is There Any 3D Printer That Can Print A Copy Of Itself? <comment><USER2> It cannot print a heater cartridge. Please contact me at firstname.lastname@example.com for high quality and reliable heater cartridge. Free samples are available for testing.

</comment><comment><USER3> Not yet. But the original 3d printer project RepRap was started with that very aim.

<comment><AUTHOR> Interesting! I visited their website on your recommendation. Looks like those guys are moving in the right direction. Thanks for the info, much obliged!

</comment></comment><comment><USER2> It cannot print a heater cartridge. Please contact me at firstname.lastname@example.com for free samples.</comment>


Parsing Techniques - A Practical Guide - <AUTHOR> http://dickgrune.com/Books/PTAPG_1st_Edition/ <comment><USER2> I found this reference interesting:

"Snelling, Michel. General Context-Free Parsing in Time $n^2$, in International Computing Symposium 1973, pages 19-24, Amsterdam, 1974. North- Holland. It is extremely unlikely that the claim in the title holds, but no refutation has been published to date; in fact, the paper does not seem to be referenced anywhere. The algorithm is described in reasonable detail, but not completely. Filling in the last details allows some examples in the paper to be reproduced, but not all at the same time, it seems. Attempts at implementations can be found in this zip file. Further clarification would be most welcome."

<comment><USER3> link to the link: [http://dickgrune.com/Books/PTAPG_2nd_Edition/LowAvailability...](http://dickgrune.com/Books/PTAPG_2nd_Edition/LowAvailability/)

</comment></comment><comment><USER4> There is also a second edition, which updates some chapters with much more recent resulst (AFAIR, the book is from 1992.) In addtion, the author (Dick Grune) also co-authored a book on compilers ("Modern Compiler Design"), which I like a lot as it has a sound treatment of non-imperative programming language concepts, too. (Plus I think the treatment of BURS plus usage for instruction selection is best described therein as well.)

</comment><comment><USER5> I'm going to upvote this on the general principle that I've seen a lot of programmers who don't quite know what parsing is, but reading a 310-page book is perhaps not the best way to familiarize them with it.

The basic thing that a programmer needs to know about parsing is that regular expressions usually aren't. The big problem with regular expressions is that they have real trouble handling nested modes. Just to give a modestly complicated example of what can happen from a simple grammar with nesting, imagine a grammar with just single-letter variables and parentheses, parsed into Python with tuples:

        a(bc)def
        => ('a', ('b', 'c'), 'd', 'e', 'f')

You _might_ be able to get a regular expression engine to deal with that for you, but it will tend to fail on something slightly more complicated like this:

        a(b((cde)f)(g)h)ij

...because it will usually either be too conservative and start matching:

        (b((cde)

or else it will sometimes be too aggressive and start matching:

        ((cde)f)(g)

Perl is a big exception; Perl actually has a syntax to make regular expressions properly recursive.

A good practical example for you to think about is CSV parsing. In CSV, a field can sometimes be quoted so that it may contain commas, and two quoting- symbols inside that field is interpreted as a single quoting-symbol too. Thus to create a table containing a chat, we might have to write:

        Reginald,I think life needs more scare-quotes.
        Beartato,"That's nice, Reginald."
        Reginald,"Don't you mean ""nice""?"
        Beartato,Aah! Your scare-quotes scared me!

With a straightforward character-by-character parser this is pretty easy to parse; you check for the «,» character and append another record onto the row, check for the «\n» character to append this row to the table, and when you see «"» you enter a special string-parsing mode which does not exit until it sees an odd number of quote marks pass by, bordered by two non-quote marks. (The fact that you might have to "peek ahead" leads to interesting parse combinators which have to be able to succeed or fail without moving the cursor forward.)

At one of my jobs I actually spent some time outside of work making CSV parsing faster by using a dangerous hack: you can split on the quote character first, to have the native string code handle the basic division of the table; then the even fields contain CSV data without quoted text (or occasionally empty strings, which must be interpreted as commands to add the quote character and the following text to the preceding field), and the odd fields contain raw data to be entered into a new record. (I call it a dangerous hack because I remember the thing working at first, but eventually I believe three bugs came out on more complicated CSV files -- it was very hard to "see that it worked right" due to the extra overhead needed to move all of this character-by-character logic into the split() calls of my programming language.

<comment><USER6> Regular expressions are for lexing (breaking up input into tokens, AKA "tokenizing"), parsers are for assembling a stream of tokens into a parse tree (according to a grammar). You can kinda-sorta get away with parsing via regular expressions, but "surprisingly complex" regular expressions (<http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html>) should be a sign that _you're using the wrong tool_. De-coupling lexing from parsing also means that your grammar won't be cluttered by issues like whitespace handling.

Perl's RE extensions can be used to do some parsing, albeit at the cost of potentially exponential runtime (<http://swtch.com/~rsc/regexp/regexp1.html> * ), since they're NP-complete (<http://perl.plover.com/NPC/NPC-3SAT.html>). (Congrats, your parser is now a denial-of-service attack vector!)

* If you find this article interesting, you'll probably _love_ _Parsing Techniques_.

> I'm going to upvote this on the general principle that I've seen a lot of > programmers who don't quite know what parsing is, but reading a 310-page > book is perhaps not the best way to familiarize them with it.

This book is a _reference_. For someone who wants to learn basic parsing techniques, I'd first direct them to something like Niklaus Wirth's _Compiler Construction_ (PDF: <http://www.ethoberon.ethz.ch/WirthPubl/CBEAll.pdf>), which has a quick and clear introduction to recursive descent parsing, but only briefly touches on other methods.

The Grune book is for when you need to understand the trade-offs between (say) different kinds of chart parsers, how parser generators work, classic performance optimizations in Earley parsers, or error handling strategies. It has quite a bit more depth to it, as well as an excellent bibliography. The second edition was updated in 2008, and adds a lot of new content.

<comment><USER7> Since you brought up lexing I'm going to ask a really noob-ish question: does this book (by Grune) deal with lexing at all? If it doesn't, is it because parsing is the more interesting/complicated of the two?

I've recently started getting into a few "traditional" compiler resources after reading a lot of Lisp centric compiler books (Lisp in Small Pieces... SICP, PAIP) where lexing and parsing are kind of handled by (read) so this is a whole new world for me.

<comment><USER6> Lexing is strictly simpler than parsing - lexing is done with state machines* , while many parsers can be viewed as state machines _with stacks_ , AKA "pushdown automata" (<http://en.wikipedia.org/wiki/Pushdown_automata>). Lexers don't have stacks, which is why basic regular expressions can't do things like match arbitrarily nested parenthesis.

* Basically: make a byte-by-byte flowchart ("an int is a digit, followed by more digits, stop when it reaches a non-digit character and return the accumulated string as an int"), then convert that to code. Pretty simple. Graphviz (<http://graphviz.org>) makes pretty state machine diagrams.

Just knowing a little bit about automata / state machines will be enough to write a decent lexer. The Wirth PDF above explains it just a few pages (chapter 3). People often use tools like lex or ragel because writing them by hand can be rather tedious (being able to say e.g. "[+-]?[1-9][0-9]* { return LEXEME_INT(atoi(str)); }" rather than writing out the tests byte-by-byte), but they're not hard.

And yeah, the Lispers are able to sidestep parsing entirely.

<comment><USER8> That rule doesn't hold for some languages. For example, a Python lexer needs to remember a stack of indentation levels to know whether a given line's indentation should be tokenized as an INDENT, a DEDENT, or no token at all.

<comment><USER6> True. Strictly speaking, that means it isn't context-free in the usual sense (right?), but it's a practical extension.

Matt Might uses Python's indentation as a lexing/parsing example in his ongoing "Scripting Language Design and Implementation" course ([http://matt.might.net/teaching/scripting- languages/spring-20...](http://matt.might.net/teaching/scripting- languages/spring-2012/)), which is worth following if you're reading this thread.

</comment></comment></comment></comment></comment></comment><comment><USER9> Grune is most famous, by the way, for being CVS' original implementor.

</comment><comment><USER10> I have this book. This book is good, and very complete from a traditional formals grammars point-of-view (LL, LR, SLR, LALR), and has _very_ good sections on top-down and bottom-up parsing, but it is rather outdated in terms of what people are using now.

Nowadays many people use parser combinator libraries or packrat-style PEG parsers. This book provides no information about either.

<comment><USER11> Parser combinator libraries are usually just embedded DSLs for constructing data structures (implicitly or explicitly) that are then interpreted during traversal, mostly in a way which has equivalent power to LL(1) or LL with backtracking - and frequently without the advantages of a "proper" analysis, such as detection of grammar ambiguities that you need first and follow sets to find. They're very cute, IMO; an appealing piece of hackery. I wouldn't try and push them much beyond fairly small ad-hoc parsing problems though. At core, they are a form of metaprogramming, where the text of your combinator expressions is a program that writes a program, and the extra distance your code needs to go through to get to the hardware is liable to introduce problems: either unforseen issues with the library, unexpected overuse of CPU or memory, or hard to diagnose errors.

PEGs, meanwhile, are all-out backtracking exponential matchers that try and get back the performance by spending memory on memoizing. A PEG parser would be my last choice in writing a parser, unless I had to recognize a complex language with no tools and almost no time, but plentiful CPU and memory. With tools, I'd prefer GLR parsing if the problem is hard enough; with time, I'd prefer hand-written LL(k) recursive descent, which gives substantial flexibility. Most commercial compilers use hand-written recursive descent for a reason.

In summary, if you have good knowledge of even just LL(1) alone, you should be able to understand how both parser combinator libraries and PEG parsers work very easily, and also see why they can be problematic. So I wouldn't be too fast to dismiss the book as dated.

</comment></comment><comment><USER12> Just to point out, for those who have never heard of it, you can learn a lot about parsing, pattern matching, grammars, and term rewriting from TXL, which is definitely a Perlis language.

<http://txl.ca>

<http://en.wikipedia.org/wiki/TXL_(programming_language)>

</comment><comment><USER13> Very accessible, yet complete book on parsing</comment>


Capital-As-a-Service: A New Operating System for Early Stage Investing - <AUTHOR> https://medium.com/social-capital/capital-as-a-service-a-new-operating-system-for-early-stage-investing-6d001416c0df <comment><USER2> This might sound a bit cynical but it seems we are at a stage where using the words - data, ML or AI seems enough.

The post while being vague constantly throws around the word - "data". What data really? If the Anti Portfolio discussion from yesterday ([https://news.ycombinator.com/item?id=15547136](https://news.ycombinator.com/item?id=15547136)) is any indication, it is difficult to predict growth - data or not. For example, there already was Friendster. What data will help in deciding whether to invest in early stage Facebook? Or what data will help in decide investing in Uber? Today's startup are about growing, engagement and then possibly trying to make money. The truth remains even the best will fail at the last step.

</comment><comment><USER3> It's not really clear from the write up exactly what they're offering... How is this different from any other VC outfit?

IndieVC[0] is the only really interesting spin on investing I've seen out there and they open-sourced their terms sheet publicly at launch.

[0] [http://www.indie.vc/](http://www.indie.vc/)

<comment><USER4> You just don't get it. They are disrupting the VC industry with data. It's an OS not an S. wait maybe you are right. ;)

</comment></comment><comment><USER5> 1\. Good companies won't pitch you, it's common for VCs to reach out to the top companies while they are not raising funding. So good luck running your analysis on data you don't have.

2\. There are no metrics that identify a good from a bad investment. Maybe this would work in some cases for later stage investments. But even at the later stage the metrics are all over the place.

3\. Companies applying to this VC fund will game the system

4\. This is not a new thing, every VC firm looks at your metrics.

<comment><USER6> 1\. Good and great companies actively seek out funding, especially at early stages. Lots of good and great ones slowly build and get contacted, too.

2\. There certainly are good metrics, otherwise the basic tenets of business that have evolved over the past 5,000 years would exist. There may not be metrics that say if a certain product/service will be a smash hit or not, but it did not take a crystal ball to see that Pets.com was incredibly unsustainable, or that Groupon (and Blue Apron was too easy to replicate and thus overvalued, or that Juicero was an absolutely asinine idea destined for failure (massively overengineered squeezer that wasn't even necessary for their overpriced juice bags).

3\. People game every VC system. Remember Pixelon? Theranos was WIDELY derided in medical and medical research circles from the get go. No way a 19 year old drop out came up with such a massive breakthrough in blood tests, she didn't even have the time to learn the medical basics. Faraday has looked sketchy from the outset as well.

4\. This statement I wholly agree with, and it happens to back up my disagreement with #2.

<comment><USER7> Groupon should have figured out how to be self service for merchants. maybe combined with an ebates. maybe even pushed into a influencer marketing.

Amazon would have probably gone the way of pets had it not found AWS.

<comment><USER6> I disagree about Amazon. They took the Walmart tactic and moved it digital before Walmart did, that's how they grew. Become a logistics expert, and expand horizontally.

</comment></comment></comment></comment><comment><USER8> The flaw here is using the wrong metrics. Once a company has found a repeatable and growing business model, it's trivial to raise money and there's no reason to pick Social Capital over anyone else.

The big market opportunity is to fund startups at the very earliest signs of success. When all they have to show is some code and a few Hacker News upvotes or GitHub stars.

 _Someone_ is going to make YCs returns look weak by funding this early. And nothing would do more for diversity than a low barrier test that is 100% blind and meritocratic.

<comment><USER9> From my experience, most of it is about connections. I have seen $41 MM thrown at startups like Color and them failing a month later! Why just recently, FileCoin raised tens of millions from VCs, before goong on to raise $200 MM from crypto holders around the world for a product that hasn't even been developed, in a space where MaidSafe and IPFS etc. already exist. How? Because it was touted by CoinList, started by among others AngelList founder Naval Ravikant who has all the connections.

<comment><USER10> Filecoin is made by the people who made IPFS, and it is an incentivization system for IPFS. Maidsafe has been around for more than 10 years and has yet to launch, and it's unclear what exactly it does and if it even competes with Filecoin at all.

</comment></comment></comment><comment><USER11> It's hard to know what they are actually doing since the blog post doesn't explain what Capital-as-a-service is. But, if this works for them, I bet it is because it increases their deal flow. With this system and their marketing of it they can get more founders to submit company data to them and see companies that are outside their network. It would be much easier to filter through a bunch of business data submitted via a web form rather than going through pitchdecks that founders e-mail them.

</comment><comment><USER12> Flagged because this says nothing and is just blah blah blah endless advertising copy. Probably bought half those upvotes, or do you HNers upvote without reading the article?

</comment><comment><USER13> Genius. Finally, someone it taking a "moneyball" approach to VC. The critical comments on this thread have missed the point.

Although the author is vague, it sounds like they built a system to analyze company metrics and thus screen investments at scale. This enables them to see more investments around the world, and makes it easier for entrepreneurs to "pitch" them, because they don't need to do the time consuming, typical Silicon Valley pitch process. Many more companies can get funded this way. And those investments will be less competitive and garner lower valuations (implying better returns). Again... genius.

<comment><USER14> > they built a system to analyze company metrics and thus screen investments > at scale

Wait, so they invented... financial analysis? KPIs? BI?

Really?

<comment><USER13> Obviously they didn't invent financial analysis.

They _built_ a system that does this at scale: 1) collects and organizes the right data and spits out analysis -- this can be painful from the many times I've done it. Investment banks hire armies of young analysts and pay them six figures to do this at scale 2) made it self-serve for entrepreneurs seeking funding -- not having to do the CRM/pipeline mgmt process associated with private investing is a massive efficiency improvement. VCs hire associates and partners and pay them handsomely to do this at small scale (hundreds of deals seen / year / professional)

As someone who has done a lot of private investing, the value here is obvious and substantial for the investors and the entrepreneurs.

<comment><USER15> I am not sure if you are aware, but every VC worth its salt has built such a system focused on early- or mid-stage startups by now, or is currently doing so. It's not really anything revolutionary.

It also doesn't seem like they go for a Moneyball approach as you suggested in your earlier comment. They are going for previously undiscovered top startups, and not sub-top startups for 10% of the investment sum (that would be a Moneyball approach).

> made it self-serve for entrepreneurs seeking funding

Not sure where you are getting that from.

</comment></comment></comment></comment><comment><USER16> I submit the central problem is that a lot of things don't scale smoothly, and figuring out what doesn't scale costs money. Discovering how to transition from 10 to 100 is easy. 100 to 10,000 might be a 9 figure problem, but everything after 10,000 is vertical growth until you hit 10M.

The other issue is that some great ideas need $10M or $100M or $1B up front. Google's TPUs are probably a 9-10 figure investment, with zero dollars income until the whole system is deployed at scale. But it becomes a money printing machine after that.

</comment><comment><USER17> So, a bank?

<comment><USER3> Banks don't touch startups unless you have personal assets you're willing to put up as collateral.

</comment></comment><comment><USER18> Full page modal asking for me to sign up. Medium has jumped the shark.

</comment><comment><USER19> internet company are global by default now, however VC are not . Social capital is going global from day one. One of the first startup that applied to social capital was a Mexican startup. It was much easier for a Mexican company to get in touch social capital than a local mexican vc. Makes perfect sense. Social capital will go where no VC will go . Mongolia may be next

</comment><comment><USER20> The argument they are making is that they can leverage data about a company to determine how it should be invested in and what steps need to be taken to ensure success. This will supposedly be scalable and reach areas where venture capital is not available. Reminds me of Accelerando.

</comment><comment><USER21> I don't see how it's an operating system. Did I miss something in the article?

</comment><comment><USER22> If it's semi automated with humans making decisions in the background it could make sense.

I guess the value it could bring is low friction yes/no without wasting the founders time.

It's the time suck that is such a negative aspect of seeking capital!

</comment><comment><USER23> Genuinely - can someone TLDR this? I read it and don't grok.

<comment><USER24> Well said. It is hard to read as a non native, fully technical person.

</comment></comment><comment><USER25> Sounds ... vacuous. I don't think some kind of revolution in finance is needed. This sounds like spin.</comment>


Is Heavy Use of Async/Await a Fad? - <AUTHOR> The multi-user design of web servers already provides "natural" parallel processing to distribute the processing load. If that's the case, then why the common suggestion to add async/await to all the libraries and even domain code?
I'm not an expert on the "guts" of web servers (such as IIS and Apache), but when I ask in related expert forums, it stirs up controversy.
According to some the "need" for such is only for heavily used web-sites such that async/await are wasted on roughly 99% of sites.
Second, it's allegedly only a performance improvement because of the particular implementation of the common web servers and/or OS's. If the implementation of the web servers is reworked in the future, the benefits of async/await might just go away.
Some say "adding async/await still doesn't hurt", but it can clutter up code and make certain debugging harder. Thus, having it scattered about is not a free lunch. <comment><USER2> That's not the point of async/await, or of any concurrency strategy in general.

The point is backend fan-out and the associated latency that goes with it. Most modern webservices - ones that do useful things at least - need to make a number of network calls to backend services to retrieve results. If you single-thread the webserver, these get executed in series, and each one of them blocks the whole webserver until it completes. Even thread-per-request or process-per-request, you're still blocking the individual request until all backend requests complete; you're just sitting there waiting on a database fetch while you have other backends running on other computers that could be doing useful work. That's how you end up with 2s requests where the user's browser just hangs while loading.

Worse, each of those threads take up a few megabytes of RAM that can't be freed until the request completes, so if you have a lot of users requesting pages at once, there's a big risk of the server paging to swap (which will absolutely kill performance) or running out of RAM entirely and crashing.

The only way to avoid this is to have some sort of concurrency within the request, where you can you fetch your session cookie and user record from Redis _at the same time_ as you check memcached for a cached version of the page _at the same time_ as you kick off a backend request to a custom server _at the same time_ as you read some records out of a database. Different languages have different approaches for this: old-school Java used to use threadpools and message queues, pre-ES6 Node.js would use callbacks, C++ would use state machines, Django or Rails would just single-thread the backend requests and live with the 10 requests/sec throughput. Async/await has gained popularity lately because it's honestly a lot more intuitive than the alternatives: you can at least use normal language mechanisms (variables, arrays, and semicolons) to indicate "these things should happen in series, and these things should happen in parallel" instead of breaking your server up into little function-sized or class-sized chunks that are dictated by when responses come back instead of what data needs to be processed.

<comment><AUTHOR> Re: _If you single-thread the webserver, [network calls] get executed in series_

Why is the webserver single-threaded then? And even if it were, why can't network calls be fanned out within it? If they made multi-threaded webservers, would that solve the problem?

Re: _Worse, each of those threads take up a few megabytes of RAM that can 't be freed until the request completes_

Do you mean user page requests, or RAM related to network calls? If the first, that probably will happen no matter what.

I'm trying to sketch little timing diagrams to see where the bottleneck could come from, and cannot see any "general" problem, only problems related to specific architecture choices. But again, I'm not a systems-level software expert. Is there a common concept behind the bottleneck, lots of architecture- specific nuances adding up (OS+WebSrvr+Compiler), or something else?

<comment><USER2> Are you familiar with the difference between blocking & non-blocking I/O calls? Also, have you done any distributed systems work, where the algorithm that services a given request might require computation on different machines? That's background knowledge that's important; it's hard to know where to start without knowing your background.

<comment><AUTHOR> Yes, but when I ask web-server experts, they can't supply a clear explanation for what happens with a typical web application, such as the famed "shopping cart application". Or if they do, another expert chimes in and says Expert A's explanation is technically wrong, and then Expert B argues over Expert A's knowledge of how web servers/OS's work or could work, and they delve into arguments over minutia about cache size and chip architecture, and/or bad design of C#'s compiler, etc.

I open Pandora's Box but can't close it.

Thus, I cannot get the bottom of whether heavy async/await usage is to get around quirks in _current_ systems, or solve a general/universal problem regardless of how web-servers/OSs/compilers/chips are built.

<comment><USER2> Most experts on expert programming forums are idiots. That includes this one, but I've at least worked on an application (Google Search) that I'm pretty sure you've used.

Most _large_ websites (with hundreds of millions of users and dev teams in the thousands) don't run all their code in the webserver. They farm out requests to a bunch of backend services running on different boxes - databases, app servers, caches, etc. The central problem with this is that _you don 't know when a request is going to come back_. You don't want to have your webserver simply wait around and do nothing while each request finishes; it'll spend 90% of its time doing nothing, which means you need 10x as much hardware to service the same number of users. But if you have lots of requests to backends in flight, you need some way to synchronize the responses and ensure that the webserver executes the right piece of code only when all of the data needed for it is present.

Different languages have different approaches to this. The way we used to do it in C++ is to hand-write a big state machine: each time a response comes back, dump it into memory, consult the current state, move to a new state that might be something like COOKIE_FETCH_COMPLETED or USER_FETCH_COMPLETED or RESULTS_LOADED, execute the code associated with that state (which may kick off even more backend requests), and then wait for the next response to come back, which then triggers the next edge in the state machine, and so on.

Async/await just gives language-level support for that. When you await a future, the language interprets it as "execute the next statement of this function only when the data in this future is present. And you can compose futures together, so you're awaiting "all of the data in this list of promises is present". It's a way to apply familiar programming-language concepts like variables and statements to code that's not all running on one box.

Do you _need_ async/await? Not if your entire system runs on one box. If every time you make a blocking call, it's just going to a database that runs on the same physical machine as the webserver, you're not really losing anything because the same computer has to do the work anyway. I'd bet that a number of "experts" have only worked on systems like this: if they're talking about OSes and cache sizes and chip architecture, they're not even thinking in terms where concurrency and non-blocking I/O is useful. Oftentimes it's very reasonable to build an initial version like this, but the set of profitable niches that can be served by things like a "shopping cart application" is rapidly declining.

Unfortunately, the failure mode for a single-box server with blocking I/O is "your server locks up", and that tends to happen right when it gets most popular, and then you have to rewrite _everything_ if you want to switch it to non-blocking async code. That's the other reason async/await is getting popular: this is one of those areas where scaling is a cliff, not a slope, and most people want to avoid cliffs in their business.

<comment><AUTHOR> Re: _You don 't want to have your webserver simply wait around and do nothing while each request [of another server] finishes; it'll spend 90% of its time doing nothing, which means you need 10x as much hardware to service the same number of users._

No, it's processing _other_ users' requests. We are talking about high-traffic sites, right?

Let me see if I can present a scenario to explain:

        R-I-A-I-B-I-C-I-H  // typical processing steps

        R = request received (get or post)
        H = HTML/HTTP output (response)
        A,B,C = requests for services from/to other servers
        I = Internal processing (regular app logic)

Even if there is a lot of waiting for A, B, and C, there's still more than plenty of "I" for the web server(s) to work on, because each user request will be at a different stage typically.

If say B is slow, it's going to be the bottleneck regardless of whether async/await is used or not. They'll all be waiting on B (at least those requests requiring the same resources).

Now maybe you are implying one rewrite the application so that R-I-A-I-B-I-C- I-H's steps don't have to be done in the order shown. But that's NOT what async/await does (at least not how it's typically presented/promoted).

<comment><USER2> You lose the internal concurrency within the request (hoping this formatting goes through):

                    W---
         C-H       / X  \
        /          |/ \  \
       R-I--I--I---I--I-I-I-I-H
          \/\ / \ /|\  /   /
           A B   U \ Y    /
                    Z-----
      R = request
      I = internal processing
      C = cache server
      H = HTML output
      X = early exit
      A = Advertising server
      B = Session cookie server
      U = User record
      W,X,Y,Z = application backends

      Compare vs sequential processing:

      R-C-I--A-H?-I-B--I-U---I--W-----I-X-I-Y--I--Z</comment></comment></comment></comment></comment></comment></comment><comment>--I-H

Note the user-perceived latency. For realistic sites, you may be looking at 400ms in parallel vs 5s or worse in series, which is a big difference in how long your users wait and how likely they are to bounce.

This also has knock-on effects in RAM usage. Say that your webserver is running at 100% CPU utilization. If a request takes 10x as long, it will have 10x requests in flight at any given time. They won't be consuming CPU, but they will be consuming RAM, as the server needs to keep all the context around that it'll need later. RAM can often be the bottleneck for many servers.

> Now maybe you are implying one rewrite the application so that R-I-A-I-B-I- > C-I-H's steps don't have to be done in the order shown. But that's NOT what > async/await does (at least not how it's typically presented/promoted).

It is if you're doing it right. That's what Promise.all()/race() does in ES6, or asyncio.gather()/wait() in Python3, or Future::join in Rust. If you're not doing this you're basically gaining nothing from async/await.

<comment><AUTHOR> Re: _It is if you 're doing it right._

Well, okay, but the typical suggestion is to use async/await even if your app logic is not currently intended to be divided that way. Is it a "keep up good habits" suggestion? Unless scaling up happens a lot in a shop in a way that can be app-side parallelitized, I'd say YAGNI dictates to leave it _out_ of app logic. (I deal mostly with database-heavy work-oriented CRUD-ish apps, not social networking and ad-funded sites, by the way.)

Re: _If a request takes 10x as long, it will have 10x requests in flight at any given time._

That assumes the app logic is "parallelitized" per above, doesn't it? Otherwise, the processing time per request shouldn't be different because async/await-ing database/network calls will not make them process faster by itself.

By the way, I couldn't find much info on "session cookie servers". Is that usually a roll-your-own kind of task, perhaps with the aid of an API?

Hey, I think your diagram came out as you intended. Kudos! Ascii U.

<comment><USER2> > Well, okay, but the typical suggestion is to use async/await even if your > app logic is not currently intended to be divided that way. Is it a "keep up > good habits" suggestion? Unless scaling up happens a lot in a shop in a way > that can be app-side parallelitized, I'd say YAGNI dictates to leave it out > of app logic. (I deal mostly with database-heavy work-oriented CRUD-ish > apps, not social networking and ad-funded sites, by the way.)

For that domain you could take it or leave it. Async/await is most helpful when you have lots of users hitting a server with lots of backends; if it's a few users hitting 1 webserver with 1 DB, performance gains will be marginal, and it's functionally equivalent to blocking calls but with some extra syntactic overhead. The deciding factor will probably be what libraries you need to support: many libraries are moving to async/await because they don't want consumer/HPC applications as customers.

> By the way, I couldn't find much info on "session cookie servers". Is that > usually a roll-your-own kind of task, perhaps with the aid of an API?

Google has a custom server for this because of security needs to validate signed cookies & timeouts, but most sites on the outside just stick a JSON or protobuf record into memcached or Redis and fetch it. It usually is a separate fetch before many of the other database calls, though, because most (consumer) sites have some notion of a session and saved user state that's independent of the user record, because you frequently get anonymous users who don't have an account. So it might physically be on the same Redis or memcached box, but still requires separate network round-trips.

<comment><AUTHOR> Re: _if it 's a few users hitting 1 webserver with 1 DB, performance gains will be marginal_

Let's say it's 4 web servers hitting 4 DB's, but otherwise most of the app logic code will not be parallelitized?</comment></comment></comment></comment>


Lawrence Lessig's New Book: One Way Forward - <AUTHOR> http://oneway.lessig.org/ <comment><USER2> Here's a brief excerpt from the book:

[http://byliner.com/lawrence-lessig/stories/one-way- forward-e...](http://byliner.com/lawrence-lessig/stories/one-way-forward- excerpt)

If you're looking for a DRM-free version, we made that available via Apple's iBookstore and Google's eBookstore (now known as Google Play). A print-on- demand version is available via Blurb.com. All of these buying options are reachable from the book's page on Byliner:

<http://byliner.com/originals/one-way-forward>

One aspect of Byliner that's interesting (we hope) is the ability for authors to either update their stories, or provide detail behind their stories. A good example is Jon Krakauer's Three Cups of Deceit. In the months since its publication Jon has added 20,000 words of updates to his story:

[http://byliner.com/jon-krakauer/stories/excerpt-three- cups-o...](http://byliner.com/jon-krakauer/stories/excerpt-three-cups-of- deceit#update-13)

Most of our authors continue to evolve their stories after publication, to the benefit of readers. We hope that Professor Lessig does the same with One Way Forward, which we were very proud to publish.

<comment><USER3> Maybe I'm just in a bad mood right now, but for whatever reason I find this excerpt really uninspiring. There's no doubt that amateurization of culture and politics is part of the solution, but at the same time it's pretty much a non-answer. He's basically just saying we need to wait 50 or 100 years for the world to change, and even then it's a pretty big leap of faith.

<comment><USER2> I don't think you'll feel that way about the full book. Send me an email (info in my profile) and I'll send you a complimentary copy. If you enjoy it, you can amend your comment; if not, no foul.

</comment></comment></comment><comment><USER4> The story link is to a blog for discussing revisions the book. The revised book comes out in the fall and will be available at the story link. Until then you need to actually buy the book. Here is the link to buy the actual book:

<http://byliner.com/originals/one-way-forward>

</comment><comment><USER5> I haven't read his previous book, "Republic, Lost", but I saw the 1 hour speech at Google from last year, that was based on it, and it was great. He explains how the Government ended up having a relationship with corporations instead of "the people", and what is needed to solve this (almost unsolvable) problem.

<http://www.youtube.com/watch?v=Ik1AK56FtVc>

</comment><comment><USER6> Also relevant: <http://theanticorruptionpledge.org/>

</comment><comment><USER7> No offense to Prof. Lessig - but he's sort of like someone trying to restore the Roman Republic in the age of Nero.

The reality of Washington is that politics (ie, democracy) matters a little, but not very much:

[http://foseti.wordpress.com/2011/02/02/on-government- employm...](http://foseti.wordpress.com/2011/02/02/on-government-employment/)

If politics has negligible power over government, electorates have negligible power over government. So why do we need to "get money out of politics?" The reality of Washington is (IMHO) that voters could elect a President and Congress as pure and holy as the Dalai Lama, and it wouldn't matter at all - because they'd have about the same real power (over the permanent government) as the Dalai Lama.

Lessig is yanking with all his weight on a wheel that isn't connected to the rudder. If there's any rudder at all...

<comment><USER8> Interesting. So what do you see as solutions?

<comment><USER7> Fire everyone in DC and move the capital to Palo Alto.

Is it that we don't need to do this, or that we can't? If we can't, the hypothesis is confirmed and we _really_ need to. If we don't need to... come on, man.

I've never worked in DC as an adult. But I grew up there as a bureaucrat's brat. And all I can say is... neighbor, you have _no idea_.

(Professor Lessig certainly has an idea. But he won't share it with you - because the source of his power is the dark crystal under the Capitol. Ie, he's important because of his connections, direct or indirect, personal or institutional, to the permanent government. He matters because he teaches at Harvard, an institution unconditionally trusted by... you get it. Certainly if he was just some random neighbor on the Internets, like me, he'd have a much tougher time being taken seriously.)</comment></comment></comment>


Who Strikes Fear into Silicon Valley? Margrethe Vestager - <AUTHOR> https://www.nytimes.com/2018/05/05/world/europe/margrethe-vestager-silicon-valley-data-privacy.html <comment><USER2> I wonder if there will ever come a time when the biggest danger to SV from Europe is competitors, rather than regulators.

It may be that competitors can't become more of a threat till regulators become less of one. It's hard for a society to focus simultaneously on multiple things, and regulation and startups seem not merely orthogonal, but opposed.

<comment><USER3> There's a big difference between regulation that affects all players fairly and equally (like safety codes requiring buildings be built to certain specs, requiring insurance, food labeling laws, etc.), and regulation like antitrust which affects only select companies that are successful and meet unpublished post-facto and mostly arbitrary criteria.

</comment></comment><comment><USER3> Antitrust and competition regulation is built entirely on arbitrary quantitative definitions of competition rather than reasoned and objective qualitative definitions of competition.

There's a big difference between qualitative and quantitative definitions of competition. Anyone is free to compete with Google (qualitative), while Google dominates search with ~90% market share (quantitative). Even if they had 100% market share, they still exist in a qualitatively competitive market. But antitrust and competition regulation isn't concerned with that, and we've heard calls by EU regulators to break up Google based on their market share. Same with Facebook.

</comment><comment><USER4> A few years back i looked into some European tech news to counterbalance all the hype from the valley.

What i recall finding was that European tech focused more on helping the sick and elderly (or at least that was what got coverage).

Things like garbage bins that would move to the curb on its own when full.

</comment><comment><USER5> Is she the one to blame for those silly cookie warnings all over the internet?

<comment><USER6> No, Vestager left danish politics in 2014 to serve as European Commissioner for Competition. The EU cookie law was adopted in 2011.

</comment></comment><comment><USER7> The EU has the most to fear from Margrethe Vestager. At a time when the US and China are accelerating rapidly out ahead of the EU in tech, her policy approach adds up to regressive protectionism that will do nothing but further cripple the EU's tech industries (which are already 10 to 20 years behind the US).

Margrethe Vestager is doing the US a favor by breaking the leg of the EU as a competitor. If the US were more clever, it would poach all of the EU's best engineers and scientists, paying them 2x what they can ever earn in the EU and stapling a green card to a welcome note.

For the US, now is the time to take advantage of the EU's policies to drain as much talent out of Europe as possible. That goes for Russia as well, which is loaded with talented engineers and scientists that are being entirely wasted in Putin's authoritarian nightmare featuring zero economic progress.

<comment><USER8> An average engineer that I employ in the public sector is paid $86544 a year with a yearly pension of $12981 added on top of this.

They get 7 weeks paid vacation a year.

Stuff like New Years, January first, Easter and Christmas as well as a range of other national holidays is considered paid leave.

They get paid sick leave with no questions asked for the first 3 days, then a follow up on day 3 and 7 and an actual meeting on day 14.

They get paid leave on their child's first two sick days, per child.

If they have children under 3 they get 2-4 days of paid leave a year per child to spend quality time with them.

If they are older than 55-60 they get a suited amount of time off each year ranging from 4 days a year to one day each week. At 4 days it's paid leave, at one day a week they are only paid for a 34 hour week (down from 37).

They work 37 hour weeks. Have flexible hours and can to work from home when it fits their schedule.

They get $4000 worth of paid education a year + paid days to actually take it. The $4000 doesn't sound like that much, but it's enough to cover 2 university courses of around 20 ECTS.

Good luck attracting them. :)

<comment><USER9> It's not like that in every region of Europe. Though that is what I would expect getting in Oslo, Norway.

<comment><USER10> The region I'm from publishes it's figures. The best engineers (or at least the ones making the most new science) are assistants at university. Their pay is published, and public (this is North West Europe)

Starts at 23k5 EUR, goes up to 40k EUR per year, if you keep it up for 20+ years (note: it is only this "high" if you're on a full time scholarship. The average, even though the universities hide this fact, is 20% or so lower, mostly because there's more than a few that "aren't full time". In reality not working full time as an assistant is a stupid piece of fiction: that simply does not happen, although it is true that you really do have much flexibility if you do well)

Engineers in public service make around 30% more in theory, but pay more taxes. In reality they make the same amount of money.

If you get promoted to professor, you start at 40k, tops out at 70k. You can make more, but not spectacularly more, by becoming a university administrator.

In Silicon valley, pay for someone who knows javascript starts at 95k USD (75k EUR, 5% more than a university administrator with 20+ years of experience), and tops out at 5x that. Needless to say, if you can be a university professor, you are very likely to be a great engineer, you should be able to quickly make it to 300k pay, but even if you don't, you're still making a lot more.

Good luck retaining these people. One of the leading AI researchers, Pieter Abbeel, is one of the people who seems to have made the choice not to be retained.

I also have lots of anecdotal evidence that seems to indicate this is in fact what is happening. The brain drain from Europe is once again at or exceeding what it was in 2000: people are getting whisked away before they even graduate, and it's once again getting ridiculous : people get whisked away even before the last year.

</comment></comment></comment></comment><comment><USER11> _"Vestager has been a professional politician since the age of 21"_

This is kind of sad. A little for Europe, but mostly for her.

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

<comment><USER6> Vestager is an extremely skilled politician and I'm certain she's not sad about the situation. Denmark and Europe (and to some degree, the US) have certainly benefitted from her work.

It's not sad that she has chosen to apply her many skills in something she's passionate about and good at.

<comment><USER12> So her whole career is based off of playing different people against each other and pandering to whomever holds the most power?

I don't think it's any better than an American politician but still a far cry from those who felt that politicians should serve their communities for a few years and then go back to an actual career.

<comment><USER6> _> So her whole career is based off of playing different people against each other and pandering to whomever holds the most power?_

That's a very loaded and negative way to portray a career politician, but more importantly it's also completely unsubstantiated -- how is this relevant to Vestager?

For instance, why do you use the word "pander" to describe her work? Pander means to _" gratify or indulge (an immoral or distasteful desire, need, or habit or a person with such a desire, etc.)"_. I think that sort of language should be used carefully, and at the very least it should be substantiated in terms of how it relates to the person you're talking about.

I've followed Vestager's career for over 15 years, and I don't think your characterization of her work is accurate at all. You might be able to clarify why you describe her that way, and that seems to be necessary for a substantive discussion on this.

 _> I don't think it's any better than an American politician_

There are great American politicians for sure, but one thing I would note here is that there are significant differences in public trust and corruption levels between the US and Denmark (where Vestager has spent the vast majority of her public life). There's a high level of accountability, public scrutiny and public interest in how politicians work, and corruption is very low [0].

I think this plays a role in terms of how "good" the politicians are "on average" in a country, and to what degree they can be trusted.

[0] Corruption is obviously hard to quantify, but one way to measure/approximate it is the Corruption Perceptions Index [0] where _" Denmark is the least corrupt country in the world, ranking consistently high among international financial transparency"_, and the U.S. ranked 18th in 2016. [https://en.wikipedia.org/wiki/Corruption_Perceptions_Index](https://en.wikipedia.org/wiki/Corruption_Perceptions_Index)

<comment><USER13> If you view the "Athenian" version of democracy as the purest form, career politicians (aka, the political class), should not exist. But in theory, it did exists in antique Greece and even more so later in the Roman Republic.

Career politicians create the "political class" which eventually over time becomes a corrupted class.

What the OP meant, is that a country is best served by normal citizens, or specialist (in their industry), helping out, getting elected, serving their term, and moving on with their private lifes, then people that pursue politics for the politics sake. They will/tend to create dramma, even when it is not there.

"Political class, or political elite is a concept in comparative political science originally developed by Italian political theorist theory of Gaetano Mosca (1858–1941). ... Elected legislatures may become dominated by subject- matter specialists, aided by permanent staffs, who become a political class."

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

<comment><USER6> Sure, but the commenters I've responded to have in my opinion failed to explain how the issues related to political elites etc are relevant specifically in the context of Vestager's battles with major tech companies. It reads a lot more like unsubstantiated smearing and hand-waving.

I personally don't think that the battles Vestager/the EC are picking are out of touch with the competition and antitrust challenges faced by the EU, US and world as a whole. It'd be interesting if someone could explain how Vestager's extensive political career disqualifies her. In fact, it's worth considering that it might be exactly what qualifies her / has made her more effective than her predecessors (and US counterparts); perhaps this level of political and regulatory experience is necessary in order play a meaningful role, and protect the interests of the people she and the EU represents?

By the way, I don't think the Athenian version of democracy is particularly relevant here (or most discussions about modern democracies for that matter). Governing a very small 5th century BC city is completely different from governing regions comprising hundreds of millions of people in societies that are vastly more developed and complex.

The Athenian model wasn't exactly developed to address the challenges that we're facing today - although some ideas, such as how long a politician should serve, can still have value. That does however at best seem like a tangential discussion with little significance in the context of this article.

</comment></comment></comment></comment></comment></comment><comment><USER14> Vestager is an extremely skilled politician, but she is also extremely ambitious. She is leveraging a crusade against American tech companies to try and vault into the EU President's office. Vestager is very slick and talks a great game about protecting competition but this is just a thinly veiled attempt to raise populist support for her own political ambitions and implement protectionist policies across the EU.

</comment><comment><USER15> It's too bad the US doesn't have someone like Vestagar at the FTC, too.

The FTC almost never seems to use anti-trust laws anymore, and when it punishes companies it's more of a symbolical punishment than an actual deterrence. And that's when it doesn't settle with the wrongdoers, where they don't even have to admit any wrong or stop what they've been doing in the future.

<comment><USER6> Not sure why this is currently being downvoted, the U.S. does seem to be relatively less effective at enforcing anti-trust laws. That's hurting American companies as well and one example of it is included in the article:

 _"Europe is acting to enforce antitrust laws where the U.S. is not," said Jeremy Stoppelman, the chief executive of Yelp, who feels that American regulators dropped the ball when they decided not to pursue a case against Google in 2013 (Yelp is a longtime Google antagonist). "Ironically, many of the complainants in the E.U. antitrust case against Google are U.S. companies, pursuing justice in Europe precisely because the U.S., has not acted," he said in an email._</comment></comment>


Simple and free currency JSON API - <AUTHOR> https://github.com/joshhornby/currency-api

<comment><USER2> So, from what I'm looking at, it's returning a JSON list of items from the database (using ActiveRecord). Is it assumed you've prepopulated the exchange rate list yourself, or am I missing where it's getting this data from some external source?</comment>


It needs more public-spirited pigs: TS Eliot's rejection of Orwell's Animal Farm - <AUTHOR> https://www.theguardian.com/books/2016/may/26/ts-eliot-rejection-george-orwell-animal-farm-british-library-online <comment><USER2> related: Isaac Asimov's scathing review of 1984

 _This is not science fiction, but a distorted nostalgia for a past that never was. I am surprised that Orwell stopped with the steel pen and that he didn 't have Winston writing with a neat goose quill._

 _Nor was Orwell particularly prescient in the strictly social aspects of the future he was presenting, with the result that the Orwellian world of 1984 is incredibly old-fashioned when compared with the real world of the 1980s._

 _Orwell imagines no new vices, for instance. His characters are all gin hounds and tobacco addicts, and part of the horror of his picture of 1984 is his eloquent description of the low quality of the gin and tobacco._

 _He foresees no new drugs, no marijuana, no synthetic hallucinogens. No one expects an s.f. writer to be precise and exact in his forecasts, but surely one would expect him to invent some differences._

 _In his despair (or anger), Orwell forgets the virtues human beings have. All his characters are, in one way or another, weak or sadistic, or sleazy, or stupid, or repellent. This may be how most people are, or how Orwell wants to indicate they will all be under tyranny, but it seems to me that under even the worst tyrannies, so far, there have been brave men and women who have withstood the tyrants to the death and whose personal histories are luminous flames in the surrounding darkness. If only because there is no hint of this in 1984, it does not resemble the real world of the 1980s._

 _Nor did he foresee any difference in the role of women or any weakening of the feminine stereotype of 1949. There are only two female characters of importance. One is a strong, brainless 'prole' woman who is an endless washerwoman, endlessly singing a popular song with words of the type familiar in the 1930s and 1940s (at which Orwell shudders fastidiously as 'trashy', in blissful non-anticipation of hard rock)._

 _The other is the heroine, Julia, who is sexually promiscuous (but is at least driven to courage by her interest in sex) and is otherwise brainless. When the hero, Winston, reads to her the book within a book that explains the nature of the Orwellian world, she responds by falling asleep - but then since the treatise Winston reads is stupefyingly soporific, this may be an indication of Julia 's good sense rather than the reverse._

 _In short, if 1984 must be considered science fiction, then it is very bad science fiction._

[http://www.newworker.org/ncptrory/1984.htm](http://www.newworker.org/ncptrory/1984.htm)

<comment><USER3> Orwell's "1984" is a barely disguised description of Orwell's WWII job at the British Ministry of Information. See "Orwell, the Lost Writings", which has letters from his time there.[1]

Orwell's job during WWII was to translate news broadcasts into Basic English, with a 1000 word vocabulary[2], for broadcast to the colonies, including India. The British had a scheme at the time to get everyone in the colonies to speak at least Basic English, and this was part of it.

Orwell observed that translation into Basic English is a political act. Some concepts are very difficult to express in Basic English. Political ambiguity does not translate at all.

Hence Newspeak.

As for "part of the horror of his picture of 1984 is his eloquent description of the low quality of the gin and tobacco," that comes from the Ministry of Information's canteen, described by other ex-employees as "dismal".

"Big Brother" seems to have been a senior staffer at the Ministry of Information, who was actually called that (not to his face) by staff.

[1] [http://www.amazon.com/Orwell-Lost-Writings- George/dp/0877957...](http://www.amazon.com/Orwell-Lost-Writings- George/dp/0877957452) [2] [https://xkcd.com/1133/](https://xkcd.com/1133/)

<comment><USER4> And Room 101 was a meeting room at the BBC:

[http://news.bbc.co.uk/1/hi/entertainment/3267261.stm](http://news.bbc.co.uk/1/hi/entertainment/3267261.stm)</comment></comment></comment>


FBI to start grooming teen hackers - <AUTHOR> http://www.theregister.co.uk/2015/10/01/making_a_hash_fbi_grooming_pre_cannabis_teens/ <comment><USER2> Is it just me, or is every use of "grooming" seeming very creepy lately? I mean the similarity in this case to the pedophile's "grooming" of future victims is amazing.</comment>