All Non-Africans Part Neanderthal, Genetics Confirm - <AUTHOR> http://news.discovery.com/human/genetics-neanderthal-110718.html <comment><USER2> That is not what "genetics confirm". I wish people at yellow journalism pseudoscience rag "Discover" would read the darn paper before spouting off on it.

The actual study found that Neanderthal DNA is present in a small percentage (not all) of people in each continent. Including Africa.

Anyone contemplating downvoting this, for the love of scientific reality please read the actual original paper first.

<comment><USER3> The headline is only slightly off. Even the title of the actual journal article ( <http://mbe.oxfordjournals.org/content/28/7/1957.abstract> ) is "An X-Linked Haplotype of Neandertal Origin Is Present Among All Non-African Populations"

Anyway, the fact that Neanderthal sequence is present in all non-African populations is more important and interesting than whether or not Neanderthal sequence is present in all non-African human individuals. By statistical likelihood, we'd expect the answer to the latter question to be 'no', while the answer to the former is interesting, empiric, and, now, known to be 'yes'.

<comment><USER2> The headline is not slightly off, it is completely inaccurate because the hack "journalist" at Discover didn't read the paper. It is not true at all that "All Non-Africans Part Neandertal". On average world wide, they found a Neandertal chromosome segment present in 9% of the 6092 chromosome samples from all inhabited continents.

It's also not true what both titles suggest that no African samples were part neandertal, the supposed neandertal segment (B006) was found in several African samples from their extremely limited sample size that doesn't even cover a small fraction of ethnic populations of Africa. Not only is it present in several African samples they tested, it is likely to be found in others as well should this be extended to a more comprehensive sample of world ethnic groups.

As a completely separate topic, the uniquely Neandertal origin of B006 is speculative to say the very least, but it's fine to assume so for the sake of argument, it's just not a definitive claim of fact... yet.

<comment><USER4> Oh my, if what you're saying is correct, then thank you. I saw this story on Ars, Discover, and a couple places and took the wrong thing from it (both individual vs. population, and the presence of neandertal genes in some africans).

To be clear, are you saying the more accurate statement would be: "Neandertal chromosome segments found in all tested non-african populations, and some tested african populations"? (Which, when you put it that way, seems like a somewhat weird distinction to make.)

edit: I followed the link upthread, but it was only to the paper abstract. Is the full paper available for free online somewhere?

edit2: It seems the distinction might be no neandertal geneds found in sub- Saharan African population samples?

<comment><USER2> > "Neandertal chromosome segments found in all tested non-african populations, > and some tested african populations"?

Yes, your more accurate statement is correct.

> "It seems the distinction might be no neandertal genes found in sub-Saharan > African population samples?"

Regarding the Sub-Saharan distinction, the article text's terminology describes haplotype B006 as "virtually" absent from Subsaharan Africa. They then explain this as meaning that 6 out of the 1420 subsaharan samples contained B006, including 5 from tribal groups in Burkina Faso. They explain this away by supposing that these tribal groups must have historically interbred with north African groups, which is not an unreasonable guess, but I am sure it is also true for many other subsaharan groups as well. North African incidence rates of B006 are comparable to the middle east and Russia and higher than China.

So, 0.4% of sub-saharan samples contained B006, but not none. Also, north- western mexico, east south america, east china, siberia and indonesia all have similarly extremely low incidence rates, but no explicit mention of these areas is made in the paper, it's just seen in the data. Only subsaharan africa is called out for special mention. The highest rates of B006 are in western Canada - greater than 25% in some areas.

There is also a separate problem of the circular argument due to the inherent selection bias of brute force digging through the data sets looking for a gene with these characteristics. It's not like they started with a gene they knew was neandertal only, researchers sought out a gene in the single sequenced neandertal sample which had lower modern african incidence rates and from that concluded it was a non-african sourced neandertal gene, then turned around and concluded the reverse, bringing the argument full circle. That's another problem but I'd just as soon not get into that since I would much rather assume that is all good and only focus on the very misleading titles that are going around in articles about this paper.

<comment><USER5> Thanks for this explanation. It seems you know more than any of those journalists. Let me please ask you a question that has intrigued me for a while that is not directly related to this.

There have been studies showing that individuals from two different races, for example Caucasian and West African, are usually more similar genetically to some members of the other race than to some of his own. What is meant by this? How is it possible considering that people of the same race share much more recent ancestry than people of different races? Then later you see graphs showing genetic clusters, how can there be clusters if people aren't more similar to one another for being of the same race? Did they use mixed race individuals for these studies? Are the parts of the genome that make two people look more similar to each other random parts or specific ones, what do these parts do? And finally in the global similarity section of 23andme, one can see the groups he's most related to, how is this possible?

<comment><USER2> I just try to read the papers with these articles.

I'm not up to date with the racial arguments you mention. I know there was something of an obsession 50-100 years ago with trying to establish a scientific basis to justify racism, imperialism, land theft, sterilization, imprisonment and subjugation of non-european peoples and there are still vestiges of those assumptions in a lot of research.

With the claim that "individuals from two different races, for example Caucasian and West African, are usually more similar genetically to some members of the other race than to some of his own", I have heard similar claims but how I understand it is they are not saying randomly chosen individuals from two different groups are more similar than randomly chosen individuals from within a group, but are comparing diversity of individuals within a group to diversity of _group averages_ between groups. In other words, the claim is that the variation between two related individuals is greater than the variation between two unrelated groups, taken as averages. You are correct that if the claim is being presented that individuals between unrelated groups are more related than individuals within related groups, the argument doesn't make sense. It would not be surprising though if it has been presented that way in some articles and then repeated until it became a self- propagating myth. And again to clarify, I'm not up to date with any of those arguments, but just speculating on what might be going on.

<comment><USER5> Thank you. I don't understand how the diversity between averages can be smaller and what I had understood not be true.

<http://i.imgur.com/1k6Ct.jpg>

I'm not arguing any position, just trying to understand without being very familiar with genetics or statistics. Maybe I've read the studies the way you presented it but my simple mind interpreted it that way. I'm guessing there is a huge flaw in what I drew but I don't see it, I can't picture in my mind what you meant.

<comment><USER2> In your drawing, I think it should be where the blue and green scatters are completely overlapping, that would be more like the actual data. They would be completely separate scatter plots if it was comparing something like humans to algae or such. Even humans and elephants have a lot of overlap in their DNA, you'd have to get pretty different to have no overlap.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER3> This is basically a confirmation of Reich's and Paabo's 2010 work sequencing the Neanderthal genome. Interesting and totally consistent with their findings.

Also, for those of you who read this article, the Nick Patterson quoted in the article was, in another lifetime, a cryptologist: [http://query.nytimes.com/gst/fullpage.html?res=990DE6D81431F...](http://query.nytimes.com/gst/fullpage.html?res=990DE6D81431F931A25751C1A9609C8B63)

</comment><comment><USER6> Hopefully this is not exploited to "scientifically" explain the inferiority of sub-Saharan Africans vis-a-vis the rest of humanity.

One of the unfortunate side effects of the way that newspapers report on scientific research is that journalists' lack of knowledge of the subject matter leads to lots of vague statements that can be easily twisted around to have just about any desired meaning.

<comment><USER7> The equality of humanity is not an empirical judgement. It is a value judgement. It rests, not on scientific grounds, but on ideological grounds.

<comment><USER8> This is an empirical judgement: <http://kuvaton.com/kuvei/evolution5.jpg>

<comment><USER9> Feel free to google Great Zimbabwe, Old Ghana, Mwene Mutapa or Timbuktu. I could give you a tonne of other examples but your ignorance, I fear, is incurable. All the same, Rome != Europe, and Africa is not a fucking city. And how - what I presume to be a - German, interprets the feats of a culture whose development is only remotely connected to his own, is something beyond my African capacity to comprehend.

<comment><USER5> His argument is completely flawed. All areas surrounding the Mediterranean benefited greatly from being able to cover large distances by boat. This allowed trade to flourish and civilizations to prosper in this part. The fertile crescent was the hub of all this, you can trace the origin of European civilization to this point. You could simplify it and say that it went like this: Egypt, Greece, Rome and Europe. Meanwhile, there was a huge dessert isolating Sub-Saharan Africa. You have to keep in mind though that Timbuktu for example didn't spring out of nothing but thanks to Muslims from the North.

Other places were able to get their own civilization thanks to one reason or the other, e.g. Eastern China.

All that has to do with achievements of different societies. Now at the individual level, how do we know whether groups with Caucasian genes would have been able to develop a civilization if they had lived in a place with the same geography and conditions as Sub-Saharan Africans? We can't know.

What we know though is that the conditions are there now for individuals with predominantly Sub-Saharan ancestry to show what they are capable of. Eventually they'll produce someone like Mozart, Newton, Confucius, Sun Tzu, Jabir ibn Hayyan or Abbas ibn Firnas. Or maybe they won't. Perhaps too early to tell.

<comment><USER9> One of the points I was trying to make was, "Africa" as an entity does not exist, save for in Western and post-colonial Pan African texts. We do not see ourselves as African, identifying primarily as one of hundreds, maybe thousands, of distinct ethnolinguistic groups - tribes, if you will. I am a Luo. I only see myself as a Kenyan when I'm outside the country. African cultures - specifically Black African cultures - tend to have strong oral traditions that do not lend themselves well to transcription using Western templates for historical writing. In my tribe, there's a legend of a man known as Lwanda Magere, who conquered nations surrounding the Luo. This would be our equivalent of Alexander the Great. My guess is you've never heard of this, or the million other similar stories from Black Africa. The Mozart's of your world exist because you developed writing or borrowed it from close by civilizations. It's all about records.

>You have to keep in mind though that Timbuktu for example didn't spring out of nothing but thanks to Muslims from the North.

This would be like calling Sicilly an Arabic city. Timbuktu grew as a center of trade within Black Africa as a result of trade with the northern Arabic and Arabized Berber states. This does not make it any less valid as an example.

PS: May not look like it, but I largely agree with you.

<comment><USER10> Sicilly is not a city, is an island with a lot of cities. Before the Arabs even existed, Greek colonists founded Syracuse (which is around 2700 years old) the birth place of Archimedes.

</comment></comment></comment></comment></comment></comment></comment><comment><USER11> Brian Dunning did a Skeptoid episode about a related issue: 'Neanderthals in Present Day Asia'

<http://skeptoid.com/episodes/4040>

A snippet: _"Really quick history lesson on Neanderthals. They are not an ancestor of modern humans. Homo neanderthalensis is descended from a separate branch that split off from the evolutionary tree about 516,000 years ago, according to some research published in Nature. Mitochondrial DNA studies have shown conclusively that Homo neanderthalensis and Homo sapiens evolved separately. As the Cro-Magnon Homo sapiens moved in across Europe about 45,000 years ago, Homo neanderthalensis was pushed out into little corners of the world. The last known population died out in the vicinity of Gibraltar about 24,000 years ago, thus ending their approximately 300,000 year existence.

[...]

So now we've got a fair handle on the landscape of evidence in front of us, and now we can take a skeptical look at what we've got. Basically, nothing. We have some vaguely plausible hypotheses — yeah, I suppose it's possible that relic Neanderthals and Gigantopithecus or even some descendant of Paranthropus could survive in remote parts of Asia — but that's all we really have, a hypothesis. A hypothesis is a provisional explanation for these stories of wildmen in captivity and bearing children."_

</comment><comment><USER12> Apart from discussions on the quality of headline writers in popular and specialist scientific journals, I find it really interesting that the "out of Africa" hypothesis seems to need to merge with the multicentric model of human evolution.

Add to that the Denisova hominin sequencing (from the single toe bone that was thought to be Neandertal of a population that may have diverged from the African populations around 900kYA) and possible presence of up to a 4% admixture in Papuan and Melanesian populations.

It's exciting times to be interested in human evolution.

Remember that a 4% contribution is about what you might expect from a great- great grandparent (although we're talking whole populations here, not specific individuals).

My take home: the different clades of humans/hominins have been able to recognise enough of themselves in others that they were able to mix and interbreed. Early human prehistory wasn't just genocides and extinctions due to overspecialisation and ecological change. Awesome!

</comment><comment><USER13> Are Neanderthals extinct? Not totally. Neither are dinosaurs 1.

[1]<http://en.wikipedia.org/wiki/Bird>

</comment><comment><USER14> With this and other discoveries regarding Neanderthals in mind, does it still make sense to call them non-human in any meaningful sense? I would think the fact that we all interbred would be enough to knock down the species barrier, but I don't know for sure.

<comment><USER15> I've usually seen Neanderthals described as Homo sapiens Neanderthalensis, meaning that they are considered the same species.

</comment></comment><comment><USER16> Soooo... Africans are the only pure blood homo sapiens? Interesting.

I have a feeling a lot of supremacists groups are going to start making a point of how superior Neanderthals were soon enough.

<comment><USER17> Yes, and I imagine a large number of individuals, white supremacists or not, are going to do some mental gymnastics to reconcile this finding.

<comment><USER18> What mental gymnastics? We don't know what this DNA does, nor why it was useful in an evolutionary sense to keep it.

</comment></comment></comment><comment><USER19> Okay, then explain this: There is no fossil evidence of neanderthals in east asia or australia. There is a lot of fossil evidence of neanderthals in europe. If humans mated with neanderthals, then why is there no stronger presence of neanderthal DNA is europeans (compared to asians) in either this study or the previous one?

<comment><USER3> Nobody is suggesting that Neanderthals were in East Asia or Australia. The theory is that during the exodus from Africa, genetic exchange occurred.

<comment><USER19> Yes, but don't you get it? AFTER the exodus from Africa, the two populations were living in the same region (europe), but did not inter-mix at all anymore. Otherwise there would be more DNA in the europeans.

Why mix when in the middle east and then refuse to mix when in Europe?

<comment><USER3> I do not think that human history occurred the way you think it occurred.

<comment><USER19> How did it happen then? It appears you have no idea

</comment></comment></comment></comment></comment><comment><USER20> Even Neanderthal's have African roots,so i do not see why anyone is struggling to make distinctions

<comment><USER3> > Even Neanderthal's have African roots,so i do not see why anyone is > struggling to make distinctions

All life originated with a single common ancestor, but I still find distinctions to be useful. Neanderthals and humans were considered to be different species, so this is a fairly weighty finding. Anyway, making distinctions is perhaps the essence of being human.

<comment><USER21> I suspect that Neanderthals were smart enough and talented enough that we'd call them human and give them civil rights, today, if any were around. They mind be kinda odd, and incredible football players, but who knows.

</comment></comment></comment><comment><USER22> very interesting. I wonder if there are behavioral difference between Non- africans and Africans that can be attributed to the difference in genetic makeup.

</comment><comment><USER23> I heard rumors about this around 2005 but at the time nobody in the field wanted to say anything publicly for fear of being labeled 'racists'.

<comment><USER3> Small-scale sequencing studies in Neanderthal samples were occurring back in 2006, and were being published openly and discussed in the New York Times.

</comment></comment><comment><USER24> a w e s o m e

</comment><comment><USER25> Yeah, but only from their women.</comment>


Wish rumored to have rejected acquisition offers from Amazon and Alibaba - <AUTHOR> http://www.businessinsider.com/wish-rumored-to-reject-acquisition-offers-from-amazon-and-alibaba-2015-11 <comment><USER2> It seems to me that Amazon or any large e-commerce company could duplicate every aspect of Wish's business for a tiny fraction of the $10 billion they offered.

I have no personal knowledge, but I'm going to offer 3 theories on what's really going on:

(a) Perhaps Wish is undergoing exponential growth and there's no way Amazon can catch up if they did it themselves. This is why Microsoft paid a fortune to acquire Hotmail rather than just creating their own free email service. (The $400 million that Microsoft paid seemed absurdly crazy at the time. That's _million_ , not billion. How quaint the web was.)

(b) Not all decisions are driven by hard reasoning about money and numbers. Executives enjoy schmoozing, hobnobbing, and doing "big deals". Would you rather be the worker-bee executive who spends the next 2 years and $30 million creating a division that duplicates Wish's business model or be the bigwig who orchestrated a ten _billion_ dollar deal in 3 months? It's not your money after all.

(c) Accounting rules vastly favor investing in other companies rather than spending it internally. This is nicely explained in an old article by John Walker, founder of Autodesk:

 _" Many people think that because Autodesk has $140 million squirreled away, we can use that money free of constraints. But that isn't how it works. Regardless of how prudent you've been piling up money over the years, the moment you spend any of it in your business, it's just as if you increased your day to day operating budget. That means rising expenses without an increase in sales, and that translates into . . . falling margins.

About the only thing you can do with the money that doesn't cause margins to fall, other than giving it back in dividends, is investing it in other companies. When you make an investment, that's carried on the books as capital. As long as you don't have to write the investment off, it doesn't affect your operating results."_

Or maybe some combination of (a), (b), and (c) above.

<comment><USER3> Regarding (b), what happened to the executive obligation to maximize shareholder profits? It's not their money after all...

<comment><USER4> regarding a sense of obligation among the wealthy - whatever happened to that?

</comment></comment></comment><comment><USER5> Interesting, never heard of Wish before. Notwithstanding, pretty much a of fan of startups are built as a 'traditional' business (built with a view to longevity, little hype, not looking for a quick cash out or acquisition). It's a pretty bold move turning down Amazon. Amazon has the technical, market, and financial capital to squeeze them out [1]. The pinterest-like page dotted with curated items is a key differentiator, but seems to offer little advantage at best and an actual impediment to online shopping. It seems their main advantage will be relying on great curation channels and a close knit community with huge repeat purchasing.

[1] [http://www.slate.com/blogs/future_tense/2013/10/10/amazon_bo...](http://www.slate.com/blogs/future_tense/2013/10/10/amazon_book_how_jeff_bezos_went_thermonuclear_on_diapers_com.html)

</comment><comment><USER6> I've never heard of this company. It appears to be Alibaba with a slick interface and a focus on discounts. Their merchant platform basically lets merchants import their eBay or Alibaba et al stores. They don't actually stock anything - they depend on merchants to upload lists of things they want to sell and shipping takes a long time.

So I get the business model, and that it would be very simple . But the real question is...how did they get 100 million users with no press and seemingly no advertising? I would say that I smell BS, but the app has nearly 2 million _reviews_ on Android alone, and a very small percentage of people post reviews. So either these are fake, or the company pulled of the greatest growth hacks in history.

</comment><comment><USER7> Could somebody explain in short what exactly is Wish and what's so special about them?

My only encounter with them was when they were offering free $10 (or $20?) coupons as a sign-up bonus. Me and my friends signed up and stocked our hackerspace full with lots of cheap Chinese Arduino clones and, never returned to the site again. Based on their webiste, we actually thought it was a joke or some sort of scam, but risked it and then the packages started coming, so apparently it is legit. I only wonder how they are still alive after giving away so much free money.</comment>


Go 1.5 max procs default - <AUTHOR> https://golang.org/s/go15gomaxprocs <comment><USER2> Back when I was learning Go, I was astounded to learn that GOMAXPROCS was set to 1 by default. It didn't seem to make any sense to me given the nature of the claims of the language. Of course when I investigated why the default was 1 I learned the reasons why (which this article talks about), but it still left a bad taste in my mouth.

I'm glad that Go has matured to the point where this can be a historical footnote! Good work, Go team.

<comment><USER3> See also: Concurrency is not Parallelism [http://blog.golang.org/concurrency- is-not-parallelism](http://blog.golang.org/concurrency-is-not-parallelism)

You can still benefit from the "claims of the language", even if code isn't running in parallel.

<comment><USER4> A distinction without meaning is kind of dumb. In popular parlance parallelism and concurrency are approximately the same thing.

<comment><USER5> It does have meaning. An obvious difference is that you can have concurrency with one processor but not parallelism requires at least two.

<comment><USER6> > parallelism requires at least two

Interestingly there is one example of parallelism without concurrency and with just one processor and just one core - vector instructions. Although it would be a breathtakingly good compiler that could emit vector instructions to schedule two goroutines in parallel

</comment></comment></comment></comment></comment><comment><USER7> Strangely, on my computer, Firefox reports a security error on the site. No error in Chrome.

        An error occurred during a connection to golang.org.
        security library: DER encoded incorrectly formatted
        message. (Error code: sec_error_bad_der)

I didn't have this the last time I went on golang.org.

<comment><USER8> The cert includes a wildcard for *.google, which Firefox rejects because it's a wildcard on a top level domain. I can't really tell who's right here from the specs.

[https://bugzilla.mozilla.org/show_bug.cgi?id=1169149](https://bugzilla.mozilla.org/show_bug.cgi?id=1169149)

<comment><USER9> Good catch! The addition is for the new .google TLD.

Looks like the Chromium source code had some "protection" against this, at least at one point in time: [http://security.stackexchange.com/questions/6873/can-a- wildc...](http://security.stackexchange.com/questions/6873/can-a-wildcard-ssl- certificate-be-issued-for-a-second-level-domain)

It appears that the specification (RFC 2818?) doesn't specify what is acceptable with regards to allowed wildcard certificates - leaving the various implementations to decide what is "too risky" for themselves.

</comment></comment></comment><comment><USER10> This probably always should have been the default, since bumping GOMAXPROCS from 1 to N can reveal bugs.

<comment><USER11> Worth to note that they address this concern in a way in the doc:

 _> Correctness. There is one non-performance concern. Increased parallelism could make bugs in racy programs more likely to cause crashes or other problems. The setting of GOMAXPROCS=1 may have thus far let those bugs go undetected. Raising it may therefore make buggy programs less reliable. We hope that both the race detector and the introduction of goroutine preemption and interleaving in Go 1.1 has already helped programmers identify and eliminate many such bugs. In any event, we can't reasonably hobble the performance of working Go programs for fear of breaking buggy ones. If such buggy programs do turn up, the authors can set GOMAXPROCS=1 explicitly to keep them working until the bugs can be fixed._

<comment><USER12> As someone with little experience in Go, I'm curious: How do racy programs end up crashing? Do they just end up in some inconsistent state and panic or can you actually trigger a CPU fault?

<comment><USER13> Setting something to nil and then referencing it is a trivial race condition to create which can cause a crash.

<comment><USER12> Thanks for this response, and all the others. For some reason I had it in my head that Go's CSP concurrency model precluded sharing of that kind.

<comment><USER10> Golang's CSP _idiom_ precludes that sharing. The language itself was explicitly designed not to preclude it: if you know what you're doing (or, unfortunately, don't), you can easily design concurrent data structures using locks or atomic operations. Golang doesn't even cordon this stuff off as "unsafe"; like in most languages, shared mutable is the default.

That said: unlike, say, string counting idioms in C, the share-using-channel idiom in Golang is powerful, in the sense of: it's what most people reach for by default.

For a language as opinionated as Golang, it's extraordinarily pragmatic. It is designed first and foremost to be a tool, and then a lot of other things, before being a statement about how to design safe programs.

<comment><USER14> I don't actually know of a single language that has locks and atomics, but marks them unsafe. All languages I know of either have them and mark them safe and idiomatic (for example, Golang or Rust), or don't have them at all (for example, Erlang).

</comment></comment></comment></comment></comment></comment></comment><comment><USER15> > _We hope that both the race detector and the introduction of goroutine > preemption and interleaving in Go 1.1 has already helped programmers > identify and eliminate many such bugs._

I recall that it took me a while to discover the race detector when I started using Go. Now I always set GOMAXPROCS=runtime.NumCPU() and use the race detector.

[https://golang.org/doc/articles/race_detector.html](https://golang.org/doc/articles/race_detector.html)

</comment><comment><USER16> Go 1.5 is shaping to be a pretty major release! Definitely _feels_ more major than 1.3 and 1.4 were. Really happy it's progressing so nicely. Can't wait to see the GC improvements in 1.6+.

</comment><comment><USER17> Direct link for Firefox users since there is a certificate error: [https://docs.google.com/document/d/1At2Ls5_fhJQ59kDK2DFVhFu3...](https://docs.google.com/document/d/1At2Ls5_fhJQ59kDK2DFVhFu3g5mATSXqqV5QrxinasI/preview?sle=true)

</comment><comment><USER18> Firefox users use - [http://golang.org/s/go15gomaxprocs](http://golang.org/s/go15gomaxprocs)

</comment><comment><USER19> > we propose to change the default setting of GOMAXPROCS to the number of CPUs > available, as determined by runtime

That's what Erlang does, too.

</comment><comment><USER20> I hope that at least the standard libraries that come with Go are thread safe (?)

Do they test them on a regular basis, appropriately, with GOMAXPROCS > 1?

</comment><comment><USER21> My prediction is that it is going to reveal tons of bugs in libraries. They really should have defaulted it to 2.

<comment><USER22> Curious, why? Seems that anything over 1 would reveal the same bugs.

<comment><USER23> I'm interpreting the suggestion to mean that the original default with Go 1.0 should have been 2, because that is the lowest value (and thus would have the least of the the performance problems documented here) that would, as you say, reveal the same bugs. That way raising it to runtime.NumCPU wouldn't be a potentially breaking change.

Personally, I've found the issue to be documented well enough, and it is easy enough to set GOMAXPROCS to whatever works best for a given program, that I'm content with how the team has handled it. And I'm thrilled at the work that is being done now to fix the issue once and for all.

</comment></comment></comment><comment><USER24> I thought it was set to 1 CPU because that's the only way for Go to guarantee thread-safety. Is that fixed in 1.5, or does Google just choose to ignore that in this release due to the performance benefits?

<comment><USER25> No, that was one of the reasons for GOMAXPROCS=1 on App Engine, which is a hardened environment.

For your own code, we trust you to fix your races or deal with the consequences.

<comment><USER26> Does this mean that App Engine will never see it raised above 1?

<comment><AUTHOR> No.

</comment></comment></comment></comment><comment><USER27> Any updates regarding generics and error handling?

<comment><USER16> Yep! Confirmed in Go 1.6. Also - algebraic data types, monads, operator overloading, actors, STM, multiple inheritance, exceptions, LINQ, full opt-in dynamic typing, optional GC! Anything you want! _All_ language features, ever conceived, will be crammed into Go, starting with the next release!

<comment><USER28> No shit! I'm buying my ticket to Gophercon immediately

<comment><USER29> I just scanned registrations and don't see you there....</comment></comment></comment></comment>


DConf 2019 in London - <AUTHOR> https://dconf.org/2019/index.html <comment><USER2> Considering the development and pace of modern C++, where does D stick nowadays?

<comment><USER3> D has:

\- fast compilation times

\- a module system

\- famously powerful metaprogramming and compile-time introspection

\- a familiar, but not ugly syntax

\- comes with a package manager

\- simple-to-use build tools with dependency discovery

\- mostly-optional garbage collector (great for 90% projects!)

\- interfaces with C and C++

\- memory safe

C++ still has:

\- header files

\- a preprocessor

\- infamously hard-to-parse syntax

\- decades of legacy cruft

\- fun things like design-by-SFINAE

My biggest reason to use D is that it works great for both small scripts (one program can be one file and is ran with one command, or even a shebang), and large projects (with packages / dependencies etc.). Similarly, if idiomatic D is too slow, you can optimize it by going as low as C or inline assembler without having to call-out to a lower-level language.

Source: using D for almost everything since 2006, while also maintaining a few C++ projects.

<comment><USER2> The issue with D, I guess, how do you find gigs? :)

</comment></comment></comment><comment><USER4> How do D and Rust stack up against each other? Both seem to quite attractive as next generation compiled languages.

<comment><USER5> Rust achieves memory safety without a tracing GC. D has traditionally relied on the GC for that, but now there's [DIP1000]([https://github.com/dlang/DIPs/blob/master/DIPs/DIP1000.md](https://github.com/dlang/DIPs/blob/master/DIPs/DIP1000.md)). D can however be used without a GC if needed.

Rust has macros, which D doesn't, but D's metaprogramming is superior.

They're both fine choices.

<comment><USER6> > D can however be used without a GC if needed

Honest question: is it the case in practice though? Last time I checked D, you could disable the GC in theory, but in practice many things would fail to work, most importantly their standard library. As this been fixed since then?

<comment><USER5> Yes, it's the case in practice: I've written a lot of @nogc code. Some parts of the standard library require the GC, but not all of it, and the parts that I usually use are fine (std.algorithm, std.range, ...).

Since allocators landed, it's been a lot easier, and I've written a library that does C++-style smart pointers for D:

[https://github.com/atilaneves/automem](https://github.com/atilaneves/automem)

</comment></comment></comment></comment><comment><USER7> Is D being used/backed by a major software company or a major open source initiative? Looking at the trends so far, seems like it takes the backing of a giant for a programming language to succeed.

<comment><USER8> [https://dlang.org/orgs-using-d.html](https://dlang.org/orgs-using-d.html)

Sociomantic, Symmetry and Weka.IO are large very heavy users. Symmetry has supported development with an "Autumn of Code". The backing is much more diverse and its been that way for a long time.

Disclaimer: I contract to Symmetry.

</comment></comment><comment><USER9> Is the pricing here normal for conferences? I've only attended a few and 300 GBP seems quite excessive to me.

<comment><USER10> Yes, 300GBP is typical for a tech conference in London. Cost of venues and catering can be astronomical, so even with that ticket price it may be difficult to run a conference.

Some community conferences are half of that (and depend on sponsorships), but OTOH there are also plenty of "serious business" conferences that are 10x more expensive.

<comment><USER11> Is catering a big portion of the ticket price? Surely one can venture outside to nearest starbucks, pret, other-fancy-coffee-shop-5metres-away, and dozens of other eateries? Or the food delivery service apps. I'd be pissed off if shitty non-choice catering was going to eat into the ticket price more than 15gbp. Sponsors pay the booze after usually. So what's left after speakers, token tickets, and venue fees?

<comment> black-tea The point of the catering isn't just to fill your stomach, it's to have lunch with people who are interested in what you are interested in, ie. to network. If you don't see the point of that, then yeah it's really not going to be worth it for you.

<comment><USER11> I've been to a few regional conferences so perhaps out of touch, but in those scenarios it's usually either yawn yawn buffet or in most cases a bag with some posh sandwich etc.. in with sponsor logos all over it. I get what you're saying but I can't help but start picturing a table cloth lunch with waiter service as you discuss the merits of the last talk over a fine wine on a table for two/three? perhaps this happens at build? strangeloop?aws:invent? How much of a ticket price is attributed to catering in either scenario?</comment></comment></comment></comment></comment>


Cassandra: Daughter of Dynamo and BigTable - <AUTHOR> http://www.insightdataengineering.com/blog/cass.html

<comment><USER2> What's interesting to note is that Dynamo/Cassandra usage was killed at both Amazon and Facebook (DynamoDB from AWS is actually not based on Dynamo tech except in terms of what not to do).

[1] - [https://www.facebook.com/notes/facebook-engineering/the- unde...](https://www.facebook.com/notes/facebook-engineering/the-underlying- technology-of-messages/454991608919)

edit: Added link to facebook post on hbase vs cassandra

<comment><USER3> Damien Katz (one of my cofounders at Couchbase and therefore has a dog in the fight) wrote this take-down of the Dynamo model, for folks wondering why?

[http://damienkatz.net/2013/05/dynamo_sure_works_hard.html](http://damienkatz.net/2013/05/dynamo_sure_works_hard.html)

TLDR quote:

 _The Dynamo system is a design that treats the probability of a network switch failure as having the same probability of machine failure, and pays the cost with every single read. This is madness. Expensive madness._

<comment><USER4> I don't agree with his fundamental premise:

> Network Partitions are Rare, Server Failures are Not

Network partitions happen _all the time_. Sure, the whole "a switch failed and that piece of the network isn't there anymore" doesn't happen a lot, but what _does_ happen a lot is a slow or delayed connection, or a machine going offline for a few seconds.

<comment><USER3> Our customers tend to be the kind who need extreme performance, so they aren't spanning cluster across WANs. For well-tuned datacenters rack awareness (putting the replicas in sane places), is more useful.

For WAN replication we have a cross-datacenter replication which works on an AP model.

<comment><USER4> To be clear, I was in no way making a judgement about CouchDB vs. Cassandra. I've only give Couch a cursory glance so I wouldn't be qualified to make such a judgement.

I was simply trying to point out that while you may have a very good argument as to why Couch is better, the network partition argument is not sound, and you may want to look for a better argument to make.

I'm personally against single masters because they are SPOFs. With a master, at some point there needs to be a single arbiter of truth, and if that is unavailable, then the system is unavailable.

<comment><USER5> A nitpick, but an important one which I wish the Couchbase folks wouldn't let slip as often as they do, CouchDB has very different properties from Couchbase and should be considered entirely different database designs regardless of the availability of a sync gateway for replication with a number of JSON stores.

<comment><USER3> Different database designs, but similar document model. In fact, Couchbase Sync Gateway is capable of syncing between Couchbase Server and Apache CouchDB. Also our iOS, Android, and .NET libraries can sync with CouchDB and PouchDB. Everything open source, of course. More info: [http://developer.couchbase.com/mobile/](http://developer.couchbase.com/mobile/)

<comment><USER5> It's not that it can sync, nor the data model.

It's that these are fundamentally very different databases with different trade offs. You can't just take one and adjust some API calls and expect things to work in a similar way. It only confuses people when it's quietly ignored and others assume that since it wasn't pointed out to be wrong that it must be the same thing.

I've had far too many conversations with people who use Couchbase that can't tell the difference that I would say that it's just general confusion. It's lax work on Couchbase's part and a thorn in the Apache CouchDB project that there is no effort to help clarify the fact that they are indeed independent and now very different databases.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER6> Cassandra is a pretty good NoSQL database. I'm a big fan of it.

Of course if your data change often and very quickly you shouldn't be using Cassandra. You'll end up tombstone death. Deletes are not real delete, they're soft and just have a timestamp that eventually will be deleted (tombstone). Every delete creates a tombstone, if you're hashkey/column key have 50 tombstones, it have to go through those tombstones before getting the values. The reason is some trade off for faster write but shitty read if you update a lot of the same key.

Overall, one way of thinking of it is a souped up hashkey db that can do some relational queries which is much more than the usual hash key noSQL. Seeing how it's a hash key type database you can see the trade off of Cassandra and it's siblings versus say MongoDB or CouchDB.

I used it for time related stuff that has simple data. It's mostly immuatable so cassandra was perfect for it. Example is a daily tv show release date.

<comment><USER7> Increasing the size of memtables should reduce the tombestone overhead since entries will get overwritten in memory.

</comment></comment><comment><USER8> Sometimes I feel that the Cassandra row length limit is not taken seriously enough. If you have some high frequency data it will not take too long until you hit the limit. Also, the guide states that you should not really attempt to get it that far. I'm not sure if schemes like the one in the example are future-proof. In a couple of years developers will start hitting the limit and we'll see mailing lists with postmortems :) . A bit apocalyptic, but I believe we should find an idiomatic solution for it. I use rounded time periods as a part of the partition key. Yes, it makes the data a bit more complicated to query, but I have not thought about a better solutions.

Time series databases like KairosDB are quite good, but for simpler data structures and something describable as a metric. Also you may face issues introducing relatively less known software, and get locked in, in your company.

</comment><comment> dimi-31 Pretty interesting read, the concept of tunable consistency was foreign to me, keep on the good work !

<comment><USER9> Riak has the same sort of concept: [http://docs.basho.com/riak/latest/theory/concepts/Eventual-C...](http://docs.basho.com/riak/latest/theory/concepts/Eventual- Consistency/)

I think Riak is richer in this area than Cassandra, because if the inconstancy can not be resolved, Riak can keep both versions and let you deal with it at the application level.

See also: [https://aphyr.com/posts/294-call-me-maybe- cassandra](https://aphyr.com/posts/294-call-me-maybe-cassandra)

</comment></comment><comment><USER10> Article isn't loading.</comment>


Full Speed Ahead with HTTP/2 on Google Cloud Platform - <AUTHOR> http://googlecloudplatform.blogspot.com/2015/10/Full-Speed-Ahead-with-HTTP2-on-Google-Cloud-Platform.html <comment><USER2> Isn't one of the big performance advantages of HTTP2 multiplexing/Server Push? It'd be nice if they spent some time talking about how to take advantage of those improvements on their platform.

Inside my request handler, I ought to be able to say "If you're on HTTP2, push out these files:" and have AppEngine behave accordingly.

<comment><USER3> multiplexing should be automatic, but prioritization and push are different, obviously. Ilya Grigorik just tweeted[1] this project[2] for server push on app engine.

[1] [https://twitter.com/igrigorik/status/652267370241654784](https://twitter.com/igrigorik/status/652267370241654784)

[2] [https://github.com/GoogleChrome/http2push- gae](https://github.com/GoogleChrome/http2push-gae)

<comment><USER4> Yep! One thing to note, the header is likely to change at some point from X-Associated-Content to the emerging link preload standard (in-progress spec: [https://w3c.github.io/preload/](https://w3c.github.io/preload/) )

</comment></comment></comment><comment><USER5> still no support on cloudfront or elb on aws

<comment><USER6> Challenge for anyone supporting SPDY today (which has a lot more users) is HTTP/2 and SPDY are somewhat incompatible, so you have to choose.

<comment><USER7> Isn't SPDY deprecated for HTTP/2 though?

<comment><USER8> Yes. Even if they support SPDY it will be quite useful - [http://caniuse.com/#search=spdy](http://caniuse.com/#search=spdy)</comment></comment></comment></comment>


Instacart shoppers besieged by bots that snatch lucrative orders - <AUTHOR> https://www.seattletimes.com/business/instacart-shoppers-besieged-by-bots-that-snatch-lucrative-orders/ <comment><USER3> When I was in college 10 years ago I did Amazon's Mechanical Turk to pay my way through. One of the things I did to make my life less miserable was to automate a lot of the searching, sifting, and grabbing of jobs (hits.) Bot would only accept jobs that fit my specified time/money ratio, or known hits that paid well and predictably.

Having the experience of using these "gig" side jobs I don't think there's anything wrong with people automating them to make the work less miserable and more lucrative. Frankly, anything but the best paying jobs cost more to do per hour than a federal minimum wage job. Thanks to automation I made around $16/hour (and I also had to pay taxes on that so it wasn't even that good!)

Don't hate the player, hate the game. And the game here is cutthroat and designed to exploit 1099 workers for below market labor cost.

<comment><USER4> If there was an alternative, higher wage they would pick that. This is the market labor cost.

<comment><USER5> "below market" because Instacart (and uber, etc) forgo normal labor law, have by-default but not by-contract full-time workers without any full-time benefits. Companies can achieve great benefit by externalizing cost on society, but should they? (And should they be able to?)

e.g. [https://www.forbes.com/sites/ebauer/2019/12/16/is-uber- cheat...](https://www.forbes.com/sites/ebauer/2019/12/16/is-uber-cheating-on- social-securityfica-taxes/#5289694a3ce4) [https://www.forbes.com/sites/clareoconnor/2014/04/15/report-...](https://www.forbes.com/sites/clareoconnor/2014/04/15/report- walmart-workers-cost-taxpayers-6-2-billion-in-public-assistance/#4e9896de720b)

<comment><USER6> Free market idealists think the market can determine the minimum wage without government or organized labor enforcing higher wages.

<comment><USER7> Free market idealists also tend to be very against the natural way for workers to consolidate and leverage negotiation power: trade unions.

<comment><USER8> Not exactly. We are against the way unions are implemented and make work not a free market. I'm not against your union so longs as I can decide not to join and still have equal work with you.

<comment><USER9> What is a corporation but a union of capitalists? Why must only the owners be allowed to unite for better outcomes?

<comment><USER8> There is no difference. I shouldn't have to join either a union or a company.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER10> > _some shoppers are paying software developers who have created bots — in the > form of third-party apps — that run alongside the legitimate Instacart app > and claim the best orders for clients_

Instacart is a real-time market. In real-time markets reaction time is paramount. "Cranking up pressure against app makers and banning violators when they find them" is swimming up a waterfall.

The solution is in the market structure. Fundamentally, Instacart needs to shift to batch processing.

This could take several forms. They could, on order submission, open a 60-second auction window. The best qualifying bid wins. Bids, mind you, could come in dollars or time to delivery or something else. Alternatively, shoppers could set orders parameters within which they guarantee acceptance. Orders could then be randomly assigned to online shoppers, perhaps with a bias towards ratings and other metrics.

Either way, a real-time market, where the first shopper to accept an order, seems under-optimised.

> _cost of the third-party apps ranges from $250 to $600 in cryptocurrency or > bank deposits_

Instagram should acquire the differentiated apps and integrate them into its routing.

Showing every order to every shopper is inefficient. Some of these bots will just click on every order every shopper would find attractive. Those are zero sum. But some, I assume, help shoppers pick orders uniquely suited to them. Those are positive sum, and worth integrating into Instacart _per se_.

Fascinating stuff, nevertheless.

<comment><USER11> What you're working up to is a reverse auction for delivery service. Who is willing to do a batch of deliveries for the least price? Constrained time TSP+Knapsack, a very challenging problem. (Because you can choose many different subsets of delivery jobs, run TSP for each, and calculate a bid price for each job that will win, or if you don't, minimises regret.)

The real problem with instacart is that some orders are better than others. If the delivery fee reflected the real costs then this wouldn't be such a problem.

EDIT s/your/you're. I swear my phone's predictive text is getting antagonistic.

<comment><USER12> > The real problem with instacart is that some orders are better than others.

You don't need to eliminate differences to fix the problem - simply minimize them enough that it isn't worth building or buying a bot to give yourself an edge.

A simple solution would be to look at how quickly each order is snatched up, and reduce the price paid for orders that some AI decides will probably be snatched up quickly. I bet some simple linear model consisting of total travel distance, weight, number of unique items, and dollar value would suffice.

</comment></comment></comment><comment><USER13> Reminds me of working at amazon doing prime deliveries and using an Android app where you can create flow charts to automate grabbing hours. The difference is amazon at the time didn't care. We even reported what we were doing as a bug, and recommended a queue system instead, yet we only got automated responses not mentioning the issue at all.

This automation included an annoying screen refresh, where you hit back and then reenter to see if the button is lit up to get hours. I remember feeling terrible sitting in the warehouse waiting for an order and seeing others clicking back and forth as fast as they can the entire time, all while my phone was silently, with the screen disabled, 'scanning' for hours.

I think they consider the warehouse drivers like what I used to do temporary, till they get their drone fleets up.

Regarding instacart, and these systems in general, a queue system is just the most fair option. Your take home pay shouldn't be reduced to how well you can click a touch screen or whether you happen to be aware of app automation. It doesn't even seem to benefit the platform itself, just degrade the experience of the driver's.

<comment><USER14> >I think they consider the warehouse drivers like what I used to do temporary, till they get their drone fleets up.

Why even bother with drones when you can pay a person $8/HR with zero benefits thanks to collusion with lawmakers to bust unions and stall the minimum wage?

<comment><USER15> Drones likely will be cheaper than that because of improved quality- fewer errors, faster, better tracking, less fuel, etc.

Same deal with fast food workers who make minimum wage. Automation will improve quality even though people are so cheap. Being able to perfectly make tacos or big macs or whatnot and remove scheduling challenges will be a plus.

</comment></comment></comment><comment><USER16> I'm a software developer who has been enthusiastic about technology pretty much my entire life, but lately I've started doubting that our current technological advances are even a net positive for humanity. Reading about things like this (and also about online ads, robocalls, tracking, spyware, ransomware, extortionware, massive environment-ravaging crypto-mining ops, state surveillance, "predictive policing", fake news, state-coordinated FUD campaigns, etc.) makes me want to give it all up and live out what remains of my life in subsistence on a primitive farm.

<comment><USER17> Then, you will learn about the plight of the farmers. Really, checkout "Super Size Me 2". I don't think there is any industry where its all gravy. Each industry has its own problems, you can only do your best to contribute in its positive growth. Don't be too hard on yourself. Also, you aren't Ghandi (or insert XYZ person here), don't put too much weight on your shoulders. FWIW none of us really matter, this is a symptom of how North American companies operate. Survival of the fittest. I went through deep depression for similar reasons, so hoping some tough love helps you.

<comment><USER18> I suspect you're conflating/confusing subsistence farming with industrial "farming". As someone who has lived a "subsistence" lifestyle for a long time, now (decades) one can live really quite well on a "sub-poverty-level income" simply because you're quite decoupled from conventional-money economies. I've heard it called "abundance poverty" (not "abundant poverty", to be sure! :) )

It's worth a disclaimer, though: I practise this subsistence (aka "self- sufficiency") living outside the USA. USmmv.

</comment></comment></comment><comment><USER19> I'm going to go out on a limb and guess that this is only possible on Android, right? The video linked by ultimoo shows an Android, and my perception is that iOS sandboxing is much tighter.

How can Instacart combat this? They can't require iOS among their shoppers. Is it going to be an arms race of heuristics and anti-cheat code like it is for games that want to prevent aim-bots?

Or they could start running their own algorithm on the back-end, release juicy batches first to shoppers that haven't gotten a good one recently.

<comment><USER20> Smaller teams than Instacart have put up effective fights against cheating. It's an arms race, but so what? The goal is to make cheating uneconomical, not impossible.

<comment><USER19> There's always some cost to having to implement countermeasures.

In games, I've seen seen poorly-implemented anti-cheat software kick or ban legitimate players from their games.

A sibling comment mentioned captchas. That would suck for legitimate Instacart shoppers. Imagine frantically looking for each photo that has a stop sign in it, knowing that the orders you're trying to claim could be snatched up by someone who's a faster captcha solver.

Somehow there's always a cost when bots start to wage war against other bots. Sure, they can figure out how to minimize it for the human, while making it uneconomical for the bots to exist.

I guess I'm just curious how they're going to do that. Because I can already see the blog post now: "Instacart Banned Me for No Reason"

</comment></comment></comment><comment><USER21> I think this could be fixed by making each job be posted for a fixed block of time, say five minutes. Then it is randomly assigned to one of the shoppers that selected that job. This would remove the incentive around reaction speed and I don't think the customer would care about the slightly increased time for an order.

<comment><USER22> I was here to say the same thing. But you don't even need to extend the time frame to five minutes to defeat the bots. Lisa Marsh, in the article, complained "no human can click that fast." I bet she only needs 10-15 seconds to assess an order.

Not for nothing, this is the same mechanism by which the "unfair" advantages of HFT practitioners can be defeated. Run mini-auctions every whole second and randomly allocate fills if there are ties for best bid and/or best offer.

Of course, as long as the exchanges deeply care about vanity metrics such as trading volume (trading volume !== liquidity) such measures will never be broadly enacted.

</comment></comment><comment><USER23> No clue what Instacart shoppers do. What makes the orders lucrative/better? Is it high dollar orders, or multiple orders at the same grocery store, or is the tip pre-published, or what's the criteria when looking for orders to fulfill?

<comment><USER24> Lucrative orders are mispriced orders, no ifs and buts. That's how efficient markets work.

<comment><USER25> Instacart customers should be paying more for long trips and bulky items and short deadlines. Clarke once observed that "In orbit, caviar is cheaper than bread."

Paying them more for _valuable_ items only makes sense if the service includes preventing heists.

</comment></comment></comment><comment><USER26> Is there a reason why instacart even allows you to pick orders? It seems like this exploit can be stopped just by only letting shoppers look at the first few items of the queue, and limiting the amount of skips.

<comment><USER27> That could be construed as Instacart assigning orders to their shoppers which would likely make them employees eligible for benefits, something they want to avoid at all costs. This may already be the case in CA regardless of what they do, but they definitely want to avoid paying any benefits for their workers in any state where this is not yet currently the case.

<comment><USER28> Definitely this. They don't care who gets the orders as long as they're gotten, and assigning the work to people rather than letting people pick from a pool makes them look more like an employer/dispatcher rather than a broker.

</comment></comment></comment><comment><USER29> Maybe the best strategy is to tip low when placing the order, then increase the tip after delivery to reward the guy who needed the money enough to take your order with a low tip.

<comment><USER30> Then you'd also incentivize workers to take orders with low tips and be disappointed when they really get a low tip.

Seems more fair to me to require the company pay their employees a fair wage and benefits rather than redefine those that work for them as contractors to dodge those obligations.

<comment><USER31> Most people who accept a low tip order would not be expecting to get any more than what was there

</comment></comment></comment><comment><USER32> The bots aren't snatching the orders.

Other shoppers, competing for the same business, are using software programs to compete more effectively and efficiently.

This is not an exploit. Access to deal flow is first-come, first-served.

</comment><comment><USER33> I was curious what these actually looked like in the wild and what Instacart shoppers thought. Here's some shoppers discussing bots:

[https://www.reddit.com/r/InstacartShoppers/comments/gshom2/h...](https://www.reddit.com/r/InstacartShoppers/comments/gshom2/here_is_the_bot_saw_someone_say_they_bought_it_in/)

[https://www.reddit.com/r/InstacartShoppers/comments/fagva2/d...](https://www.reddit.com/r/InstacartShoppers/comments/fagva2/does_anyone_use_an_auto_click_tool_of_some_kind/)

[https://www.reddit.com/r/software/comments/7mfxmh/a_good_fre...](https://www.reddit.com/r/software/comments/7mfxmh/a_good_free_autoclicker_program/)

The most commonly-mentioned example is "MurGee Auto Clicker" (a simple form clicker: [https://www.murgee.com/auto- clicker/tutorial/](https://www.murgee.com/auto-clicker/tutorial/)) and miscellaneous Android form clickers.

</comment><comment><USER34> A company offering technological innovation to gain advantages in a market is going to ban shoppers who use technological innovation to gain advantages in their internal market?

There's obviously competition among shoppers. The argument presented in this article is that those with technological advantages aren't acting fairly, but considering the dynamics of the shoppers' market, I would argue that they are not only acting fairly but are introducing what can be the next phase of innovation for the entire business. Instacart may have explored instant match in the past but found issues with it. Rather than drop it entirely, maybe they ought to revive the idea but refine it in consideration of what sniping is accomplishing.

</comment><comment><USER35> I had come across a video couple of months ago showing this in action. Captcha was mentioned a few times on the thread. [https://www.youtube.com/watch?v=nwCh4rtAOWc](https://www.youtube.com/watch?v=nwCh4rtAOWc)

<comment><USER26> I love how the kneejerk reaction to any bot problem is "captchas". I'm not sure how that would even help. If there are 20 jobs available, and 3 of them are high paying, having a bot sort through the list for you still gives you an advantage. Sure, it's better than having someone claim all 3 of them at the same time, but you can achive the same effect by having a cooldown of 5 seconds (enforced server side). Also, with a cooldown, you can't get an advantage (eg. entering a captcha faster with keyboard)

</comment></comment><comment><USER36> Instacart could wipe away this feature in one afternoon if they wanted.

</comment><comment><USER37> Seems like a solution for eliminating automation could be to make such services only accessible through an [iOS] app, perhaps by requiring Face ID verification on accepting an order.

</comment><comment><USER38> > When Marsh opens her Instacart shopping app, she sees promising orders > disappear before she can act. "No human can click that fast," she said. > "Instacart needs to fix this. These bots are literally taking the food off > my kids' table."

While I understand the wish to get the best/any batch, this is significant exaggeration. If your kids food depends on getting the batches from the website, then you have much larger problem than bots.

<comment><USER39> In related news, lions have sued that the invention of spears by early tribes makes it significantly more difficult to hunt humans and it's taking food off their cubs' table.

This sounds very much like ordinary competition that any self-employed person would have to deal with. If I insist on using assembler to make websites for clients while my competitors use Rails, it's not a secret who is going to do better in the long run.

</comment></comment><comment><USER40> Uber handles this by not letting drivers know the destination before they arrive for pickup. Can't instacart offer the same functionality? Like you see the order, shop location, but do not see the amount and other "lucrativity" info. And there is a penalty for cancelling after you accepted.

</comment><comment><USER41> This has been happening for some time now, unfortunately, IC doesn't give af b/c the orders are still fulfilled. In the 4 sided marketplace they balance, usually the shopper experience ranks last in priorities, like in all gig economy apps

</comment><comment><USER42> This strikes me as unethical.

<comment><USER43> What is unethical to you? Is it the competition that is bad or is using technology to compete the bad thing?

</comment></comment><comment><USER44> Any system - or market - sophisticated enough will see the emergence of bots as the ultimate decision makers/arbitration players. It's quite fascinating.

<comment><USER45> My groceries are delivered by employees (either of the chain or of the postal service, and on rare occasions, of DPD). No need to hate the player when one simply avoids the precariat game.

</comment></comment><comment><USER46> Wow saw that video, maybe someone got into their API?

What if someone from a non-USA location started selling access to the best batches in prime USA locations e.g. SF/LA/SEA/NYC/DC then we could start trading and packaging up those batches and trading on them in crypto exchanges, maybe even make a new coin?

Also having someone put in a SSN is not any kind of verification if you're trying to subcontract out to people not in the country legally/documented. The ssn algorithm is known and it is easy to generate, it just don't get fixed because politics.

Maybe we have finally found a decent use for eth?

<comment><USER26> >e.g. SF/LA/SEA/NYC/DC then we could start trading and packaging up those batches and trading on them in crypto exchanges, maybe even make a new coin?

In that case you might as well make claiming orders be based on a dutch auction system.

<comment><USER47> And without ETH. Just with, you know, a server. With a dutch auction.

</comment></comment></comment><comment><USER48> I stopped using Instacart years ago. My reasons were:

1) Shoppers would ring your phone for less than a second, ghost you and then show up with random replacements you never approved.

2) They would fail to deliver on time, then unilaterally reschedule a delivery for another time when I was not even going to be home.

3) Amazon Fresh and Prime Now are far superior services. Amazon Fresh has gotten slightly worse in the last couple of years, but it is still far better than Instacart.

Has the service improved lately? Should I use Instacart in 2020?

</comment><comment><USER49> The last paragraph of this is heartbreaking.

</comment><comment><USER50> [https://archive.is/2TgtR](https://archive.is/2TgtR)

</comment><comment><USER51> One solution is to make the contracts more even? Or allow some automated auctioning process.

</comment><comment><USER52> .app is great for giving official-sounding domain names to scammers. Way to go, Google.

Eventually more .app domains will be squatted, the price will go up, and companies will buy domains proactively (like instashopper.app - <USER2> is obvious shorthand for Instacart Shopper, the official term) but not before a lot of unethical enterprises take advantage of it.

</comment><comment><USER53> lf these shoppers are really just "independent contractors" participating in Instacart's open market then Instacart is completely failing as a market maker.

</comment><comment><USER54> i couldn't view this site, anyone have a mirror link?

</comment><comment><USER55> Article also at [https://www.seattletimes.com/business/instacart-shoppers- bes...](https://www.seattletimes.com/business/instacart-shoppers-besieged-by- bots-that-snatch-lucrative-orders/)

<comment><USER56> Ok, we'll change to that from [https://www.bloomberg.com/news/articles/2020-07-31/instacart...](https://www.bloomberg.com/news/articles/2020-07-31/instacart- shoppers-besieged-by-bots-that-snatch-lucrative-orders) on the assumption that more people can read it. Thanks!</comment></comment>


Ask HN: Best Git GUI For Windows? - <AUTHOR> At work all of our computers are Macs, so I've been using SourceTree (and before that, Tower). I run Windows at home, however, and haven't really found a good git GUI. I guess I'm happiest with SmartGit, but nothing really has the same slickness as SourceTree.<p>Are there any better clients out there that I don't know about? Are there any in alpha/beta that I could maybe test with? <comment><USER2> TortoiseGit is probably the best choice. It's low-friction, integrates well with Explorer and with PuTTY, and makes it painless to drop into the command line and invoke git manually when you need to.

In particular, TortoiseGit offers excellent UI for commit, revert, log/reflog, merging, and patch management. It also has some built in UI for Git-SVN if you use that.

The Windows GitHub client is shaping up nicely if you use GitHub but it's still in beta and super unstable.

<comment><USER3> TortoiseGit gets a little funky with the shell icon overlays on Windows 7-- don't expect them to always tell you the truth, the whole truth and nothing but the truth ([http://stackoverflow.com/questions/1057734/tortoisesvn- icons...](http://stackoverflow.com/questions/1057734/tortoisesvn-icons-not- showing-up-under-windows-7)). It's also heavily biased toward SVN users, which will make some of the terminology confusing if you don't come from that background.

For my own workflow I prefer the command line, but GitExtensions (<http://code.google.com/p/gitextensions/>) is my go-to when I need a GUI (or more often, when I need to show a manager that there are, in fact, GUIs available).

</comment></comment><comment><USER4> <http://code.google.com/p/gitextensions/>

<comment><USER5> Definitely git extensions. I tried both. In fact, I came from Tortoise SVN and found Tortoise Git to be terrible. I was just barely learning git at the same time. Everything finally clicked for me when I used Tortoise Git.

</comment></comment><comment><USER6> I like the native git gui that comes with the default windows git install. It's simple but does 95% of what I need it to. Command line for the oddities.

</comment><comment><USER7> Tortoise git is the windows git gui of choice at our work and is the one I recommend to install for our clients who use windows. Haven't tried any others though.

Since I know the command line client best, I always install msysgit first, set up ssh keys in "git bash" using ssh-keygen and then install tortoise git. Warning, if you use msysgit, make sure to _not_ use the "plink" ssh that is installed with tortoise but use the msysgit one. That setup has had the least issues for us.

</comment><comment><USER8> My best experience so far has been with a combination of SmartGit and TortoiseGit. SmartGit doesn't have interactive rebase and doesn't allow you to specify refspec when pushing. I've had to use the former occasionally and I use the latter all the time, because we work with Gerrit.

Of course, you could throw TortoiseGit out of this whole story if you don't need that kind of stuff or if you're comfortable with using command line for certain details.

</comment><comment><USER9> This might sound like a ugly workaround, but since I'm stuck with a windows- only compiler/IDE at work, I resorted to have my files put on a linux-machine and exported via samba to the windows computer.

I run git (and texteditor, scripts, ...) on said machine and the IDE is more or less only used for it's "Build" button.

</comment><comment><USER10> We use Plastic SCM as our UI and repo, but I hear it can connect to git (somewhat) seamlessly. The interface is very slick, and the user experience is great when you use the Plastic Repo, not sure how it translates when pulling from git though.

</comment><comment><USER11> While I haven't used a Git client on Windows (I'm on a Mac), my cofounder still uses Windows and seems to be happy with TortoiseGit (<http://code.google.com/p/tortoisegit/>)

</comment><comment><USER12> Used to use SmartGit at my last job and that generally worked pretty well. New places uses svn :( so have got familiar with TortoiseSVN, which works pretty well, so would imagine TortoiseGit would also be a good choice.

</comment><comment><USER13> A little late to the party, but I've briefly used and liked SmartGit (<http://www.syntevo.com/smartgit/index.html>).

</comment><comment><AUTHOR> If anyone in the future comes across this, there's the new Github for Windows client - <http://windows.github.com>

</comment><comment><USER14> I can recommend TortoiseGit, it's pretty good as far as I can tell. However, I still prefer the CLI for most tasks because it's just more flexible :)

</comment><comment><USER15> I have used Eclipse's EGit, and it really works great !!

<comment><USER16> It does/did have a problem with remote pushes though...has that been fixed?</comment></comment>


Federal courts now accepting cryptocurrency for bail - <AUTHOR> https://padailypost.com/2018/08/15/federal-courts-now-accepting-cryptocurrency-for-bail/ <comment><USER2> Truth is stranger than fiction

<comment><USER3> No joke. Back in 2008 when I released from federal prison, I asked my PO if I could start mining Bitcoin and he didn't want me to get involved with it due to its ties with criminal activities. I was so angry at him for a long time. I should have done it anyways and been rich now.</comment></comment>


Armed Militias Are Taking Trump's Civil War Tweets Seriously - <AUTHOR> https://www.lawfareblog.com/armed-militias-are-taking-trumps-civil-war-tweets-seriously <comment><USER2> I've been reading a lot lately about the world war 1 to World War 2 period and all the civil wars and revolutions. One question I'm trying to figure out is "why communism?"

I think the answer is simply that those nations wanted a revolution, and communism was who provided it at the time. In the interwar years, it was also fascism. In napoleons time, it was democracy. Most of them also involved nationalism and self governance.

Today, the closest thing I see is right wing protectionism, anti-foreigner policies, and authoritarianism (not much militarism though). The KKK is back for example. I don't think that people especially want that future, but they are the main game in town for people who want the current order to be shaken up

There is potential for some nastiness in the next couple of decades if the trend continues

Edited for clarity

<comment><AUTHOR> does anyone feel like they have a plan for responding to these risks? i see the possibility of nastiness, but the only idea i have is to move away. is there a more helpful response available?

<comment><USER2> I think that people's grievances just need to be addressed, and it's almost entirely about increasing poverty (with the rest being a matter of blaming somebody for it).

Helping people to thrive better with today's economy would go a long way

<comment><USER3> I think your apparently non controversial answer is spot on. However the idea that people are getting poorer is a highly contrarian position.

<comment><USER4> It doesn't matter if people are getting poorer, it matters if they _think_ they're getting poorer. By most metrics, people are better off now than they used to be, but what matters is whether they _feel_ like they're better off, and income inequality is one way people _feel_ they're worse off than before.

However, I don't think that's what's fuelling current sentiments from the right. I think it's more a feeling of "everyone is against you", stemming from a distrust of mainstream media (mentioned in the article) and assumptions about mainstream media heavily influencing politics. Also, the current crop of Democratic candidates are more socialist (I'm using that term in the current "Democratic Socialist" vernacular) than ever before.

I think the best solution here is to reform our voting system to eliminate first past the post. We've been getting more and more extreme politicians, and implementing something like ranked choice voting _should_ encourage more moderate candidates, which should in turn encourage more moderate mainstream media, which I think would ease political tensions. It's probably not a panacea, but I think it's a move in the right direction.

<comment><USER3> I don't think you made a single statement that was correct. I recommend you watch some videos by say someone like Mark Blyth.

</comment></comment></comment></comment></comment></comment><comment><USER5> [http://freakoutery.com/2018/07/game-theory-on-the-second- civ...](http://freakoutery.com/2018/07/game-theory-on-the-second-civil-war/)

<comment><USER6> Meh.

The author of this assumes that his game theory civil war will be made up of the binary falsehood of political views portrayed in popular media - blues vs. reds.

In reality, the largest portion of the US citizenry aren't happy about the government and though they may have views in one direction or another they recognize the need for the rule of law and are loyal to the country as a whole, not to the DFL or GOP. Rather than blue vs. red, it would be extremist nutjobs vs. everyone else. Everyone else would win, hard.

If Trump tries to do something illegal like ignore election results, either the GOP will pull him down to preserve the present corrupt situation that is to their advantage, or the majority of the citizens would hang him on the front lawn of the white house.

American are apathetic to many things, even those things that cause them to go hungry or lack medical care, but they'll leave work and take up arms to pull down an obvious tyrant.

<comment><USER7> Hehe, I think you've given yourself away as coming from Minnesota by referring to the Democratic party as "DFL". That's Minnesota's special homebrew Democrats! :)

</comment></comment></comment><comment><USER8> Every time Trump's twitter feed has mentioned civil war since 2013,

[http://www.trumptwitterarchive.com/archive/civil%20war/ttff](http://www.trumptwitterarchive.com/archive/civil%20war/ttff)

Okay, count=one referring to this country as a whole and it was a retweet.

Right out of the gate they headline it as "Civil War Tweets" plural as if he harped on the subject. Why? Because it sounded better.

And no, characterizing current events as an attempted coup is not a reference to a civil war.

And where does declaring something will create a "civil war like fracture" become a call to (or even reference to) civil war? In a country where people lack basic literary skills and discard metaphor?</comment>


SEO in JavaScript Web Apps - <AUTHOR> http://blog.alexmaccaw.com/seo-in-js-web-apps <comment><USER2> Another option is to make a website that works without JavaScript. Only dynamically fetch pages when JavaScript is enabled. Progressive enhancement rocks.

Visiting [http://monocle.io/posts/how-yield-will-transform- node](http://monocle.io/posts/how-yield-will-transform-node) without JavaScript support yields a blank page.

All page titles are <title>Monocle</title> which isn't very descriptive and the meta description is the same for every page. Only with escaped_fragment can a user see descriptive page titles. For JavaScript users all pages are titled "Monocle".

There are no unique content articles to rank nr. 1 for. The articles are all found on other sites. I don't really see Monocle rank 2 a lot (a quick glance). Those are reserved for other aggregating sites.

The Google guidelines say:

      Make pages primarily for users, not for search engines.
      "Does this help my users? Would I do this if search
      engines didn't exist?"

I'd extend that to JavaScript apps. Why make escaped_fragment especially for search engines, and then forget to offer this functionality for human users too?

<comment><USER3> Honestly, with every worthwhile browser (both desktop and mobile) supporting JavaScript and having it enabled by default, it doesn't make much sense to support browsers with it disabled. The couple million people with NoScript installed who enable it only on specific sites know to enable it if a site doesn't work.

<comment><USER2> It does make sense to me, because:

\- Not all search engines can handle JavaScript, Google is leading the way, but not perfect.

\- Those NoScript users could be potential clients or users of your site. I love it when my conversation rate goes up 1%, and that becomes harder when you ignore 1-5% of users.

\- Screenreaders generally do not support JavaScript [not true, see comment]. If only one blind user gets to access the content/design I created, then that is worth it to me. I am thinking as front-end engineer here, not as a business owner, where time is money. (Also depending on jurisdiction it may be against the law to be inaccessible).

\- Noscript users will likely bounce in large numbers when seeing just a blank page. Simply adding a <noscript> tag, explaining why you need JavaScript goes a long way.

As a front-end engineer I go for maximum content accessibility. I don't meddle into the politics of things ("If we don't drop IE6 support, the web won't move forward!").

I totally understand the new landscape, where a lot of people have JavaScript on. Some web apps can not use progressive enhancement, because the JavaScript is core to the app. But for "static" content websites like these, it is certainly possible to make a website that is usable by most users, human and robot.

<comment><USER4> "Screenreaders in generally do not support JavaScript."

Please stop saying that. It hasn't been true for a good 5 years or so.

* [http://www.brucelawson.co.uk/2011/javascript-and-screenreade...](http://www.brucelawson.co.uk/2011/javascript-and-screenreaders/)

* [http://webaim.org/projects/screenreadersurvey4/#javascript](http://webaim.org/projects/screenreadersurvey4/#javascript)

* [http://www.w3.org/TR/WCAG20-TECHS/client-side-script.html](http://www.w3.org/TR/WCAG20-TECHS/client-side-script.html)

<comment><USER2> Thank you! I've been behind the times. I'll start viewing it as a general accessibility issue, not specific to screen readers. But like Steve Klabnik commented, and from [http://www.w3.org/WAI/intro/aria.php](http://www.w3.org/WAI/intro/aria.php) , there are a few more steps to take to make JavaScript enabled screen readers play nice:

"WAI-ARIA addresses these accessibility challenges by defining how information about this functionality can be provided to assistive technology. With WAI- ARIA, an advanced Web application can be made accessible and usable to people with disabilities."

<comment><USER5> But wai-aria has nothing to do with JavaScript, rather the application of semantic elements to make non-native controls able to be interpreted by screen readers.

</comment></comment></comment></comment></comment></comment><comment><USER6> For an article that aims to _" put misconceptions to rest"_, it's pretty damn short.

My companies do website/CMS services for small businesses–so SEO is WAY more important to us than an app or a content aggregator like Monocle. If our clients suspect SEO sucks for our product they will leave. Conversely, if our product has a reputation for good SEO, it can drive a lot of business to us.

Also, Monocle.io isn't setting the title tag for any of their URLs, so that's a pretty poor example to use wrt SEO.

I'd like to see a real, in-depth article that discusses the following:

\- At this point, should I use hash-fragments or pushState?

\- Which front-end JS framework (backbone, ember, angular, etc) has the best support for SEO features out of the box?

\- Is Rails 4 + Turbolinks SEO-friendly?

\- I'd love to see some kind of experiment/example showing that a JS/hash_fragment based site can actually rank well when competing against basic HTML sites. I know that SEO comes down to content and links (more or less) so experiments like that are hard/impossible. I just used to do a lot of SEO for Flash sites back in they day. In the end, _you could only do so much_ and I worry that doing SEO for JS sites is similar.

Just because Google provides the hash-fragment feature doesn't mean they don't give such sites less weight when ranking.

</comment><comment><USER7> Monocle.io is not getting indexed correctly.

see:

[https://www.google.com/search?q=%22Node+has+had+great+succes...](https://www.google.com/search?q=%22Node+has+had+great+success+because+of+how+simple+npm+is+to+use%22)

Notice how the monocle.io link is totally useless. Overtime, this will get you killed by Google as they realize your domain is returning useless results.

<comment><AUTHOR> Yeah, it's only failing because I list the summary of the posts on the index page, and Google isn't picking up the real link.

It'll take a bit more time for Google to index the rest of the site, but I've removed the summary from the index page so it shouldn't get picked up by this.

[1] - [http://monocle.io/?_escaped_fragment_=](http://monocle.io/?_escaped_fragment_=)

</comment></comment><comment><USER4> So he starts with a JavaScript only application, then retrofits in a progressive enhancement layer in a Google-specified query string parameter.

He could just as easily done the core experience first with HTML, got a URL structure that is friendlier and RESTful, and then enhanced it with the JavaScript enhancement he needs to turn it into a perception of a one page website.

The bonus of doing it this way is clean URLs for each piece of indexable content.

Because, really, what's the advantage of [http://example.com/?_escaped_fragment_=about- us](http://example.com/?_escaped_fragment_=about-us) over [http://example.com/about-us](http://example.com/about-us) ?

</comment><comment><USER8> i will save you a lot of pain: just don't do it. the __escaped_fragment__ is the most idiotic recommendation google has ever given. basically you have to render two views, the user JS view and a server side rendered basic HTML __escaped_fragment__ view. oh yeah, the __escaped_fragment__ view will never be visited by your users and not by yourself - just by googlebot.

and now guess: what view will be less maintained, not up to date and regularly broken?

why? when there is no direct feedback, there is no direct feedback.

if you want to do SEO and as well go down the "but it's faster with JS" road just do "progressive enhancement" and history.pushState. the __escaped_fragment__ spec is a leftover from the ajaxy web2.0 times, and even then it was a bad idea.

</comment><comment><USER9> I find it a little odd that this article focuses on the hash fragment approach and only mentions the HTML5 pushState in passing, and how to avoid it. There are a few scenarios where the hash fragment is more useful (states that don't map well to URLs), but pushState has the huge benefit of looking natural AND working in non-JS browsers in general.

I think it would be good to mention Sinatra in the title.

<comment><AUTHOR> I focus on pushState throughout the article. Unfortunately, to spider a website that uses pushState you have to use a Google spec that was originally designed for the hash fragment.

<comment><USER9> No, that's wrong. You just use links to /the/normal/looking/URL and let the browser use JS instead when it can. And obviously you serve the real content at /the/normal/looking/URL instead of behind the obscure hash fragment method.

</comment></comment></comment><comment><USER10> People should keep in mind that you do not always have the benefit of green field development; sometimes you have a project already written that does not have much of server-side component, and has no budget or time left for adding real pages/do graceful degradation (much less progressive enhancement.) In these cases, using a spider is pretty much your only choice. Some notes/recommendations:

\- I'd recommend PhantomJS (there are some other packages built on top of it, but for my custom needs, using the original was better)

\- If you spider a whole site, especially if it's somewhat complicated, log what you're spidering and see if and where it hangs. I started getting some PhantomJS hangs after ~100 URLs. In this case, it can be a good idea to do multiple spidering runs using different entry points (I use command line options to exclude certain URL patterns I know were spidered during previous runs)

\- If you're spidering sites using script loaders (like require.js), pay careful attention to console errors; if you notice things aren't loading, you may have to tweak your load timeout to compensate. Using a "gnomon" (indicator) CSS selector is very helpful here.

\- Add a link back to your static version for no-JS people in case Google/Bing serves up the static version. This only seemed to be problem shortly after spidering, but it's worth doing regardless (later, search engines seemed to start serving the real version)

\- For those wondering how to keep the static version up-to-date, use a cron job, then cp/rsync/whatever your latest version to your "static" directory.

One thing I'd like to add is that I wish PhantomJS would support more things that node.js does (since some of its API is modeled after it), particularly many synchronous versions of functions. That aside, it's an incredibly useful piece of software.

</comment><comment><USER11> I made a web service that will do javascript SEO for you. Check it out at BromBone.com.

We render your entire page for you a save it has html on a CDN. Then you can just do the simple routing described in this article, but send Google the page from our CDN instead. That way Google sees the exact same thing as your users, but you don't have to code it again.

<comment><USER12> > BromBone uses a real web browser to download your web pages. We run all that > fancy javascript, make all your AJAX calls, and save the result.

Makes me wonder why Google itself doesnt do it like that. Maybe Google should buy BromBone...

<comment><USER13> > Makes me wonder why Google itself doesnt do it like that.

I do believe Google _does_ do it like that.

At least, when I had a Twitter search widget on my site, Google indexed the content in that widget.

</comment></comment></comment><comment><USER14> Does it matter that the JS-constructed HTML does not look anything like the spider-friendly version?

We're about to deploy an AngularJS application that is using PhantomJS to generate the spider-friendly content on the server. I'd much prefer to do this simpler method if it works just as well.

<comment><USER15> We're building a small-ish site now with Backbone where we do something similar with PhantomJS. In our `grunt build` task, phantomjs saves static versions of subpages. Each of those pages loads up the same backbone app, but the user (and search engine) sees the content they would expect to see no matter where they land – without waiting for Backbone to load and run through it's router. And it didn't take much time to setup.

Progressive enhancement is "The Right Way", for sure, but there are some projects where we just aren't concerned with targeting users without Javascript. That said, hopefully this will let us cater to many of those users, reap the SEO benefits, and provide a better first-landing experience for those not hitting the home page.

Edit: This is the grunt plugin we are using for this: [https://github.com/cburgdorf/grunt-html- snapshot](https://github.com/cburgdorf/grunt-html-snapshot)

</comment></comment><comment><USER16> For AngularJS apps, you are welcome to try (and improve!) AngularSEO [https://github.com/steeve/angular-seo](https://github.com/steeve/angular-seo) (based on PhantomJS)

<comment><USER17> There's a few gems around handling this in middleware:

[https://github.com/benkitzelman/google-ajax- crawler](https://github.com/benkitzelman/google-ajax-crawler)

[https://github.com/inossidabile/hashbang](https://github.com/inossidabile/hashbang)

</comment></comment><comment><USER18> So, basically, the article says that in order to have good SEO with full js apps, you must also expose a non js app?

Like, you have to implement 2 sets of templates - one "classic", html only, and one for js?

</comment><comment><USER19> [https://www.cityblis.com/](https://www.cityblis.com/) I implemented the <noscript> solution which actually shows the same content (without dynamic positioning) to the users and allows them to go to non-javascript versions of the pages. With JS on I serve dynamically positioned content and with scrolls.

I also have an implementation for the search, but it's not pushed yet. It doesn't paint the first page, but only provides pagination for the users without JS.

What do you think of this kind of a solution?

<comment><USER20> As a noscript user I'd like to see an explanation to why I should enable javascript on your site. If you put a link to an explanatory page along with the "please enable javascript for a better experience" header I think that would be useful.

Of course getting the explanation down is going to take some effort you don't want to be condescending and you do want to give a meaningful explanation - perhaps with pictures, animated gifs? - but don't want to make it into a dissertation either.

<comment><USER19> Would just adding a line like "This site uses AJAX for a large part of its functionality" work or would you prefer a more in-depth description?

<comment><USER20> I would want to know what I was getting in trade for the increased risk of enabling javascript. Your proposed message isn't substantially different from the current message.

Noscript users are going to be more savvy than average users, but they are still _users_ so if you are going to make any effort to inform them, make sure it's from the perspective of a user rather than a developer. Developers care about AJAX, users only care about what they see on the screen.

<comment><USER19> But I'm a developer, so I don't know what the best wording for this is. The point is, some of the functionality of the site is broken when not using Javascript because it's AJAXed and there is no <form> fallback with POSTs and so forth (that's not in the development budget)

<comment><USER4> You charge extra to do it properly?

<comment><USER19> I only have so many hours in the day, I already got assigned on a different project, they told me they don't have time to support less than 5% of users.

<comment><USER4> You ask for permission to do your job properly?

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER21> Personally i only serve client-side rendered content to browsers that are in my whitelist, everything else gets the server rendered content.

[http://chadscira.com/](http://chadscira.com/) (set your user-agent to blank)

</comment><comment><USER22> I wrote about using the same technique with a headless browser a while ago.

[http://backbonetutorials.com/seo-for-single-page- apps/](http://backbonetutorials.com/seo-for-single-page-apps/)

Works nicely...</comment>


Show HN: Bulk Fusion 360 Export and Sync - <AUTHOR> https://github.com/aconz2/Fusion360Exporter <comment><USER2> Just tried this on my account (around 12 folders and 45 designs); it worked pretty well and is definitely useful.

It did crash on several different projects. The first was one where I'd imported a bunch of very detailed model parts for a Raspberry Pi. I just skipped over that project in subsequent runs. (Probably was from this link: [https://gallery.autodesk.com/fusion360/projects/124986/raspb...](https://gallery.autodesk.com/fusion360/projects/124986/raspberry- pi-3-bplus) )

However, it still crashed on some other runs with much simpler models. (It was a Fusion360 crash, with 0 bytes in the timestamp.txt log file. In each case, it seemed like it exported an entire design but crashed while loading and before exporting any file types of the next one.)

I tried to find a reproducible case, but didn't get to an entirely reproducible case. Along the path, I did find a (stops script, but doesn't crash F360) error "ascii codec can't encode character '\u2019' in position 20: ordinal not in range (128)"

I presume that was on a project named "Name's phone" (where the apostrophe is a right-single-quotation-mark), however that project does appear to have successfully exported on a prior run before I tried to find a repro case for it. That exported into a directory named with a right-single-quotation-mark while the relevant files in that directory had the mark changed to ascii 0x27 (single-quote).

It also only exports visible bodies. I will sometimes have a project with multiple bodies and if the visibility is set to 0, they seem to not be exported by this process. If they're all set to 1, they're exported as a single output stl/step. Not a deal-breaker, but is something to be aware of. Still awesome/thanks!

<comment><AUTHOR> Latest update adds an option to unhide all bodies before exporting. Thanks for pointing this out! [https://github.com/aconz2/Fusion360Exporter/commit/f3203902c...](https://github.com/aconz2/Fusion360Exporter/commit/f3203902c5dff64bbb64d485785fff98b951102d)

</comment></comment><comment><USER3> This is awesome. For context: Fusion 360 personal license is being locked down in October, and will restrict many useful functions, including exporting projects as STEP file (industry standard file format).

</comment><comment><USER2> I can only hope that Autodesk has analytics running on F360 activities and sees the uptick in exports here...

Thanks for the tool!

</comment><comment><USER4> Here's another one which exports sketches to DXF files in addition to the 3D models.

[https://github.com/Jnesselr/fusion-360-total- exporter](https://github.com/Jnesselr/fusion-360-total-exporter)</comment>


Ask HN: Curated shopping  - <AUTHOR>

Socially curated shopping platform where you can buy like in amazon<p>Is this space full of potential or a crowded bubble <comment><USER2> I can't tell what you mean from a 10 word description.

</comment><comment> saiko-chriskun it's full of potential!! you should do it!!!!</comment>


Yrmcds - a complete rewrite of memcached with a lot of enhancements - <AUTHOR> http://cybozu.github.io/yrmcds/

<comment><USER2> A companion client library is also available. [http://cybozu.github.io/libyrmcds/](http://cybozu.github.io/libyrmcds/)

With only one fifth of libmemcached code size, libyrmcds provides every feature of the binary protocol.

<comment><USER2> PHP extension is added to the family: [http://cybozu.github.io/php- yrmcds/](http://cybozu.github.io/php-yrmcds/)

I believe it is quite stable compared to other PHP memcached extensions.</comment></comment>


Why their needs to be more Women in Tech - <AUTHOR> http://coderfactory.co/posts/why-their-needs-more-women-in-tech

<comment><USER2> To improve the English grammar used in Tech?

<comment><USER3> LOL, looking at the headline for this item, I have to agree.</comment></comment>