Luxembourg's leaders have proposed a far-reaching animal rights bill - <AUTHOR> https://news.vice.com/article/luxembourg-is-set-to-become-the-most-animal-friendly-country-in-the-world <comment><USER2> > The legislation wouldn't apply to most farm animals, a common provision in > animal rights laws.

I expect that farm animals are the most numerous and most abused large animals in most countries, oh well…

<comment><USER3> Very much agreed, but still happy to see people trying to take a step in the right direction. They do mention ending the practice of killing male chicks, which is currently universal among egg-producing farms.

<comment><USER4> > They do mention ending the practice of killing male chicks

Why?

I mean if you want to make sure animals are not in pain, and treated well, no problem.

But what's the reason for not killing the male chicks? What do they plan to do with them? Release them back into the wild?

<comment><USER5> Only produce female chicks in the first place. The tech is already available, only introduces a small increase in cost, and I believe Germany is mandating its use in a few years already.

<comment><USER4> > The tech is already available

There is no such tech. If you think there is post a link to it.

At best there is current _research_ (not actually a product yet) to identify the chicks while still in the egg, and I see absolutely no difference between killing them in the egg or out of it.

Just kill them painlessly (i.e. extremely quickly) and move on.

<comment> semi-extrinsic I believe the GP comment wasn't too far off. This article from last year says the Germans have done promising research and intend to have a working prototype this year, which sexes (technical term) chicks at just three days after inoculation.

