Django Setup using Nginx and Gunicorn - <AUTHOR> http://senko.net/en/django-nginx-gunicorn/

<comment><USER2> Or you could use my Puppet modules which handles this for you on Debian or Ubuntu, using Monit in stead of supervisord: [http://journal.uggedal.com/deploying-wsgi-applications- with-...](http://journal.uggedal.com/deploying-wsgi-applications-with-puppet/)

</comment><comment><USER3> I'm a fan of uWSGI, personally. If anyone's interested, I wrote up (before it was cool) a guide to Django/nginx/uwsgi in more or less the same format:

[http://posterous.adambard.com/start-to-finish-serving- mysql-...](http://posterous.adambard.com/start-to-finish-serving-mysql-backed- django-w)

</comment><comment><USER4> Not a bad how-to...he mentioned the mod_wsgi route and that's the one I'm most fond of. You can still use Nginx to handle all static files and proxy all other requests to Django.

A tutorial link if you're interested: [http://www.meppum.com/2009/jan/17/installing-django- ubuntu-i...](http://www.meppum.com/2009/jan/17/installing-django-ubuntu- intrepid/)

</comment><comment><USER5> _> The best seem to be Gunicorn and uWSGI, and Gunicorn seems the best supported and most active project._

This is not so cut and dry. In May, Gunicorn had 12 mailing list messages, where uWsgi had 191. uWsgi has a twitter with 225 followers, where Gunicorn has none. #gunicorn@freenode has 32 users, but #nginx@freenode seems to have a lot of uWsgi users.

Also, the author mentions nothing about installing the Nginx PPA for ubuntu. If you use the default repo on Lucid (as suggested by the author), you will end up with a very old version of Nginx that doesn't even natively support wsgi.

<comment><AUTHOR> > _If you use the default repo on Lucid (as suggested by the author), you will > end up with a very old version of Nginx that doesn't even natively support > wsgi._

Nginx+Gunicorn combination uses HTTP, so WSGI support is not needed in that case.

<comment><USER6> uWSGI supports HTTP and FastCGI too, natively. Using the uwsgi protocol (that has nothing to do with WSGI standard) is only a way to increase performance and add a bunch of features. uWSGI and gunicorn are very different projects, with very, very different targets. Trying to make a fair comparison is impossibile.

</comment></comment></comment><comment><USER7> I'm not clear on the advantages of using nginx+Gunicorn over nginx+proxy-to- Apache/mod_wsgi

<comment><USER8> Its not really hip and trendy, its the standard way to go now days. The advantages to me are, Nginx is much lighter on resources for any given number of concurrent connections. I can keep those connections open if I really need to, and I have found it flexible enough for almost all scenarios (hosting SVN is the one thing I can think of that it doesn't do, but SVN's days are numbered for my usage anyway and http1.1 proxying backends).

Nginx's syntax for its configuration tends to be easy to read, the community is helpful. Its also well tested and hosting a decent percentage of websites.

I question the need to use Apache2 these days and anyone who blindly recommends it without knowing the alternatives as they tend to be uninformed about modern hosting environments.

<comment><USER7> That's why I run Apache+mod_wsgi behind an nginx proxy (and have nginx serve up static files etc directly).

</comment></comment></comment><comment><USER9> This is pretty much my exact setup when rolling a custom server, sans-Upstart (I prefer supervisord just because it's what I'm used to).

</comment><comment><USER10> Am I the only one who's never had gunicorn crash on him? I don't run supervisor or anything, but I've never had any issues either.

<comment><AUTHOR> I run supervisor to be able to restart servers at will. I've never had gunicorn crash at me.

<comment><USER10> isn't that want init.d scripts are for?

<comment><AUTHOR> You could also write those, yeah. I mentioned Upstart, which is a replacement for init.d scripts in Ubuntu. There's also djb's daemontools, and a couple of other ways to do it.

</comment></comment></comment></comment><comment><USER11> Everyone always shows a single server setup. What if you have a dozen sites? You can't just give each one 9 processes, you will swamp your box. Is there any way to do a master setup where you can dynamically feed it your settings file?

<comment><USER12> If you're already running a dozen sites on one server, collectively they're probably not getting very much traffic. You may very well be able to use a large number of processes just fine.

<comment><USER11> That is probably true CPU wise, I am just worried about memory. If each process is 50 MB and you have 12 servers and 9 processes per, that is over 5 GB. If my machine only has 4 GB of RAM some of those processes must be in the swap file.

<comment><USER13> you can do pretty well with 1-2 processes per site; if you don't have the traffic to warrant it, there's no reason to run more. gunicorn can also use an async worker type (gevent) which can help keep the number of needed processes down.

django also has a sites package, so you can run multiple sites per django instance. it's less encapsulated but if you run a high number of websites with a low amount of traffic each it makes a lot of sense.

</comment></comment></comment></comment><comment><USER14> Thank you!</comment>


Women Slowly Shifting to Higher-Paying College Majors - <AUTHOR> https://www.wsj.com/articles/women-slowly-shifting-to-higher-paying-college-majors-study-says-11570179600?mod=rsswn <comment><AUTHOR> The paper is [https://bfi.uchicago.edu/working-paper/a-cross-cohort- analys...](https://bfi.uchicago.edu/working-paper/a-cross-cohort-analysis-of- human-capital-specialization-and-the-college-gender-wage-gap/) "A Cross-Cohort Analysis of Human Capital Specialization and the College Gender Wage Gap" by Carolyn Sloane, Erik Hurst, and Dan Black.</comment>


American Gut: An Open Platform for Citizen Science Microbiome Research [pdf] - <AUTHOR> http://msystems.asm.org/content/msys/3/3/e00031-18.full.pdf <comment><USER2> Interesting:

> The self-reported dietary data suggested, unexpectedly, that the number of > unique plant species that a subject consumes is associated with microbial > diversity, rather than self-reported categories such as "vegan" or > "omnivore"

<comment><USER3> I'm unsure why that would be unexpected. I suppose the word vegan brings forth the idea of a large variety of fruits, grains, and vegetables however vegan itself doesn't mean eating a variety of plants, it means not consuming animal products in any form.

Additionally, since bacteria strains tend to be specific to their environment, i.e. the plant that they're living on (which the plant itself thrives better in particular environments), it makes sense that a diverse diet would lead to a more diverse gut biom.

<comment><USER2> It isn't unexpected, just interesting that it has more effect than taking (expensive) probiotics. It's information that people can act on without much difficulty.

</comment></comment></comment><comment><USER4> "10% Human: How Your Body's Microbes Hold the Key to Health and Happiness" by Alanna Collen is a great book for anyone without a biology background who would like to dive into the subject of Microbes</comment>


Ask HN: What should Apple do with their $200B+ pile of cash? - <AUTHOR> <comment><USER2> 0\. Incubate startups - 400 megabucks/year. (Often, less money invested is better because it will be burned more efficiently. Investing isn't an inherently scalable activity because of the limited number of people capable of executing a good pipeline: inbound development, due-diligencing, raising more capital, managing and assisting portfolio co's.)

1\. Outfit even more US public and private schools with as many devices and apps as they need - 35 gigabucks/year.

2\. Fund all US clean-money politicians blindly via a non-profit so there are less barriers to getting things done - 4 gigabucks/year.

3\. Lobby for US grassroots causes like basic income and underserved educational areas: repeal NCBLA and fund civics, history, art and music in spite of De Vos. - 500+ megabucks / year.

4\. Grants, mentorships and other social enterprise activities - 200 megabucks / year.

5\. Commission some amazing artistic/architectures projects for cities and communities globally - 20 megabucks / year.

</comment><comment><USER3> Buy Lenovo+Moto and give us a macOS thinkcentre workstation

Donate a bunch to all those BSD and FOSS projects they rely on

Repatriate their offshore funds

</comment><comment><USER4> Obviously buy 200 Instagrams.

</comment><comment><USER5> Set it on fire.</comment>


Open Code of Conduct - <AUTHOR> http://todogroup.org/opencodeofconduct#definitions <comment><AUTHOR> "Our open source community prioritizes marginalized people's safety over privileged people's comfort. We will not act on complaints regarding: 'Reverse' -isms, including 'reverse racism,' 'reverse sexism,' and 'cisphobia'"

I'm really afraid and disgusted of this ignorant and provincial view of the world spreading over people I tought were rational.

Reverse racism does not exists. It is just racism.

<comment><USER2> You're half right: reverse racism doesn't exist. But it's also not racism because racism (or sexism) requires both power and privilege.

I think including this in the CoC is great because it means, for example, that women using GitHub to build a website for women won't be subject to sanctions if a man complains of reverse sexism because a pull request they made wasn't merged.

For more information on why reverse racism doesn't exist try this:

[http://www.dailykos.com/story/2010/07/15/884649/-Why- there-s...](http://www.dailykos.com/story/2010/07/15/884649/-Why-there-s-no- such-thing-as-Reverse-Racism)

<comment><USER3> > But it's also not racism because racism (or sexism) requires both power and > privilege

There are plenty of people who are not black but lack power and/or privilege. Are you saying it is not racism if one of those people hates black people?

Heck...by your definition, half the losers that post in /r/coontown are not racist!

<comment><USER2> Did you read the post I linked to? In the U.S. power and privilege are institutionalized, meaning that White people don't have to be well-off to enjoy some privilege (though sure, being both well-off and White provides more privilege).

<comment><USER3> Yes, I read it. He's misusing the word racism as defined in several dictionaries. See the Wikipedia article on "racism" for examples. (Yes, I saw your comment in Wikipedia elsewhere, where you quoted a definition from it...read farther in the Wikipedia article, as there are several other in that same article that disagree with the one you cite, including ones from three dictionaries).

The article in the post you linked seems to be wanting to use "racism" where he means "institutional racism".

I also saw your other comment where you suggested "discrimination" is the word another poster meant when they said "racism". That doesn't work because according to the article you linked, discrimination requires action. Someone just offering race based theories of superiority and inferiority or raced based theories of behavior is not discriminating if they are not putting those theories into practice to do things like make hiring decisions.

In the context of codes of conduct, individual racism is what's relevant.

Here's a good example of a black person writing racist material, according to most definitions:

        That in the evolution of the species, in what some
        people call the Ontogenetic evolution of humankind,
        that in the evolution of the species the human
        family separated in a sense that one branch of the
        family stopped its evolutionary path and simply
        depended upon the central nervous system as the
        total machinery for understanding reality. Whereas,
        the root of the family continued its path and not
        only evolved a central nervous system but developed
        what I called at that time an essential melanic
        system. And that I even went so far as to try to
        develop a little formula and suggested that CNS +
        EMS = HB. CNS (Central Nervous System) + EMS
        (Essential Melanic System) = HB (Human Being). That
        the central nervous system combined with the
        essential melanic system is what makes you human.
        That, in fact, to be human is to be Black.

That's from Dr. Wade Nobles, Professor Emeritus of African American studies at San Francisco State University, in his book "Seeking the Sakhu: Foundational Writings for an African Psychology". He was a leader in the melanin movement, a group of people who believe a pseudoscientific thing often called "Melanin Theory" that attributes various amazing, sometimes magical, properties to melanin. It's big in Black Supremacist circles. Here's a good look at it from the Skeptical Inquirer [1].

Some of the awesomeness of melanin can be seen in this quote from Carol Barnes' "Melanin: The Chemical Key to Black Greatness":

        Melanin is responsible for the existence of
        civilization, philosophy, religion, truth, justice,
        and righteousness. Individuals (whites) containing
        low levels of Melanin will behave in a barbaric
        manner.  Melanin gives humans the ability to FEEL
        because it is the absorber of all frequencies of
        energy. Since whites have the least amount of
        Melanin, this is why they are perceived by People of
        Color as generally being rigid, unfeeling
        (heartless), cold, calculating, mental, and
        "unspiritual."

[1] [http://www.csicop.org/si/show/magic_melanin_spreading_scient...](http://www.csicop.org/si/show/magic_melanin_spreading_scientific_illiteracy_among_minorities/)

[2] [http://www.amazon.com/Melanin-Chemical-Black-Greatness- Serie...](http://www.amazon.com/Melanin-Chemical-Black-Greatness- Series/dp/1930097352)

</comment></comment></comment></comment></comment><comment><USER4> > Deliberate misgendering. This includes deadnaming or persistently using a > pronoun that does not correctly reflect a person's gender identity.

Ummm, wouldn't 'misgendering' be using a pronoun which disagrees with someone's actual gender, as opposed to self-perceived gender?

Is it 'mistitling' to refer to someone who thinks that he's Napoleon Bonaparte as 'him' rather than 'his Imperial and Royal Majesty'?

> Our open source community prioritizes marginalized people's safety over > privileged people's comfort. We will not act on complaints regarding:

> 'Reverse' -isms, including 'reverse racism,' 'reverse sexism,' and > 'cisphobia'

So, the SCUM Manifesto would be welcome? Seems unwise to me.

<comment><USER5> The code of conduct seems to agree with the stance that all gender is self- perceived. The idea can easily be reduced to: respect people enough to address them the way they want to be addressed.

<comment><USER4> > The code of conduct seems to agree with the stance that all gender is self- > perceived.

A man who thinks he's a woman…is still a man; a woman who thinks she's a man…is still a woman. One's gender is a fact of nature; it's an issue of objective reality, not of subjective experience.

Why, just a bit ago there was an article here on HN noting that teenagers suffering from gender dysphoria have hormone levels appropriate to their actual, not perceived, sexes.

> The idea can easily be reduced to: respect people enough to address them the > way they want to be addressed.

Oh sure, I'll address anyone as he wishes to be addressed. But the English, German and French first-person pronouns are all ungendered, and it's simply wrong to talk _about_ someone with the incorrect pronouns.

I'd probably address the man who thinks he's Napoleon 'your Imperial and Royal Majesty,' in order to avoid causing further mental distress, but when speaking to others about him I'd refer simply use 'him.' Words mean things, and if one's neither Charles Marie Jérôme Victor Napoléon nor Jean Christophe Louis Ferdinand Albéric Napoléon, one doesn't fulfil the requirements of the title of the Bonapartist emperor.

I suppose one could argue that since online communication tends to be public, and thus the subject of a conversation could happen upon it, it's better to avoid further disturbing someone by continuing to humour him even in the third person, but it seems pretty extreme to _require_ that.

<comment><USER5> I disagree but I understand. I have family that feels similar about me.

</comment></comment></comment></comment><comment><USER6> Honest question, what is reverse racism? If I act racist against the dominate race? That's racism again, no? I'm minority myself so I could potentially do that and in my own internal moral system it feels wrong.

<comment><USER7> I'd wager that the authors of this code of conduct subscribe to the "prejudice plus power" definition of racism.

<comment><USER8> Of course, there is an argument that, accepting the "prejudice plus power" definition, operating in a context in which preference is given to the concerns of a class that is less powerful in other contexts creates a context in which that group is empowered over the group that is more powerful in other context, converting -- by the "prejudice plus power" definition -- what would be "reverse racism" in other context to simply "racism" in that context (and, of course, _vice versa_.)

</comment></comment></comment><comment><USER9> _Although this list cannot be exhaustive, we explicitly honor diversity in age, gender, [...] and technical ability. We will not tolerate discrimination based on any of the protected characteristics above, including participants with disabilities._

What does not discriminating based upon technical ability look like? Random assignment of tasks without regard to whether or not someone can do them or do them well?

</comment><comment><USER10> GitHub is trying really hard to get SJWs on their side (this CoC, the "retard" case, etc). They have a terrible reputation in regards to sexism and lack of diversity (see the Horvath scandal).

What's funny is that, this kind of PR never works. SJWs are very pissed off by the Open Code of Conduct move, they've been working for years on designing CoC (instead of, you know, writing actual code) and they see that as "culture appropriation" or whatever buzzy word. So in the end, they're just gonna alienate the ones that are fed up with this PC trend, while not convincing anyone to come back.

</comment><comment><USER11> Sounds like the "Two Wrongs Make a Right" Fallacy.

 _Person 1 did X(Racism) to person 2._

 _Therefore, Person 2 is justified to do X(Reversed Racism) to person 1._

And of course the blatant generalization, considering not everyone behaved like person 1.

</comment><comment><USER12> What is 'reverse' sexism or racism? Isn't that just sexism and racism? Whether you're oppressed or not has nothing to do with how the culture generally treats you. If you're being oppressed you're being oppressed in a single scenario/instance. There do exist general trends on who is oppressed and who is oppressing, and those are worth talking about and being aware of, but I wouldn't ever go as far to say that the existence of trends justifies marking any complaint that doesn't follow those trends as invalid.

Am I taking crazy pills?

</comment><comment><USER13> Let's tell everyone how to think and how to act instead of actually contributing something of actual use (like code) to the open source community.

This certainly won't backfire whatsoever.

</comment><comment><USER10> "Physical contact and simulated physical contact (eg, textual descriptions like "hug" or "backrub") without consent or after a request to stop"

Hahaha. I mean, this is the world we live in now?

I've always been puzzled by the concept of "reverse racism". As far as I can remember I've only heard this term in America (I've lived in 4 different countries before). I've always found that it was a perfect illustration of doublethink. I mean, people realize that "reverse racism" is actually racism right?

<comment><USER14> There have been quite a few instances where that kind of behaviour has occurred - although mostly in chat and such. There's instances it on Reddit's /r/cringe and the like. It probably doesn't happen much on Github since that's more business-like than a more colloquial environment like chat or dating sites or comment threads, but still.

Also apparently not; if you see above, racism is explained not as 'judging by race', but something involving privilege and whatnot. Which is... very hard to judge.

</comment></comment><comment><USER15> This is the text of the Open Code of Conduct.

GitHub explains their adoption of it here: [https://github.com/blog/2039-adopting-the-open-code-of- condu...](https://github.com/blog/2039-adopting-the-open-code-of-conduct)

<comment><USER16> You are missing the context: the document has been modified since to add new policies for "reverse-isms".

</comment></comment><comment><AUTHOR> [https://github.com/atom/atom/issues/8206](https://github.com/atom/atom/issues/8206)

</comment><comment><USER17> The general response to this is interesting in the context that American white people, but not black people,

a) view racism as a zero-sum game

b) think anti-white bias is now more prevalent than anti-minority bias

[PDF] [http://ase.tufts.edu/psychology/sommerslab/documents/raceint...](http://ase.tufts.edu/psychology/sommerslab/documents/raceinternortonsommers2011.pdf)

</comment><comment><USER18> As rules for some community, fine, it's your community, whatever.

But in the workplace or the community at large, "Unwelcome comments"about the abuse if your children or drug use are important.

It has to be ok to tell somebody something they don't want to hear.

</comment><comment><USER19> I'm not sure exactly what they mean by "reverse racism". The obvious opposite of discriminating based on race is treating people equally without regard for their race.

If by "reverse racism" they mean "discriminating against members of racial groups which are usually not the victims of racism"... well, I really hope they've talked to their lawyers about that. In Canada a company which announced that they would protect or not protect their customers from racism based on their race would be up against the human rights commission in an instant.

<comment><USER20> The policies on "reverse racism" and "reverse sexism" are mostly to stop arguments that many consider to be trolling. Some people make the argument that initiatives like [http://www.blackgirlscode.com](http://www.blackgirlscode.com) and [http://www.pyladies.com](http://www.pyladies.com) are racist and sexist because they exclude whites/men. GitHub is not interested in having that debate.

<comment><USER19> Thanks for the background. In Canada the laws against discrimination exempt "programs designed to ameliorate the conditions of disadvantaged individuals or groups", so initiatives like those you mention would be perfectly acceptable; but discrimination in other contexts (say, out of simple bigotry, without having an ameliorative intent) is still covered.

</comment></comment></comment><comment><USER21> Their reasoning seems pretty clear "Our open source community prioritizes marginalized people's safety over privileged people's comfort."

It's worth noting that "privilege" comes from the Latin for "private law", which is to say a law that established a code of conduct for one class that was not applied to another. Typically, this took the form of exempting some people from the laws that bound everyone else.

In other words, the life under conditions of privilege was far freer and and more forgiving than it was for everyone else. The result was a set of advantages that made it easy for those with privilege to maintain it, and difficult for those without privilege to acquire it.

What's remarkable about this document is the way it illuminates the extraordinary number and range of ways in which privilege - and its attendant social ordering functions - can express itself. In other words, simply countering it, to say nothing of dismantling it, is a non-trivial task.

Understanding privilege in this way also makes it easy to see why the very concept of "reverse racism" is so ridiculous. In essence, it's based on a profound misunderstanding of what racism is in the first place. It is not simply a matter of treating different people differently. It is about embedding race in a system of privilege, which is something you cannot do unless you have privilege in the first place (obviously, allowing those without privilege to define its benefits would defeat the whole purpose). In other words, racism is about propagating a deeply established social hierarchy of dominance and submission that is based on race. To the extent that "reverse racism" seeks to limit the power of these structures, it's a good thing. In any case, the problem is the continued existence of the unjust power structure, and not the fact that people pay attention to who does and does not receive its protection.

In Western countries, privilege has generally meant straight, white, men, from well-off backgrounds making life much easier for each other while making it much more difficult for everyone else. Sure, there are exceptions. But they're few and far between, with their scarcity only serving to underscore the general rule. And while plenty of individuals who are a part of this class may find the structure distasteful, that's had limited effect on the structure itself, which remains largely dominant to this day.

In any case, it's not going to dismantle itself, so it's up to the people who do want to do something about it to actually _do_ something about it. Saying "we're not going to defend it, and given a choice, we're going to rule against it" is a good example.

That may be very unsettling for some people, but understand this: if you're getting grief the problem is probably not that you're a straight, white guy. More likely, the problem is that you're treating other people like garbage in more ways than you can even imagine, and doing so habitually because your privilege allows you to get away with it.

And yes, a place that explicitly says "your privilege is not respected here" can be a tricky one for some people to navigate. If you're not much of a jerk to begin with, it isn't a big deal. But if you're a deep-fried, hard-boiled asshole who cannot even _imagine_ how to treat others with a suitable measure of civility and respect, yes, you're going to suffer.

<comment><USER19> _It 's worth noting that "privilege" comes from the Latin for "private law", which is to say a law that established a code of conduct for one class that was not applied to another. Typically, this took the form of exempting some people from the laws that bound everyone else._

Sounds to me like "it's wrong for you to discriminate on the basis of race, but it's fine when I do it" fits perfectly into the definition of privilege here.

<comment><USER21> It's only wrong if you strip it of all context. In the real world, which is defined by deep and ancient legacies, things are very different.

In in America circa 2015, where the status quo is inherently wrong and racist, it's wrong to consider race when doing so propagates the status quo. At the same time, it _is_ right to consider race when seeking to frustrate or dismantle the status quo. Both judgements rest on the same principle, which is that the status quo is inherently wrong and racist.

So you see? There's no double standard. Of course, if you can't already see the injustice built into the status quo, then efforts to counter it are going to appear baseless and suspect. But given all the evidence to the contrary, that would take a pretty extraordinary act of willful blindness.

</comment></comment></comment><comment><USER22> This is news because there have been recent changes to this document since Github adopted it. Here's the commit that included them: [https://archive.is/WndkY](https://archive.is/WndkY)

I find this introduces needless politics where they don't belong. I also don't subscribe to the idea that sexism and racism can only happen if the victim is of the correct gender or race. For those reasons, I've closed my private repos and no longer financially support Github.

<comment><USER23> Don't forget to uninstall Python.

<comment><USER3> The stuff he objects to is not in the Python Community Code of Conduct.

</comment></comment></comment><comment><USER24> stupid for providers to get involved in this. this is job of the law, not the corporations.

<comment><USER23> Have you ever been a part of a group and said "hey lets lay down some ground rules" for people's conduct? Maybe you would want to even go further then the law to help enable a friendly environment.

<comment><USER24> Also it's not just "friendly". If you made some rules, now people can bring those rules to bear upon other people and get them ridiculed and shunned for not following them in addition to any steps the provider might actually take. It's just more bullshit to worry about for no reason.

<comment><USER23> Ridiculed and shunned for not doing things like "Be considerate" and stopping "Unwelcome sexual attention, including gratuitous or off-topic sexual images or behaviour". The only thing you have to worry about is not being a jerk though. Are you angry you can't do those things anymore?

<comment><USER24> I feel that you're harassing me and I think I should report you to the mods as well as write a post calling you out for your baseless ad-hominem attacks and libel. You should immediately be banned from this site!

Open CoC fired!</comment></comment></comment></comment></comment>


An inland hurricane tore through Iowa. You probably didn't hear about it - <AUTHOR> https://www.washingtonpost.com/outlook/2020/08/14/iowa-derecho-attention-aid/#click=https://t.co/MvvKb9PB4x <comment><USER2> NPR spoke with a Cedar Rapids City Council member a few days ago. I remember being incensed that the federal government were dragging their feet to get them resources: [https://www.npr.org/2020/08/15/902811975/thousands-in- iowa-c...](https://www.npr.org/2020/08/15/902811975/thousands-in-iowa-cope- with-aftermath-of-major-storm)

</comment><comment><USER3> If you want a very personal point of view of the storm check out the three latest videos on this channel [https://www.youtube.com/channel/UCuxlXCfVyV-i5YLL30jkomw](https://www.youtube.com/channel/UCuxlXCfVyV-i5YLL30jkomw)

</comment><comment><USER4> 2 coworkers are in the area. Without power for days, cellphone service dropped, picking up debris, cutting down fallen trees and everything.

It's very much like back in PR after hurricanes... except in Iowa. It's so surreal.

</comment><comment><USER5> There have been other notable extreme storms in this area in recent history. Increasing global temperature appears to be putting more energy into the atmosphere so hundred year storms are now common.

</comment><comment><USER6> Well, if you read the NY Times or the Washington Post, you heard about it.

<comment><USER7> Yep. The Times had a full page about it on Sunday.

Title should be, "...if you only get your news from free endless scrolling internet apps, you probably didn't hear about it."

</comment></comment><comment><USER8> The real news is that FEMA is doing nothing.</comment>


A Premier U.S. Drug Company Became a Virus 'Super Spreader' - <AUTHOR> https://www.nytimes.com/2020/04/12/us/coronavirus-biogen-boston-superspreader.html <comment><USER2> The point of what the rest of us are doing is to _slow_ the spread, not be _surprised_ that it does spread in ironic ways.

I hope no more energy is put on irrelevant investigative journalism like this. Proactive mayors and governors slowed it down in their areas, letting hospitals deal with their current bandwidth and give time to increase their bandwidth, so the rest of us can be bussed through.

<comment><USER3> Seems to be a pointless fluff piece so some people can say "see, not my fault"</comment></comment>


Programmers are like plumbers and mechanics (and should be proud of it) - <AUTHOR> http://www.itworld.com/development/418558/plumber-mechanic-programmer

<comment><USER2> > When the engineering is good enough and the plan is fully thought through, > the actual execution of components is mechanical.

Yes. In the world of software that "plan" is called a "program", and the "execution", if taken to mean the implementation, is called a "compiler". The act of making that program is called _programming_.

Hence, engineering is programming, and programming is plumbing. By transitivity, engineering is plumbing. Is it still a useful distinction?

> If the software engineers, the mechanical service engineers, whatever, do a > good enough job planning and designing and diagramming the program > conditions, the coders, plumbers, and mechanics can execute on the plan with > their tools of expertise.

So there is a distinction between software engineers and programmers? The author describes himself as a software engineer, for that matter. I guess he doesn't want to concern himself to be one of those "proud programmers".</comment>


Here's my favorite operating systems war story, what's yours? - <AUTHOR> http://blog.valerieaurora.org/2013/12/17/heres-my-favorite-operating-systems-war-story-whats-yours/ <comment><USER2> The year is 1969. The machine is a SDS Sigma 5, soon to be renamed XDS Sigma 5 after Xerox bought SDS from Max Palevsky.

The Sigma 5 had been used in aerospace data collection as it had the capability for data collection and the optional fixed-head disk, ideal for real-time operation.

We were building a system to take analog data from 12-lead electrocardiograms transmitted in three-channel audio FM over telephone lines, sampling the three channels of data from up to 20 phone lines at 500 samples per second, and queueing the data to disk for later collation and feeding to the analysis program as well as writing to tape.

It turns out that the operating system called RBM (Real-time Batch Monitor) would mask out interrupts during certain key events. Since the 500 samples per second was driven by a hardware timer interrupt, we needed that to not be masked out. So with every release of the OS, I had the job of locating all the places that the interrupt masking took place in the OS and changing the instruction so that it wouldn't mask the timer interrupt. This required a careful audit of the OS's use of the timer interrupt to be sure that we weren't exposing an inadvertent race condition. We were worried about skew leading to an appearance of noise on the digitized signal.

So I had the task of changing the card deck and recompiling the kernel.

All our interrupt driven work was done in assembly language. Probably would have used C, but it hadn't been invented yet when we started. But coroutines in that interrupt-rich environment were a damn sight easier in assembler than wrangling with threads in a higher-level language.

Much fun, but then I got interested in compilers.

<comment><USER3> You worked on a Sigma 5 in 1969? Where were you? I was in Phoenix, at my first programming job. Summer of '69, Transdata in Phoenix hired me as the night operator. The best part was that they didn't offer their timesharing service at night, so basically I had the computer to myself.

We didn't have anything like electrocardiograms, but the neat thing was to see what kind of program you could write on a single card. Did you have any of the bird chirp cards that would toggle the front panel speaker and put out a whole flurry of bird sounds?

My favorite (or at least most useful) one-card program was when I found the print card: Put this card first in the card reader ahead of a stack of other cards, and it would print out the whole deck!

Only problem was that the print card was single buffered. It would read a card, then print it. Then read the next card, then print it. And on and on, with the card reader waiting while you print, and the printer waiting while you read the next card.

So I figured out a way to double-buffer the print routine: It read the next line while printing the one before, so it was much faster than before.

And it still fit on a single card!

80 columns should be enough for anyone.

<comment><USER2> Ha! Double buffering. I knew it well.

The company was Telemed and it was located near Chicago. In fact, for a while it was in an office complex a few hundred yards directly east of runway 27 R at O'hare. Often fully-laden Europe-bound 747 would take of, aiming directly overhead. We would be silently chanting "up! up!" as it felt like they were pretty close.

I don't think we did the single card trick. I do remember writing a few utilities like an editor so we could store the programs on disk instead of feeding them in each time. And a crude document processor for internal documentation. And we had a pretty serious engineering effort saving the real- time data to tape. There was always the concern about being sure that we had saved the data by the time the system signaled the hospital technician that it was done so they could unhook the patient.

The extracurricular activity I spent the most time on was porting the XPL compiler from one done at University of Washington to run on our particular configuration. Involved converting from a 7-track tape to a 9-track tape, regenerating the operating system to reduce the start address of user programs, and a few other hoops. I had read _A Compiler Generator_ and my career was off on another track.

And we did the evening thing as well. We had two systems for redundancy, but for a while production required both machines. One would do data collection, and the other would run the diagnostic program, which spit out paper tape that was carried over to the teletypes. Since traffic was light at night, we would come in at some ungodly hour for the better part of a year doing the work to combine these systems. If a call came in, we had about an hour to get off the system so they could bring up the diagnostic system to do the analysis and generate the paper tape.

I think I remember the cards--they were binary and half full of holes, as opposed to the others (EBCDIC, i believe).

</comment></comment></comment><comment><USER4> Z80 embedded system debug session. Two flipping days working out why an NMI wasn't being captured by the kernel interrupt handler in a communications controller I was working on. The NMI handler religiously stopped working after ten minutes. Turned out some chump had bent the CPU _NMI pin in the socket of the device at the manufacturer and it wasn't contacting the socket reliably so when it warmed up it started floating. However, you couldn't see it with visual inspection. I assumed it was my fault and spent hours with the assembler and Z80 and vendor docs trying to work out why it wasn't working. Got miffed, plugged in a logic analyser which caused it to work perfectly.

Eventually I assumed the CPU was duff, gave a finger to the rules which involved not changing the hardware, yanked it and found the inverted pin. Grr!

Bear in mind this was MILSPEC and had gone through QC, soak and thermal testing.

</comment><comment><USER5> While writing a QnX clone I used DJGPP to bootstrap my fledgling new OS. DJGPP is a 32 bit 'extender', it allows you to write 32 bit code and run it from the 16 bit dos environment of the time. When the basics where in place and the OS was self hosting I made a mistake somewhere and managed to mess up the system to the point where it would no longer self host.

Having to go back to DJGPP, extracting the files from the (now unmountable) filesystem with the latest working version and then getting back to being self hosting was the stuff of nightmares and I considered giving up several times.

I never realized that the holy grail of self-hosting is also a trap-door until it had swung shut behind me!

In the end it all worked out and I got it back, but from then on I made sure to have at least two 'known good' kernels waiting and I checked the toolchain a lot more carefully to avoid bugs introduced by broken compilers.

Lessons learned the hard way for sure.

</comment><comment> nappy-doo I wrote an operating system for a number of different DSPs in 2001. The OS was C++, with different pieces written in assembly as needed. The design of the OS required that we take the lowest priority interrupt to handle rescheduling as we returned from interrupts, and made sure the correct task was running, etc. At the end of that lowest priority interrupt, we wouldn't RTI if a high priority task was switching in, we'd just drop back in to user space, and handle the rest of the RTI functionality.

One particular part had a fixed size hardware stack. When an interrupt occurred, it'd push stack/frame and a single register (ALU results), and begin executing the ISR. What we were seeing was occasionally we'd blow the hardware stack. Now, I've given enough data here to debug it, clearly we weren't resetting the hardware stack in the low priority interrupt, but at the time we were STUMPED.

I spent a full day working and thinking about the problem, and that night, I dreamt what the answer was, came in, wrote the three lines of assembly, and it all worked perfectly. It was the first (and unfortunately not the last) time I debugged software while sleeping.

</comment><comment><USER6> It's 1987. I'd just spent a few months building a small single-floppy bootable OS for the IBM PC. The purpose of this project was to display a small training demonstration for security-related personnel in a protected environment. There were to be no ways to interrupt/interfere with the system running the training program, and it absolutely could not have been done in DOS or CP/M - had to be its own standalone system, 100%. It had absolutely to be something that 'could not be copied in a normal computer', where normal was: any of the DOS-booting machines out there in the final location.

So we built a boot-loader, a small kernel, packed the training-material resources into a tiny VM, wrote a VM to process the bytecode and run the training app, and delivered two bootable - albeit 'uncopyable' \- floppies with the app - one for the demo, and one for the final installation. The app worked great, but building the floppy required a fair bit of magic hand- waving, back in those days. I retired after giving the delivery-person their two, very valuable floppies, with only thoughts on my mind that perhaps one day I should automate all that sector-placing hand-waving magic ..

So, I get a call from the remote location at 4am in the morning, saying that the demo floppy had been placed on top of some magnetic thing accidentally, the person had been fired, and how do we make another copy of the floppy for the install at 7am?

Well, indeed. "We'll have to do a sector-copy. Do any of your DOS machines have debug.com installed, by any chance .." A 7-line assembly routine to do block copies, 15 minutes of waiting-on-hold listening to remote floppy copy noises later, and we had our copy. The scant few hours I had in between dreaming of the routine, and then actually having to explain to a non- technical person over the phone how to assemble it into a working program in a way that won't destroy the only working copy .. well, lets just say I learned a lot of things in that project that I'm _still_ trying to un-learn. ;)

</comment><comment><USER7> Reminds me of a story from back in the mid-90s at my first job. I was working in Motorola's paging products group and helping bring up a ARM7-based microcontroller that we were testing for two-way pagers. I was in the ASIC group that had put together the chip and had written a simple test monitor shell that ran over serial and let us test out the registers.

I was on location at an engineering office in Florida where we were adding features to the monitor to test out new systems. At one point, the builds stopped working -- they never seemed to come out of reset successfully.

After work with the logic analyzer to try to watch the memory bus to see what instructions were running in memory, I finally hit on the answer. The linker was placing the init code at the end of our binary, and the latest code we added had pushed the init routines past the first 64K of program code. However, on this microcontroller, some of the address lines were multiplexed with general purpose IO lines, so out of reset, trying to get to higher addresses just wouldn't work; you'd be loading low-memory code instead.

A quick rework of the linker command line to reorder code sections and some modifications to the init code to flip those lines to address mode, and everything started working again.

</comment><comment><USER8> There was a board that over the course of two weeks would get progressively and perceptibly slower. Looking into it the heap was full of tiny allocations that nobody knew where they were coming from. What had happened is that someone had compile with the C++ compiler instead of the C compiler the file that had an interrupt handler. This was running in kernel context and the older compiler decided that there had been no data-structure allocated to keep tabs on exceptions for that thread, so it it malloced that little bitsy chunk in the from the function prolog - every time the interrupt occurred, about 15Hz in practice. Eventually it was taking tasks a longer and longer time to find free blocks in the fragmented heap. The quick solution was to add nothrow to the file ;)

</comment><comment><USER9> It's not an O/S story but...

A product ( with a massive, linear power supply ) has powerfail detection - when voltage dropped below <x>, ... powerfail. This triggered a digital counter and an R/C network as an intentional race condition to trigger a line going to a PIO on the processor. Which ever finished first, won. The software would then shut things down in an orderly fashion. It would wait in that state until reboot.

When it was tested, it was tested with an A/C relay driven by the parallel port on a PeeCee. Gen a random number, wait that many milliseconds, turn the relay off ( or on ).

But field service said the thing would latch in powerfail. I pointed to the automatic (RNG driven) test of powerfail ( run every software release ) and the lead field service guy says "but that relay only switches on zero crossings of the A/C line." Sure enough... we thumbed power strips for two days and got it to latch....

The fix? Add a software counter to the powerfail state. After <n> cycles, it pulled the reset line ( which was in I/O space; NEC V25) itself.

</comment><comment><USER10> While not a debugging war story, here is one of my favorite stories about a different sort of war between two OSes:

[http://www.eros-os.org/project/novelty.html#persistence](http://www.eros- os.org/project/novelty.html#persistence)

</comment><comment><USER11> Working at Apple in 1996 I went to a meeting where all departments send people to talk with the Copeland (Apple's attempt at a modern OS that still included the old OS as a first class API) leadership. The quicktime team got into an argument with the leaders when they couldn't promise that the OS could actually give quicktime a predictable time slice, thus making video almost impossible. I think at that moment everyone realized that Copeland was a disaster (though most already assumed it would be). I left Apple soon thereafter and in the next year (1) CTO Ellen Hancock killed Copeland (2) Apple bought NeXT (3) Steve returned.

</comment><comment><USER12> I've had a few interesting operating system development experiences. Warning: rambling alert!

Circa 1984: I was working at Callan Data Systems, a small 68k workstation maker in the greater Los Angeles region (just outside Thousand Oaks, for those familiar with the region).

We had been using Unix ports from UniSoft, but for the new 68010 and 68020 based systems we were developing we were doing our own port from the AT&T sources. I don't recall if our base was System III or if it was System V Release 1 (I'm sure it was earlier than SVR2, for reasons that will become apparent).

This version of Unix did not support demand paged virtual memory. It was a classic swapping system. I was rewriting the process and memory subsystems to add demand paged virtual memory (that's why I know we were starting from something earlier than SVR2, because SVR2 was when AT&T added demand paged virtual memory support).

It was running quite well, except I had this one annoying bug where occasionally when a signal was delivered to a process that had a signal handler installed for that process, the process would get some kind of error, like an illegal instruction trap. For instance, hitting control-C in the shell might hit the bug. There was no sign of memory corruption, and no illegal instructions where it would claim it had been executing.

I spend some long, late evenings with the in-circuit emulator and the logic analyzer, trying to figure out what the hell was going on. Eventually, I was able to determine that it only happened if the signal was delivered while the system was trying to return from handling a page fault for the process that was receiving the signal.

On the original 68000, virtual memory was not supported. When a bus error was generated by an invalid memory access, the exception stack frame that contained information about the error did not contain enough information to restart or resume the failed instruction. You had no choice really except to kill the process. Hence, almost all 68000 systems were pure swapping systems [1]. (It was possible to do on-demand stack space allocation even on the 68000, through a bit of a kludge [2]).

The 68010 added support for virtual memory. The way it did this was to make bus error push a special extended exception stack frame. This extended frame contained internal processor state information. When you did the return from exception, the processor recognized that the exception had the extended frame, and restored that state information. (This is called instruction continuation, because the processor continues after the interrupt by resuming processing in the middle of the interrupted instruction. The other major approach, which is what I believe most Intel processors use, is called instruction restart. With that approach, the processor does not save any special internal state information. If it was 90% of the way through a complicated instruction when the fault occurred, it will redo the entire instruction when resuming. Instruction continuation raises some annoying problems on multiprocessor systems [3]).

The way signals are delivered is that whenever the kernel is about to return to user mode, it does a check to see if the user process has any signals queued. If it does, and they are trappable and the process has a signal handler, the kernel fiddles with the stack, making it so that (1) when it does the return to user mode it will return to the start of the signal handler instead of to where it would have otherwise returned, and (2) there is a made- up stack frame on the stack after that so that when the signal handler returns, it returns to the right place in the program.

This was fine if the kernel was entered via a mechanism that generated a normal interrupt stack frame, such as a system call or a timer interrupt or a device interrupt. When the kernel was entered via a bus error due to a page fault, then the stack frame was that special extended frame, with all the internal processor state in it. When we fiddled with that to make it return to the signal handler, the result was the processor tried to resume the first instruction of the signal handler, but the internal state was for a different interrupted instruction, and if these did not match bad things happened.

The fix? I put a check in the signal delivery code to check for the extended frame. If one was present, I turned on the debug flag and returned from the page fault without trying to deliver the signal. The instruction that incurred the page fault would then resume and complete, the processor would see that the debug flag was on, and would generate a debug interrupt. That gave control back to the kernel, where I could then turn the debug flag off, and during the return from the debug interrupt do the stack manipulation to deliver the signal.

(continued in reply)

<comment><USER12> Circa 1986: I was working at Interactive Systems Corporation in Santa Monica. ISC had a contract from AT&T to produce the official port of System V Release 3 to Intel's new processor, the 80386. Unfortunately, the contract also called for porting it to the 80286, and that was what I was working on the kernel, with one other programmer. That was a kludge. We got it working, but there was a strange scheduling bug. If you loaded it down with around 10 processes, each using a lot of memory, so the system had to make heavy use of virtual memory, what you'd see is that 1 process would get about 90% of the available processing time, 1 process would get essentially no processing time, and the remaining 8 would split the remaining 10% of the processing time pretty much equally. It would stay this way for a few hours, and then it would thrash especially hard for a short while, and go back to the previous pattern, except the processes had shuffled, so it was a different process getting the 90% and a different getting screwed with 0%, and the remaining 10% equally shared among the remaining processes. So, in a sense, the scheduler was actually quite fair--if you watched it for a week, every process ended up with about the same processor time.

We just could not figure out why the heck it was doing this. We never did solve this. AT&T came to their senses and realized no one wanted a 286 port of SVR3 and dropped that part of the project, and I got moved to the 386 port, where I added an interactive debugger to the kernel, and hacked up the device driver subsystem to allow dynamic loading of drivers at runtime instead of requiring them to be linked in at kernel boot time. (The kernel had grown to big for the real mode boot code, and no one wanted to deal with writing a new boot loader! Eventually, someone bit the bullet and wrote a new, protected mode, boot loader and so we didn't need my cool dynamic device loading system).

Another part of the project with AT&T was providing a way for 386 Unix to run binaries from 286 Unix (probably System III, but I don't recall for sure). Carl Hensler, the senior Unix guru at ISC, and I did that project. (Carl, after ISC was sold to Kodak and then to Sun, ended up at Sun where he became a Distinguished Engineer on Solaris. He now spends much of his time helping his mechanic maintain his Piper Comanche, which he flies around to visit craft breweries). The 286 used a segmented memory model. So did the 386, but since segments could be 4 GB, 386 processes only used one 3 segments (one code, one data, and one stack) which all actually pointed to the same 4 GB space. Fortunately, the segment numbers used for those 3 segments did not overlap the segments used in the 286 Unix process model, so we did not have to do any gross memory hacks to deal with 286 memory layout on the 386. We were able to do most of the 286 support via a user mode program, called 286emul. We modified the kernel to recognize attempts to exec a 286 binary, and to change that to an exec of 286emul, adding the path to the 286 program to the arguments. 286emul would then allocate memory (ordinary user process memory) and load the 286 process into it. We added a system call to the kernel that allowed a user mode process to ask the kernel to map segments for it. 286emul used that to set up the segments appropriately.

Another lucky break was that 286 Unix and 386 Unix used a different system call mechanism. The 286emul process was able to trap system call attempts from the 286 code and handle them itself.

Later, AT&T and Microsoft made some kind of deal, and as part of that they wanted something like 286emul, but for Xenix binaries instead of Unix binaries, and ISC got a contract to do that work. This was done by me and Darryl Richman. It was mostly similar to 286emul, as far as dealing with the kernel. Xenix was farther from 386 Unix than 286 Unix was, so we had quite a bit more work in the 286 Xenix emulator process to deal with system calls, but there was nothing too bad.

There was one crisis during development. Microsoft said that there was an issue that needed to be decided and that it could not be handled by email or by a conference call. We had to have a face to face meeting, and we had to send the whole team. So, Darryl and I had to fly to Redmond, which was annoying because I do not fly. I believe everyone is allowed, and should have, one stubbornly irrational fear, and I picked flying on aircraft that I am not piloting.

So we get to Microsoft, have a nice lunch, and then we gather with a bunch of Microsoft people to resolve the issue. The issue turned out to be dealing with a difference in signal handling between Xenix and Unix. To make this work, the kernel would have to know that a signal was for a Xenix process and treat it slightly different. So...we needed some way for a process to tell the kernel "use Xenix signal handling for me". Microsoft wanted to know if we wanted this to be done as a new flag on an existing ioctl, or if we wanted to add a new "set signal mode" system call. We told them a flag was fine, and they said that was it, and we could go. WTF...this could not have been done by email or over the phone?

But wait...it gets even more annoying. After we got back, and finished the project, Microsoft was very happy with it. They praised it, and sent Darryl copies of all Microsoft's consumer software products as thanks for a job well done. They sent me nothing.

On the 286emul project, Carl was the lead engineer, and the most experienced Unix guy in the company. If AT&T had decided to give out presents for 286emul, I would have fully understood if they gave them only to Carl. On the Xenix emulator, on the other hand, neither Darryl nor myself was lead engineer, and we had about the same overall experience level (I was the more experienced kernel guy, whereas he was a compiler guru, and I had been on the 286emul project that served as the starting point for the Xenix emulator).

All I can come up with for this apparent snub is that in 1982, when I was a senior at Caltech, Microsoft came to recruit on campus. I wasn't very enthusiastic at the interview (I had already decided I did not want to move from Southern California at that time), and I got some kind of brainteaser question they asked wrong (and when they tried to tell me I was wrong, I disagreed). I don't remember the problem for sure, but I think it might have been the Monty Hall problem. Maybe they recognized me at the face to face meeting as the idiot who couldn't solve their brainteaser in 1982, and so assumed Darryl had done all the work.

Three years later, Microsoft recruited Darryl away from ISC, so evidently they really liked him. (As with Carl, you cannot tell the Darryl story without beer playing a role. After Microsoft, Darryl ran his microbrewery for a while, and wrote a book on beer [4]. I don't know why, but a lot of my old friends from school, and my old coworkers from my prior jobs, brew beer as either a hobby or as a side business, or are seriously into drinking craft beers. I do not drink beer at all, so it seems kind of odd that I apparently tend to befriend people with unusual propensities toward beer).

[1] I've heard of one hack that supposedly was actually used by a couple of vendors to do demand paged virtual memory on 68000. They put two 68000s in their system. They were running in parallel, running the same code and processing the same data, except one was running one instruction behind. If the first got a bus error on an attempted memory access, the second was halted, and the bus error handler on the first could examine the second to figure out the necessary state information to restart the failed instruction (after dealing with the page fault). This is one hell of a kludge. (Some versions of the tale say that after the first fixed the page fault, the processors swapped roles. The one that had been behind resumed as the lead processor, and the one that had been in the lead became the follower. I'm not really much of a hardware guy, but I think the first approach, where one processor is always the lead and the other is always the follower, would be easier).

[2] There was not enough information on the 68000 to figure out how to restart after a bus error in the general case, but you could in special cases. Compilers would insert a special "stack probe" at the start of functions. This would attempt to access a location on the stack deep enough to span all the space the function needed for local variables, struct returns, and function calls. The kernel knew about these stack probes, and so when it saw a bus error for an address in the stack segment but below the current stack, it could look around the return address to see if there was a stack probe instruction, and it could figure out a safe place to resume after expanding the stack.

[3] The extended exception frame contains internal processor state information. Different steppings of the same processor model might have different internal state information. After you deal with a page fault for a process, you'll have to resume that process on a processor that has a compatible extended exception frame.

[4] [http://www.amazon.com/Bock-Classic-Style-Darryl- Richman/dp/0...](http://www.amazon.com/Bock-Classic-Style-Darryl- Richman/dp/093738139X/ref=cm_lmf_tit_9)

<comment><USER2> Two awesome stories.

We dealt with the 286 when I was at Mark Williams. They had done the compiler that Intel was using and reselling at the time. When the 286 came out, they were concerned about performance, what with the goofy segment registers and all the various memory models (compact, small, medium, large). The wanted us to guarantee that the performance of the compiled code would be equal to or better than the 8086. Naturally we resisted.

So you must know Ron Lachman.

Oh, also at Mark Williams, the year before I started with them they demonstrated Coherent (v7 unix-alike) on a vanilla IBM PC without any memory protection hardware. Later also done on the Atari ST.

</comment></comment></comment><comment><USER13> I have a more recent story but I hope its still fun. A months ago I wrote a rootkit for our super-special viruses class.

The real point of the assignment was to write a self-propagating virus. I had teamed up with a friend who happens to be a fantastic programmer. He promised to cover the virus portion which freed me to go for the bonus marks.

This professor does bonus marks with the democratic method. At the beginning of the classes he announces the criteria then at some point the class votes. In our case the goal was "the most annoying virus".

As it happens my rootkit won us the bonus marks by a healthy margin. Something I wasn't prepared for since the class learned a quick way to disable the rootkit. What they would do is delete the kernel module loader before by deleting the kernel module loader before running the virus. When I heard they would this I was disheartened. Here was a method I had not thought of and was sure to make my work worthless.

As it happens they did this because the rootkit was evil. More evil than I intended.

In fact in thoeyr the rootkit was benign. The rootkit hooked the open system call and counted opened files from the /bin, /usr/bin, and /sbin folders. A bloom filter hidden in the kernel's task struct's dtrace fields prevented double counting the same file.

Then another hook, write, performed the attack. When a task reached the "too many files opened" threshold the rootkit caused any writes to return instantly. The goal was to identify anti-viruses programs when they were disinfecting files and sabotage their disinfectant.

In theory this was being nice to the other students since only the strongest students attempted disinfecting files. In practice it was much worse.

I did not realize it at the time but I bet you can guess what happened. For the web developers: stdout, the way to give output back to console, is really a file and output is sent with a write system call. A virus scanner would find and report viruses then hit the threshold and get silenced. Students would find the /bin viruses just fine but soon notice the viruses in /usr/bin were getting missed!

Of course they searched their code for an explanation how that folder was special and found none. Their programs just stopped working for no logical reason. Pure evil. This I think is how we won the bonus.

As an extra feature the rootkit would kernel panic your computer if you dared to unload it. It did this by re-hooking the system call table in the rootkit's unload handler. Once unloaded any write or open system call would segfault the kernel and the game was up. Nothing like a real rootkit's anti-anti-virus arsenal but it worked.

I did write up a post about the rootkit and the course if anyone wants more details: [http://danieru.com/2013/12/28/cpsc-527-or-how-i-learned- to-s...](http://danieru.com/2013/12/28/cpsc-527-or-how-i-learned-to-stop- worrying-and-write-a-virus/)

</comment><comment><USER14> My favorite stories are here -> [http://multicians.org/multics- stories.html](http://multicians.org/multics-stories.html)

I used to work with this guy -> [http://www.multicians.org/thvv/](http://www.multicians.org/thvv/)

He was really fantastic to work with, a great project manager, great stories, and a good example of how to stay relevant in the tech industry for 40 years.

</comment><comment><USER15> For those who want to work on similar problems of interrupt handler debugging and scheduler design, we have an opening at NVIDIA: [https://news.ycombinator.com/item?id=7687317](https://news.ycombinator.com/item?id=7687317)

</comment><comment><USER16> This is an awesome blog post! Could the fact that the bug was stochastic have to do something with multi-threading? Also, how do you use BIOS to zero out the section of memory?

<comment><USER17> No, given the early stage of boot at which it crashed, no threading was happening. The randomness was because the initial zeroing out of the kernel's global and static variables might or might not happen, as a result of a physically random process (electrical discharge), instead of being ensured by software.

Most bootloaders (well, a BIOS usually refers to one step before the bootloader, but still) have a pretty primitive command shell, through which you issue the commands telling it how to load the initial kernel (e.g. from storage, or over the network). My guess would be she had to add a line to the boot script that zeroed out the relevant RAM; that, or rewrite the bootloader and add a loop in machine code to zero out the memory.

<comment><USER18> There was already code written to zero out the BSS shared across all the bootloaders for PowerPC, the call to it had just gotten lost when our enthusiastic fellow kernel dev rewrote bootloaders for platforms they couldn't test. I assume I just added the call to the existing code back in.

</comment></comment></comment><comment><USER19> Tom Servo and Crow T. Robot argue Mac vs. PC:

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

</comment><comment><USER20> ibisum: If you read this, all your posts are auto-marked [dead].</comment>


5 Tips for Better jQuery Code - <AUTHOR> http://marcgrabanski.com/article/5-tips-for-better-jquery-code

<comment><USER2> Nice tips. I definitely did not know about the data() method previously.

On a related issue, does anyone have a nice way for passing "arguments" to a jquery function from the html, while still using jquery selectors (i.e. not calling the function from an inline event handler)?

I whipped up a truncate function not too long ago that truncates a block of text to a certain word count and adds a "more" link to reveal the whole thing. I wanted to add a feature where I could specify from the HTML what word count the block should be truncated through. I ended up using the class...e.g.
...
 would truncate the text in the block to 30 words.

Just curious, in the spirit of this article, if anyone had any alternative approaches or better suggestions.

<comment><AUTHOR> You can assign a custom attribute to your element, then select on that. So if you have an input where you want to store 200 characters but truncate at thirty, you could do input type="text" show="30" size="200"

in jquery, it might be $('input[show]').attr(show)) to select that value. The input[show] would only select elements with the show attribute. If you only want to select inputs with certain show values, you could do input[show="30"] or input[show="10"] if your show values were 30 or 10.

<comment><USER2> I shied away from that only because I wasn't sure about adding custom attributes and making my xhtml invalid, e.g. to a div block which doesn't have a show attribute in the spec.

Getting the argument itself is actually easy enough, I more ended up struggling to find an "appropriate" or natural interface for it within the html itself.

<comment><USER3> Check out the jQuery Metadata plugin:

<http://plugins.jquery.com/project/metadata>

It lets you choose where to define this kind of custom data: in an arbitrary attribute, as a class within the className attribute, or in a script tag.

</comment></comment></comment></comment><comment><USER4> I don't mean to derail, but the thing I dislike about javascript libraries is the deception. $ looks really cheap! So lets use it as we would to reference a variable...

for(var e=0;e<10;e++) { $('foo').doSomething(); }

It's not obvious from that code that $ is a relatively expensive function, and you'd be far better doing.

var foo = document.getElementById("foo"); for(var e=0;e<10;e++) { foo.doSomething(); }

I think that point alone creates poor, slow code.

<comment><AUTHOR> hey axod, I'm not sure what your previous exposure to jquery is but you really should try it if you haven't. I've used prototype and dojo over the years, but they don't hold a candle to jquery.

You are right in being suspect of speed issues. However, look at a common use of jQuery and compare it to straight JS.

$('a[href^="https"]').addClass('secureLink');

This one simple line selects all of the anchor tags on a page that are SSL links, then adds a custom css class to just those anchors. To write that in straight JS you would need roughly 7 lines, which includes an element match, looping through those, retrieving the href content of each one, doing a string match against the results, and adding a new attribute for the class.

At the end of it, the classic JS code isn't any more efficient and its a lot harder to write and read.

Additionally, since we've already selected the anchors with secure SSL links, we can do a lot more things with the jquery object without having to take the cost penalty of doing a new DOM lookup with getElementsByTagName and byId for subsequent operations. Lets chain some more operations:

$('a[href^="https"]').addClass('secureLink').appendTo( $('
'));

Now we're not only adding a custom class to the selection, we're moving all of our matching anchor elements to a new div that's being created on the fly called secureLinkDiv. This is very efficient because you're still operating on the initial object collection elements and you don't have to re-select the group for subsequent modifications.

In the rare cases where you can write straight JS that is more efficient than existing jQuery methods, regular JS mixes quite normally with jQuery. So you could use a selector like I did for the secure links, then iterate through that object and do your straight JS. Simple example:

$('a').each(function(i){ //reference each 'a' element by $(this) or with i });

Writing javascript in jQuery has made it SO MUCH EASIER to code now that I can't say enough how remarkable the difference is. JS used to be a fun thing to mess with, and a tiresome chore when writing code for work. Now with jQuery my code is much leaner and runs better, its also fun to write again and opens up a _lot_ of possibilities to easily create different effects that would have been hard to do before, simply because the code would have been too lengthy to efficiently write and then debug.

Give jQuery a try. Its worth it.

<comment><USER4> Thanks for the response, I do admit I haven't really played with jquery in depth, just seen lots of code.

However, it does seem like it is geared to "Find things in the dom" a fair amount. Whilst I can see that being handy for some websites, for webapps I can see less point - I know what's in the DOM, I put it there. If I need to do something with ssl links later, I'll just remember them all.

In your example $('a[href^="https"]') I'd say it'd be a lot tidier and faster where possible to just give all https links a class and manipulate that class - sure, not as easy to do things like your 2nd example, which admittedly is kinda fun (Although seeing HTML in javascript strings always makes me feel very very sick).

Several people seem to sell jquery etc on cross browser issues. But from my personal experience most of those issues are css layout issues - not js issues. Is that sort of thing covered in jquery?

<comment><USER5> Most UI code written in JS is a variant of "find something in the DOM and change it". Most JS frameworks are really UI frameworks. And in evolutionary terms, we are with JS where X11 was around the time when Xt came out; there's Motif if you want it, but I might just stick with Xt and wait for Gtk.

What are the cross-browser issues you're thinking jQ won't handle for you?

<comment><USER4> Things like IE scrollbars covering the content, word-wrap weirdness, designMode idiocy.. Differences in how iframes are handled - Things like that. Not to mention all the IE6 rubbish like if you set left _and_ right, it can't figure out width.

"Most UI code written in JS is a variant of "find something in the DOM and change it"."

I'd agree to a point, but I'd note that ideally you want to keep handy js references to what you have in the DOM so you don't have to find it again. And if you put it in the DOM, you don't ever have to find it, you just store it somewhere handy. Constantly performing search operations just isn't efficient.

</comment></comment></comment></comment></comment><comment><USER6> I am generally against lists on HN but this was really good.

My one thought: does #5 contradict #1?

<comment><AUTHOR> Nah, the intent is for 2 different things. You can add/remove a class on demand for display, not data, purposes. If I was editing text in an input or text area and wanted to change its background color for example. the .data() method would be if I wanted to store content for the element I was editing. Say if you store its current data using .data() and then blank the input, and if the user blurs out from the field without entering new data, you can replace it with the original.</comment></comment>


Ask HN: Need Some Inspiration, What's Your Favorite Website? - <AUTHOR>

i think a lot of sites are now going with vertically aligned webpages such as the iphone webpage, but i've seen a lot of cool sites lately, just haven't remembered the links, please help by posting your favorite websites in terms of aesthetics--easy on the eyes, not too cluttered, informative, and well organized. <comment><USER2> My favourite sites are ones I built myself, for myself. <http://twitya.com> and <http://hackerbra.in>

In particular, on Twitya, the Twitya and Israel drop down category at top.

Hackerbra.in's Ask page.

</comment><comment><USER3> 37 Signals: <http://37signals.com/>

The Morpheus <http://themorpheus.com>

UX Magazine: <http://uxmag.com/>

<comment><AUTHOR> ux magazine has an interesting color scheme, but the content seems much cluttered.

<comment><USER3> Cluttered

</comment></comment></comment><comment><USER4> <http://webcreme.com> and <http://dribbble.com>

</comment><comment><USER5> I really loved it. <http://benthebodyguard.com/>

</comment><comment><USER6> <http://www.swiss-miss.com/>

<comment><AUTHOR> this site is too busy, i personally don't think the scrollbar should get that small, paging should be implemented.

<comment><USER6> Come on that's not busy; that's a lot of good well-curated content on one of the best design blogs out there. Every site does not have to look like the Google homepage.

</comment></comment></comment><comment><AUTHOR> here's an example of a vertically positioned web site:

<http://forrst.com/>

<comment><USER3> Twitter

</comment></comment><comment><AUTHOR> also like the sites with really big font, seems more like a billboard compared to a website, the message is simple.</comment>


We need a better way of promoting JavaScript projects - <AUTHOR> https://medium.com/@domagojk/the-js-community-needs-a-model-of-scientific-publishing-97cb2e3f8163#.8f4e2avvh <comment><USER2> I think that because of numbers scientific publishing is moving towards to the programming projects model. Arxiv like GitHub. Eventually some of the good projects emerge. Part of it is being able to build community or become famous for anything and use that to advertise a project. Social skills plus programming skills. It would help to get good reviews too. It's not that all good papers are peer reviewed evenly.</comment>


The Pope Gets an Offical Twitter Account - <AUTHOR> http://www.nytimes.com/reuters/2012/12/03/technology/03reuters-pope-twitter.html?hp

<comment><AUTHOR> I wonder if he will eclipse the current top 10 [1] and if priests worldwide will encourage their folks to "follow" him

[1] <http://twittercounter.com/pages/100></comment>


My Stupid (Publishing) Industry - <AUTHOR> http://maxbarry.com/2010/03/04/news.html

<comment><AUTHOR> My favourite segment:

"Publishers didn't like the fact that Amazon.com started selling e-books for $9.99 each. (They thought that was too cheap, if you're wondering.) It didn't affect publishers' margins, nor authors' royalties, since Amazon.com was selling below cost to promote its Kindle platform. But still, publishers were uncomfortable with the idea of books being that cheap. So they went to war and forced Amazon.com to bump up prices to $13-$15, in exchange for taking a lower royalty on each sale.

Let's review. Amazon.com was eating it in order to allow you to buy books for ten bucks, instead of twenty or thirty, while paying authors the same royalty. Publisher intervenes, and now books are more expensive for you, while the author gets less. Also, the publisher gets less. Oh, and I didn't mention this, but during the war, Amazon.com took down all the "Buy" buttons for Macmillan books, so you definitely couldn't buy them no matter how much you wanted to and nobody made any money at all. "

I thought these companies love saying how they have an obligation to make their shareholders money?

<comment><USER2> The appearance of a significantly "cheaper" version of the product cheapens the brand, and makes customers wonder why they are paying so much. Potentially killing the rest of the product line-up. It has happened to every industry several times before, including the book industry.

<comment><AUTHOR> Yeah but in most industries it's _illegal_ to control the price that retailers distribute your product at. This was temporary pricing anyway to encourage interest in the online platform over the longer term.

<comment><USER2> Illegality is a gray area, negotiating a contract is not control, and agents are not retailers.

The customers were not told the price was temporary, just that it was the default. The customer's perception was what mattered to the publishers.

</comment></comment></comment></comment><comment><USER3> Suprised he didn't bring up Google Books.</comment>


UN climate reports are increasingly unreadable - <AUTHOR> http://www.nature.com/news/un-climate-reports-are-increasingly-unreadable-1.18543?WT.mc_id=TWT_NatureNews <comment><USER2> For me, the differences look more like noise than a clear tendency. If you run bunch of test on any corpus you can get some non zero slope and try to piggyback on the media coverage of the original source.</comment>


The quest to crack and preserve vintage Apple II software [audio] - <AUTHOR> https://www.theguardian.com/technology/audio/2017/apr/28/apple-ii-vintage-software-1980s-tech-podcast <comment><USER2> There was a Locksmith program that did that. My friends pooled money to buy Wizardy for Apple 2, and had a program that copied and removed the protection.</comment>


Grid Optimization Competition - <AUTHOR> https://gocompetition.energy.gov/ <comment><USER2> From "California grid data is live – solar developers take note" [https://news.ycombinator.com/item?id=18855820](https://news.ycombinator.com/item?id=18855820) :

>> _It looks like California is at least two generations of technology ahead of other states. Let's hope the rest of us catch up, so that we have a grid that can make an asset out of every building, every battery, and every solar system._

> _+1. Are there any other states with similar grid data available for > optimization; or any plans to require or voluntarily offer such a useful > capability?_

How do these competitions and the live actual data from California-only (so far; AFAIU) compare?

Are there standards for this grid data yet? Without standards, how generalizable are the competition solutions to real-world data?

</comment><comment><AUTHOR> This is an ARPA-E competition for grid optimisation, although its working through its stages.

ARPA-E is the one looking at research technology for the energy industry, high risk experiments. I believe Trump has wrote it out of this financial years budget, I hope it can survive.

There's also an ARPA for the CIA...

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

Anyone have any ideas for further ARPAs?

Perhaps a ARPA for Space technology, although I think SpaceX has pretty much got that sorted.</comment>


User Experience Fail: A case study on Godaddy.com - <AUTHOR> http://www.intuitionhq.com/blog/2011/02/the-godaddy-user-experience-fail/

<comment><USER2> But I got a domain name yesterday for $1.18. I'm willing to endure a bit of bad experience for prices like that. Plus their domain manager (which comes free with every domain) kicks butt.

<comment><AUTHOR> I've recently switched most of my domains to namecheap, and I've got to say I'm really happy with the experience so far. Considering there is generally only a couple of dollars difference between most of the big registrars, I don't think it's worth skimping for a much worse experience.

Each to their own though.

</comment></comment><comment><USER3> I think its a case of function over form. It could have a much cleaner, less cluttered, less shouty interface & takes ages to get anything done.

But it works, I can manage hundreds of domains with it.

<comment><AUTHOR> I'm impressed you can get through the interface that easily. I find there are always more steps to get things done than there ought to be, and the whole process is rather frustrating. As I said though, each to their own.</comment></comment>


CS 188: Artificial Intelligence - <AUTHOR> http://inst.eecs.berkeley.edu/~cs188/fa11/lectures.html

<comment><AUTHOR> It's in my opinion a much more interesting and dynamic course than Norvig/Thrun's AI course.</comment>


I pushed 30 of my programming related projects to github - <AUTHOR> http://www.catonmat.net/blog/i-pushed-30-of-my-projects-to-github/

<comment><USER2> This is a great idea. I pushed my own projects to bitbucket lately. It's much better to fork, or monitor projects this way. If anyone still keeps their potentially useful projects on a blog or in some forgotten `~/tmp` directory - please upload them - it doesn't take much time, and someone else might find exactly when it's needed.

github/bitbucket is the new pastebin ;) (for projects)

<comment><USER3> Indeed, publishing code is good. Getting crits and reviews make you a MUCH better coder. So does making code that other people use. Which can be very different from writing your own code, or writing code that programmers in the same room have to use.

I now prefer launchpad with bzr 2.x series. There's more room on there than those pay sites. It's nicely integrated with ubuntu services (like ppa compile farm etc). Also I can make bazaar projects of my other projects on google code, github, etc.

Plus the launchpad source code has been released. I feel safer not relying on a closed source tool if I don't have to. Also, there is a better chance I can make modifications to it if I want.

I'm only one week into my latest love affair with bzr/launchpad... and so far so good. I hope it doesn't break my heart again.

Google code has svn or hg support, but limits you to a small amount of projects. Whereas the other ones limit you by disk space.

I hated the 1.x series of bazaar, but now it seems to be good quality, and stabalising. There are now stable, and development releases, and the last default format change before the 2.0 release was in 2007.

</preference>

<comment><USER4> > I'm only one week into my latest love affair with bzr/launchpad... and so > far so good. I hope it doesn't break my heart again.

I'd be interested to hear how it's going after a couple more months.</comment></comment></comment>


A Story about Washington DC's Snow Gridlock on Jan. 26 2011 - <AUTHOR> http://www.scottpio.com/post/2964912995/the-dc-snow-gridlock-of-jan-26-2011

<comment><AUTHOR> Thats incredible no one was volunteering their time like he spoke of. Just shows people's unwillingness to help out when they are in need as well.</comment>


The Real Scandal of AI: Awful Stock Photos - <AUTHOR> https://medium.com/@ageitgey/the-real-scandal-of-ai-awful-stock-photos-456633b9b0fc?source=linkShare-ee08b1614a2d-1528090210 <comment><USER2> The linked image search result for "AI" actually consists primarily of brain- shaped circuit boards which, y'know, is actually not a terrible metaphor for _artificial intelligence_.

Personally, I'm kind of partial to Google's Cloud AI logo [2], but I work here (Cloud, not AI) so I may be biased.

[1] [https://medium.com/@ageitgey/the-real-scandal-of-ai- awful-](https://medium.com/@ageitgey/the-real-scandal-of-ai-awful-) stock- photos-456633b9b0fc

[2] [https://cloud.google.com/products/machine- learning/](https://cloud.google.com/products/machine-learning/)

</comment><comment><USER3> Just for LOLs I went to his website mentioned in the article ready to pounce on a stock image of a brain or robot somewhere on there, but the author is true to his word and only has pictures of flowcharts, screenshots (yes, and actual code) and images of facial recognition at work, which is how most people experience face recognition ML. Kudos to him for walking the talk.

</comment><comment><USER4> Andrew Ng's course icon is great. The conclusion in the article is not correct.

<comment><USER5> I think it's meant as a friendly jab.

</comment></comment><comment><USER6> interesting point.

people like to dream.

pictures of code would be worse.</comment>


Offer HN: .com domain giveaway - <AUTHOR>

Hi all,
I'm having a domain cleanup and I realised I had some .com domains sitting free that would be better off in the hands of someone wanting to actually use them.
First come first serve, send me an email at firstname.lastname@example.com and I will send you the transfer out code.
acerobot.com acourses.com bloggateway.com greymobile.com partnerart.com pokerrabbit.com vistaapp.com <comment><AUTHOR> Pokerrabbit.com Vistaapp.com both claimed. Bloggateway, greymobile, acourses and partnerart still free.

</comment><comment><AUTHOR> acerobot.com has been claimed.</comment>


1 Patient, 7 Tumors and 100B Cells Equal 1 Striking Recovery - <AUTHOR> http://www.nytimes.com/2016/12/07/health/cancer-immunotherapy.html <comment><USER2> Took a few notes when reading the paper[1], expanded some acronyms as well. Definitely a nice result, and an interesting paper.

* Steve Rosenberg's a respected expert in the field

* Adoptive T cell therapy (ACT) of TIL (tumor-infiltrating lymphocytes) T cells specific for a (common) KRAS mutation (G12D)

* Culture/expand TILs, use tandem-minigenes to narrow down most reactive (to in silico ID mutations) TILs, then use synthetic peptides on the mutations encoded in the TMG that elicits largest response to find which epitopes in particular were being reacted to.

* 6 tumors eradicated, 7th shrunk but recurred (had to be resected, patient has no disease 4 months later); 7th had lost the HLA-C allele that the TCRs were specific to

* The supplementary materials/methods were pretty interesting (very technical)

[1] T-Cell Transfer Therapy Targeting Mutant KRAS in Cancer [http://www.nejm.org/doi/full/10.1056/NEJMoa1609279](http://www.nejm.org/doi/full/10.1056/NEJMoa1609279)

</comment><comment><USER3> Lately I've been wondering about phages and gut bacteria. Are there phages in the wild that affect gut bacteria, and reduce the preponderance of one species or another? What if a diet pill containing phages could knock out undesirable strains of bacteria and promote weight loss? Or elevate mood? If there are such phages in the wild, is it possible that they stay with a host forever, infecting the host's gut bacteria perpetually, perhaps to ill consequence? I just wonder if anyone's looking into that.

<comment><USER4> In a former life I used to work on phages and yes there are phages that attack gut bacteria and yes they can be used to reduce one species over another.

The problem is that many phages are quite narrow in specificity and will only attack single specific strains of individual bacterial species. To do what you want to do you need a very large number of different phages.

There is a solution to this problem which is to isolate broad host range phages. My lab was quite successful in finding these phages. I do miss working in this area :(</comment></comment>


Entrepreneurs and the Cult of Failure - <AUTHOR> http://hbr.org/2011/04/column-entrepreneurs-and-the-cult-of-failure/ar/1 <comment><USER2> Gladwell wrote a piece last year that suggested the most successful entrepreneurs come out ahead by finding clever ways to avoid risk. Forgive the long excerpt, but it really is good.

"In a recent study, "From Predators to Icons," the French scholars Michel Villette and Catherine Vuillermot set out to discover what successful entrepreneurs have in common. They present case histories of businessmen who built their own empires—ranging from Sam Walton, of Wal-Mart, to Bernard Arnault, of the luxury-goods conglomerate L.V.M.H.—and chart what they consider the typical course of a successful entrepreneur's career. There is almost always, they conclude, a moment of great capital accumulation—a particular transaction that catapults him into prominence. The entrepreneur has access to that deal by virtue of occupying a "structural hole," a niche that gives him a unique perspective on a particular market. Villette and Vuillermot go on, "The businessman looks for partners to a transaction who do not have the same definition as he of the value of the goods exchanged, that is, who undervalue what they sell to him or overvalue what they buy from him in comparison to his own evaluation." He moves decisively. He repeats the good deal over and over again, until the opportunity closes, and—most crucially—his focus throughout that sequence is on hedging his bets and minimizing his chances of failure. The truly successful businessman, in Villette and Vuillermot's telling, is anything but a risk-taker. He is a predator, and predators seek to incur the least risk possible while hunting. "

<http://www.gladwell.com/2010/2010_01_18_a_surething.html>

<comment><AUTHOR> "He is a predator, and predators seek to incur the least risk possible while hunting!"

Very well said!

</comment></comment><comment><USER3> Good post!!

At the risk of being simplistic, I have long believed that in the world of business there are two types of people -- those who use and enjoy risk and those who are risk averse. Often those who are risk averse become employees, even academics. Those who enjoy risk become business owners, usually preferring the process of start up. This is why, if you are a risk taker, you don't really enjoy being an employee.

The government employees who try to encourage start ups belong to the second category and cannot for the life of them understand the risk takers. So, they are more likely to view success as a lack of failure.

Most bankers (Who recently forced a rewrite of the bankruptcy code to benefit their business.) have little or no use for risk. They are of the "employee" mentality. (not all, but it is common) As the article points out, this reduces the number of start ups.

<comment><AUTHOR> An interesting concept on risk-averseness is that it also depends on how much you have to lose. That is, if you have not much to lose, you don't mind taking on more risk.

This might also explain why startups as they grow up, tend to lose their entrepreneurial spirit (Do you Yahoo! anymore?).

</comment></comment><comment><USER4> His recommendations make a lot of sense: accept that failure is a natural part of doing business, remove structural obstacles to reduce the objective risks of a failed venture, turn failure into fodder. But his overall framing seems to be that entrepreneurs should be heavily driven by fear of failure. That works well for some people but not others -- for many (including me), fear leads to stress and increases the likelihood of irrational reactions.

<comment><AUTHOR> Yes, the author helps clearly distinguish between anxiety and fear, which I felt is very insightful!</comment></comment>


Classic Violins Judged No Better in Blinded Test - <AUTHOR> http://www.nytimes.com/2012/01/03/science/in-play-off-between-old-and-new-violins-stradivarius-lags.html

<comment><USER2> Cool article, thanks for posting it. This is the sort of non-tech article I still really enjoy finding on hn.

That said, I'm not sure it's supposed to be such a surprise that, after a certain level, more $$ != "better"... I'm not an expert, but from talking to experienced musicians, I get the feeling that when they pay top $ for a hand- crafted musical instrument (or anything, really), what they're really seeking is a higher degree of specialization, rather than a higher quality per se. Mass production doesn't necessarily make things _worse_ , it just makes them all the same (with a corresponding drop in price due to efficiencies of scale). Once top musicians get to a certain level with their instrument, they start to seek out specific qualities in their instrument, and they can only find them in custom ordered or instruments that are harder to find (ie., more expensive).

I feel a little sheepish saying this, because I'm speaking for others - I'm nowhere near the level where it would make the slightest bit of sense for me to plunk down $5-10k or more (and it can easily be more, way more). And of course, what I said above assumes a certain level of quality in the "mass produced" instruments - we're not talking about super cheap factory made crap.

Quick edit - the point I'm making probably doesn't really apply to the massive price difference between a Stradivarius and more recently made violins, though... the premium probably does have to do with a perception that it is "better"... my point is that I don't think "better" is always what drives the decision to spend more on an instrument.

</comment><comment><USER3> I believe that newer luthiers can somewhat cheat on certain properties of instruments. One example is the density of the wood. It is very difficult to find wood that has been aged hundreds of years. The cellulose tends to compress yielding a much studier material. I believe the original Stradivari were made much thicker and compressed over time.

Newer instruments skip this step and just make the wood thinner. The instrument sounds just as good but does not have the same sturdiness.</comment>


Square introduces payroll - <AUTHOR> https://techcrunch.com/2015/06/30/square-launches-payroll-product-for-small-businesses-pricing-starts-at-25month/ <comment><AUTHOR> I would love to see a chart of products offered vs revenue per product user over time grouped by products.

Seems like square innovates at a pace on par with Apple's early years.</comment>


Program diagnosing cancer more accurately than humans can - <AUTHOR> http://www.economist.com/blogs/babbage/2011/11/diagnosing-cancer

<comment><USER2> Well it's back to some e-commerce programming for me. It's a good feeling to know I make a difference in peoples lives.</comment>


A Googler's Anti-Diversity Screed Reveals Tech's Rotten Core - <AUTHOR> https://www.theatlantic.com/technology/archive/2017/08/why-is-tech-so-awful/536052/?single_page=true <comment><USER2> Where did the author get the idea this was anonymous or posted as a meme?</comment>


Complete Yale courses now on iTunes U - <AUTHOR> http://www.tuaw.com/2009/07/17/complete-yale-courses-now-on-itunes-u/ <comment> brown9-2 Anyone interested in economics/finance should check out the Financial Markets class on here. It was taught by Robert Shiller, who is a pretty highly- regarded author on the subject (and also the "Shiller" in "Case-Shiller index" of home prices):

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

[http://www.amazon.com/Irrational-Exuberance-Robert-J- Shiller...](http://www.amazon.com/Irrational-Exuberance-Robert-J- Shiller/dp/0767923634/ref=sr_1_3?ie=UTF8&s=books&qid=1247854636&sr=8-3)

[http://www.amazon.com/Subprime-Solution-Todays-Financial- Hap...](http://www.amazon.com/Subprime-Solution-Todays-Financial- Happened/dp/0691139296/ref=sr_1_1?ie=UTF8&s=books&qid=1247854636&sr=8-1)

</comment><comment><USER2> A lot of universities are already doing this, most so probably MIT, youtube has a index of all the universities that post different types of educational content, <http://www.youtube.com/edu/>

</comment><comment><USER3> Has all the classes streamed:

<http://oyc.yale.edu/>

</comment><comment><USER4> open university/courses will become a norm... if you're interested in the subject then there should not be any reason why you cant study and clear exams without any hassle ....

one such univ. is "University of the People", world's first tuition-free, online academic institution dedicated to the global advancement of higher education.

visit: <http://www.uopeople.org></comment>


Google can't make a good phone and it's embarrassing - <AUTHOR> http://bgr.com/2017/10/19/google-pixel-2-xl-review-vs-iphone-x-comparison/ <comment><USER2> Hard to take that article seriously, seems that guy just lives to complain. That phone has gotten fantastic reviews across the board from everyone else. His inflated ego and biased opinion mean nothing.</comment>