Tracing doping use by amateur athletes from wastewater - <AUTHOR> https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5807464/ <comment><USER2> Hmm, How effective is this? I recently watched ICARUS and I have been reading a lot about doping and how athletes circumvent the tests done by WADA labs ( World Anti Doping Agency). I have a couple of questions regarding this and in no particular order of importance

(1) Should a state decide to implement something like this, isn't this some sort of privacy violation by the state? People could have been prescribed these Anabolics by a physician too, don't they also come under the scanner?

(2) Also, I don't clearly understand the sampling here, tons of gallons get pumped into the wastewater system. How much quantity of samples would be collected for testing purposes? and what is the frequency of these samples being collected?

(3) Please totally excuse my ignorance here, the major banned substances for which athletes have been banned are "Methylhexaneamine", "Methenolone","Oxandrolone", and a lot of "Stanozolol" and "Turinabol" ( I m getting all this from this wiki [https://en.wikipedia.org/wiki/Doping_at_the_Olympic_Games#Di...](https://en.wikipedia.org/wiki/Doping_at_the_Olympic_Games#Disqualified_2)). The table in the paper doesn't seem to mention any of these substances. Are they mentioned under a different name?

(4) Also, in the light of new information (ie) state-sponsored doping, Lance Armstrong escaping some 500 Lab tests & going completing uncaught by WADA and so many other labs around the world, as a spectator I already know that a ton of Olympic athletes are doping. Isn't the actual problem trying to prove that "individual" athletes are doping? A collective evidence is probably not as useful anymore since all watchdogs, sports committees and spectators are more skeptical from the get go.

<comment><USER3> (1) This is being measured in aggregate. It's no more privacy violating than, say, measuring the amount of non-recyclable trash that ends up at the recycling sorting facility.

(2) Consult the methodology section.

(3) Methylhexaneamine (DMAA, spelled "methylhexanamine" in the article) is the 3rd highest thing in the table. There are several other anabolic steroids in the table (see list below). Chemicals tend to sell under several different brand names and your list may intersect the article's list. It's also possible the article's list just contains a different set of chemicals.

To categorize briefly (the list is heavily steroid-focused):

Aromatase inhibitor (prevent aromatization of androgens into Estrogen): Anastrozole, Clomiphene, Tamoxifen

Masking steroid use: Finasteride (new tests obsolete this, at least for pros)

PED/Weight loss: Clenbuterol

Stimulants: Norephedrine, Ephedrine, Methylhexanamine (DMAA)

Steroids: Trenbolone, Nandrolone, Metenolone, Mibolerone, Metandienone

Weight loss: Sibutramine, 2,4-Dinitrophenol

Also note Table 1, which shows (basically) how quickly various PEDs degrade at different temperatures. Several of them degrade in 0-1 days at 20° or 4°C. So unless a large population is taking them (ephedrine), they tend to drop off of test results.

The other consideration is LOD / LOQ (limit of detection, limit of quantitation) — lower levels here ease detection and measurement.

(4) This study is targeted more broadly at the recreational athlete population, rather than pro athletes.

<comment><USER4> Also note the steroids OP listed are all orals, the list you have for steroids are oils that are injected.

All of these are used with a testosterone base. You don't want to run any of these without test. Some people back in the early bodybuilding days would use nandrolone (better known as Deca or the other variant equipose) as a stand alone cycle but that isn't recommended now.

Another thing that I haven't seen mentioned anywhere here is the use of HGH, IGF1, and insulin.

If you're training seriously for physical sport you need to be on an HGH cycle. This is something that isn't illegal(well its usually aquired illegally) and is prescribed through 'healtg and wellness' or anti-aging clinics.

Insulin is probably going to be more common for weight lifting because it is an incredible anabolic hormone. There are huge risks to using it and can kill you if you mess up. Shockingly anyone can walk into Walgreens and buy it though.

<comment><USER3> Thanks. I haven't used steroids myself and am unfamiliar with the details of doing a cycle. Quick google search — you would use the testosterone base because the steroids otherwise inhibit your natural test production?

Is there any good evidence that HGH helps sports? My understanding is that there evidence is limited and it isn't clear it's positive.

<comment><USER4> Correct the other steroids can still cause your natural production to shut off which is going to make your body feel like crap.

HGH is going to be beneficial because of it's going to increase collegan in your body which will make your joints and ligaments stronger. It's going to help with wuicker recovery from from work outs. Also most people report getting better sleep while using it. So hgh isn't going to make you huge directly rather it's more of a behind the scenes thing helping you out. If you are predisposed for cancer though you might want to be careful. Hgh of course does increase the rate of cellular growth and division so you are increasing your odds of cancer by taking it, I'm not a doctor and that could be bs but I think it's worth considering considering

</comment></comment></comment></comment></comment><comment><USER5> The same basic technique was used to study the prevalence of cocaine use in several European cities. They analyzed the level of drug metabolites in sewer water.

[http://www.emcdda.europa.eu/topics/pods/waste-water- analysis...](http://www.emcdda.europa.eu/topics/pods/waste-water-analysis_en)

</comment><comment><USER6> Pretty interesting. I worked in the athletics (cycling) industry for around 5 years and I always suspected that there's a lot of doping among amateur athletes. From what I understand, it's most common in amateur cycling among masters racers.

<comment><USER7> Do you know why that is? It seems possible that it could be because masters racers started doping back before testing was prevalent/sensitive and now can't stop without a precipitous drop-off in performance that would raise eyebrows. Just conjecture though.

<comment><USER8> When younger athletes max out their training capacity, they either come close to pro level (where any doping would be out of scope for the question of the perceived age correlation in _recreational_ doping) or they lose interest. They lose interest either completely, or at least enough to be fully aware that more training could make them so much better. It's easy to resist doping if you know that the amount of training is your main bottleneck.

Age groupers are much more persistent, they have their hobby permanently dialed in, they wouldn't even know where else to search for a sense of achievement. They are used to getting faster from a combination of better technology and better training, and to some of them doping might seem almost like a natural extension of carbon and training plans when those are maxed out. Fortunately, the deep end of both the training and the carbon is so far out that I am confident that it's still only a small minority who falls for the temptation (the very few testing that has happened on the amateur level concentrated on the top results, if doping works, that's where you will find the dopers)

(source: getting more carbon and more training as I get older)

<comment><USER9> For those not into cycling

carbon -> carbon fibre bike parts, which is way lighter and way more expensive but makes you go faster with less effort

</comment></comment></comment></comment><comment><USER10> I'd never heard of 2,4 DNP, so I looked it up. Nasty stuff, and I can't see how it would help performance. Apparently it reduces body fat, but has been deemed too dangerous to use since 1938. [https://en.wikipedia.org/wiki/2,4-Dinitrophenol](https://en.wikipedia.org/wiki/2,4-Dinitrophenol)

<comment><USER3> It's a weight loss drug. I've done a rough categorization of the full list here: [https://news.ycombinator.com/item?id=16777656](https://news.ycombinator.com/item?id=16777656)

As far as why it counts as "doping" — it is probably used by body builders to drop body fat to competition levels. Anecdotally, without chemical help you are hungry all the time at 4-8 %bf.

Also, the common wisdom among runners is that body fat is dead weight and losing it makes you faster and reduces load on your joints. So it may help there too. Cyclists probably see less benefit, but less fat may help acceleration and hill climb ability.

<comment><USER5> Yes this article confirms that professional cyclists in the Tour de France are under 6% and hungry all the time. But they have to be careful not to go _too_ low or they run the risk of getting sick and dropping out of the race.

[https://www.outsideonline.com/2099881/how-skinny-are-top- tou...](https://www.outsideonline.com/2099881/how-skinny-are-top-tour-de- france-riders-really)

<comment><USER3> Yeah. In running there is some belief that it may be safer and healthier to train at less extreme %bf in the off season, and only drop to extremely low %bf shortly before and during the race season.

</comment></comment></comment></comment><comment><USER11> What if you flush a lot just to mess with anyone testing it?

<comment><USER12> It's less about catching violators and more about understanding the epidemiology of PED abuse. It may be possible to isolate populations that need direct testing but by that point you're putting traps on every sewer pipe associated with an event, it'd just be easier to test everybody directly.

</comment></comment><comment><USER13> This detection is easy to circumvent: use an outhouse or septic tank.

<comment><USER14> That's neither easy (where will you find access to those?) nor will it circumvent testing. It'll concentrate your waste in a septic tank that's clearly yours, not mixed with all the neighbors. These researchers measured waste water downstream where it was mixed from many people so they can't identify anyone individually.</comment></comment>


Apple might put a GPU right inside the Thunderbolt Display - <AUTHOR> http://www.macworld.com/article/3078347/hardware/apple-might-put-a-gpu-right-inside-the-thunderbolt-display.html <comment><USER2> Rene Ritchie of iMore "asked around" and found that this will not happen at the keynote or anytime in the near future.

[http://www.imore.com/no-apple-display-integrated-gpu- wwdc](http://www.imore.com/no-apple-display-integrated-gpu-wwdc)

<comment><USER3> Don't know much about this guy, but aren't theories against just as theoretical as theories for? I feel eGPUs and things like the Razer Core help solve the mobility/power dilemma.</comment></comment>


How do you monetize a video sharing website? - <AUTHOR> http://www.videosift.com/talk/VideoSift-Fundraiser <comment><USER2> Hey, dag from above mentioned VideoSift here. We have seen about a 50% reduction from our network supplied ads.

<comment><USER3> Can you explain what you think is causing the reduction? Could you make the space more attractive for advertisers (e.g. decrease cost, increase space etc)?

<comment><USER2> We use a couple of big networks for CPM, one starts with a "Gl" the other has the initials TF. Traditionally the CPM revenue has been fine with these and more than paid the bills - in January it just dropped off into hell. The cause is that advertisers have slashed their budget and are no longer shelling out for CPM ads.

</comment></comment></comment><comment><USER3> I don't run an ad supported site, but am interested to know: has everyone seen a reduction in advertising dollars?

<comment><USER4> I don't run an ad supported site either, but I buy space on them. Google will tell you how much you paid for ads on a per-site basis, and I just ran reports for the last 30 days and the same days for 2008.

Here's what happened to the three sites who made most from me last year. All three are names you'd recognize. [Edit for clarity: these are the CPMs paid Google. The sites probably get substantially less than 60% of these.]

Site A: Effective CPM has declined from $3.20 to $.80, spend declined 66%

Site B: Effective CPM has declined from $3.80 to $1.90, spend modestly increased (impressions obviously quite up)

Site C: Effective CPM has declined from $8.84 to $3.50, spend flat (impressions obviously quite up)

The kicker: I'm one of the few advertisers practically begging for traffic -- there are a few hundred bucks of slack in my budget, so if they've got it for sale I should be buying it. Its just the cratering CPM prices that are keeping my spend that low. My guess is this means that the other advertisers are sharply reducing spending, which means I win the "auction" easier and get the clicks for cheaper (thus decreasing effective CPMs).

<comment><USER5> $8.84 CPM? thats is really high, how many visitors?

Anyway excellent job.

</comment></comment></comment><comment><USER6> Interesting approach, but i am not sure how feasible it is. You can't ask for donations every month.

I am not in this business, but i think i would go the flickr route for video sharing. As in, offer a paid account which you can opt to make private or just allow some people to see(like family videos). Make the payment terms easy(so yearly or per GB stored or something). Also, offer some kind of export mechanism to make customers feel more easy about their data in case something wrong happens. So aside from the digital export, offer a Blu-ray mailing option or something similar.

As for amateur remixes, i would offer affiliate links to content used(just like youtube did) and also offer a tip-if-you-like-this option which i will take a small part of.

So again, i am not in this business and monetizing video sharing websites without premium content like movies and video clips is difficult, but this is what i would do.

</comment><comment><USER7> Videosift used to charge for a premium account that would enable you to have more community options. Perhaps they should make the premium account cheaper to drive up volume and get more.

They don't pay for video bandwidth, so it's kind of weird how they have such high costs.

<comment><AUTHOR> Their premium options are here: <http://www.videosift.com/upgrade>

At first thought the lengths they have chosen make it seem more expensive than it is. There is something psychologically odd about the base 10 numbers chosen. 30 days/90 days/180 days feels better, I think.

</comment></comment><comment><USER5> I would make a bigger difference between a free and premium account.</comment>


We're getting slower... and more dumberer. - <AUTHOR> http://www.sciencedirect.com/science/article/pii/S0160289613000470?np=y

<comment><USER2> These studies measured reaction times. There's only a negative .31 correlation between reaction time and intelligence test scores. Just chewing gum lowers your reaction times. [http://en.wikipedia.org/wiki/Reaction_time#Mental_chronometr...](http://en.wikipedia.org/wiki/Reaction_time#Mental_chronometry_and_cognitive_ability)

Actual intelligence scores have risen each decade: <http://en.wikipedia.org/wiki/Flynn_effect>

Also, the "We" in these studies is no longer just a narrow range of middle to upper class white males. If you look at sub-groups, most likely everybody is rising even when the overall average might be declining.

This is what happened with SAT scores since the 60s: "SAT scores don't decline because students get dumber; they go down because more students take them." [http://www.washingtonmonthly.com/college_guide/blog/average_...](http://www.washingtonmonthly.com/college_guide/blog/average_sat_score_declines_as.php)

So the question is, have reaction times gotten slower because of more people being tested, or other factors? I'd imagine in decades past, participating in a psych experiment was a more "special" occasion warranting heightened attention and performance than it is today.

</comment><comment><USER3> Maybe the problem is that we don't have open access to published scientific papers.

<comment><USER4> You're lucky, I've just found a copy on the floor. On which website should I host it? I don't want to exceed my dropbox bandwidth quota.

<comment><USER4> Well, no need to bother, I just found it at <https://anonfiles.com/file/c9ae38ed613d426f4f5fa7d17b60e977>

</comment></comment></comment><comment><USER5> no we are not! We have got more data to consider before reacting! An other example: Children remember things better than adults because they don't need to go through as many connotations that come with information and can focus on the "simple" facts. Adults have got to push all the data trough their experience and brain filters to add it to the bigger picture ... yes reaction is getting slower, intelligence .. no.

</comment><comment><USER6> I find it revealing that the authors go from a study which demonstrates (according to them) a general drop in IQ, yet make what appears to be a big jump in pinning the blame for said IQ drop on the societal trend of the less educated having more children than the more educated.

I get the feeling this is geared more for press and controversy than a real scientific conclusion.

<comment><USER7> Why have a peer-reviewed journal when we can talk about the documentary?

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

Jokes aside, I guess I will have to read the article, would this not been the case from the beginning? How drastic are changes in IQ averages over hundreds of years? Is it possible that there highest IQ holders were not a very slim strata of society, or are we to suppose over time that the margin and spread is getting wider?

</comment></comment><comment><USER8> How is the Flynn effect related to this? As I've understood it, the average IQ has, since the turn of the century, risen by around 20 points.

</comment><comment><USER9> Well, if we develop good enough exoskeletons maybe even people born without brain could reach adulthood and reproduce.</comment>


Chinese Workers Abandon Silicon Valley for Riches Back Home - <AUTHOR> https://www.bloomberg.com/news/articles/2018-01-10/chinese-workers-abandon-silicon-valley-for-riches-back-home <comment><USER2> China might actually successfully execute a reverse brain drain on the US.

I can personally attest - the vast majority of the ML engineers (feature or infra or research) at 2 of the Big 4 are Chinese born.

They're great at their jobs and their loss to these companies would represent a truly devastating blow.

On the other hand, these individuals will be successful beyond anyone else in the middle class and maybe inspire the next generation to focus on math and science.

<comment><USER3> No, China will, at best, attain neutral talent lost and prevent any brain drain (BD). It will not cause a BD on US simply because as this article implies, there's simply no allure for non-chinese descents to live in China. There's a reason why they're establishing a HQ in Silicon Valley.

As the article shows, Chinese engineers only account for less than 10% of the headcount at 3 of the big 4. Its a far cry from actually taking all of US talent.</comment></comment>


Google+ Won't Let 3rd-Party Apps Post Because "Your Stream Could Be Overwhelmed" - <AUTHOR> http://techcrunch.com/2012/03/09/vic-gundotra-sxsw/ <comment><USER2> Not a bad plan, actually, since most of the garbage on Facebook's stream has always been the result of pointless apps. Google+ doesn't need to be cluttered with dozens of "What piece of office furniture are you?" quizzes.</comment>


Reservations about TypeScript - <AUTHOR> https://daviesgeek.com/2017/08/reservations-about-typescript/ <comment><USER2> > TypeScript compiles down to JavaScript, which doesn't have types or type > checking, it's impossible to have actual type checking. The TypeScript > compiler is great at checking at compile time, but at the end of the day, > it's impossible to actually check the types.

I'll point out that C/C++/Haskell compiles down to Assembly, which doesn't have types or type checking. GCC/LLVM/GHC is great at checking at compile time, but at the end of the day, it's all just bits being modified...

Obviously you can find ways to break out of the type systems (void* cast?) but that's on you, and even if Typescript has more escape holes, the existence of them isn't an immediate fail

<comment><USER3> Good point.

That being said, TS does suffer from something unique, in its JS interop. If my C program interfaces with a C library, I have great certainty that all of these were compiled at some point, and the types are sound (as much as C allows, at least).

In TS, if you're lucky a library you consume was written in TS, so you've got high certainty that the typings it comes with are really good. Less lucky: the developer wrote it in JS, but provides typings. Less lucky: a random person on Github reverse-engineered the typings and provided them on DefinitelyTyped. Less lucky: There are no typings available. You'll run into npm libraries in all of these categories.

<comment><USER4> Even less lucky: coding in vanilla JavaScript. In the days before Definitely Typed, I still got a lot of mileage out of types in my code alone. It felt immensely more apt then using JSDoc to document types everywhere.

In my experience, even if you don't have types for a third-party library, you can get away with adding types for the interfaces you care about.

</comment></comment></comment><comment><USER5> First point: "I found a bug but can't give an example."

Second point: "It adds a feature that's different from a similar language."

These are not persuasive arguments. I'm not trying to be unkind, but the first point is totally unsupported and the second doesn't elaborate on what's bad about classes besides that another language also has classes.

<comment><AUTHOR> Definitely agree on the first, that's a good point. I probably should've been better about how I presented the data.

"TypeScript still compiles down to JavaScript. It has no way of actually checking types." That's my point. Maybe I should make it more obvious in the article :) I'm not complaining about the fact that TS has classes or types, it's that TS compiles down to a language that has neither.

<comment><USER6> That argument doesn't really make sense. The type system is a feature of the compiler, so why would the output of the compiler need to be aware of it? Lots of typed languages compile to machine language, which has no inherent type system.

Compilers which _do_ add type information into the output are usually paired with a runtime that uses it for things like late binding or dynamic dispatch, but JavaScript doesn't support anything like that.

Could you give a concrete example of a scenario in which the flexibility of the JavaScript type system would break the TypeScript type system?

<comment><AUTHOR> All fair points and totally valid.

My concern is the facade/promise of type security.

<comment><USER7> Your quarrel is not with JavaScript (as everyone else has pointed out, there's no reason one can't build a secure compile-time type system on top of JavaScript), but with some of the specific design decisions made by TypeScript that open soundness holes, such as "programmers are too stupid to understand the difference between covariance and contravariance, so we'll pretend everything is bivariant".

See [https://www.typescriptlang.org/docs/handbook/type- compatibil...](https://www.typescriptlang.org/docs/handbook/type- compatibility.html) for a less cynical presentation of these design decisions.

<comment><USER6> This gives an explanation of why they made the choice: [https://github.com/Microsoft/TypeScript/wiki/FAQ#why-are- fun...](https://github.com/Microsoft/TypeScript/wiki/FAQ#why-are-function- parameters-bivariant)

Also, FWIW, in my experience, I don't think I've ever actually run into a problem with this in real code.

</comment></comment></comment></comment></comment></comment><comment><USER8> > _TypeScript fundamentally changes the way JavaScript works. JavaScript does > not have classes. Even ES6 classes are just syntactic sugar on top of the > ES5 prototypical inheritance. I'll repeat it again. JavaScript does not have > classes. The class keyword may exist in ES6+, but under the hood, it's still > just prototypical inheritance. As long as this is understood, it's perfectly > fine, but the problem comes when ES6+ or TypeScript is marketed as having > "classes" in the traditional OOP sense of the word._

It looks like the author started out as saying one thing (how Typescript is fundamentally different from JS) and ended up with another (how they are fundamentally the same) :-)

Which reminds me. Could you please explain to me what are the proper classes? I guess I have spent too much time with JavaScript to start thinking about classes just as about collocations of methods and properties spewed out by constructors. What is so improper about JavaScript's prototype-based classes that is different in real classes?

<comment><USER2> The answer is, not much. They're shockingly similar. Both are achieving very similar ends through slightly different means (the subtlety of `virtual` in C++ leading to vtables) -- dynamic dispatch of a function based on an instantiation (a collocation of a method, as you called it)

How you implement inheritance under the hood and how you interpret the `class` keyword is another false distinction the author makes.

</comment></comment><comment><USER9> That is an appalling article, even by Hacker News standards.

I mean, his second "reservation" is that TypeScript "fundamentally" changes JavaScript. How does he demonstrate this? By complaining that classes, which are a _JavaScript_ feature, work differently than in other OO languages. What the hell does that even have to do with TypeScript?

</comment><comment><USER10> Article lacks any actual, factual reservations, but rather complains about some code that didn't work a year ago and the code of course has been lost. I don't get the point of sharing this writeup. I guess author just posted some text he wrote up for a internal company discussion.

Opinions are like buttholes, everone has one.

<comment><AUTHOR> I'd like to also point out that my main issue (that JS itself doesn't have types, so it's impossible for TS to 100% enforce it) still stands even after a year.

<comment><USER11> No, that point never made sense.

The fact that TS isn't sound has nothing to do with the fact it compiles to JS. If you wanted a sound type system, you should have checked out flow.

</comment></comment></comment><comment><USER12> The authors main complaints seem to focus around "but Typescript isn't ES6". I don't have a problem with this because Typescript compiles down to very clean vanilla JS. Unlike C++ to C, Clojure, and Babel the compilation down to JS is extremely good in comparison.

Good enough that I usually debug the Javascript output. Typescript has the cleanest transpilation I've ever seen so I don't have any problems with using it. And if Typescript ever falls out of vogue I'm confident just compiling down to JS one last time and being done with it. Really the language is so easy to get rid of its harmless.

<comment><USER13> An aside: check out BuckleScript's OCaml -> JS work. It's even better than Typescript's output.

Some examples:

[https://github.com/BuckleScript/bucklescript- addons/tree/mas...](https://github.com/BuckleScript/bucklescript- addons/tree/master/examples)

</comment></comment><comment><USER14> It's gradual typing. Yes, it's full of holes, that's the whole point.

There are other languages with strong, powerful type systems that compile to efficient JavaScript, such as (in order of power) Elm, OCaml, PureScript and Idris. Those four are just arbitrary examples however, there are quite a few more.

</comment><comment><USER6> Sorry, I don't understand what this post is about, other than that you have some reservations about TypeScript. It's not really clear _what_ those reservations are.

<comment><USER15> He started with the conclusion, then went and tried to look for reasons to support it. Problem is he came up short.

</comment></comment><comment><USER16> If you're curious about or skeptical of TypeScript, do yourself a favor and check out the source code sometime: [https://github.com/microsoft/typescript](https://github.com/microsoft/typescript)

It's a work of art, everything is so practical and (relatively) easy to understand. Even better, it's written in TypeScript, so you can open it up in an editor with TS support and follow/jump to any reference with confidence. I've only learned about compilers vaguely through osmosis, but I was able to extend its JSX syntax processing (admittedly that part does seem a bit bolted- on) to output JSON for my wonky framework side-project in a few hours: [https://github.com/guscost/protozoa-tsx](https://github.com/guscost/protozoa- tsx)

</comment><comment><USER17> Not to pry, but do you have a Java background? I see you're using the global 'Boolean' and 'String' interfaces in your examples (which correspond to the equivalent JavaScript constructor objects), rather than the 'boolean' and 'string' primitive types. While it kinda works to use the interfaces instead of the primitives, the primitives, IMO have much more expected behavior in the type system, since, unlike the interfaces, they do not get compared structurally - TypeScript uses a structural type system for all objects, after all.</comment>


GitHub Removes Tsunami Democràtic's APK After a Takedown Order from Spain - <AUTHOR> https://techcrunch.com/2019/10/30/github-removes-tsunami-democratics-apk-after-a-takedown-order-from-spain/ <comment> ga-vu Dupe: [https://news.ycombinator.com/item?id=21395629](https://news.ycombinator.com/item?id=21395629) and [https://news.ycombinator.com/item?id=21395769](https://news.ycombinator.com/item?id=21395769)

</comment><comment><USER2> Comments moved to [https://news.ycombinator.com/item?id=21395629](https://news.ycombinator.com/item?id=21395629).</comment>


Ask HN: What should I do with a product that I built but could not market? - <AUTHOR>

I started on my own. I have been sleeping over my startup for the past 9 months. The first 3 months went into reading about lean startup, and learning about it. Next customer interviews, and prototype, then full fleged product, then iterated after few more customer interviews. It all took around 7 months.
Assembled a team on equity, they both did not agree together, one told me to get rid of the the other, having done that, the other felt insecure and left. Today after 9 months I am alone the product is sort of a classified(but much more than that).
Marketing is a big challenge. The product is ready, what should I do with it, it is a consumer application??
If anyone is interested, you could mail me firstname.lastname@example.com <comment><USER2> Generally speaking, I've tried to stay away from messing with products or services that require a lot of marketing, and go with ones that tend to market themselves. General ideas (such as classifieds) have big potential, but require the most work to get sustainable traction.

With that said, building the product is half the battle. Put it up by yourself. The biggest question you need answered right now is what do random visitors to your service think of the overall concept? Any flavor of classifieds websites will have some kind of critical mass, but that wont stop a few visitors from making an attempt at using it. If you get some positive feedback, or even negative, use it. If it's positive, it will go a long way in finding a valuable partner. It will give you hard data to share that will start to pave a path for you.

The problem with splitting a pie that hasn't been baked is that nobody knows what the flavor will be. You may be a great baker but the consumers are the ones who will inevitably decide your offering (Apple).

Once you get a basic data set from those few visitors you were able to convince to at least give your service a glance, now it's time to grow your inventory. The best things you can do as a lean start-up is find some mutual business relationships. Can car dealers post some of their inventory on your site? If so, they would love to do it and it gives you a little bit of content. There are many other similar circumstances you can find yourself in. I find it most effective when you can get other businesses to sell your product for you because it enhances their own.

To get back to the root answer here, my suggestion is do a solo soft launch. Gather usage data from early visitors, and use it to grow your inventory and perhaps more importantly, find a valuable partner.

</comment><comment><USER3> If you are selling a product that someone buys for themselves, not for their company, then it is a consumer application. However, since you are running a classified you are actually in the consumer-to-consumer model though some of its practitioners call this the "two-sided marketplace" which sounds snazzier. Admittedly, there are some differences from other kinds of advertising, but by and large advertising is mostly the same, so the same techniques used from other advertising cross over.

The first thing to remember is how you make money. You make money by getting together buyers and sellers. You are expected to get out of the way and let them get to their business. However, in order to have any hope of success you have to attract buyers and sellers, so they have to know your there. You must differentiate from your competition loud and clear. So how do you do this?

Research has shown that the most successful commodity products differentiate themselves in one of two ways. Either by low cost or by having the best reputation for quality or service. Advertising can help you spread the news about any price advantage you may have, and it can work wonders in creating a reputation for quality or service. And if it works for bolts, washing machines, and lawyers, why not for your classifieds? If your headline doesn't mention that you are cheaper, provide high quality or great service, then I advise you to change that. This will immediately work and create more traction, enough true data at least, so that you can start measuring it with your metrics tools and make it grow.

If you find yourself that you need a hand with your startup, you can send me an email at email@example.com or go to ulisesrmzroche.github.io to learn more about me.

</comment><comment><USER4> Some ideas:

Could you turn it into a white label app and sell it to businesses for their own internal use or to other entrepreneurs?

Could you find a niche that needs this sort of app with certain features tailored to their needs. Example: Auction software (general idea) made specifically for buying/selling live aquarium fish (custom/niche).

</comment><comment><USER5> Am I right to assume that you can technically handle the idea on your own? If that is the case I would launch and try to get some people to use it(I know that it sounds easier than it is). If these people really like it, there's a chance that it could take off on its own without any significant additional promotion.

</comment><comment><USER6> Launch it as a single founder. If its ready, then there's no harm in seeing if your product can gain traction by itself. What's the worse that could happen? If it takes off, you won't need to ask people to come on board, they will be asking to join you.

<comment><AUTHOR> Your product, can't get traction on its own. It needs focussed effort to gain traction.</comment></comment>


Microservices - <AUTHOR> http://martinfowler.com/articles/microservices.html#hn <comment><USER2> I do like micro services. As a general architecture for new systems, but also as wrappers around existing legacy applications. It makes integration and evolution of old applications a lot smoother with newer technology stacks.

Once fully "micro serviced" [http://yobriefca.se/blog/2013/04/29/micro- service-architectu...](http://yobriefca.se/blog/2013/04/29/micro-service- architecture/) you can replace/evolve one service at the time, instead of more costly and risky whole applications at the time. A natural pattern to evolve those chosen services is strangler application pattern also described by Fowler [http://martinfowler.com/bliki/StranglerApplication.html](http://martinfowler.com/bliki/StranglerApplication.html)

</comment><comment><USER3> I can't help but think about Steve Yegge's rant about Amazon and its SOA architecture.

[http://pastebin.com/FBbSkp2i](http://pastebin.com/FBbSkp2i)

<comment><USER4> Wow after reading that I think maybe will buy some Amazon stock - clearly they are focused on the bottom line!

</comment></comment><comment><USER5> One thing that people don't talk much about is the network overheads, marshaling/unmarshaling, which adds up really quickly in a microservices architecture - imagine pulling large amounts of data 3 layers out, with all that overhead. While microservices lends to a flexible design, need to be careful about the costs

<comment><USER6> Yeah, such an architecture isn't a panacea. As with any pattern you have to apply it to the right kind of problem. Treat every noun as a microservice, especially for reads, and you end up reinventing an RDBMS (poorly) in your code. Neither would you demand that a file copy be implemented using map reduce.

</comment></comment><comment><USER7> I think one of the pain points of microservices is the infrastructure, for non-enterprise or startups. If you think of it, when you have your application or system a bunch of widely dynamic services, they need to be dynamic. Thus, traditional ways of deploying (like one service per server -- which most likely will be statically defined) wouldn't be best.

Systems like mesos, flynn and the like will substantially make it more effective at orchestrating these microservice infrastructures. These allow developers to focus more on the service, rather than on the infrastructure and underlying dependencies.

</comment><comment><USER6> Apologies in advance, this went longer than I anticipated.

I'm in the midst of re-architecting a legacy system whose terribleness is legendary even in Hell.

Given that this system has a fairly small set of nouns as well as a limited set of verbs that can apply, I opted to try and abstract out each of these into their own services. This allows a rolling replace/upgrade cycle that allows the old cruft to continue running while limiting the scope of efforts to something less than the Aegean Stables.

One characteristic of the beshitted legacy system is all manner of action-at- a-distance and an embarrassing lack of code reuse so even minor changes in business logic involves a nightmare of grepping and hoping you found all the areas that need to be changed to either support that logic or implement it. To that end I opted to have a message broker for create/update/delete operations that was responsible for distributing such events to other services as business logic dictated. Internally we nicknamed it "Sorta SOA".

As an example work flow, a user is created and publishes the event to the broker. It then can either treat response as a pubsub, acknowledged-level message, or an RPC style message. Broker gets message and generates a global transaction ID that can be used to trace all further emitted messages as well as handling final response to the originating service. It ack-responds to the originator with the ID. It then has a logic chain based on the name of the event message and can make calls to other services such as the communication service that may email or SMS message someone. Comm service acks upon successful receipt of message, then on delivery responds with any resultset. Broker then receives that result set and checks to see if it has completed all tasks for that transaction. If so, it responds with the results of all tasks (or a defined response using a subset of data from results) to the originator.

All services are idempotent and communication is via RabbitMQ to support fabric changes and persistence/guarantees of delivery.

Services themselves are RESTful HTTP API for manipulation of the specific nouns they are in charge of. It's allowed us to separate concerns to a surprising degree and formalize business logic in a single area (the broker) for event-driven behaviors. It also gives us the flexibility to interface with third party services in a manner that was impossible given the previous disastrous code.

<comment><USER8> I spend my days dealing with such a system, action-at-a-distance, grepping and hoping you found everything related, and to which I'll add: every variable declared global, so that whenever you see a part of the program which doesn't appear to initialize the variable, it might be (a) a bug, or (b) a dependency upon a human operator process that has hopefully caused a different part of the program to have already placed a value there. In the presence of multiple users it can be a kind of slow-motion race condition.

"The beshitted legacy system" is a more eloquent turn of phrase for it than anything I've yet conjured up, so I salute you.

<comment><USER6> Oh yes, we have globals on an, erm, "global" basis. As a bonus, this codebase was originally written to be entirely flat-file driven and later database bolt-ons for large portions were merely backups for those files. Of course, being dependent on flat files the code helpfully avoided any use of OS- provided locking and instead implemented a lockfile system that checked for existence of lockfile, if not exists then wrote that file and proceeded to modify the data file (and never appended, just rewrote). If the lockfile existed, it checked for existence 10,000 times and if the file was still there, it deleted it and then proceeded. Because counting to 10K takes a long time on a computer. And because nothing could actually create a lock between the time the code checked for existence vs creating its own. And because anything any other script is doing that takes more than counting from 1 to 10k is worth writing, so just overwrite. And that slow script would never overwrite your write. _sigh_

The most amusing part of that last bit was presenting concurrency tests that showed any concurrency > 1 insured corruption (because the C-level who chose the original contractor/employee refused to believe the actual logical argument of its faults) and still having to deal with arguments about how "it hasn't happened yet!" "Your house has never burnt down, yet you own insurance. And as an aside, I will note that it has happened on several occasions. You've just never had to actually solve it and your prior monkey kept you in the dark about it."

</comment></comment></comment><comment><USER9> How are microservices really different from SOA?

<comment><USER10> SOA is a lame enterprise approach, whereas microservices are a cool hacker approach.

If someone knows a non-flippant difference between SOA and microservices, i'd be interested to hear it.

<comment><USER11> Some people like to give every nuance a new name. This seems especially prevalent in software development. I mean how else you going to get people to buy new books and read your blog posts?!

</comment></comment></comment><comment><USER12> One of the best known proponents of a Microservice architecture is Netflix. Adrian Cockcroft has been talking about it at conferences for quite some time now (e.g. [http://www.youtube.com/watch?v=wyWI3gLpB8o](http://www.youtube.com/watch?v=wyWI3gLpB8o)).

Netflix is known for opensourcing a whole suite of infrastructure components which allow to run a microservices architecture on AWS ([https://github.com/Netflix](https://github.com/Netflix)). These include various configuration management tools, event buses, monitoring solutions and much more.

To my mind, the most important benefits of a microservice architecture are a clear separation between teams working on different services and the ability to upgrade said services autonomously without stopping/breaking the consumers which allows for fast iteration. The important point is you don't just replace services, but introduce new versions and automatically retire old versions when all of the consumers upgrade to the new ones.

</comment><comment><USER13> I feel like one of the major benefits is being able to use the right language for the job. I can't be the only one who cringes at the thought of writing a large scale webapp in js, but writing my rendering logic in python on the backend and again in js for the frontend breaks dry. With a SOA you can split the backend into an API and have a presentation/routing layer in js that sits in front of it. This can use something like react to emit plain HTML from the server, and then that same react code can kind of re-bind to the generated dom on the client (using the exact same backend api!) giving you a single-page-app experience _with_ graceful degradation and fast server side rendering for nearly no extra development cost. A guy can dream...

</comment><comment><USER14> > ...communicating with lightweight mechanisms, often an HTTP resource API

HTTP is great and all but it's not lightweight. I'm curious what happens when each incoming HTTP request from a client cascades into 5-10 HTTP requests inside your "Microservices" ecosystem. Does that scale? Granted, these may all take place on the same box but that still seems wasteful. Then there's the challenges of making sure each piece of the architecture is working correctly - and if it isn't, are you safely handling the error/routing to a known working node, etc?

Sounds quite difficult to cope with in practice.

<comment><USER15> Seems to me if you start writing your app with a service oriented architecture in mind then you have the flexibility to make your calls to services either in memory function calls or HTTP requests/RPCs.

One example case: you write a monolithic Rails app that is structured around services but all services are in memory service objects. In production you find that your search service is both doing far more work than your other services & getting queried more often. So you refactor your application so that a call to the search service is no longer an in memory function call but instead an RPC to a group of servers that only handle the search service and have been rewritten in Java/Go/C++ to be blazing fast. Since you wrote your app with services in mind, you probably don't change the API at all, it just becomes a wrapper for an RPC rather than a class in your monolithic app.

This way you don't automatically bulk up on unnecessary, expensive HTTP requests but you maintain the flexibility of optimizing modules of your app for performance.

<comment><USER16> This reminds me a lot of the way Twitter and Netflix migrated from large monolithic applications to microservices. At Twitter they used Finagle for service discovery and RPC calls.

The complication arising from splitting into microservices is that tracing and profiling calls become more difficult. So you have to start using new tools like Zipkin.

[1] [http://qconlondon.com/dl/qcon- london-2014/slides/BrianDegenh...](http://qconlondon.com/dl/qcon- london-2014/slides/BrianDegenhardt_RealTimeSystemsAtTwitter.pdf) [2] [http://qconlondon.com/dl/qcon- london-2014/slides/AdrianCockc...](http://qconlondon.com/dl/qcon- london-2014/slides/AdrianCockcroft_MigratingToMicroservices.pdf)

</comment></comment></comment><comment><USER17> _> We do not claim that the microservice style is novel or innovative, its roots go back at least to the design principles of Unix._

And that's the first thing that I thought.

<comment><USER18> Yeah but instead of using pipes we add the overhead of sockets and HTTP traffic, joy!

<comment><USER13> Do pipes have a good mechanism for communicating over a network in Linux? Genuinely curious. Seems like the benefit of http is that services can live on the same machine or some other machine or a cluster of machines and it won't require anything but changing an address in a config file.

<comment><USER19> That's also the 0MQ use case to be as lightweight as a pipe but networkable.

<comment><USER20> ZeroMQ is a great idea, but the implementation falls far short of the project's stated goals.

I've tried to use it several times but I've run up against limitations built into the design that make it infuriating to use. Mostly this is due to how ZeroMQ goes out of its way to hide the networking details and refuses to expose them even if you need to know.

</comment></comment></comment></comment></comment><comment><USER21> "One main reason for using services as components (rather than libraries) is that services are independently deployable. If you have an application [4] that consists of a multiple libraries in a single process, a change to any single component results in having to redeploy the entire application."

Sounds like some time an research on why we call something a component and then cannot replace it at runtime. I understand erlang has some features in this area.

<comment><USER22> Calling them components seems reasonable to me. You generally can't replace components of physical machines while they're running either.

Edit: By machines I meant the physical world we borrow our vocabulary for abstractions from, not servers. You can't change the tires on a car while driving it, or the belts on a vacuum while cleaning.

<comment><USER21> "You generally can't replace components of physical machines while they're running either."

For some servers and mainframes you most certainly can replace components on the fly. It is a requirement for some places.

</comment></comment></comment><comment><USER23> It requires a lot more infrastructure work to have this type architecture. In addition you move a lot of the complexity of your application to the interface level between the microservices.

I think it has a good use-case if you have one resource-intensive part of your application that has different scaling or completion time parameters than the rest of the application.

For large complex systems it's also a form of code-reuse across several different systems.

</comment><comment><USER24> I really got into microservices a couple years ago and even wrote a pretty cool proxy in node to write polyglot api's using microservices. I called the project/protocal Radial ([http://radial.retromocha.com](http://radial.retromocha.com)) but it never really caught on.

Perhaps it was ahead of its time, or maybe the idea just wasn't very good. I really don't know, but it's cool to see the same ideas popping up again.

</comment><comment><USER25> It's not that surprising that microservices are a good idea.

It is a fundamental truth that software adopts the structure of the teams that create it. At whatever level you inspect it, microservices/SOA mirror most team structures more closely than any other model.

This makes the architecture easier and more natural for teams of human beings to handle.

</comment><comment><USER26> Its interesting that this article hit the front page on the same day as:

[https://news.ycombinator.com/item?id=7378764](https://news.ycombinator.com/item?id=7378764)

Tools like ansible allow you to do really cool things with microservices

</comment><comment><USER27> Fred George posted talks on microservices, using Apache Kafka as a message bus to connect language-independent components for marketing and ad-targeting.

Interesting approach. I'd like to see examples of microservices applied to other domains.</comment>


US unemployment falls sharply … so Fox News just fiddle the graph - <AUTHOR> http://politicalscrapbook.net/2011/12/fox-news-unemployment-graph/ <comment><USER2> I turn to Fox News every time I run out of Onion News Network episodes...</comment>


The True Cost of a PhD: Giving Up a Family for Academia - <AUTHOR> https://www.jamesgmartin.center/2019/10/the-true-cost-of-a-phd-giving-up-a-family-for-academia/ <comment><USER2> "colleges and universities must find a way to allow those pursuing academic careers to obtain the basic goods that most people seek in life: marriage, a family, and a career to support themselves. The price of pursuing a life of the mind shouldn't be the rest of one's life."

Wait, why is this the universities problem? If too many people want to get phds than our society can support, then less people should get phds. That or they'll get stuck in the current academic grind.

Any PhD student should be well aware of the career difficulty that follows, particularly if they want to be a professor. There's no lack of articles like this one pointing out that fact.

I got my PhD but went in well aware that I don't want to go thru the ringer trying to be a professor. I'd love to be one, but not willing to sacrifice so much to be one.

So I choose to do industry from the start. The PhD wasn't the most financially advantageous move but I loved it for the 6 years I was there and wouldn't trade it for the "sunk cost".

<comment><USER3> > Wait, why is this the universities problem? If too many people want to get > phds than our society can support than less people should get phds. That or > they'll get stuck in the current academic grind. Any PhD student should be > well aware of the career difficulty that follows, particularly if they want > to be a professor. There's no lack of articles like this one pointing out > that fact.

But I think there very much is a systemic effect that _everyone_ is missing because it happens so slowly.

Fundamentally, if the number of academic positions remains constant, then each professor only needs to train one PhD student looking to enter academia _in their entire career_.

OK, maybe 1.1 to deal with deaths or other sorts of natural attrition. But think about that for a minute, and then think about how many PhD students a typical professor actually trains in their career. That level of "production" is OK when the number of academic positions are expanding at a similar rate. But they're not expanding at any where near the same rate these days; instead, there are longer and longer "holding patterns".

And this introduces a pattern where the "holding patterns" get longer and longer, but people don't really notice. Professors who got their PhDs in the 70's didn't do any post-docs, or maybe only a year or two. Professors who got their PhDs in the 80's or 90's did a few years, but not many. PhDs _getting jobs_ now in some fields can expect to have post-docs for a decade; but people _getting PhDs_ now will have even longer waits.

So PhD students "should be well aware", but 1) the people advising them almost certainly had a much easier time than the people currently in the pipeline, and 2) it will almost certainly be much worse by the time they actually want to get a job. Add to that that it would be nearly impossible to perform modern academic research without the army of PhD students and postdocs being paid slave wages, so there's very little incentive to give students a realistic picture of what their chances actually are.

So yes, it _should_ be up to universities and research institutions to set up a sustainable system.

<comment><USER2> Two counterpoints:

1) There's _tons_ of other reasons to get a PhD than to become a professor. So the number is a lot higher than 1.1.

2) I can only see it as naive on the part of students to think they can become one unless they're able to be in the top ~5% of grad students and then work incredibly hard for 10 years. We should be telling everyone this. And encouraging professor aspiration only for PhDs with the heart for this. If we did that then the universities would work things out. But expecting the universities to fix the problem is backwards because they have zero incentive to.

<comment><USER3> > There's _tons_ of other reasons to get a PhD than to become a professor.

Sure; that's why I said, "PhD student looking to enter academia". CS PhDs for the most part go into industry (as I did). But if you're a CS prof, you should basically default to telling all of your students _except maybe three in your entire career_ to plan to go to industry. The same thing should hold for physics/chemistry/biology/history/whatever profs: if you have more than one PhD student _per decade_ going on to get a post-doc, you're failing your mentorship duties.

<comment><USER4> > But if you're a CS prof, you should basically default to telling all of your > students except maybe three in your entire career to plan to go to industry.

Except it's not like 3 PhD students from $topschool become $topschool professors while 3 students from $randomschool become $randomschool professors.

What happens is the top students from top schools become top schools professors. The middling students from top schools become professors at random schools. The students from random schools are unlikely to become professors anywhere.

So if you're an MIT professor you can encourage more students into academia. If you're a random school professor, you should encourage them all into industry.

</comment></comment></comment></comment></comment><comment><USER5> This topic is difficult to address in general and world wide. What I can say is: My wife and I graduated in Germany, we both had a net salary/scholarship beyond 1200€/m, so we could easily afford anything baby-related. This would even have been possible with only a single salary -- having a baby is not expensive if you don't follow your urgent need for a house or car. In a German city, one can raise a kid in a single room apartment and study half time -- and this does not meet the national (or my subjective) definition of "poverty".

The actual problem is time. Having a baby, I felt the lack of time every day and night. I could not do as much for science as I wanted to. That definitely reflects in the grades and scientific publications.

<comment><USER6> Did you have access to health care? In the US, having a baby while in graduate school was profoundly risky from a financial standpoint, and there was a strong bias against women who had kids. I knew families that were bankrupted. Also, they had to completely drain their finances in order to qualify for some forms of public assistance.

<comment><USER7> As far as I know, it's quite uncommon an _any_ OECD state other than the US to be without quite good coverage for health care bills and medical bankruptcy is even less common—I hesitate to write "unheard of" because I'm sure there are some exceptions somewhere, but it fits the colloquial use of "unheard of", certainly.

<comment><USER8> It would be "unheard of" in the United States for a Ph.D. student in a normal program to not have good health insurance and the birth paid for. The stipend in the US is ridiculously low, and I can see having trouble affording to take care of a baby, but it is not going to be the medical costs that get you.

<comment><USER9> Do universities pay for health insurance for PhD students? In my experience, an uneventful birth costs $3k to $5k, with insurance, and it all depends on if the pregnancy costs occur in the same calendar year to avoid resetting the out of pocket maximum limit.

</comment></comment></comment></comment></comment><comment><USER10> The only reason to pursue a PhD is interest in the subject matter. You don't have to have all consuming passion and love but you have to be genuinely interested. Those who do it because their parents have phds or their colleagues, or they want "dr" in front of their name, in other words, for vanity, prestige or to further their career usually never do well. Either because they start at a later point in their lives, lack the dedication or drive to go beyond the call of duty. A phd is always about doing 110% of what is expected.

In my field (physics), the expectation is to finish a phd within 6 years of completing your undergrad. If you have a good project or work hard 5 years is doable, 7 if you are a good student but got unlucky. This means the average age out of graduate school is between 26-31, depending on what country you received your undergraduate in. That is more then enough time to still start a career or work on other life goals. It's when you take longer then this timeline that things start to go wrong, for both futures in academia and industry and your life and mental health in general.

A mediocre phd is worse then not doing a phd and there are plenty of those around but those who do well (not exceptional geniuses by any means!), a phd will open many doors even if you do not pursue a further academic career.

</comment><comment><USER11> Man, seemingly every week on HN there's an article attacking PhDs as monastic pyramid schemes for the foreign, financially gullible, and unemployable.

As a 5th-year computer science PhD student (graduating next semester!) I think this characterization is unfair.

With summer internships, I have made about 40k per year over my PhD, which was more than enough for anything I wanted. I only had to TA for one year. The jobs available to me now are much more interesting than the ones available to me 5 years ago. With the help of a great advisor, a few other hosts and mentors, and fellow grad students and postdocs, I've learned a lot about (and now, made some contributions I'm proud of) to a couple of areas of research. As someone who enjoys research, that has been a very rewarding process.

This is not a universal truth. Things might be much worse if I had dependents, had a bad stipend, had a bad advisor, or did not like research. But in my case I had none of these complications, and I'm glad I did a PhD — not just to have the credential, but to have had the fun experience, grown, and now have a research future I'm pretty excited about.

<comment> barry-cotter Your experience is atypical for Ph.D. students though not out of the ordinary for CS Ph.D. students. There are other fields that are similarly well situated like Economics, with plentiful internship opportunities and great options after the Ph.D. that aren't academia.

Even for you in CS and the others in fields where the average position is ok a Ph.D. is a pretty bad bet monetarily but if the consumption value is high enough, great, it's worth it even if you never even wanted to be an academic. But you gave up a lot in forgone earnings and in work experience and if you're lucky you'll make it up in a decade. The work experience might be a wash depending on the field you end up in. The forgone earnings will not be a wash.

If you'd decided to do a Ph.D. in Comparative Literature there would have been no internships, a poor stipend, wild competition for academic jobs and no real demand for your skills and expertise outside academia.

If a Ph.D. was worth it for the consumption value for you that's great and it's fantastic that there exist fields that have similar teaching demand, stipends and exit opportunities. But the Ph.D. hate is to tell people

 _Are there any jobs in this field or demand for its graduates? If not it will be bad. Stay away._

<comment><USER12> My impression is that a PhD in CS can be beneficial in industry, but the benefits generally derive more from the kind of work you get to do, not in the salary you earn. Some positions available "only" to PhD holders may allow you to bypass many of the unpleasantries in software engineering (technical whiteboard exams, SCRUM, limited autonomy, deadline pressures), but they don't necessarily pay more. And if you do go for the SWE position, a PhD won't keep you from having to go through the SWE hiring gauntlet.

I say this based mainly on personal experience and some browsing of positions and salaries with limited data. I'm a onetime doctoral student who left with a MS and went over to Sun Labs for a bit. Salary-wise, the newly minted PhDs didn't really earn much more than the newly minted MS students[1] - and almost certainly less if you compared them with MS holders who had spent the last 5 years working. But I did get put in giant due diligence projects where I had to recreate and verify ever SQL query in a giant operational software system, while the PhD researchers pursued more interesting projects with greater autonomy.

And if you're the sort who will burn out and decay to poor performance if you're bored, it could make a difference. We can compare MS to PhD generally across a population, but we can't really compare them for the same person. Fortunately for me, I actually like digging into long, complex, chaotic data pipelines, and if you find you enjoy something high impact and complicated that bores people, well then, that's not a bad way to get paid. But if you don't like it, that's a recipe for misery.

I believe, strongly, that we greatly overproduce PhDs, even in employable categories like CS (mainly because I think many of these CS PhDs would have found equally if not more fulfilling work at a potentially higher salary without the long years in grad school). Some people just need to do the PhD style work if they're going to succeed in life, and for them, more time in grad school combined with no clear _financial_ advantage may hide a number of benefits they get from these jobs.

[1] one aside - salaries were notably lower for engineers and scientists in tech companies back then. This was back in the 1999/2000 - I was a grad student at Berkeley, and I was shocked by how much lower all engineering starting salaries were, at the MS and PhD level, than salaries out of the law and business schools, especially since the companies that were responsible for this pay disparity were lobbying congress fiercely to do something about this critical shortage of US citizens studying graduate engineering and science. My impression is that this gap has closed considerably since then.

</comment></comment></comment><comment><USER13> "At least with medical school, Peter said, the job prospects are better. New doctors begin making $60,000 and their salary increases by $20,000 a year during residency."

Actually not true. A resident's salary might increase by $20k between the start and end of their training (esp for intensive 7-8 surgical programs), but most programs only increase salary by $3,000 per year. In the following tables, PGY stands for post-graduate year, and extends from residency into fellowship if you choose to do one. Usually the salaries are the same for all residents, regardless of whether you are training to be a neurosurgeon or a psychiatrist.

[https://med.virginia.edu/gme/program-resources/salary- benefi...](https://med.virginia.edu/gme/program-resources/salary-benefits/)

[https://www.hopkinsmedicine.org/emergencymedicine/em- residen...](https://www.hopkinsmedicine.org/emergencymedicine/em- residency/benefits/index.html)

<comment><USER14> I read that and immediately thought 'that'll be news to my surgical resident friend'.

</comment></comment><comment><USER15> This is an interesting article, but I feel like it only vaguely addresses the root of the problem of grad school in the US(in my opinion). The root problem is that your grad school experience is highly dependent on what university you go to and who your advisor is.

I recently finished my PhD in physics from a top university earlier this year. During my time there, I was paid enough to live comfortably (~35k/year) and had amazing free health care. My advisor was great for the most part, and I had amazing opportunities and experiences that I would not have had otherwise.

On the otherhand, there are other grad students who have terrible advisors and/or at institutions with less resources and opportunities.

</comment><comment><USER16> > American universities graduated 100,000 new PhDs but only created 16,000 new > professorships

Here we go again - this weird idea that the only purpose for doing a PhD is to become a professor.

<comment><USER17> It's the one job that _requires_ a phd so it's not weird

<comment><USER16> I don't think that's really an absolute requirement - there are full professors without PhDs.

</comment></comment></comment><comment><USER18> I wanted to share my experience. I was a foreign student doing a Master in the US, with several other schoolmates. 3 of them decided to pursue a PhD after their master. We all understood that a Master is done in 2 years, a PhD in 3 years. So they all completed their PhD in 3 years, not a month more. But I met many students, in the same field, some with the same advisors, who were 5+ years into their PhD with no end in sight. I think a lot of it came from the state of mind. My friends had a very specific time lime to finish their PhD in 3 years and they followed it, pushed their advisors when needed, etc. There was never any doubt that they would be done after 3 years. Whereas others started an open-ended journey with no clear goals.

</comment><comment><USER19> "Solve for the equilibrium": Only the tiniest fraction of superstars, those with nothing better to do, and foreigners from poor countries will go for a PhD. Beyond that, the talented will avoid the PhD.

</comment><comment><USER20> This article and the sad reality it portrays reminded me of Episode 16 of Timesuck: "Is we getting dumberest?"[0] The most obvious conclusion to be drawn is that the brightest and most educated members of our species are incapable of producing offspring because our society does not support them economically. Throw another reason into the "why we're getting dumber" bucket.

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

</comment><comment><USER21> The comparison of pay between what PhD students get in the US vs other countries is plain silly. It's apples to oranges, the cost of living can be an order of magnitude different, which is not mentioned even once, favoring the absolute number comparison as a good thing.

Beyond this the article talks about low stipends, while an important topic of conversation - nothing new.

</comment><comment><USER17> I dont see a problem with that. Too many people in research - market needs correction.

</comment><comment><USER22> I would love to have a PhD, and the associated prestige. I like academics and would probably enjoy the classes.

I looked into it a few years back, I was absolutely stunned at the amount of institutional butt-kissery that was associated with it. That, and the fact that most of the PhD programmers I know are not any different from the average has convinced me to stay put.

<comment><USER16> > enjoy the classes

But you don't really do 'classes' as a PhD student. At that point you should be the world expert in your subject so who would be teaching you :)

<comment> barry-cotter > But you don't really do 'classes' as a PhD student.

In the US almost all programmes begin with a two year long Ph.D. student period at the end of which, assuming you pass your qualifying exams you can drop out with a Master's. Once those are done you absolutely must focus on research though if you haven't started on it already you're behind. After the Master's you're a Ph.D. candidate. Somewhere in this period, if you're doing it right you're very likely to become the world's leading expert on your particular, extremely narrow field. Then, or while becoming that expert you write up your thesis, defend it and get the degree.

In the UK it's still possible to go directly from Bachelor's to Ph.D. candidate and be done in three years but the trend is away from this, at least in the exact and social sciences.</comment></comment></comment>


Authenticated Data Structures Generically - <AUTHOR> https://github.com/adjoint-io/auth-adt <comment><USER2> This stuff is _much_ simpler than it sounds, and that's a good thing.(1)

The intuition here is that with hashed data structures like merkle trees, if you and I agree on a hash digest, then we also agree on all the data hashed by that hash digest. Since you can hash a hash digest, this agreement operates recursively.

When we talk about a "query", all we're really saying is Alice wants to prove to Bob that if he runs some function on some datastructure, he'll get a particular answer. For instance, Alice might tell Bob "Hey, you know that merkle tree we both agree on? If you run get_index(10) on it, you'll get the value `foo`"

She can _prove_ that to Bob, by running that operation _herself_ on her computer, and then recording _what_ data was accessed during that operation. Next, she serializes that data, and replacing the parts that weren't accessed with their hash digests. Finally, she sends that partial data structure to Bob.

When Bob gets that data, he first hashes it to make sure the root hash digest actually matches what he expected. Next he runs the operation, which will return the same result as when Alice ran it. This is a proof for a very simple reason: _both_ sides ultimately did the exact same thing!

If it helps, think of virtual memory: the data that Bob is missing, is similar to a page in memory that has been flushed to disk. Unless your computation actually needs the data in that page, it'll run successfully even if your disk isn't working.

So why does all this matter? Basically, this is _exactly_ what blockchains are supposed to do: let multiple parties verify the same thing is true, based on the same data. So in, say, Certificate Transparency, the operator of the CT log can generate can extract one of these proofs to convince the webbrowser - who doesn't have all the CT log data - that yes, if you run the operation "fetch cert #12345 from CT log" it will in fact return the cert they're expecting it too (in other words, CT already does exactly this). Where this improves on naive blockchains is simple: now you don't have to have the whole blockchain to verify something.

I actually did a Python implementation of these ideas years ago for a client: [https://github.com/proofchains/python- proofmarshal](https://github.com/proofchains/python-proofmarshal) I'm also (slowly) working on a Rust implementation.

FWIW, I think it's an awful example of how a really good idea has been explained terribly by academia. It actually pre-dates Andrew Miller's paper, but the previous example I found never caught on, likely because no-one understood what they were talking about. Heck, Andrew himself tried to explain it to me years ago, and I didn't get it, then went on to reinvent the same thing, which I only realized about another year later. We really need to find better ways to bridge those two worlds. :/

1) EDIT: And to be clear, I don't mean for that to come across as a negative way! Rather, it's good that academics have thoroughly proven these techniques actually work. But for programmers, the mechanics of those proofs aren't necessarily all that important. Same as how you can use calculus effectively to solve many problems without necessarily understanding in detail how we actually proved it worked.

<comment><USER3> This was a big barrier to learning for me for a decade or more. As books and papers related to algorithms I needed to implement seem to always preoccupy themselves with proving to me that what they are saying is true, or illustrating the derivative insights that lead them to the discovery.

Reading them I would find myself thinking "Nice, such a lovely history of your enlightenment, but HOW!!?? How do I do it!?!"

For an embarrassingly long period of time, I misinterpreted these discussions to be a breakdown of a process to it's constituent parts. The 'proof' that it is correct is of passing concern to me. Like headache medicine on the shelf. Have you proven this compound won't kill me (quickly), great I'll take a bottle because I have a headache from reading the theoretical validation of cache-oblivious algorithms when what I need is a practical discussion of how to implement Funnelsort.

It's like there is a missing level of academic publication in which the initial proof, is supplemented with a paper on implementation. Here we prove this is correct, and here we implement one with Elmer's glue and popsicle sticks. We see publications on implementation if course, but they are usually much later and by different people. I don't mean to devalue anything in the existing academic process. I just feel there is a missed opportunity to communicate better by explaining things from the practical(aka outside) side in, in addition to the theoretical foundations (aka inside) out.

It would be nice to have it from the horses mouth, so to speak, by making such explanations a more formal expectation of academic papers.

<comment><USER2> I think a lot of that problem just stems from mismatched goals(1) and mismatched skillsets. Academics are rewarded for pushing academia forward, which means rigorous techniques that others can build on top of. But what those trying to use those techniques need are good models that they can build _with_.

Secondly, the skillset required to explain something well doesn't have all that much to do with the skillset required to rigorously prove things. Sure, they overlap a bit because you need to have a reasonably good understanding of something to explain it, but that's where it ends. It's can also be quite a lot of work: I personally have made a bit of a career out of explaining this tech to people, and it's taken me a lot of work figuring out explanations that actually resonate with people.

Unfortunately I don't really have any easy solutions to solving this problem.

1) I'd say mismatched incentives, but I don't want to imply anything nefarious about this problem in general!

<comment><USER4> Programming is harder than proving. Well, programming poorly is easier than proving, but making something that you could release and won't look like gum and bailing wire is harder than proving. You wind up with a gum and bailing wire implementation that lives in your home directory until your laptop dies, and then you realize that nothing of value was lost because it has been years since you touched that project, and you move on.

Proofs are the ideal artifact for a researcher because they don't require maintenance and don't have users. Think hard, write it down, publish, and move on. Academia punishes researchers that create and maintain tools for other people to use (for an example, look at the Sage people) and rewards researchers that publish papers.

As a researcher, this feels wrong and frustrating, but there's really nothing I can do about it from within the system, or they'll kick me out for not publishing enough papers.</comment></comment></comment></comment>


Bing has cars in Silicon Valley? - <AUTHOR> https://twitter.com/cykho/status/441345223172444160 <comment><USER2> Yeah, I saw one a few weeks ago when I was showing my fiancee where we'll be living. She got really excited to see a google street view car, only to be flabbergasted. Normally the gast level of her flabber is pretty low, but this time it was off the charts. I didn't know Bing has street view, but if I had thought about it I guess I should have realized that if Bing doesn't have it, they're obviously planning to implement it because to do otherwise is to be totally braindead.

<comment><AUTHOR> Haha - I was excited too! They guy was super nice and even stopped so I could take a picture :)</comment></comment>


Ask HN: How safe is Google / Facebook sign in the long term? - <AUTHOR>

Given that almost every useful websites allows you to sign on using Google Plus or facebook its easy to sign up for various sites. But what happens to your data once you stop using the third party site and revoke access from Google plus or facebook?
Looking to understand how safe is using Google/Facebook single sign on on site from a  LONG TERM privacy perspective.
What are the advantages and disadvantages of using single sign on in the long term on a users privacy. <comment><USER2> I wouldn't know I never use that kind of login.

That is, if a site doesn't permit me to log in on just that one site then I don't sign in at all. It is for that reason that I never comment on Medium, as it only permits Twitter or Facebook sign in.</comment>


Guix [almost] ported to GNU/Hurd - <AUTHOR> http://[GSoC update] Porting Guix to GNU/Hurd

<comment><USER2> Is there a link on this post? I'm just seeing

         <a href="http://[GSoC update] Porting Guix to GNU/Hurd" rel="nofollow">

and yet this post has 5 upvotes and is on frontpage #1 right now? Spambots? Why exactly are people upvoting this for?

<comment><AUTHOR> Hum, how is this possible ? HN rejects empty submissions, I did copy this url [https://lists.gnu.org/archive/html/guix- devel/2015-08/msg003...](https://lists.gnu.org/archive/html/guix- devel/2015-08/msg00379.html).

... Does not compute. Sorry anyway.

<comment><USER2> I think you pasted the title into URL box and it doesn't have a good validation.

<comment><AUTHOR> Not to my knowledge but anyway. Somebody resubmitted the news with proper URLage so all is well.

</comment></comment></comment></comment><comment><USER3> dead link on Edge</comment>


What is the value of a Computer Science degree? - <AUTHOR> http://www.snell-pym.org.uk/archives/2012/02/20/computer-science/

<comment><USER2> The phrase "You have to start somewhere" comes to mind. A CS degree is a more formal and substantial pursuit than what you may have picked up doing it yourself. Could you code without a degree? Of course. Are you very likely to be a better developer after completion? Yes.

I think a lot of it comes down to establishing a set of tools that can be used for whatever problem you encounter. No matter the language or the problem you want to have at least a vague idea of how it might actually work. Further, when you in inherit a code base, you want to have the tools to dig in and find out how the thing works. And when problems arise, you want to be able to get inside the black box and ask things like "Does this result make sense."

A big missing piece in a CS degree is an understanding of the SDLC. The use of svn, tagging and build scripts is essential to any software development effort, and yet it is rarely mentioned. Creating elegant algorithms is great fun, but when the client is screaming that the code doesn't work and all you can say is "works on my machine", you'll wish you had the warm blanket of a proper build process.

<comment><AUTHOR> That's a good point - version control and build/release process management are all too often reinvented from scratch after initial painful experiences in the field!

</comment></comment><comment><USER3> The diploma and $5.00 will get you a mocha at your average coffee shop. Seriously, the question is too general for a specific answer. Best I can come up with is the classic 'It depends'---specifically on the details of the degree. Is the emphasis on programming? Algorithms (care and feeding there of)? What approach does the degree take towards hardware? Given advances at the quantum level this last takes increasing importance. What does the degree holder plan on doing with same? Will the details attract those who are hiring? Those are just a few of the questions that come to mind without really getting into the problem posed by the question. Think of it as a crap-shoot and roll the dice---see what happens...

</comment><comment><USER4> Yeah, I agree with @hsmyers - the question is extremely general.

I will say, however, that a CS degree does provide the basic programming and debugging skills necessary for a career in software engineering. The downside is that a 4 year degree is quite pricey, and much of the content of a CS degree is more theoretical and less applied.

I recently had an interesting conversation where a fellow programmer made the argument that CS was splitting into two branches, much like mathematics: applied CS and theoretical CS.

I think this is an oversimplification, but largely correct. A traditional CS degree is about 20% programming skills, and then lots of math problems to solve.

The time is ripe for a good software engineering degree (i.e. applied CS), which would be far more valuable in the job market.

<comment><AUTHOR> It's a general question, but the linked article explores it from a few angles of different kinds of career :-)

It agrees with your points - a split into applied and theoretical would probably be a good thing. The programmers I work with in the UK seem to come from physics/mathematics backgrounds, or electronic engineering, with just a few CS graduates. All of them (even the CS graduates) feel that a large proportion of what they learnt on the degree is irrelevant to their career going forwards. A degree focussing on practical software engineering would probably be very useful!

</comment></comment><comment><USER5> I did some research into the options available in the UK and was quite pleased to see that there are some good "Software Development" or "Software Engineering" degrees at Masters level:

<http://www.google.co.uk/search?q=msc+software+development>

These seem to be a good alternative to "computer science" degrees at the same level.

</comment><comment> bulte-rs No troll intended, but it looks nice in a frame. That's all there is to the degree itself.

The experience of getting the degree itself though....</comment>


Show HN: Fnm – Fast and simple Node.js version manager built in ReasonML - <AUTHOR> https://github.com/Schniz/fnm <comment><USER2> Great work, but you'd have to pry asdf out of my cold, dead hands.

[https://github.com/asdf-vm/asdf](https://github.com/asdf-vm/asdf)

<comment><USER3> I have to read the README twice to see what is it about. What is extensible version manager? Managing what exactly. So I guess it's the reason asdf is not popular

<comment><USER4> It replaces gvm/rbenv/pyenv/nvm/etc. with a single CLI. Saves you from having to use multiple shell completion scripts, bashrc entries and CLIs. Useful if you work with multiple dev languages on your computer.

<comment><USER3> And nowhere in the README tells me about that. Your first sentence immediately makes it clear

</comment></comment></comment></comment><comment><USER5> I use nvm currently. Can I ask how this compares to nvm, perhaps issues with nvm that it tackles? Is it performance? :o

<comment><USER6> The problem I have with nvm is speed (running it at shell startup introduces a very noticeable delay), and integration with other shells - it's always been a pain to get it running with fish.

<comment><USER7> I currently have this problem on my zsh setup - is there any easy fix for it?

<comment><USER6> idk about zsh, but for fish there is [https://github.com/FabioAntunes/fish- nvm](https://github.com/FabioAntunes/fish-nvm) which delays executing nvm until you use one of the node binaries. Essentially, node is aliased to `nvm activate && node`

</comment></comment></comment></comment><comment> a-saleh Wait, I assumed this will be a js-app, but it actually is a executable binary?

Is that the courtesy of [https://github.com/jordwalke/pesy](https://github.com/jordwalke/pesy) ?

For some time I wanted to try ReasonML for server-side development, but for some reason I assumed, that most of the ecosystem would be node.js based.

<comment><USER8> Reason is merely a new syntax on OCaml. You can use BuckleScript (BS) to compile to JS, or not use BS to compile to native.

There exists a fast http server in native OCaml:

[https://github.com/inhabitedtype/httpaf](https://github.com/inhabitedtype/httpaf)

<comment><USER3> httpaf is quite low level. We need more abstractions on top of that for daily server development

<comment><USER9> One recent project which builds a usable layer on top: [https://github.com/ostera/httpkit](https://github.com/ostera/httpkit)

</comment></comment></comment></comment><comment><USER10> Maybe I'm completely out of the loop, but what's the deal with running multiple versions of Node?

What particular problems or projects do you have where this is a pressing necessity?

I just install latest LTS and keep that up to date, and I've yet to find a single thing _not_ working.

<comment><USER11> Sometimes you're limited in production by whatever version the OS supports. In the case of Debian installing nodejs doesn't necessarily land you the latest and greatest. The same happens with Python as well. I wish they had a good way to abstract this in Debian and I'm surprised Ubuntu hasn't fully resolved it, I mean Ubuntu does have Snap but I can't trust Snaps fully if the language vendors aren't backing the only available Snaps. But to account for systems where the only version of Node or Python, or whatever is a specific version, you need systems like this.

<comment><USER12> You can absolutely install the newest version of Python and Node on Debian. It is a little harder than just an `apt-get install`, but very possible.

<comment><USER13> Of course you _can_ install it. In many environments it's not considered maintainable to deviate from the distro provided and supported version. Especially when you have support contracts from your OS vendor.

If devs want something different from the distro provided libs we typically ask that they use containers or otherwise vendor them.

Ideally we would like our software to depend on the system for the bare minimum and security critical libs like OpenSSL so that Ops is free to switch out the underlying platform with minimal friction.

</comment></comment></comment></comment><comment><USER14> How does it compare to n?

[https://github.com/tj/n](https://github.com/tj/n)

<comment><USER15> Yea, I use n as well. Seems to do its job and stay out of my way.

</comment></comment><comment><USER16> At this point, I use Docker for almost every project that I work on, and one of the reasons is that Docker allows me to create a separate environment for each project. I don't need to learn multiple version managers, and it works equally well for non-language tools, like Postgres and Redis.

</comment><comment><USER17> As a Python developer, and when docker is not an option, nodeenv is the perfect solution for me, to the point that I have a bash function specifically for creating a Python virtualenv and then installing nodeenv on top.

</comment><comment><USER18> Naming conflict with Fish Node Manager ([https://github.com/jorgebucaran/fish- nvm](https://github.com/jorgebucaran/fish-nvm)), a wrapper of NVM for the fish shell.

<comment><USER19> Yup came here to say this, although I have recently had issue with the Fish Node Manager which had me revert to using nvm.

Issues which made it unusable completely every time I tried to use node it could no longer find the node/npm binaries.

</comment></comment><comment><USER20> Looks like a great project, but really needs documentation.

The only option other than reading the code I have now is screen-capturing the last frame of the gif an looking at what commands were used. Really?

<comment><AUTHOR> Hi! I guess you're `whyboris` from GH. Thanks again for the feedback :D Just noting that I have added a small piece of documentation. The CLI itself also has `--help` flag, and it works also for every subcommand (`nvm install --help` for instance)

</comment></comment><comment><USER21> What's wrong with nodenv?

<comment><USER22> The problem sounds like why do we have nvm, n, nodenv, asdf (and some more) and now fnm?

[https://github.com/nodenv/nodenv/wiki/Alternatives](https://github.com/nodenv/nodenv/wiki/Alternatives)

</comment></comment><comment><USER23> How did you create the .svg terminal animation?

<comment><USER24> Looks like he used this: [https://github.com/marionebl/svg-term- cli](https://github.com/marionebl/svg-term-cli)

edit: yep, see here: [https://github.com/Schniz/fnm/blob/8cb998759ef969685d711eb42...](https://github.com/Schniz/fnm/blob/8cb998759ef969685d711eb4299d91d2b78fe37e/docs/record_screen.sh#L19)

<comment><AUTHOR> yes! such a wonderful library. I've taken the ideas from `create-react-app` :)</comment></comment></comment>