[http://m.thepoultrysite.com/news/34741](http://m.thepoultrysite.com/news/34741)

I also understand there is no tech used to identify the sex of chicks at a young enough age. It's a highly specialized skill (chicken sexing) that takes lots of training. I think it's even specialized between different types of poultry.

<comment><USER4> > I believe the GP comment wasn't too far off.

"The tech is already available, only introduces a small increase in cost"

vs:

"have done promising research and intend to have a working prototype this year"

I consider that quite far off. They don't even have a prototype to show that it even works, let alone cost information for "a small increase in cost".

</comment></comment></comment></comment></comment></comment></comment><comment><USER6> While it gives me hope that legislation is at least acknowledging that the suffering of animals is something we might care about, it still is sad to see the same arbitrary pet/livestock divide.

Of course extending such legislation to farm animals would be politically impossible, but it still hurts to read

> the animal's dignity must prevail over the profitability of the industrial > activity

when we all know it's not true.

</comment><comment><USER7> honest question here. What is a animal vs a rodent vs a insect vs a pest?

I am all for this, but what are the edge cases? I couldn't find it anywhere in that article.

</comment><comment><USER8> The article says the bill will "ban people from giving animals as gifts or prizes." Can someone explain why giving animals as gifts is inhumane or something we should ban?

Giving a relative a dog to raise seems altogether kind (especially a rescue dog) and beneficial for both (assuming you know the character of the person who will raise the dog and that they are ready/willing).

<comment><USER9> you'd be amazed at the number of dogs in animal shelters who are there cause the kid who got it for Christmas suddenly got tired of it. banning it might be extreme, but I wish more people would think of the consequences of gifting someone an animal.

</comment></comment><comment><USER10> It says legislation wouldn't apply to most farm animals, but it bans the poultry industry (unless they have some billionaire ready to adopt a bunch of roosters?).

One can easily see that the call to "limit the sales of dogs and cats to reputable breeders" is gonna make some of these bill authors unjustifiably rich at a higher likelihood than it protects a cat or dog.

<comment><USER11> The poultry industry won't be hurt too much, since there is no good reason you can't sell rooster meat (actually they will typically be a little bit larger than the females) but I don't know if they do already sell them.

The egg industry will be hit somewhat, since it will essentially double the price of eggs. Probably it will also hurt the pre-made goods industry (cookies, etc) and they will likely be forced out of Luxemberg.

(Essentially nobody, other than people who raise chicks in their backyard, use the same chickens for eggs and meat, since different chickens species are optimized for either so this probably won't impact those who raise meat chickens much).

<comment><USER12> Industrial broilers of both sexes are raised to slaughter.

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

I think it's also the case that requiring something else be done with males would have much less than 2x effect on the price of eggs. A hen will produce ~300 eggs a year. Whatever extra it might cost to raise the less efficient egg breed roosters for meat would be less than the cost of feeding a hen to produce that many eggs.

<comment><USER11> It is not just that they are less efficient, it is that they supposedly taste terrible.

<comment><USER12> The bad taste has the ring of folk wisdom.

</comment></comment></comment></comment></comment><comment><USER13> Isn't it interesting that calls for animal rights are strongest among those who don't interact with any animals except pets? We've become too far removed from the realities of nature. It leads to pointless feel-good laws like this, which "prohibit[s] the poultry industry practice of killing male chicks because they don't lay eggs" among other things.

In general, I think it is totally inappropriate for governments to put human beings in prison for crimes against the well being of an animal. The coercive authority of the government must only be used to protect human interests. That doesn't mean that we shouldn't have environmental law; that's about protecting a shared resource, not about protecting the well being of any animal as an end in itself.

<comment><USER14> I don't know if I agree with you but I see your point, and it's not the sort of thing that people should be downvoting, I don't think.

I usually think that the law shouldn't exist to enforce morality, but I'm not sure if that principle should be applied in the absolute sense or not. Anyway, its not clear that it's immoral under any secular ethics to "mistreat" animals in the first place, especially if there's a clear benefit to humans. Even if it is immoral, its not clear which animals should be valued. Most people seem to agree that chimpanzees should be treated with more consideration than jellyfish. My personal utility function values warm blooded animals higher than all others and below humans, but that's just an intuitive preference, not based on any rigorous analysis. I have hope that the next few decades of AI research might shed some light on this issue by giving us an idea of what "sentience" really means, but this is far from guaranteed.

I suppose I'd like to see efforts focused on restructuring meat subsidies to make meat more expensive (and better reflective of the costs of production). I'm sure doing this would be a political nightmare, and I don't have the necessary understanding of agricultural economics to give any suggestions for exactly how to do this, but it seems doable. Higher meat prices will also hopefully make synthetic meat research more attractive. Synthetic meat would conveniently bypass this whole debate.

Other measures that should probably be attempted before we turn to fining and jailing people for mistreating or disrespecting animals should probably address the pet breeding industry, people who aren't looking for a dog to aid with hunting or foraging or some other specialized purpose should have more incentives to prefer a shelter over a breeder than currently exist. And maybe make it a crime to intentionally kill or hurt certain animals for no reason.

</comment></comment><comment><USER15> > "In North America, the fur trade is an example of the sustainable use of > renewable natural resources," Herscovici told VICE News. "This is the key > concern of modern environmental thinking."

The chutzpah is strong in this one.

</comment><comment><USER16> There was a nice SF novel by Clifford D. Simak where all the humans eventually migrated to Jupiter, to cavort pleasantly amongst the clouds, and the world was literally left to the dogs.

All we need is the migration to Jupiter.

<comment><USER17> "City" it is called to whomever is concerned. Pretty good stuff.

</comment></comment><comment><USER18> It's a good start.

<comment><USER19> ...to what end, from your perspective?

<comment><USER20> Can't speak for the OP but for many people the billions of animals killed every year for food, clothing and fun is a major moral crime which will be looked back on in the future - both the activities and the almost total lack of consideration given that it's even a problem - as completely unbelievable, just like women being unable to vote, black slavery and so on.

<comment><USER21> > is a major moral crime

And spiritual too.

I believe the proverbial "forbidden fruit" in the Bible is actually animal flesh. That's what transformed Heaven, were humans an animals cohabited peacefully, into not-Heaven - Earth.

Consequently, at least in theory - not eating animal flesh would transform Earth back into Heaven. And that is the grand challenge for us as a species.

As long as there are slaughterhouses there will be battlefields (Leo Tolstoy).

Overcoming the meat addiction requires a higher level of spiritual awareness, which also leads to non-violence towards other humans - or Peace.

<comment><USER22> Make your case for not eating meat, but you can't do it from that passage in the Bible. The Bible's forbidden fruit was unambiguously fruit from a tree, not animal flesh. Adam and Eve's taking of it was direct rebellion against God. Turning Earth back into heaven requires atonement for that rebellion against God. It has absolutely nothing to do with eating meat. In fact, one of the very first things that God does in Genesis 3:21 after Adam and Eve take the forbidden fruit is provide animal skins as clothing for them, partially to foreshadow the system of animal sacrifices that would be instituted by God in the book of Exodus for the nation of Israel.

</comment></comment></comment></comment></comment><comment><USER23> it almost makes up for the systematic tax dodging and money laundering that the country relies on to keep a float.

 _almost_

<comment><USER24> Yeah, nice to see they've found a way to square their consciences with stealing from the taxpayers of Europe.

<comment><USER25> depends on your view, I see the politicians and the ones living at the expense of others as stealing from the tax payers

</comment></comment></comment><comment><USER26> Symptoms of a dying society (fertility rate of 1.57). Can't wait to see what they think of next.

</comment><comment><USER27> Freedom is very important to me. Keeping animals locked up makes me uncomfortable. Of course, the fact that I enjoy being free, does not necessarily mean that freedom is important to animals as well. Perhaps animals are too dumb to appreciate freedom.

I have tried eating a vegan diet a couple times. I was surprised by how much delicious vegan food there is. I actually didn't miss the eating of meat much. However, my energy levels were really low, so I went back to eating meat.

</comment><comment><USER27> > Isn't it interesting that calls for animal rights are strongest among those > who don't interact with any animals except pets?

That's an interesting observation. My impression is that the most intelligent humans typically move to large cities, whereas the dumbest ones remain in the rural areas. Most farmers don't seem terribly bright (there are of course exceptions). Could this have something to do with it?

<comment><USER28> You can't slur entire populations of people like that here. That's a bannable offense on Hacker News, so please don't do it again.

We detached this subthread from [https://news.ycombinator.com/item?id=11702913](https://news.ycombinator.com/item?id=11702913) and marked it off-topic.

</comment></comment><comment><USER29> What about rights for ladybugs?

<comment><USER30> What about it? Is there anything specific you want to raise up as an issue?

<comment><USER29> My point was obvious. Why are animals valued more than other living organisms?

<comment><USER31> Ladybugs are animals. Note the "Kingdom: Animalia" here [1].

[1] [https://en.wikipedia.org/wiki/Coccinellidae](https://en.wikipedia.org/wiki/Coccinellidae)</comment></comment></comment></comment>


You advocate a [blank] approach to calendar reform - <AUTHOR> http://qntm.org/calendar <comment><USER2> ( ) having months of different lengths is irritating

( ) having months which vary in length from year to year is maddening

People toy with calendar reform exactly because so many boxes are already ticked in our current system, and other boxes are questionable:

( ) having one or two days per year with no day of the week is asinine

Meanwhile, happy day that only happens once every four years.

I always see it as a half serious pursuit, but it's fun to try because our current system is an irrational historical accident that predates almost everything we've learned about math, astronomy, sociology, and usability.

</comment><comment><USER3> The only time I could ever see us adopting new calendar systems is when (if) we eventually migrate off-planet into space colonies or onto other bodies in the solar system. Why? Because only then will each colony have a completely different notion of what a solar year is, and different (or even entirely artificial) notions of solar days. In these colonies a standardized calendar system may arise. Or a chaotic web of independent calendar systems.

<comment><USER4> Perhaps just a count of seconds from some zero point. Mark intervals in kilosecs and megasecs. Then the computer time-counter register will be the only clock anybody needs. Never mind 'Wednesday'. "See you in a megasec!" which is about 11.6 of our 'days'.

<comment><USER5> The problem there is that seconds are relative to movement. If you are traveling faster than earth, your clock is going to lose sync.

<comment><USER4> That is a problem that cannot be solved!

</comment></comment></comment></comment><comment> david-given I like that this comes preticked:

> the history of calendar reform is insanely complicated and no amount of > further calendar reform can make it simpler

</comment><comment><USER6> I agree that calendar reform is futile, it's more useful to have a universal standard than trying to get everyone to agree on a marginally better one. But it's fun to think about how you could design the calendar from scratch, or how we should do it on Mars.

Besides social inertia, I have not heard a good argument for lunar months. I convert months to day numbers (feb 29 becomes day 60) in my head, which makes reasoning about longer time scales a little easier.

</comment><comment><USER7> The majority of these complaints also apply to our current system.

</comment><comment><USER8> this even works if your approach is to not change anything! :)

</comment><comment><USER9> my favorite line:

( ) the length of the solar day is ultimately unbounded

</comment><comment><USER10> That made me laugh out loud, causing some suspicious glances:

( ) years which count down instead of up are not very funny

</comment><comment><USER11> ()The past will always exist, and they'll never adopt your new calendar. FTW!

</comment><comment><USER12> global Metric time...;)

<comment><USER13> Which would require reprinting every science book, re-deriving every mathematical equation, replacing every road sign, ruler, measuring cup, scale, etc. Because metric time would involve altering the second, you would need to alter pretty much every other constant to match.

<comment><USER14> Right, but note that almost anywhere outside the (christian) west uses (at least) two concurrent systems without much trouble (e.g. India: Western/Shaka calendar, Israel: Western/Jewish Lunar calendar, etc.).</comment></comment></comment>


Show HN: IPalyzer – Analyze any IP for location, RDNS, blacklisting - <AUTHOR> https://ipalyzer.com <comment><USER2> I ran this on my own IP (Time Warner cable dynamic IP) and was surprised to see I was in a Spamhaus list. I dug a little deeper and I found that the IP was in a PBL (Policy Block List).

Spamhaus says the following in its FAQ about the PBL ([https://www.spamhaus.org/faq/section/Spamhaus%20PBL#183](https://www.spamhaus.org/faq/section/Spamhaus%20PBL#183)):

"The first thing to know is: THE PBL IS NOT A BLACKLIST. You are not listed for spamming or for anything you have done. The PBL is simply a list of all of the world's dynamic IP space, i.e: IP ranges normally assigned to ISP broadband customers (DSL, DHCP, PPP, cable, dialup). It is perfectly normal for dynamic IP addresses to be listed on the PBL. In fact all dynamic IP addresses in the world should be on the PBL. Even static IPs which do not send mail should be listed in the PBL."

So, in this tool, presumably any dynamic IP will turn up as "Listed in spamhaus PBL", which might cause some undue alarm to the uninformed. Maybe you should just show a yellow warning saying "you're a dynamic IP address" or something of that sort.

Congrats on the tool, it is really neat!

</comment><comment><USER3> Very nice UI! If you're looking for something similar via an API you can try my service [http://ipinfo.io](http://ipinfo.io):

        $ curl ipinfo.io/184.108.40.206
        {
          "ip": "22.214.171.124",
          "hostname": "google-public-dns-a.google.com",
          "city": "Mountain View",
          "region": "California",
          "country": "US",
          "loc": "37.3845,-122.0881",
          "org": "AS15169 Google Inc.",
          "postal": "94040"
        }

        $ curl ipinfo.io/220.127.116.11/org
        AS15169 Google Inc.

It also supports lookup of IPv6 addresses (but not IPv6 connections, due to AWS). See [http://ipinfo.io/about](http://ipinfo.io/about) for more details

<comment><USER4> Do you sell an offline version? My company would be interested but no way would they sign on to transmitting the IP lookups to a third party.

<comment><USER3> Yes we offer various different downloadable datasets. Reach out to email@example.com or use our contact form if you'd like more details.

</comment></comment></comment><comment><USER5> Looks useful!

There are some issues with the port detection on my IP address though: HTTP was 'disabled' (whatever that means, but it's open and apache is listening) and SMTP was incorrectly labeled 'closed'. Https detection was correct, and ssh was 'closed', which could be correct if it means 'RST returned' rather than 'firewalled'.

Also I'd prefer seeing an OpenStreetMap tile rather than having Google log my visit, but that is probably just me. On the positive side, Piwik instead of GA :)

Another small point: I'm not sure which address you're looking for, but the whois info of my IP definitely contains an abuse address (184.108.40.206).

<comment><USER6> Author here, I only include a static map, no JS from Google. But I'll look into it, I'm also not a huge fan of Google being able to log all visits.

Abuse mails get parsed from the RIR WHOIS data, this involves lots of regexes, which can be wrong sometimes. In your specific case it is the fact that it can't yet parse the remarks statement.

<comment><USER5> Although it does load something from Google, it's not Javascript indeed. Thanks for thinking about it!

</comment></comment></comment><comment><USER7> Nice!

Suggestion: Accept host names as well, despite the name of the service.

<comment><USER8> You mean reverse DNS? I see that listed on the second line of the "info" box

<comment><USER9> No, allow us to enter a hostname instead of an IP address to look up.

Obviously a hostname could resolve to multiple IPs or no IPs, but that's a solvable problem.

<comment><USER7> Right. It's can be quite fun/useful to quickly look up this type of information for e.g. random website hostnames, without having to manually look up the IP first.

</comment></comment></comment></comment><comment><USER10> I have a similar service that I'm working on in my free time. There are many alternatives to AWS that offer full IPv6. Until you need the features AWS affords I'd definitely recommend trying some of the smaller alternatives (cheaper, too). Happy to share some options with you in private.

</comment><comment><USER11> > _Error! No IPv6 possible yet_

No so much "any IP" then, is it?

</comment><comment><USER12> If you are looking to do more persisted research around a domain or ip address, consider checking out PassiveTotal ([https://www.passivetotal.org](https://www.passivetotal.org)) . We draw in a lot of the same free feeds, but also have the most comprehensive passive dns aggregation out there, and let users pivot on Whois and ssl certificate data from Internet scans. API is documented and available to use for all account types. We also host free Maltego transforms if you want more of a graph analysis solution.

</comment><comment><USER13> Nice! Any chance of making this open-source? I'm trying to learn node-js and it looks like you've used a few node modules, so it would be handy to see how it's done.

</comment><comment><USER14> If you're interested in more in-depth port/ SSL/ host information you can pull the data for free using the Shodan API ([https://developer.shodan.io/api](https://developer.shodan.io/api)). For SSL we also explicitly test for Heartbleed, support for SSL versions, POODLE and a few other issues. Each IP also gets scanned for more than 200 ports so all popular services are covered fully.

</comment><comment><USER15> Looks really cool, it's hard to get a complete view with most of the other tools out there. This is definitely a keeper.

[https://myip.ms/info/whois/126.96.36.199](https://myip.ms/info/whois/184.108.40.206) [https://www.domaintally.com/hosted- ip/220.127.116.11/](https://www.domaintally.com/hosted-ip/18.104.22.168/)

</comment><comment><USER16> Incorrectly identifies that I have SMTP open...

</comment><comment><USER17> My IP doesn't work. It says "undefined"

<comment><USER18> You have to click on the IP not just on "Analyse" with the empty IP field. Ran into the same problem.

</comment></comment><comment><USER19> Very useful and better than all those websites that come up on a Google search. Well done.

</comment><comment><USER20> Super slick interface. nice.

</comment><comment><USER21> How about hostname lookup as well as by IP? Otherwise, pretty neat service.

</comment><comment><USER22> by testing couple of IPs i get city unknown but google map is pointing to more or less correct location.

why don't you use some service to get city by long/lat? i think google should have something for this

</comment><comment><USER23> Very nice. Looks like the smtp port detection report is reversed though.

</comment><comment><USER24> Nice, everything I need to know in one place. I'll bookmark this.

</comment><comment><USER8> it uses websockets to get the information to the browser. a little weird, but whatever, my question is why does the socket remain open after the information is downloaded?

<comment><USER6> It asynchronously pushes all info so that you can view everything as soon as the server gets it. It keeps the connections open because new requests also use WebSockets.

<comment><USER8> Ah, didn't realize new requests used the same socket. that makes a lot more sense

</comment></comment></comment><comment><USER25> Positioning is so wrong. Places IP 800miles to the East from original location. Services practically undiscovered.

<comment><USER26> Really accurate geolocation is not that easy, most public dbs are seriously polluted.</comment></comment>


Founders, here are the ways to give your employees stock - <AUTHOR> http://mikita.co/ways-to-grant-employee-stock/

<comment><USER2> "To sum up this rather long and boring article, I'd say… hire a lawyer." \- I second that... I didn't realize I couldn't give stock in my LLC until after I'd signed an agreement with an employee :-\

</comment><comment><USER3> I've always believed in going through a lawyer for this. Guys like Cooley and WSGR have startup friendly terms and plans that work out well.

</comment><comment><USER4> Nice site</comment>


Best April Fool's Video: Motorola's Homage to Apple - <AUTHOR> http://fortune.com/2015/04/02/best-april-fools-video-motorolas-homage-to-apple/ <comment> o0-0o Hardly the best, and it seems sort of I don't know, cheap? One step behind, poking fun at yesterday's memes, etc. Sorta like an Oxford you've worn a couple times already, but you're just too lazy to iron a fresh one. Motorola needs to get some style and taste.</comment>


Show HN: 4vid – Download any video. Anytime. For free - <AUTHOR> https://4vid.co/ <comment><AUTHOR> Hi, I am the creator of 4vid.co and I'll be glad to get your feedback and answer to all of your questions.

<comment><USER2> Hi! This also duplicates as a way to see videos behind proxies :)

Two questions:

\- Are you using open source libraries to download the videos? if yes, what libraries?

\- If lots of people start using 4vid, how do you plan to keep up with the costs of serving / running it?

<comment><AUTHOR> Thanks for your reply ;) To answer to your questions:

\- we are not using any open source library, it was all implemented/coded by us

\- the service is fully scalable, it can handle lots of users without requiring any scaling

Did you like the service? Thanks again!

<comment><USER2> Hi, my tests were limited (I'm at work atm), but I liked it so far. I will probably use it more in the next days.

I appreciate your service is scalable, but surely you pay for CPU and bandwidth. Your application seems pretty bandwidth-intensive, as it's bound to be (80mb for a < 10-mins video off youtube), what happens if you hit gigabytes worth of downloads per day?

<comment><AUTHOR> The good thing is we are not hosting any video file, just giving you the original video file url. So in fact you are downloading the video from the platform servers ;) Feel free to use it as much as you want. Thanks again!

<comment><USER2> Ah cool, I didn't realize it was client-side only. Neat!</comment></comment></comment></comment></comment></comment>


Clojure Training with Stuart Halloway and Stuart Sierra - <AUTHOR> http://pragmaticstudio.com/clojure <comment><USER2> I find it hard to imagine deriving $1900 of value from the class relative to spending the same amount of time learning independently from Halloway's book, which I can buy for approximately $30.

<comment><USER3> ~$1000/day is pretty standard for corporate software training; I know a previous employer paid about that much to send me to a few SAP courses.

<comment><USER2> OK, I could see a corporation with a lot of money to splash around covering the cost as a way to motivate a developer...

</comment></comment></comment><comment><USER4> The PragProg books are great. Can anyone comment on the quality of their classes?

<comment><USER5> The classes are very good. They always have top notch trainers like Dave Thomas, Mike Clark, and Stu Halloway. The class sizes are small, so you have lots of one-on-one time. Of course there's only so much you can learn in two days, so I think it's important that you have some knowledge going in. That way you're in a position to know what to listen for and ask.</comment></comment>


Barbed Wire Fences Were An Early DIY Telephone Network - <AUTHOR> http://gizmodo.com/barbed-wire-fences-were-an-early-diy-telephone-network-1493157700

<comment><USER2> [http://www.texashillcountry.com/Stories/RuralTelephoneSystem...](http://www.texashillcountry.com/Stories/RuralTelephoneSystems.htm?ModPagespeed=noscript)</comment>


Some thoughts on Go and Erlang - <AUTHOR> http://blog.erlware.org/2014/04/27/some-thoughts-on-go-and-erlang/ <comment><USER2> Very good comparison, stuff that most other blogs don't talk much about -- scheduling, fault isolation, garbage collection strategies. I guess they don't because other frameworks/languages don't provide that. It usually stays at syntax level with obligatory mention of generics.

Fault isolation and pauseless garbage collection is something that is very important in some contexts. Often the need for it becomes apparent the second time around, after one version of the system has been plagued by large mutable shared state bugs, or strange, un-predictable response times in a highly concurrent system.

Do you pay in terms of raw CPU performance by copying messages and keeping private heaps per lightweight process? Yes you do. There are no magic unicorns behind the scene. That is the trade-off you get for getting fault isolation and soft realtime properties. But keep this in mind, one of the biggest slowdowns a system incurs is when it goes from working to crashing and not working.

Also, no matter how strong the static compile checking is, your system will still crash in production. It is usually a hard bug that has been lurking around not a simple "I thought it was an int but got a string", those are caught early on. It will probably be something subtle and hard to reproduce. Can your system tolerate that kind of a crash in a graceful way? Sometimes you need that.

In the end, it is good for both systems to be around. If you need fault tolerance, optimization for low latency responses, supervision strategies, built-in inter-node clustering(node = OS process or instance of running Erlang BEAM VM) you cannot get that in any other way easily.

Now, one could think of trying to replicate some of the things Erlang provides. Like say build tools static analysis tools to check if go-routines end up accessing shared state. Or say, devise a strategy to use channels-based supervision tree. Heck, if you don't have too many concurrency contexts (processes, go-routines) you can always fall back on OS process-based isolation and use IPC (+ ZMQ for example), as a mailbox. But then again Erlang provides that in one package.

<comment><USER3> >Like say build tools static analysis tools to check if go-routines end up accessing shared state

I believe this is what the go race detector does: [http://blog.golang.org/race-detector](http://blog.golang.org/race-detector)

<comment><USER4> That's not static analysis though.

</comment></comment></comment><comment><USER5> I've added an update to the top of the post because I didn't make the point clear enough:

I'm seeing that I did not make the point of this post clear. I am not saying Go is wrong or should change because it isn't like Erlang. What I am attempting to show is the choices Go made that make it not an alternative to Erlang for backends where availability and low latency for high numbers of concurrent requests is a requirement. And notice I'm not writing this about a language like Julia. I have heard Go pitched as an alternative to Erlang for not only new projects but replacing old. No one would say the same for Julia, but Go and Node.js are seen by some as friendlier alternatives. And no, Erlang isn't the solution for everything! But this is specifically about where Erlang is appropriate and Go is lacking.

</comment><comment><USER6> Erlang is a language with a purpose that I can relate to. I develop a cluster database product, and erlang seems to have an answer for many problems that I have actually faced.

For instance: cluster global pids. When you send a message to a pid, you don't have to go through a dance of handling errors and timeouts just because it might live on another node. If the node goes down, there are several ways to handle that, including monitor_node() which gives you a message that you can handle in one place.

I haven't used erlang in production, but I've invested some time to learn about it because I see that potential value.

I don't really see that from Go. It seems to fall into a "general-purpose" bucket where it competes with Java, C#, python, ruby, haskell, clojure, scala, etc. I don't necessarily like all of those languages, and for any given one you can probably pick out some Go advantages. A lot of people say Go hits a nice sweet spot for many applications.

But Go just doesn't speak to any problems I actually have. It can't replace the C/C++ code, because Go has a GC, and the code is C/C++ because it needs to manage memory[1]. It could replace the python code, perhaps to some benefit, but there would still be a bunch of awkward communication between processes and all of the associated error handling mess. And it can't replace Java, because that's a public API we offer, and lots of people are comfortable with Java.

Go should have been another cluster language/VM that really could compete with erlang, in my opinion. To me, Go is just another language.

[1] Rust does seem to have something to offer here.

<comment><USER7> Just because Go doesn't fit your use case doesn't mean it should be something else. In most cases Go IS a better choice than C/C++ in a server side case. For instance let's say you are writing a server for a multiplayer game. Most of the server's activity is spent on waiting for IO and managing concurrent socket based connections. There are drawbacks and risks to managing memory in this type of system and Go's concurrency makes writing this code much easier. Another great go use case is a rest based web service, a lot of these are typically written in Java, Ruby, or Python. I love python but go has serious advantages over all three of those languages in this use case. This is where go was designed to be used and it's best spot. The glue servers that are most commonly used for web applications. Go is designed to be simpler, safer, and easier to write than C/C++, Java, or C# but faster, more modern, and more fault tolerant than python or ruby. It's not a perfect language by any means but it does fill a nice sweet spot.

<comment><USER8> I'm writing a multiplayer game in Go. The reason I chose it is that it allows me to control memory layout at a low level. This can be very important for achieving multicore parallelism. (Also known as optimizing for fewer cache misses.)

<comment><USER6> That's a good point. There aren't a lot of GC languages that let you control structure layout. Not a problem I face, but interesting.

<comment><USER8> _Not a problem I face, but interesting._

Only a problem you face if you are trying to keep multiple cores busy with low latency.

<comment><USER6> I think I'm missing your point. Why do you need a GC language for that?

<comment><USER8> I was more talking about being able to control memory layout.

</comment></comment></comment></comment></comment></comment></comment><comment><USER9> A meta comment - I'm reading a lot of the "use the right tool for the job and stop arguing" statement in language/framework/system/machine comparison threads these days.

I find the "right tool for the job" to be a total conversation stopper. It stops the bikeshedding type arguments, true, but it also stops potentially illuminating comparisons. Can we, as a community, agree to stop bringing it up in comparison arguments?

Imagine a new programming language and system being presented in an article. It is healthy and useful for the article to say "We designed system X so it is easier to express Y kind of programs. A, B, C are the complications encountered when doing the same with systems I, J, K." rather than "We designed system X to express Y kind of programs. We like it, but if you don't, use the right tool for your job."

While many of us are polyglots, we do seek to minimize the number of parts when building a system, so such comparisons are often meaningful at some level.

<comment><USER6> Agreed.

While we're at it, "the right tool for the job" always struck me as a bad analogy. Nobody would question a carpenter's tool choices because the only thing that affects others is the quality of the final result (e.g. how the building will stand up to stress).

But using a software language, framework, library, database, OS, or other platform makes it inextricable from the the rest of the product when judging quality. In some cases, you can make a black box argument like "if a user is unable to observe any poor qualities, then the product must be of high quality"; but that only really applies when you are the sole developer and always will be. For larger projects, there are others involved, and they will be affected if the building blocks are poor.

Granted, that doesn't mean that all discussions about platforms are productive, but it means there is some room for illumination and progress.

</comment></comment><comment><USER10> Is it just me or the author fail to explain all the Go's detrimental design clearly? Most of the points he listed there are pretty much personal taste thing and basically what he was saying is "Go has so many problems because Go is not designed as Erlang".

For example, he said

"But when it comes to complex backends that need to be fault-tolerant Go is as broken as any other language with shared state."

Why? Why shared state is so bad in Go? Isn't it taken care by Go's channel anyway?

Also, why Pre-emptive Scheduling is bad? Isn't Error Handling still pretty much just a matter of personal preference?

Why Introspection makes Erlang so much better? What's the practical key problem for Go that can not be tackled without instrospection?

And I completely failed to understand the point of "Static Linking".

I'm not trolling. I don't have Erlang experience, and most of the problem the author pointed out was not bothering me, so I honestly want to see WHY they are problematic in Go

<comment><USER11> Shared state is bad because it breaks local reasoning. Without enforcing certain disciplines (i.e. always sharing by passing messages via Go channels) it's hard, if not impossible, to reason about local behaviors without considering other parts of the code. Immutable vs shared mutable state is a design choice. Erlang chose immutability for safety, while Go chose shared mutable state for practical reasons, but as a remedy Go recommends best practices to avoid the drawbacks caused by it.

Pre-emptive scheduling is bad because you can have a goroutine running a tight loop starves other goroutines. To address that problem, you should manually call runtime.Gosched() to yield control and allow the scheduler to run other goroutines. Erlang's reduction-based scheduling does not have this problem and can be very fair.

Goroutine lacking identity is a major design difference from Erlang. In Go, channels have identity, but goroutines don't. In Erlang, it's the other way around: processes have identity, and channels are implicit a.l.a mailboxes. In theory you can simulate one style in the other, but the implication of this design choice is very proud. I'm a Go fan, but personally I think Erlang's model is easier to reason about in scale, and it has this nice symmetry with OS threads/processes (you can kill them easily. Good luck killing a goroutine).

<comment><USER10> > Erlang chose immutability for safety, while Go chose shared mutable state > for practical reasons, but as a remedy Go recommends best practices to avoid > the drawbacks caused by it.

That's my point. I didn't say it clearly before. I understand why shared state is bad in _general_. I don't understand if channel takes care of most scenarios why it's still one of biggest problem for Go listed by author.

> Erlang's reduction-based scheduling does not have this problem and can be > very fair.

What's the key difference between Erlang's reduction based scheduling and cooperative scheduling?

<comment><USER12> > What's the key difference between Erlang's reduction based scheduling and > cooperative scheduling?

Cooperative scheduling is like reference-counting: you have to tell the compiler when it's safe to context-switch. Preemptive scheduling is like garbage-collection: the runtime decides on its own when it will switch, and you have to deal with making that safe.

Reduction-based scheduling is a hybrid approach, and is, in this analogy, a bit like Objective-C's Automatic Reference Counting. Under reduction-based scheduling, context switches are a _possible_ side-effect of exactly one operation: function calls/returns. This means that it's very easy to reason about when context switches _won 't_ happen (so it's not hard to write atomic code), while not having to worry about _making_ them happen yourself (because, in a language that defines looping in terms of recursion, all code-paths have a known-finite sequence of steps before either a function call or a return.)

<comment><USER10> Very clear. The reduction based scheduling certainly looks interesting. Thanks for your explanation!

</comment></comment></comment></comment></comment><comment><USER13> Interesting read, I have recently been porting a very low latency high scale project of mine from Nginx/LuaJIT to Go just to learn Go.

I have already right off the bat ran into the concurrency issues even with Go 1.3beta. And the GC locking causes all my connections to drop and thus causes thrashing.

That said I've coded in many languages in my 30 years of development while often reverting back to C over and over again as I've needed the lower level solutions to some big problems. I've enjoyed learning Go and plan to continue because it just "feels right". It's hard to explain but I can see it useful for numerous problem sets and I don't have to dive into C++/Java again to get convenient memory management and hopefully I'll never look pthreads in the face again.

However, I have really been amazed at the speed of LuaJIT. If you would have told me the fastest toolset I could use for my low latency high scale project was an "interpreted language" I would have laughed you out of the room. I did try Python (Cython) and Java and numerous other tools. But so far LuaJIT has turned out to be the fastest, not the most elegant to read but coder time -vs- return on that time is the highest thus far.

I am hopeful that Go will mature in the runtime in ways that will make it compete with Nginx for it's amazing event driven non-blocking architecture. With that in mind I think writing many things in Go will be useful and improvements of the underlying tech will just be magnified by all the code that now needs just a simple recompile to capture those changes. It's like the old days of gcc when I found hand coding some ASM was more useful and now a days it kicks out some amazing code with little need for inlines except in the most extreme situations. Here's to hoping Go traverses that path faster then gcc did and we all will have a more enjoyable time solving the problems we love to solve every day.

<comment><USER14> _I have already right off the bat ran into the concurrency issues even with Go 1.3beta. And the GC locking causes all my connections to drop and thus causes thrashing._

This sounds somewhat incredible and unlikely to be a result of Go, more likely to be a facet of a naive implement (we can all break any language). I've built a number of extremely high capacity/concurrency systems in Go to great success, as have many other very large organizations, so the notion that it's just fundamentally immature or broken doesn't fly.

All of the talk about GC in Go is a bit curious, because Go actually makes very little use of GC -- it very heavily favors the stack, versus many other platforms (.NET, Java, others) that use the heap for virtually everything, and turn most everything into an object. The simple fact that Go has a GC doesn't mean that its GC use is the same as all other languages that use a GC.

</comment></comment><comment><USER15> _> his biggest surprise was Go is mostly gaining developers from Python and Ruby, not C++_

Why is that a surprise? I think it's logical, and Go can be expected to attract developers who are used to garbage collection (Java, Python, Ruby etc.). Not so much C++ developers who prefer to have control and choice (i.e. pay for what you choose, rather than get it handed down forcefully). Rust is a better candidate for attracting more C++ developers than those from Java, Python and Ruby background.

<comment><USER16> _Why is that a surprise?_

Because it was never the intention. Pike and Thompson, by their own admission, hated C++ and set out to write a better language to replace it. Python and Ruby developers where never on their radar during the whole design phase. It might be logical and obvious in hindsight, but it certainly came as a surprise to the creators of the language.

<comment><USER15> I see. I guess they misjudged features which C++ developers actually valued as something bad and in need of fixing. I.e. while trying to improve, they removed something that was actually good (such as replacing RAII with GC). And on the other hand not fixing real fundamental problems (such as concurrency safety for example). This probably made the language less attractive as a C++ replacement, but still attractive for those who didn't look to replace C++.

<comment><USER17> Not only that.

Many of us that like C++ also do actually like GC systems, but what I personally don't want to give up is the expressive power of modern languages.

<comment><USER18> Let's put it this way:

If it wasn't for the Google brand -- with the power to promote Gophercons and hire full team language devs -- there wouldn't be a chance to see Go rise above Nimrod, D et al.

What they do have going for them is:

1) A rather complete standard library (because of many paid full time devs compared to any indie language) 2) An easy familiar syntax 3) A simple (but far from complete or unique to them) concurrency story with Channels/Goroutines. 4) Nice tooling (again due to many paid full time devs -- Java and C++ have better, but most languages have worse).

<comment><USER17> Yes, I do agree.

</comment></comment></comment></comment></comment></comment><comment><USER19> The biggest turn-off about Go, for me, is that the community seems to be incredibly unfriendly to newcomers. He touched on the lack of REPL, but it goes further than that.

For instance, there is very little in the toolchain about debugging other than "use GDB". For someone very familiar with the workflow of typing "debugger" in Javascript code, being able to stop the world at any state, examine variables, and having a fully-functional REPL to test expressions, Go's way of "debugging" code is...well. I don't really know how to do it in Go. The general answer seems to be something along the lines of "think about the code you wrote and then write it correctly you idiot."

Seriously, this is the canonical debugging advice, from Rob Pike himself:

 _" When something went wrong, I'd reflexively start to dig in to the problem, examining stack traces, sticking in print statements, invoking a debugger, and so on. But Ken would just stand and think, ignoring me and the code we'd just written. After a while I noticed a pattern: Ken would often understand the problem before I would, and would suddenly announce, "I know what's wrong." He was usually correct. I realized that Ken was building a mental model of the code and when something broke it was an error in the model. By thinking about _how* that problem could happen, he'd intuit where the model was wrong or where our code must not be satisfying the model."*[1]

[1] [http://www.informit.com/articles/article.aspx?p=1941206](http://www.informit.com/articles/article.aspx?p=1941206)

<comment><USER20> Most Go programmers I know use printf debugging, not GDB. It fits with the Go philosophy of doing everything from the code, minimizing tools and config files.

This is not because the tools are so bad we are forced to bang rocks together. It's because writing code is an effective way to diagnose bugs. Even when I'm in a full-blown IDE with a GUI debugger, I prefer to use printf debugging.

<comment><USER19> I do too, I think this is more efficient when I understand what's going on.

However, let's say I'm given a third party library, and I know essentially what it does. I want to "see" the properties and methods of the object, I want to "inspect" values, and I want to "test" expressions, _all at once_. If you're just using printf, then between each of those steps you need to write a line of code, recompile, and reach that state in your program again. Like I said, if you already know essentially what's going on, deep dives like this become less and less important. However, I just think it's a boneheaded philosophy for a language / toolchain to just like...I don't know, _assume_ you're good. I'm trying to become good, but I am getting more and more frustrated with Go every time the default answer to my problem is "be less of an idiot"

<comment><USER21> It's not necessarily a matter of being good. Writing efficient code doesn't mean that you can build a mental model for a reasonably complex projects, which will naturally accumulate dependencies. If you're lucky, you'll get a mental model of the component you're working on, and some of the more problematic dependencies. That's where being able to dive into arbitrary code during execution becomes crucial. Especially if the problem occurs in a piece of code you don't have access to at the layer you operate, and hence can't display the value for easily, or at all.

</comment></comment></comment></comment><comment><USER22> imho, go, afaik, is designed to cleanly express concurrency primitives in the context of a single system, and doesn't do 'fault-tolerance' in the erlang sense of 'you need >1 machine to be fault-tolerant'. with that lens, it is clear that the _optimal_ way to do concurrency is with shared state, but that gets exported out via channels and go-routines etc.

also, can someone please explain the issues around 'nil' ? i fail to appreciate author's concern about those...

<comment><USER2> > also, can someone please explain the issues around 'nil' ? i fail to > appreciate author's concern about those..

The question can be thought of as two parts:

1) Whether nil should be a base value for objects. If something points to type t, should that be allowed to be nil. It is obvious that it should if coming from C/C++/Python, not so obvious if coming from Haskell for example.

2) Should the lack of objects, or should error conditions be represented by nil. Say lack of a an object in a map is indicated by returning nil. Should it throw an an exception instead? Now, go doesn't have exceptions so it needs something like this perhaps. Or maybe panic should happen.

To expand on 1). If you are coming from Haskell (or any strong typed language) the thinking is, you are already paying the price for static checking, strong types, compilation step etc. It would be nice to have explicit non-nil types. You can say this function accepts a reference to this object and this cannot be nil. During compile time the typechecker/compiler will do a more rigorous analysis based on that, and barf out an error then instead of during production.

Like in Haskell you can explicitly say something may be nil (Nothing):

           data Maybe a = Nothing | Just a

I don't personally lean one way or another here. I just don't have a strong opinion either way. I understand the trade-off. But this is how I interpret what the author means by his issue with 'nil'. Hopefully this helps.

<comment><USER23> For 1), modern C++ style generally frowns upon NULL pointers, preferring to use references, which are guaranteed to be non-NULL.

<comment><USER24> There is no such guarantee, a NULL reference can be created although it does require a little more effort than creating a null pointer.

However, null is just a special case of "invalid" pointer (e.g. point to freed memory), and it's very easy to create an invalid reference, e.g. take a reference into a vector and then push a pile more elements onto it, causing the vector to reallocate and move in memory, invalidating the reference.

<comment><USER25> You're talking about undefined behavior. There's no such thing as a null reference according to the C++ language specification.

<comment><USER24> So? It's still possible to create one. (There's no such thing as dereferencing an invalid pointer according to the standard, but that still happens.)

<comment><USER25> If it takes undefined behavior to create a "null reference" then by definition it's not possible to create one and still have a well-defined program. That is, you have bigger problems than "null references" to worry about.

</comment></comment></comment></comment></comment></comment></comment><comment><USER26> Great article.

I'm curious how people are deploying Go apps in production. Is it nginx+some app server?

(In other words what's to Go equivalent of nginx+unicorn or apache+passenger in the RoR world?)

<comment><USER27> I use nginx + upstart to keep my golang process up and running. When I asked about it on the golang irc channel, people said that they just use golang without a reverse proxy.

I personally like the ssl termination that nginx offers. I believe that nginx is a better way to load balance and I like not having to run my code as root, which using a reverse proxy provides you.

<comment><USER28> You can use capabilities to allow binding to port 80 without being root.

<comment> vertex-four Another alternative is authbind[0], which doesn't have the same drawbacks (i.e. you can use it with scripts, and still set LD_LIBRARY_PATH).

[0] [http://en.wikipedia.org/wiki/Authbind](http://en.wikipedia.org/wiki/Authbind)

</comment></comment></comment></comment><comment><USER29> I write it fully acknowledging that programming language flamewars are pointless, but this article just shows that you don't even have to try hard to create a biased comparison.

Here's the essential difference between Go and Erlang: Go gets most of the things right, Erlang gets way too much wrong.

So what does Go gets right but Erlang doesn't:

* Go is fast. Erlang isn't

* Go has a non-surprising, mainstream syntax. You can pick it up in hours. Erlang - not so much.

* Go has a great, consistent, modern, bug-free standard library. Erlang - not so much.

* Go is good at strings. Erlang - not so much.

* Go has the obvious data structures: structs and hash tables. Erlang - no.

* Go is a general purpose language. Erlang was designed for a specific notion of fault tolerance - one that isn't actually needed or useful for 90% of the software but every program has to pay the costs

* Go has shared memory. Yes, that's a feature. It allows things to go fast. Purity of not sharing state between threads sounds good in theory until you need concurrency and get bitten by the cost of awkwardness of having to copy values between concurrent processes

So sure, if you ignore all the major faults of Erlang ([http://damienkatz.net/2008/03/what_sucks_abou.html](http://damienkatz.net/2008/03/what_sucks_abou.html), [http://www.unlimitednovelty.com/2011/07/trouble-with- erlang-...](http://www.unlimitednovelty.com/2011/07/trouble-with-erlang-or- erlang-is-ghetto.html), [http://ferd.ca/an-open-letter-to-the-erlang-beginner- or-onlo...](http://ferd.ca/an-open-letter-to-the-erlang-beginner-or- onlooker.html), [http://sacharya.com/tag/erlang- sucks/](http://sacharya.com/tag/erlang-sucks/)) it compares very favorably to Go.

You just have to overlook ugly syntax, lack of string type, lack of structs, lack of hash tables, slow execution time. Other than those fundamental things, Erlang is great.

<comment><USER12> Note that the people who espouse Erlang are espousing the Erlang VM (mainly because it doesn't have a name besides "the Erlang VM".) Nobody likes Erlang's syntax. Nobody likes Java on the JVM either, but Clojure's pretty great. Use Elixir, and you get pretty syntax, and also "string support" and "a consistent stdlib" for free.

And, since other people have already rebutted your statements about structs and hashes, I'll ignore that. †

On needing speed: for IO-bound operations (concurrent ones especially), Erlang _is_ faster than Go. For CPU-bound operations, Erlang knows it can't beat native code--so, instead of trying to run at native-code speeds itself, Erlang just provides facilities for presenting natively-compiled code-modules as Erlang functions (NIFs), or for presenting native processes as Erlang processes (port drivers, C nodes.) If you run the Erlang VM on a machine with good IO performance, and get it to spawn the CPU-bound functions/processes/C-nodes on a separate machine with good CPU performance, you get the best of both worlds.

And finally, on "every program having to pay the costs": is someone forcing you to use Erlang to create something other than fault-tolerant systems? Learn Erlang. Learn Go. Learn a bunch of other programming languages, too. Use the right tool for the job. The article is the rebuttal to people who claim that Go replaces Erlang in Erlang's niche, not a suggestion to use Erlang outside of its niche.

\---

† For a bonus, though, since nobody seems to have brought this point up: Erlang has always had mutable hash tables, even before R17's maps. Each process has exactly one--the "process dictionary." It's discouraged to use them in regular code, because, by sticking things in the process dictionary, you're basically creating the moral equivalent of thread-local global variables. However, if you dedicate a gen_server process to just manipulating its own process dictionary in response to messages, you get a "hash table server" in exactly the same way ETS tables are a "binary tree server."

<comment><USER30> do you think that BEAM is just the name of the current implementation of the Erlang virtual machine?

can somebody reimplement a BEAM in the same way you can implement another JVM?

<comment><USER31> strmpnk beat me by 7 minutes, here's a link to the Erjang project: [https://github.com/trifork/erjang](https://github.com/trifork/erjang)

It's not really "BEAM on the JVM", it's actually a translator of BEAM compiled code to JVM bytecode. But the concept is similar, the target for Erlang is important, but so far a variety of things have been used. JAM was the original VM, later BEAM, later BEAM with HiPE. See [1] for some more information. There was also, apparently, an Erlang-to-Scheme translator. It'd be interesting (does this exist yet?) to see someone implement Erlang semantics in Racket.

[1] [http://www.erlang.org/faq/implementations.html](http://www.erlang.org/faq/implementations.html)

<comment><USER32> While it's true that Erjang translates BEAM code, BEAM itself also does this to yet another more modern internal code (. I'd still consider both BEAM implementations.

</comment></comment></comment></comment></comment><comment><USER33> You can "link" goroutines in Go by using

      defer func(){
        if recover() != nil {
          // tell my parent I died
        }
      }()

and, Go relies on channels, not goroutines, having identity.

</comment><comment><USER34> Pretty interesting read. I keep wanting to come back to Go. Maybe this summer.

</comment><comment><USER35> Not directly related but I'm wondering when or if it's even prossible to implement OTP on the system level. OTP is basically a process manager with linked dependencies ? I know unix processes aren't as lightweight but it would still be useful I think. It's the right level of granularity for languages who have shared mutable state internally.

<comment><USER36> From a particular perspective, that's what Docker is trying to do (or at least, is providing infrastructure to build something like an "OTP for Docker" with).</comment></comment>


Apple Says Google Now Not Submitted To The App Store - <AUTHOR> http://techcrunch.com/2013/03/21/apple-says-google-now-not-submitted-to-the-app-store-seems-eric-was-talking-schmidt/

<comment><USER2> You know, the conspiracy theorist in me thinks it's possible that Schmidt wanted to force Apple's hand. Now Apple have no choice but to approve the app despite the fact that it probably does replicate some functionality already built into iOS through Siri.

<comment><USER3> How does Apple responding that it has not been submitted _force_ them to approve it???

<comment><USER2> Because Schmidts words end up looking prophetic if they don't approve it.

</comment></comment></comment><comment><USER4> The Google Now app on Android is probably one of the best crafted, smoothest experiences i have seen, no comparison to the crappy facebook app. So, let's hope it will have a similar quality on iOS! :)

<comment><USER5> Are you sure you aren't talking about the Google+ app, which is a better comparison to Facebook (and about which I agree: it's just fantastically great).

Google Now is, actually, one of the core Android features about which I care the least. On my CM10.1 Galaxy Nexus, it's really quite slow (3-4 seconds to do anything when I try to click on the search bar or swipe it up from the bottom of the screen). The default cards are at best only mildly useful, though sometimes impressive: it will tell me driving times to places that I just searched for, it will tell me the weather, it will warn me about notable traffic on the way home. Amusingly it just alerted me to the fact that Adria Richards had been fired by SendGrid.

Basically: it occasionally _impresses_ me, but doesn't actually help me all that much. It just doesn't enter my radar most of the time. Even as a search interface it's too slow to be my primary gateway: I'll preferentially pull up chrome and type the search into the URL bar there.

<comment><USER6> Having tried it on both the Galaxy Nexus and Nexus 4 I can say it's incredibly faster on the Nexus 4 (stock ROM).

<comment><USER5> The N4 is just a much faster machine, so sure. So to some extent we're just rehashing the "upgrade cycle" arguments of 15 years ago. Google may want to assume the capabilities of a 2G Snapdragon S4 board, but the 1G OMAP4 in my pocket isn't going anywhere until my contract expires...

</comment></comment></comment></comment><comment><USER7> Either way, all signs point to Google Now showing up in the app store soon. Google (via Eric Schmidt's evidently mistaken comments) wouldn't say this if it wasn't at least ready to go, and Apple probably wouldn't comment now if they weren't going to let it in.

</comment><comment><USER8> How does releasing an iOS version of Google Now benefit Google?

Edit: Don't downvote me, I really want to know. It seems to me that Apple is Google's main competitor in the smartphone business. Why would Google give Google Now away to Apple, when it's currently something that give Android an edge over iOS?

<comment><USER9> Google makes money from each search. My numbers are probably dated, but at one point it was something like 13 cents a search on the average. Glancing at their 2011 revenue and making a naive approximation by dividing by the number of searches gives about 2 cents per search. Therefore, more people using Google search means more revenue. Also the experience might create a different route to revenue for them. Suppose you start to like Google Maps then Google Now, then maybe Google+, then maybe your next device is a Nexus rather than an iPad.

</comment></comment><comment><USER10> keeping it a secret until its actually released?

</comment><comment><USER11> But Eric Schmidt did not say that the app was submitted:

 _"You'll need to discuss that with Apple" (at around 17:50). "Apple has a policy of approving or disapproving apps that are submitted into its store, and some of them they approve and some of them they don't,"_

(via [http://techcrunch.com/2013/03/21/googles-eric-schmidt- says-t...](http://techcrunch.com/2013/03/21/googles-eric-schmidt-says-the- ball-is-in-apples-court-for-google-now-on-iphone-and-ipad/))

<comment><USER12> It's really easy to read that comment as meaning "we've submitted it, ball's in Apple's court". And I'm sure Schmidt knew that when he said it.

<comment><USER11> It's much too vague and subtle to warrant an official statement in my opinion.

<comment><USER12> If Apple hadn't said anything, in a few weeks we'd see people complaining about evil Apple holding back their precious Google product.</comment></comment></comment></comment>


SYSENTER/SYSEXIT vs. SYSCALL/SYSRET by Andy Glew (2010) - <AUTHOR> https://groups.google.com/forum/#!topic/comp.arch/CjDs4MJCBow%5B1-25%5D <comment><AUTHOR> To add to this: the original 32-bit SYSCALL/SYSRET in AMD K6 just changed EIP and cleared a few flags too, and they "fixed" it for 64-bit by providing a mask of flags to clear and adding SWAPGS:

[http://web.archive.org/web/20120813101603/http://www.x86-64....](http://web.archive.org/web/20120813101603/http://www.x86-64.org:80/pipermail/discuss/2000-October/001019.html)

[http://web.archive.org/web/20120615223202/http://www.x86-64....](http://web.archive.org/web/20120615223202/http://www.x86-64.org:80/pipermail/discuss/2000-October/001009.html)

When Intel copied SYSRET, they added a canonical address check which was a mistake because the fault would occur on the user RSP.</comment>


Ask HN: How can a programmer contribute to their country/province/city? - <AUTHOR> What are the best ways to find software projects to contribute to, which are beneficial to local institutions?  Do national/provincial/state organizations have open source projects, how can they be found? <comment><USER2> Since it's hard for you to find out about this:

Maybe you could start a website to coordinate/connect programmers with places/projects/institutions/organizations that want them. I don't know if such a thing exists, but that would be very cool.</comment>


Kim Dotcom's Mega-Lawsuit Could Make Him a Multi-Millionaire Again - <AUTHOR> http://www.wired.com/threatlevel/2013/09/dotcom-lawsuit/

<comment><USER2> "The Government Communications Security Bureau was not, at the time, permitted to spy on legal permanent residents like Dotcom, but the New Zealand government has since legalized such surveillance."

I'm surprised they didn't just go right ahead and make that law retroactive.</comment>


The Myth of the Cool Tech Girl and Why She's Dangerous - <AUTHOR> https://medium.com/@skstock/the-myth-of-the-cool-tech-girl-7868fa63769b <comment> King-Aaron As an Australian, I find the gender hangup over drinking beer quite funny. It's a gender-inclusive beverage, intended for all. You should see my mother smash down tins. (Edit: Relevant article: [http://www.abc.net.au/radionational/programs/drawingroom/how...](http://www.abc.net.au/radionational/programs/drawingroom/how- women-are-changing-australias-beer-drinking-culture/7195864) )

Same with things she mentioned such as ping-pong tournaments and such... I think the only person I know these days with a ping-pong table is a female friend of mine.

 _I don 't think that just because you aren't "into" something, it doesn't necessarily mean it's gender-biased against you._

</comment><comment><USER2> I completely agree on not promoting sexist behaviour, aggressiveness or "compulsory bro-culture", but I believe things like having a ping-pong tournament or sharing some beers with the team after a long day are perfectly inclusive and fine things to do and there should be no correlation between interest in these activities and gender. In fact I think this sort of team building things are beneficial.

</comment><comment><USER3> How widespread is the "toxic bro culture"? Is it regional or a particularly silicon-valley thing. Is it more common in startups or with younger employees?

Do most techies personally relate to this sentiment?

<comment><USER4> That's going to depend how you define it. I worked at a place where:

        Don't reward good behaviour with scotch, don't tap kegs at 12pm, and don't host video game or ping pong tournaments

Very precisely described the culture. The place was owned by a woman and that was the culture she chose to put in place. Is that a bro culture?

<comment><USER3> I don't know. It all seems very alien to me. But I often see blog posts like these which make it seem ubiquitous.</comment></comment></comment>


Show HN: No Cookie – Show your website visitors you don't use cookies - <AUTHOR> https://no-cookie.kemp.app/ <comment><USER2> Kind of annoying that I have to hit the "X" every time I refresh the page or visit the site. Could you make it so the page stores some kind of state in my browser so I don't have to do it manually every time?

<comment><USER3> Well, that would be ironically if a website announces _not_ to store cookies (as a user I also expect nothing else on my computer) but then makes use of some pesistent storage.

Let's be honest: These badges which consume screen spaces are annoying and nobody ever reads them. I did not realize what it says (I automatically clicked the _close_ box) before I read the main text of that No-Cookie website!

<comment><AUTHOR> That's part of the point! I did intentionally try to design it similarly to a real cookie consent banner.

It just goes to show how ineffective they are if people just click without even reading them.

</comment></comment></comment><comment><AUTHOR> Hey HN, creator here. I made this satirical project for me to learn how to make NPM modules and my goal was to release it in one day. It's not for serious use. The code isn't great. Like I said, I'm still learning.

Here's the GitHub: [https://github.com/rockhopper72/no- cookie](https://github.com/rockhopper72/no-cookie) Pull requests welcome.

Thanks!

<comment><USER4> It's an inspired satirical project. I think there's value in shipping something no-one would ever use; it allows you to see things from new perspectives. See also: the useless machine [0].

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

</comment></comment><comment><USER5> Why annoy my users, even as a joke? I don't get this at all.

</comment><comment><USER6> why, in the would, would i need JavaScript to tell people I don't use cookies?!

Why not just a note at the bottom of the page with no banner that needs to be closed. It's frustrating enough that I have to do it on the cookie sites, why in the world would you make me do it on a non-cookie site.

</comment><comment><USER7> Rather amusingly, my fairly simple ad-blocker is already blocking your no cookie banner.

<comment><USER8> Which adblocker are you using?

<comment><USER7> Wipr for Safari [https://giorgiocalderolla.com/wipr.html](https://giorgiocalderolla.com/wipr.html)

</comment></comment></comment><comment><USER9> Add localStorage or sessionStorage to make the accept button usable

<comment><USER10> An exceptions of the law probably applies when it comes to storing that particular information. If no exception apply, then you'd need to warn the users that some information are being recorded. [https://law.stackexchange.com/q/30739/3980](https://law.stackexchange.com/q/30739/3980)

</comment></comment><comment><USER11> I personally 'ok' with websites using Cookies. It helps pulling webpage faster..

<comment><USER6> um. no. it.... no.

That.... no.

It may help you avoid logging in to a page again, but it will _not_ help load/pull the page faster. In fact, it will load it slower, because now there's more data to download, read, and process.</comment></comment>


Ballmer on Yahoo Deal: The Bankers "screwed everything up." - <AUTHOR> http://www.techcrunch.com/2008/07/01/ballmer-on-yahoo-deal-the-bankers-screwed-everything-up/ <comment><USER2> The headline goes into as much detail as this entire article. I'm not even kidding. The bankers "screwed everything up" isn't even a snippet of a longer quote from the article. It's presented the exact same way in the article with no added context or background. There's no explanation or even speculation as to how the bankers might have "screwed everything up". This article is complete and utter garbage.</comment>


Three Laws of Programming Language Design - <AUTHOR> http://lambda-the-ultimate.org/node/4754 <comment><USER2> Fun to ask these questions of different languages. Here's two I've been using recently:

\- C++:

What they got right? RAII, ability to code "close to the metal" if you want or highly abstractly if you don't, templates for powerful code re-use, and a long-term stable ABI on most platforms. The latter is huge-- it means you can write code in C++ and actually ship it.

What they got wrong? Variations in syntax between headers and code files (e.g. ~Destructor() vs. Destructor::~Destructor()), weird template edge case hell that requires 'typename' and 'template' keyword use in unpredictable places, too much symbol re-use (&, <>, asterisk, etc.) that makes code hard to read and parse in a misguided effort to not break 0.000001% of existing code. Pointers are unsafe since you don't know whether something was allocated on the stack or you should delete it.

What's confusing? A lot, unfortunately. :) Templates are the primary source of this.

\- JavaScript:

What they got right? It's functional. Really. It's basically a lite weakly- typed Scheme shoehorned into a Java-like syntax. The language is easy to parse and simple enough that JITS can be made that run it fast. Functions are first- class citizens and you can sling them around like any other variable.

What they got wrong? Numeric types are poorly implemented, making the language unsuitable for "serious algorithm" type stuff. There is no canonical way to define and extend objects, resulting in conflicting styles across projects. There is also no builtin way to do sane async code without the "pyramid of doom" (20-level deep indents). Libraries like async or underscore help, but in a language that wants to be async as bad as JS this should be _core_. Finally, the fact that it's a functional language shoehorned into looking like Java means there are all kinds of confusing syntactic variations that arise when it's used functionally. function() {} vs x = function() {}; -- note the extra semi.

What's confusing? Type promotion, weird rules around true/false evaluation, the == vs === mess, what 'this' means.

<comment><USER3> Scheme (and FP in general) is much more than just first-class functions. If that's all that is required for a language to be considered functional, then nearly every modern programming language is a functional language, and the term becomes essentially meaningless. First-class functions are nothing special or unique anymore.

FP is also about frictionless _composition_ of functions, declarative rather than imperative style, use of expressions instead of statements, and very critically, emphasis on statelessness and immutable data.

JavaScript is anything but stateless--it is extremely awkward, if not impossible, to avoid mutation in idiomatic JS code. Imperative statements abound, and everything is a reference, there are really no pure values to be found. Functions can be composed, but the syntax makes it unintuitive and ugly. And though it is probably not a hard requirement for FP, most FP languages at least make an attempt to distinguish pure functions from stateful procedures, e.g. via types in Haskell, or just naming conventions, as with Scheme's `set!`, but JS does not really facilitate this in any way.

Functions and lexical closures are undoubtedly some of "the Good Parts" of JavaScript, but these alone are not sufficient for functional programming. JS is fundamentally an imperative, OO language which happens to have a very light dusting of FP flavor on top.

<comment><USER4> Moreover, as far as Lisp dialects go, homoiconicity is a big part of their identity and a major source of their power. It's an orthogonal concept to functional programming in general, just look at e.g. Haskell, but that's one of the first things I think of when I hear the "JS is just an ugly Scheme!" argument.

<comment><USER5> javascript has json though, which doesnt make it homoiconic, but it allows you to mimic homoiconicity in a lot of cases. When I write in javascript, I tend to store my data in json and and write code that is generic, with much abstraction that has a small foot print to manipulate the json.

That is scheme-like. That is psuedo-homoiconic.

(If anyone in the know wants to add or refute this, I would love to know whether my non-cs intuition is correct here.)

(also it is still a very mutable language, even with coffeescript/underscore)

<comment><USER6> Homoiconicity is when the _code_ of a language is represented in a structure that is primitive to the language. It doesn't have to do with how data is stored, it has to do with how _the program text itself_ is stored.

The advantage of homoiconicity is that the language itself is manipulable as a basic type in the language. In Scheme, this means that it's easy to generate, analyze, and modify Scheme code using simple procedures in Scheme. e.g. I could (although I wouldn't) generate a _scheme expression_ to compute an arbitrary fibonacci number with[1]

        > (define (fib-code n)
            (if (= n 1) 1 `(* ,n ,(fib-code (- n 1)))))
        > (fib-code 4)
        (* 4 (* 3 (* 2 1)))
        > (eval (fib-code 4) (the-environment))
        24
        > (eval (replace '* '+ (fib-code 4)) (the-environment))
        10

Notice that I'm not just pushing strings together to write code. I'm actually manipulating data structures in the language to produce and modify code. _That_ is homoiconicity.

<comment><USER7> Nice example, but (nitpick warning) that's not a Fibonacci (<http://oeis.org/A000045>) computation. It computes triangular numbers (<http://oeis.org/A000217>)

</comment></comment></comment></comment></comment></comment><comment><USER8> I saw Joe speak in London a year or so ago. He was a very good speaker. This three laws is a very good reflection of his plain spoken and humorous style. Whether you like Erlang you should take the time to enjoy Joe IMHO :)

</comment><comment><USER9> > What about Elixir? This gets closures right:

I can't say I agree with his analysis of closures. My understanding is that closures close around variable scope. If the variable changes (something that can't happen in a pure functional language) then the closure sees the change.

Elixir closes around the value instead of the variable. While that may be more convenient/obvious in some places, it removes functionality in others. Specifically the old adage about closure's being a poor man's object and vice versa isn't true if the closure doesn't close around the variables themselves.

<comment><USER10> What is the semantic difference when everything is immutable? I'm not sure if you are right that it closes over the value rather than a reference, and I can't think of any way to test the idea which suggests to me it is not meaningful.

<comment><USER11> Yeah, perhaps in the world of Erlang, have a mutating closure make not sense.

</comment></comment></comment><comment><USER12> The title makes no sense. The "three laws" are observations about how people respond to a programming language design. They do not make any sense when applied to a design or the design process.

<comment><USER13> It certainly was not the article I was hoping for, which would say things like:

\-- Define and publish a formal syntax for your language. Do not get too clever with the syntax -- if you can't express some feature cleanly in BNF, don't do it that way.

\-- Equality must be an equivalence relation: symmetric, reflexive, and transitive. If you don't know what that means, you have no business designing a language. [Equality is not transitive in either JavaScript or PHP.]

\-- Comparison operators ('<' etc.) must be transitive. [Violated in PHP.]

\-- Transformations that people expect to work must work. For example, 'if (p) a else b' must be equivalent in all cases to 'if (!p) b else a' [Visual Basic violates this].

\-- The scope rules must be clear and straightforward, and not cause maintainability nightmares. [JavaScript fails.]

</comment></comment><comment><USER14> Those seem like the three laws of everything.</comment>


Ask HN: Which web API's would you like to be easier to use? - <AUTHOR> Which web API's would you like to be easier to use?  What do you find painful about them?
I've noticed some common patterns in the things that I wish were already implemented for me when I've worked with web API's, so I'm thinking it might be useful to get these into a library or service so everyone wouldn't need to reimplement them every time.
For example, I always want to log every request sent and response received from the API (at least for a day or two), and how long each call took, since a remote API can always do something undocumented or have some transient problem, and I want to be able to figure out what happened.  Not rocket science, but annoying to have to do every time.
And the process flow involving API calls often involve multiple steps (for example, we make a call, they return immediately with "ok, request received successfully", but then later they call one of our web hooks with the actual response).  So providing some abstraction around the process could be useful, such as a providing a closure of the data used across the multiple steps and perhaps reifying the concept of a "step" would be useful.
Such effort would ideally start with some particular API to ground the implementation in reality: an API that is both painful to use and one that people care about.
And, in response to the comments of people who want or are building easier to use interfaces to existing API's, yes, I do want to hear about those.  The part I'm thinking the most about right now wouldn't provide such an interface directly, but it might prove useful to someone who was implementing such an interface. <comment><USER2> Amazon S3, I want it to have a WebDav interface instead of the proprietary stuff they have. That way I can use different tools to save file to S3 directly - less hassle.

To make a bit of money you can take a percentage of the bandwidth charges, sell your EC2 appliance, or offer both options.

<comment><AUTHOR> Have you tried <http://www.jungledisk.com/> ? It maps S3 to appear as a drive or directory on your computer, so you can use S3 from any program or tool that can read and write files.

Or is there something specific about WebDav that you needed?

<comment><USER2> 1\. I don't want to install a tool on each computer. I want to set it up once and then use it from all of my {servers, macbook, virtual machines}.

2\. I want the links resulting from upload to be directly and (sometimes) publicly downloadable without going through jungledisk. E.g. I use screenshot app called Skitch which saves screenshots to WebDav among other things. I want to be able to save screenshot and share it immediately.

</comment></comment></comment><comment><USER3> I thought payment APIs were especially a pain (that's why I'm working on <http://payfacade.com>).

<comment><AUTHOR> Yup, I've experienced a lot of frustration myself the couple of times I've worked with payment API's.

<comment><USER4> Great question. I've made a little bit of money making Authorize.net's AIM API easier to use in .NET: <http://sharpauthorize.com>

Now, authorize.net could replace their aim API with an easier to use soap one, and that might put me out of business - doubt it, because there are lots of free competitors already and I still do pretty well.

<comment><USER5> It's strange that they haven't added a SOAP interface tot he AIM API yet since they have it for both ARB and CIM. I didn't know about SharpAuthorize. I know there are a lot of half-baked .NET implementations for Authorize.net (and I've written a few myself) but I might use this for an upcoming project to save some time.</comment></comment></comment></comment>


Single member LLC - <AUTHOR>

I am looking into setting up a single member LLC. While doing my research, I've come across a few articles where the corporate veil was pierced for SMLLCs for various alter-ego reasons (e.g. not filing an 8832 with IRS which I found surprising). I do have a meeting with a lawyer set up next month but want to be as knowledgeable as possible before I go there.
1- Do you have any ideas/links about the safest way to set up a single member entity that would shield me from personal liability? I live in WA if that is relevant.
2- If I incorporate/LLC in say Nevada/Wyoming (which seem to have good SMLLC protection), but still do my business, foreign register and live in another state (WA), which law would typically be applied if I'm sued externally by (a) someone in WA, (b) someone in NV or (c) someone outside of both. i.e. do I really get any protection incorporating/LLC-ing outside my home state or will the states apply their own laws making it moot? <comment><USER2> If you're going to do business with, and particularly solicit investment from, the public, you want a good level of protection from the inevitable lawsuit.

Single-member entities do little to shield you if you get sued and they want to pierce; if someone's got you in their sights and considers asking the court to disregard the corporate entity, enrolling yourself in one of these single member jobbers is like painting a big red target on your back. Your attorney may differ, but I believe it's dumber than just going in as a sole proprietor.

You can get sued anywhere for anything, but plaintiffs can and will sue your entity from the friendliest jurisdiction (and that's typically where the business deal went down). Showing up to court with an out-of-state corporate identity when you've always conducted business in your present state is strike two, before you even sit down.

Say your business craters, you go broke, and _then_ you get sued. Many states won't even let you defend your company in court unless you are (or hire) a licensed attorney.

The safest way to set up a single member entity is to get additional members. Member #2 ensures the plaintiff will have a harder time calling the LLC your "alter ego", a contrivance you set up to screw the customer/investor/government out of taxes.

<comment><AUTHOR> Thanks for the reply mchannon. Am I to understand from your response that even if I maintain the proper required formalities, and treat the corporation as a separate entity, that the veil may still be pierced? Is this common or exceptional?

The business I mentioned is internet-based and spans all the states. I just happen to live in WA.

<comment><USER2> As with all court actions, it's not what you did that matters, but rather what they want the court to think you did.

Engaged in fraudulent business practices?

Commingled funds?

Used the corporate entity to further these goals?

Sure you didn't. But now you have to prove it in court with the rules biased against you. Spend $10k+ on an attorney (and sit through court proceedings for months) or settle for $10k+ even though they're wrong and they're just shaking you down.

Take steps ahead of time to make your venture a less attractive target (lawyers chase money- either their client's or yours). Make it not worth their while, and you will significantly decrease your chances of landing in court. The easiest step? Don't be a single member LLC.

If you're an internet retailer, companies like Amazon have in past years located out of OR where there is no sales tax (thus providing a competitive advantage).

Other than setting up in Oregon to avoid sales tax, or setting up a C-corp out of Delaware if you're going to raise funding as a serious startup, you get no benefits (and some drawbacks) setting up out of state.

<comment><AUTHOR> Thanks for the detailed reply mchannon.

</comment></comment></comment></comment><comment><USER3> I live in WA. Email's in profile. Ping me for coffee if you're in Vancouver.

One thing that has occurred to me after I formed an LLC, is that being a sole proprietor with a DBA, while considered somehow, amateurish, has one advantage. You need to be a lawyer to represent somebody else in court, even if that "somebody else" is your single member LLC. However, if somebody sues you as a sole proprietorship, you just show up in court with no money out of your pocket. Since, you need to guarantee your line of credit, etc, with personal property anyway, the whole LLC "corporate veil" attempt, which often/usually fails anyway, seems of little value to me, for most single member LLC's.

This is all just my opinion, and I am not following my own advice, but I might follow it in the future.

<comment><AUTHOR> Thanks for the perspective pdx.

</comment></comment><comment><USER4>
      Is this for your company, or a pass through entity (shell)? I disagree with Mchannon.  A sole proprietorship is never better than a protected entity.

     Yes a veil can be pierced, but at cost of discovery (and you must have real assets worth spending the time & effort to pierce).

     If you're soliciting outside investors - an LLC can later be "upgraded" to a C-Corp. If it's for asset protection (eg: all I.P. is held by one entity, and licensed to another) - if you have sizeable assets - get a lawyer. Otherwise, get on to building an actual business, earn enough to make it worthwhile - and hire a lawyer.  IMHO.

<comment><AUTHOR> Thanks czbond.

Yes it is for my company which is basically meant to be a niche website whose access based on monthly subscription (i.e. users from all over the US pay every month for access). My "office" is in WA.

I was looking for how to make a single-member LLC that would offer me the most personal protection, for lawsuits both by users (though right now I don't see why that would happen) and potentially from similar companies for some kind of infringement. I would of course separate the entity records/transactions from my personal ones. mchannon's perspective seems to be that even if I do everything by the book I still look like an appealing target as a SMLLC which could cost me time and money even if it holds.

From most of the replies above it seems like there are issues with the SMLLC as a choice - what are your thoughts on this?

</comment></comment><comment><USER5> My advice, invest your time and energy in selecting the right attorney and accountant rather than developing a cursory knowledge of the field. Or to put it another way, presupposing that a single member LLC is the starting point may not be the right choice. Hire people who you trust to know the best choice off the top of their head.

<comment><AUTHOR> Will do, thanks. The cursory knowledge is mostly to be able to get a feel as to whether I'm dealing with a knowledgeable lawyer when meeting with them, rather than putting my trust in the wrong one.

<comment><USER5> What you want is someone who can point to a couple of dozen examples of clients in similar circumstances - i.e. references.

What you don't want is someone who thinks that an online service is like a drycleaner or accounting office.

There are many areas where a general practitioner is fine. I am not sure that you are in one of them because of the nature of internet goods and the complexities of interstate commerce.

</comment></comment></comment><comment><USER6> insurance can help as well. I'm not sure if they have errors and ommissions for type of business your in. Also, for $350 you can do a patent search which could find potential patents in your area. which could be over kill. Also, a personal liability rider can add a layer of protection. If someone sues they not only do they have to deal with your lawyers but your insurance companies attorneys as well.</comment>


Centenarian study suggests living environment may be key to longevity - <AUTHOR> https://www.sciencedaily.com/releases/2020/06/200617145256.htm <comment><USER2> Have a look at [https://www.bluezones.com/](https://www.bluezones.com/) which is a kind of organization that came from the study of these "Blue Zones" around the world, per article's mention.

There are a handful of key principles/characteristics that make it so. Here's a nice overview as per the wiki: [https://en.wikipedia.org/wiki/Blue_Zone#Characteristics](https://en.wikipedia.org/wiki/Blue_Zone#Characteristics)

This also explains why, for example, countries that are primarily oriented around agricultural lifestyles tend to exhibit "older than usual" ages. It isn't uncommon for one household to span three (or more!) generations. The listed characteristics and what people in these countries and lifestyles tend to do have very good overlaps.</comment>


Ask HN: Why is building a video platform so hard in 2020 for smaller creators? - <AUTHOR> As the title suggests, with YouTube, Netflix and Vimeo being the biggest video platforms in the world, how does one go about building their own video platform like those?<p>I'm surprised why I haven't seen a new incumbent in the video space in over 5 years. <comment><USER2> 1\. Getting content is a challenge. Why would people upload their videos to a platform with few users?

2\. Getting users is a challenge. Why would users flock to a platform with few videos?

3\. Getting rid of content is a challenge. How do you filter out the stuff you don't want on your platform (copyrighted material, child pornography, terrorist propaganda, etc)?

4\. You'll bleed money until you have lots of users, possibly even after that.

Also, given that you mention Netflix: both Apple and Disney entered the market recently (for Apple, I think the jury is still out, but they have deep pockets, so they may not be in too much of a hurry to become profitable); Disney, with its enormous catalog, couldn't go wrong, I think)

</comment><comment><USER3> If I wanted to publish video independent of YouTube I would probably use this AWS service

[https://docs.aws.amazon.com/AmazonCloudFront/latest/Develope...](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/on- demand-streaming-video.html)

The document makes it look much harder than it really is. It really should be a matter of "upload video to S3" and then "run a script" and a while later it is loaded in the CDN and good to go.

The deal breaker for most people would be the cost, something like 0.10 per GB downloaded, with reasonable quality that would be $0.10 for an hour of video.

If YouTube didn't exist it would be an easy sell: compare that to cable where a person with a serious TV habit might watch 200 hours of TV a month and pay $80, that is 40 cents per hour including both the content and the distribution network.

It would be a weekend project to make a web site that ordinary people could upload video that would pipe it through that script into the Cloudfront CDN.

If it were to turn into a hit you would run into two problems: (1) costs for bandwidth, storage and compute and (2) illegal and otherwise troublesome content.

The AMZN price is a sustainable price, they are making a healthy profit, they aren't going to be in a hurry to discontinue the service. (Use "unlimited" bandwidth at a cheap web host and you might get a call where they explain that it as "unlimited" as an "unlimited" cell phone plan.)

You could pay less but you will be spending your time, spending money up front, etc.

You are now dealing with problem (2). That includes: pirate content, beheading videos, incitement to violence, slander, fraud, privacy violations, "fake news", child pornography, other pornography, innocent people accused of posting videos of the above sorts, etc.

Google has lawyers who have gotten a favorable deal with the content industry. That's the easy part. If you go about it with any sense of "justice" or "fairness" the content moderation job can destroy your mental health through this mechanism:

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

You either take a "delete them all and let [God] sort them out attitude" or you pay somebody else to do it.

</comment><comment><USER4> Youtube and Netflix are two very different video platforms. Can you rephrase the question?

Why are there no new Netflix like competitors? Like Hulu, HBO, Disney, etc...

Or, why are there no YouTube competitors? Like PeerTube, BitChute, TikTok, etc...

<comment><AUTHOR> For smaller creators to create their own Netflix I haven't seen any incumbents for 5 years.

On YouTube competitors again the same applies, PeerTube, BitChute, and TikTok don't allow you make money on their platform.

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

</comment><comment><USER6> data capacity, data management, mass appeal, costs.</comment>