Django Code of Conduct - feedback wanted - <AUTHOR> https://www.djangoproject.com/weblog/2013/apr/01/django-code-conduct-feedback-wanted/ <comment><USER2> I think it's great to have a set of ground rules and expectations when interacting with people you might not have a completely defined personal relationship but here is where any kind of agreement/code kinda falls apart: " Sexist, racist, and other discriminatory jokes are not welcome".

What is sexist language? In the recent Pycon incident was the "dongle joke" sexist language? I don't think so. It's a joke about the male anatomy that should be equally accessible to men and women. Is a joke about blondes being stupid sexist? Yes, probably.

What I'm saying is language like "sexist" or "offensive" is highly subjective and it's impossible for everyone to agree on the correct definitions. The unavoidable fact of life is that a documented agreement cannot possibly protect everyone from being offended at some point in their professional lives. I feel like any kind of documented code of conduct should also include a section on how to deal with feeling offended.

Something like this:

"Despite these rough guidelines, we are all imperfect human beings that experience discrimination and offensive language in sometimes drastically different ways so it's important not to overreact to what you may perceive to be offensive or discriminatory actions. Ask yourself if the act in question is motivated by malevolent intentions. Chances are that it's not and that they simply have a different definition of what is acceptable in a professional setting. Informing the person of your discomfort with their actions and/or language will go a long way towards removing any future discomfort while interacting with that individual."

<comment><USER3> I understand what you're saying here, but I think you've got it backwards, even taking PyCon into account.

I think we both agree that it's best to assume everybody is acting in good faith (you say as much in your proposed changes). As such, why not:

"Despite these rough guidelines, we are all imperfect human beings that experience discrimination and offensive language in sometimes drastically different ways so it's important to be aware that you might say something with good intentions that nevertheless offends or upsets another member of the community. In these cases, rather than explaining to that person why they ought not be upset, apologize, try to understand why your comment upset them, and move on."

</comment></comment><comment><USER4> For a long list of reasons, both philosophical and practical, I strongly dislike the adoption of community code of conducts.

One reason that's not been mentioned elsewhere is that they make an act wrong because it offends a magical set of rules, rather than the act being wrong in its own right. Lawyers would recognise this as the difference between malum in se vs malum prohibitum. I don't speak for anyone else, but this is not a subtle difference for me.

The latter seems entirely at odds with a distributed and obstensibly non- hierarchical open source project.

<comment><USER5> As if the line between malum in se and malum prohibitum was well defined. What you consider a magical set of rules others consider basic requirements for fostering an environment of respect and civil discourse.

I get that you don't agree. But you have no rational basis to assert that the acts prohibited by the community code of conducts aren't malum in se.

</comment></comment><comment><AUTHOR> Hi folks - If you've got feedback that you'd like us to take into account, can you please send it via the form (<https://www.djangoproject.com/conduct/#feedback>)? I have a shitty memory, and if you just leave suggestions here I'll probably forget 'em. Thanks!

<comment><USER6> In the culture I was raised, the word "shitty" was highly offensive. I'm not offended, but my childhood community would be.

</comment></comment><comment><USER7> > _This is censorship! I have the right to say whatever I want!_

 _You do -- in your space. If you'd like to hang out in our spaces (as clarified above), we have some simple guidelines to follow. If you want to, for example, form a group where Django is discussed using language inappropriate for general channels then nobody's stopping you. We respect your right to establish whatever codes of conduct you want in the spaces that belong to you. Please honor this Code of Conduct in our spaces._

Excellently written answer to deal with the torrent of complaints spewed by man-children at the requirement they be considerate of others. "My free speeches!" and "How dare you censor me?" and "But what about my get-back-in- the-kitchen and make-me-a-sandwich jokes?! You've killed comedy!"

<comment><USER8> Although I agree wholeheartedly with the code of conduct, it's disrespectful to those who disagree to lump them together as you have done.

There will always be opposing viewpoints, even on things that we'd consider nearly cut-and-dry like not talking about your penis at a conference. Respect them and win with argument and logic, not with propaganda and bad posters mocking them as a disingenuous group. (The censorship complaint, though flawed, is a little more complex than you imply.)

<comment><AUTHOR> I'm sorry you feel that way; that wasn't our intent. If you've got ideas about how we might improve it, please let us know: <https://www.djangoproject.com/conduct/#feedback>.

<comment><USER9> I know little about Django.

Have you really had a problem with the behavior of your participants that requires this formal code of conduct as a solution?

Your code of conduct on its face seems innocuous, but there seems to be an elephant that you are trying not to discuss.

As illustrated by great-grandparent, there seem to be many eager to take your code of conduct and wielding it like a shield use it to bludgeon others with behavior contrary to your intentions.

 _Excellently written answer to deal with the torrent of complaints spewed by man-children at the requirement they be considerate of others. "My free speeches!" and "How dare you censor me?" and "But what about my get-back-in- the-kitchen and make-me-a-sandwich jokes?! You've killed comedy!"_

If I had a suggestion, it would be to take from the Wikipedia and _assume good faith_ which is a principle that your Speak Up! source also dances around, in that it seems a person can "assume bad faith" and still comply with each principle in your code of conduct.

Don't be a dick. Do unto others.... Assume good faith.

Each of these seem to concisely cover the issues you have without leading to their abuse, or tyranny of the (majority, minority).

</comment></comment></comment></comment><comment><USER10> Here are random thoughts for a Code of Conduct (not related to django, because I only use the doc there):

-RTFM is not an acceptable answer without a link to a precise chapter (not to giant page).

-"this has been answered" is not an acceptable answer without a link to the previous answer/question, and if it's repeatedly sent, then it's time to change the software UI or the doc (in this order of preference).

-accessing the community (dev or user) should never force you to subscribe to a ML (we're in 2013, not 1993), or creating a password (use you imagination, github, or openID).

-stale/inaccurate pages on the wiki are to be removed (not marked as "old" or whatever) every 2 months. Don't create a wiki if you can't handle it (your time is probably better spent developing I guess).

-FAQs are useless, just change your intro/tuto/getting started or your UI.

</comment><comment><USER11> I really like this, not just because it works towards a community of acceptance, but because the guidelines are laid out publicly. A lot of people seem upset with the idea that they are being censored, but I really don't see it as an absolutely horrible thing. Communities are moderated all the time, but at least in this instance there is a publicly available set of guidelines which one is capable of offering feedback on. I'd love to hear where people differ with this opinion, but I really think this is a good thing for the Django community.

</comment><comment><USER12> You cite the Ada template, which says "sexual language and imagery" is inappropriate for a conference or other public event. Your website only mentions "sexist language".

From the tone and tenor of the post, I suspect you mean to endorse that aspect of the template, and if so, you probably should state that clearly. Doing so may help when inevitable disputes arise about whether someone's behavior contradicted the code of conduct. You will almost never look back and say "I really regret being clear".

Otherwise, my first thought is that I think this code is a good idea.

<comment><USER13> Personally, unless a statement against sexual language is qualified, I can't find myself ever agreeing with it.

Why? Say I'm working in sexual health and create apps and websites around sexual health. Does the sexual language prohibition mean that I must be incredibly careful to not discuss the actual content of my work, even in the most professional way?

<comment><USER14> Yes it means exactly that - There was a recent talk about sexual health that was canceled because it ran against that rule.

[http://violetblue.tumblr.com/post/44107008572/what- happened-...](http://violetblue.tumblr.com/post/44107008572/what-happened- with-my-security-bsides-talk)

<comment><USER15> I read that blog and the impression I got was that she was railroaded by the "audience member".

An audience member who specifically asks if there's any "rape" discussion in the talk, then, when discussion of date rape drugs occurs, the organizer says that "the member mentioned that if you describe how to use date rape drugs..."

How does random audience member know that a talk will cover such drugs? That's a very specific comment to make to complain. "Oh, if they talk about rape, it's a trigger for me", "and if they explain how to use date rape drugs, that's the same as rape".

Pseudo-edit: I read further down the article that indeed her talk was targeted.

That being said, I have little sympathy for Violet Blue - she's been known to have a litigious past based on changing her name and then invoking domain squatting and trademark law against others who were around before her.

<comment><USER13> I come from the medical apps field, so I find the idea of possibly not being able to talk about my work frightening.

Sex (any reference to the existence of sex, to crib from This American Life), not okay. Religion or politics, okay. Odd.

</comment></comment></comment></comment></comment><comment><USER16> This is the first real news today that I wish was an April Fool's hoax.

<comment><USER17> Yeah, me too. Chalk that up as an advantage Ruby on Rails has over Django.

<comment><USER16> Remember, remember the conference in November[1]

[1] [http://www.theregister.co.uk/2012/11/20/british_ruby_confere...](http://www.theregister.co.uk/2012/11/20/british_ruby_conference_cancelled_after_diversity_row/)

<comment><USER17> ruby != rails

</comment></comment></comment></comment><comment><USER10> I love the idea of being "professional" on an open-source volunteers project: put on a mask during the work day, and keep your mask at night. Then read articles and watch movies about "being yourself", "finding your inner self" and stuff like that all day long. When the dissonance is too great, your mind break and it's depression, gun violence (in the US), suicide etc.

<comment><USER18> Yes, you should be professional, the same way you'd probably be respectful at a dinner party that occurred outside of work hours. This is about as puritanical as a coffee shop that prevents you from bringing a guitar and amplifier in and playing loud riffs at 4pm. If you want to remove your mask then please, feel free to do so, but maybe find a more appropriate environment for letting loose than the Django community forums.

Also, really? The idea that asking people on Django-hosted channels to "be respectful" will lead to gun violence is pretty out there.

<comment><USER19> I have a difficult time with the phrase "professional." I used to think it had some meaning. Now I think it's a code word for "don't do things that the managers/organizers don't like."

Can I wear a pony suit to work and be professional? What about at DjangoCon? What about wearing shorts and sandals? In some places they are acceptable, in others they are not. Does that make them professional or not? So it seems like DjangoCon allows certain types of non-professional conduct.

Is it professional to drink alcohol while at work in most programming companies? What about taking a nap during someone's presentation? I don't think so. Is the same true for DjangoCon? I don't think so. I've done both at conferences, and people knew about it, and no one seemed to have a problem with it. I've seen others do the same.

There's another meaning of "professional", which is to do quality work, and be responsible for any errors that occurred. I don't think this is the type of "professional" that people mean. I've not seen anyone kicked out or even chided by the organizers for presenting a lousy and unprofessional presentation.

As to the coffee shop example, that can be judged without reference to respect. The goal of a coffee shop is to sell coffee. They have broad discretion as to what they think is the way of achieving that goal. This is based on property law. If they don't want you to play loud riffs at 4pm then they don't have to claim there was disrespect, only that it's unwanted, and they can use the credible threat of police response to back their demand that you leave.

The neighbors also have some say in the matter. Loud music might be prohibited, and your amp is turned up too high. Again, "respect" doesn't factor into this at all.

But for a dinner party, or for Django, I don't think it's possible to have a good definition of "professional" or "respectful." It comes down to the vague "don't do things that we don't like, otherwise we'll kick you out." Using "professional" just makes it sound more objective.

</comment></comment></comment><comment><USER20> jacobian,

can we be more clear about tolerance of respectful dissent? I feel like the language in the present draft of the document gives an overbearing feeling and has aspects of thinly veiled political correctness enforcement.

please don't misunderstand my sentiment. i'm not meaning to excuse bigoted language of any kind. i do, however, think that a code of conduct ought to be much much much more clear that it is a set of guidelines for people to interact WITH disagreement, rather than a set of rules for stifling dissent.

<comment><AUTHOR> Thanks a good suggestion; thanks. Can you repeat it via the feedback form (<https://www.djangoproject.com/conduct/#feedback>) so that we don't lose track of it?

</comment></comment><comment><USER21> I follow django-dev, sometimes drop into irc, and haven't seen anything inappropriate in there. Did something happen I'm not aware of?

<comment><AUTHOR> Nope. We've been working on this for... quite a few months, actually.

<comment><USER21> so... aren't you solving a problem that doesn't exist in the django community?

<comment><USER22> Which is the best time for these sort of things.

</comment></comment></comment></comment><comment><USER17> > Be careful in the words that you choose.

Nice try in hiding the puritanical censorship aspect of it, but I'm not fooled.

<comment><USER23> In the Django community, as in Sparta, everyone is held accountable for the words of his voice.

The main difference is that in Sparta they throw you in a gigantic pit; we have a strong preference for talking it out and encouraging people to be nice to each other.

</comment></comment><comment><USER24> I've considered contributing to Django in the past but assumed I wasn't "good enough" to do so. Seeing immediately gives me encouragement to try. I think it's good.

<comment><USER16> I did too. I looked for an issue I could handle[1], wrote a patch, improved it, added tests and got over the fact that the Django guy at Europython 2012 was too busy to answer my questions during the dedicated sprint.

I even followed the bug tracker triage docs and tried to find a reviewer only to get scolded for it[2]. Then I had to wait 20 days to get a response on the patch. It was a "wontfix" because documented bugs are actually features.

But now that there's a code of conduct all this has changed and I feel the urge to contribute again to Django /s

[1] <https://code.djangoproject.com/ticket/18494>

[2] [https://groups.google.com/d/topic/django- developers/K95mZose...](https://groups.google.com/d/topic/django- developers/K95mZoseH5E/discussion)

<comment><USER19> I looked as [2]. It doesn't look like a case of scolding. It's a one-liner saying "there is no need to write to django-developers to notify us about ticket changes, we do follow trac and there is an extra ML for ticket updates."

I don't know the Django process, but this seems pretty standard. Your initial post doesn't add anything new to what the patch already did. They were letting you know that posting your request to the list won't speed up the process.

Unfortunately, with an all volunteer development team, it's hard to put time aside to helping new people with what doesn't seem like critical patches. In my observation, the way to solve this problem is to develop more patches, including ones that are more critical. Critical/useful/neat patches get priority. After you do a few of these, then you can get people interested in your other patches, and/or become part of the core team.

Where you'll then find that your time is spent working on new core features, and not enough time spent helping new people become core developers. ;)

For what it's worth, my oldest open bug reports are 10 years old. One for Twisted, <http://twistedmatrix.com/trac/ticket/288> , and the other for Python, <http://bugs.python.org/issue747320> . I still see occasional activity about each.

<comment><USER16> I tried to respect their documented process and find a reviewer for my patch so the status of the issue can get one step closer to "closed". They specifically mentioned IRC and this particular mailing list as ways to locate reviewers. After waiting a couple of hours for a response on IRC, I wrote to the mailing list.

<comment><USER19> Then you started off with the wrong email. You said "I've got a fix and a test and now I need a reviewer to mark the ticket as RFC. Please take a look if you're familiar with this area of Django."

That added nothing new, because anyone who would review it has already been informed. That's what the reply told you. They have no idea who you are, or what you know about the process, or even that you want to follow the process.

You then followed up with "How else am I supposed to find someone to review my patch? I got no response on IRC." That does give the sense that you're exasperated. That doesn't help them understand that you want to work with them.

Also, your first email has the wrong tone, in several ways.

You wrote that you "need a reviewer to mark the ticket as RFC". That is a presumptive view, because it assumes that a reviewer will mark the ticket as RFC. The reviewer might say that it needs many changes, and pass it back to you for continued development.

Second, the line "Please take a look if you're familiar with this area of Django." is not helpful to the person reading the email. How does someone know if they are familiar with that area without actually going to the bug? They have to take a look. Which means that anyone who might review it will have to take a look, no matter if they are familiar with it or not.

My belief is that if you had asked a question about the process, rather than the patch, and explained how you were trying to work within the existing process, then you would have gotten a more useful answer. For example:

"I've just contributed my first patch to Trac. Now I'm waiting for a reviewer. I asked for one on IRC but got no answer after several hours. The contribute FAQ suggests asking here as well. Can someone here review <url> for me?"

That's gentler than the email you first sent. It would have probably gotten an answer like what the FAQ says:

Remember, "it's not personal. Django is entirely developed by volunteers (even the core devs), and sometimes folks just don't have time."

Instead of developing a patch, what about reviewing the patches that others have submitted? Do this enough times and someone will likely reciprocate.

<comment><USER16> You're probably right about not being gentle enough. The "area of Django" I was referring to had been mentioned in the email's subject, though.

As you might have guessed, that was my first and last try to contribute to this particular open source project. I won't do it again. Maybe this attitude is unusual in the subset of Django users who at some point want to contribute something back to the community. Or maybe the core developers have the wrong approach to encouraging new members of the community and instead of making sure the process works they spend the time writing codes of conduct.

<comment><USER19> Fair enough (regarding the title).

As I wrote, what you saw here is typical of most volunteer-based project. There's not enough people working on a project to cover all of the details, and those people tend to do the things that interest them. Reviewing others' patches is low on the list, unless it's something which involves them directly.

It's likely that you'll get similar responses in other projects. As I wrote, there are ways around it. Mostly be putting a lot more effort into helping the project before you demand things from people. Again, I point out that a couple of my bug reports are 10 years old, and still getting infrequent attention.

Another way to say this is that if you're the person who wants so much attention or quick feedback, then you're not the type of person who would do well in a volunteer-driven, distributed project. But there are other volunteers who are a better fit, and the Django team doesn't know how to specify which type they are looking for.

In any case, the response email wasn't scolding.

</comment></comment></comment></comment></comment></comment></comment><comment><USER25> the fallout continues...

<comment><USER18> Fallout generally means something negative. If this is related to the PyCon incident (which it might not be, given that Django says they've been working on it for some months) then the "fallout" is simply the adoption of a formal document that says, in so many words, "don't be a jerk." The Django team has a right to do whatever they please with the spaces they host and moderate, and asking that users don't be jerks in these spaces is completely reasonable by any metric.

<comment><USER10> The "jerk" definition will be jerky.

</comment></comment></comment><comment><USER26> Your guidelines look good, but how do you define "sexist" and "racist"?

Third-wave, post-modern feminists believe in a neat, well-defined hierarchy of sexes and races; regardless of the specifics of a given case, members of a "lower" group can _by definition_ never be sexist or racist to a member of a "higher" group.

Is that your interpretation?

<comment><USER27> Source for your claim about third wave feminists? Considering that you're talking about a massive number of people when you say that, you're probably wrong. The third wave was more just a shift towards a more general awareness of the issues that women face, and the fact that things such as gender are not as binary as the second wave may have presumed.

It's also odd that you think the third wave promotes a well-defined hierarchy of sexes and races when a lot of what it is about is recognising that many people fall outside of society's definitions of gender and sexual identity. But as ever, I imagine much of this is just a semantic argument wrt your definition of third wave postmodern feminists.

As for the Django leadership's definition of sexism and racism? Something tells me they don't have a crazy proportion of people with the beliefs you described, so they'll probably stick with the standard "discrimination/prejudice against a gender/race/ethnicity/group/etc"

<comment><USER28> From the FAQ of the Feminism 101 site to which newcomers to the "feminisms" subreddit are directed:

> feminists reject the notion that women can be sexist towards men because > women lack the institutional power that men have.

I understand this to be the standard reasoning among contemporary feminists, and the same reasoning is widely applied wrt racism.

<comment><USER19> Your understanding is incorrect. As several other comments in that thread point out, "This is a viewpoint of some feminists, but it is _far_ from consensus, and the first three users of the word "sexism" appear to have disagreed with the writer" and "By claiming the term 'sexism' exclusively for acts against women, aren't we disenfranchising the men who also suffer?."

There's even the complaint that the given definition is inappropriate for a Feminism 101 definition, saying "If I had no prior knowledge of feminist theory or the contentions that really _abound_ in the rather amorphous field of feminist theory, I would take what has been presented here as established fact rather than a specific argument and one of many hypotheses on the matter of "what sexism is.""

I just this evening read a few chapters of the excellent "A Law of Her Own: The Reasonable Woman As a Measure of Man", by Caroline A. Forell, Donna Meredith Matthews. I think you'll agree with me that it's written with a feminist voice. Page 72 starts its discussion on female-on-male harassment in the workplace. They give the example of Richard Williams v. Runyon where Williams' supervisor, Clora Grant, was the alleged harasser. The court decided that it wasn't harassment. I read the court decision, and I agree with the authors of "A Law of Her Own" - the court was wrong and it was clearly harassment.

Which means I easily found an example of feminist legal scholarship which was using the same definitional premise you quoted as applying to all feminists.

I assert that it's much more likely that that quote is wrong than that Forell and Matthews do not understand feminism.

BTW, the interpretation of Title VII has changed since 1995. That's why now there can be a decision like:

> DETROIT – LensCrafters, a major eyewear company, will pay $192,500 to settle > a female-on-male sexual harassment lawsuit filed by the U.S. Equal > Employment Opportunity Commission (EEOC), the agency announced today. The > EEOC had charged that LensCrafters subjected a male employee to a sexually > hostile work environment at its Saginaw, Mich., retail location.

> According to the EEOC's suit (Civil Action No. 1:09-CV-12694, filed in U.S. > District Court for the Eastern District of Michigan), LensCrafters violated > Title VII of the Civil Rights Act of 1964 by subjecting a male lab > technician to sexual harassment and failing to address his complaints that a > female co-worker was abusing him. The EEOC said the harassment included the > female employee touching the male and making inappropriate comments about > his appearance. In its suit, the EEOC charged that LensCrafters fostered the > hostile climate by disregarding the male technician's complaints because he > was a man.

<comment><USER28> It's certainly the case that many feminists do not apply the reasoning in the FAQ. I should have been clearer that by "contemporary feminists" I meant "adherents to more recent feminist thought" rather than "feminists who are currently alive" ("third-wave feminists" was the context of the conversation). The relevance is that one of the words in the draft Django code of conduct means significantly different things to different people, which is undoubtedly true, although I'm not particularly lobbying to change it.

<comment><USER19> Being "nice" and being "professional" also mean significantly different things to different people, so it's not like that's the only word.

<comment><USER28> I don't think people would disagree about the _definitions_ of those words.

Edit: and, to be honest, I don't care that much. It is a fact that a significant number of feminists hold that sexism can only be directed by men towards women. That is really all I wanted to say. I don't particularly want to argue about whether they're right, or what implications this has.

<comment><USER19> Fair enough. Most of my recent readings have been in the founding of civil rights law in the 1960s, so pre-second wave(?). Problem is, I can't make that fit into the 1st/2nd/3rd wave view.

<http://en.wikipedia.org/wiki/Second-wave_feminism> says the movement started in the early 1960s, and that first wave ended when women were enfranchised in the early 1900s.

But the Civil Rights act of 1963 had decades of work behind it. The National Woman's Party, which was the militant branch of the Suffrage Movement, started pushing for the Equal Rights Amendment in 1923 and "the Republican Party endorsed the ERA in its 1940 platform, and the Democratic Party followed suit in 1944." (Quoting from <http://www.jofreeman.com/lawandpolicy/titlevii.htm> ). The Equal Pay Act also has its roots in the 1800s.

It feels then like 40 years of work towards gender equality in the workplace - including the inroads made during WWII by seeing that women can definitely hold jobs in industry - are ignored by the three-wave view of history, and that the successes of that ignored era are claimed solely as 2nd wave victories.

In any case, that's neither here nor there. It's idle musing that I wrote down so it's easier to come to mind next time I talk with someone who can tell me about the history of feminism.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER29> Nice job wrapping a statement on ideological purity in niceties about being "patient" and "friendly". I guess there is no escape from the long arm of the diversity corps; in the schools, in the corporations and now in my web application framework.</comment>


MinION: A Complete DNA Sequencer on a USB Stick - <AUTHOR> http://www.extremetech.com/extreme/151086-minion-a-complete-dna-sequencer-on-a-usb-stick

<comment><USER2> This news is actually about a year old, and there has not been any information increase since that time. In the bioinformatics blogosphere there is a nasty discussion whether the technology is even real. For sure, there have been no sightings of any data or working prototypes that wouldn't have been easier and cheaper to produce with some hobby electronics to fake the blinking lights.

On the other hand, the basic technology is believable and the investors are credible, so I have not yet given up hope on this technology.

There was one interview where the CEO expressed his irritation at sceptics, citing he is making a list who won't receive a MinION from the early batches. I think both viewpoints are understandable.

What people also don't understand is that the MinION as specified so far can't read a complete human (or other animal's) genome, because the nanopores wear out before reading enough data...</comment>


WSJ: "India Graduates Millions But Too Few Are Fit to Hire" - Yes, But ..... - <AUTHOR> http://blogs.zoho.com/general/wsj-india-graduates-millions-but-too-few-are-fit-to-hire-yes-but <comment><USER2> Are companies really legally disallowed from using IQ tests in the USA?

This is definitely not the case in India - most companies that come to an engineering college campus for mass hiring follow this process:

1\. Initial screen on grades 2\. Written test for for those past the first filter (might be technical, or an "IQ" test) 3\. In-person interview

Of course, keeping in mind some of the people that go through this process successfully, the bar is laughably low for all of these. (And of course, mass hiring companies get lazy and re-use questions, so there's quite a thriving industry built around 'question banks' for steps 2 and 3 above.)

<comment><USER3> _Are companies really legally disallowed from using IQ tests in the USA?_

Griggs v. Duke Power Company, 1971. US Supreme Court found that a particular use of IQ tests in hiring practices caused a disproportionate impact on African American employees. "Disproportionate impact" can make a facially neutral policy illegal under various US civil rights laws.

This is not a blanket ban on IQ testing in employment, but corporations being risk-averse, most of them don't really do it much any more.

(This is a very happy outcome for universities, since it gives them a virtual monopoly on discriminating on the basis of intelligence. Since that is really useful to do, all a university has to do is maintain its reputation as being a mostly reliable discriminator, and the actual contents of what it teaches are virtually irrelevant.)

<comment><USER4> >Griggs v. Duke Power Company, 1971. US Supreme Court found that a particular use of IQ tests in hiring practices caused a disproportionate impact on African American employees.

Did the US Supreme Court really find that African Americans are less intelligent than people of other races?

<comment><USER5> At the risk of replying seriously to a flippant comment, it is a stretch to say that the IQ test is a rock solid method to identify intelligence.

It's already common knowledge that African Americans, as a group, score poorly on IQ tests as opposed to other groups.

I personally find it strange that people feel it is all that important. After all, what if it was provable that a racial group was less intelligent than other groups? How could one reasonably and humanely find that information actionable?

<comment><USER6> Well, there are certain mission critical kinds of areas -- like medicine or bridge engineering -- where this knowledge is actionable.

Certainly people here on Hacker News don't need to be convinced of the value of finding elite engineers, or the very real wealth they can generate from book learning.

The problem is the doublethink that allows the IQ elite -- graduates of highly selective institutions like Harvard and Stanford -- to pretend that there is no such thing as an IQ elite, while simultaneously selecting their peers (coworkers, marriage partners, fellow students, etc.) from that very same ostensibly nonexistent IQ elite.

The contrast is whiplash inducing. One minute IQ doesn't matter, the next minute everyone is talking about how all these "idiots" can't solve FizzBuzz... Very big blind spot here, which many Asian countries don't share in the same way.

<comment><USER7> I took an IQ test in fifth grade. I will never forget one of the questions on the "general knowledge" section: "Who discovered America?"

 _Aha,_ fifth-grade-me thought, _a trick question!_ "The Indians," I said confidently.

The woman administering the test rephrased the question: "Who is _generally credited with_ discovering America?"

Even though I scored well enough to qualify for the "IQ elite", that experience gave me a livelong skepticism about how seriously to take IQ tests. I don't need to ask for someone's IQ scores before deciding whether or not to work, hang out, or have sex with them.

The comparison with FizzBuzz is not apposite, because nobody is claiming that FizzBuzz is a measure of general intelligence or even a measure of general programming aptitude. If candidate A solved the FizzBuzz problem twice as fast as candidate B, no sane hiring manager would conclude that candidate A is going to be twice as good at programming.

<comment><USER8> I'd be extremely surprised if you aren't misremembering. IQ tests are never supposed to have sections like "general knowledge", "history", "celebrity gossip", etc. "Who discovered America" is a textbook example of a non g-loaded question.

If such a section was used on a test they described as an "IQ test", it was almost certainly there only for statistical validation purposes.

There have been a number of studies done which ask obviously knowledge based questions, obviously g-loaded questions, and unknown questions. They then compare the statistical distribution of answers to the unknown questions to the obviously bad questions ("who discovered America") and the obviously good questions ("you want to carry a fox and two goats across the river in a 2 seated boat, but if you leave the fox alone with the goat the fox eats the goat..." [1]). If you aren't misremembering, I suspect you were participating in such a study.

[1] This is unbiased because all information is given. You don't need to know what a fox or goat is, or have ever seen a boat. It could be rephrased "you want to transport a X and two Y's from location A to location B. But if you leave an X and a Y alone, you fail."

<comment><USER7> I don't think I am misremembering and I don't think I was part of a study. This would have been around 1980, so the test was probably the WISC-R, which was published in 1974; maybe they got better about eliminating loaded questions in the WISC-III (which wasn't published until 1991).

When I Google "who discovered america? wisc-r" I get several hits mentioning this test question.

<comment><USER8> Upon further googling, you seem to be correct. Apparently the people designing WISC-R never bothered to read up on the theory of intelligence.

This isn't even a new idea - it dates back to the original Spearman paper from 1904. Start reading on page 65.

<http://www.similima.com/books/psychologybooks/psych7.pdf>

<comment><USER9> Not to mention that the answer which gives you more points of IQ, hence meaning you're "smarter", isn't even correct. You can start with the native americans, go through to the vikings, and I read a book recently that made a _very_ convincing case that the Chinese sailed to South America in 1421-1423 before they shut themselves off from the world for 400 years.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER10> Graduates traditionally are trained by employers to be functional employees.

The point of the original article is that few graduates have any skills of use to the employer, making their degrees worthless.

Having interviewed many Indian graduates over the last ten years, I've learned to ignore their CVs and simply talk to them. If they seem bright and keen to learn they can be useful, but they're only considered because they're cheap.

<comment><USER11> The difficulty I have found interviewing people who have been through the mainstream Indian educational system is they say "yes" to everything.

      Me: Have you used technology X?
      Them: Yes
      Me: Tell me how you used it
      Them: I used it every day
      Me: What did you use it for?
      Them: I used technology X every day to do my job. It is a very good technology.

This goes on for a bit, and I can see them getting flustered, and they almost seem to resent me, as if I'm deliberately and maliciously trying to humiliate them by asking a question "that's not on the test". Whereas "no, but I used technology Y" would be a perfectly acceptable answer.

</comment></comment><comment><USER12> Genuine question: would anything legally prevent an employer from giving an IQ test as part of the hiring process if they wanted to? The standard interview techniques often discussed on HN don't seem very far from that anyway.

<comment><USER13> Probably not but possibly. IANAL though and I think the HN questions are more about the technology rather than characterizing the innate "intelligence" of an applicant(if it can even be actually measured). I could see there being litigation from a minority group or a different culture saying that the standard IQ test as being racially biased towards white American people; thus, the test would fall under the civil rights act of 1964. There are also cultural differences that minimize the effectiveness of an IQ test being useful across cultural boundaries.

see: <http://en.wikipedia.org/wiki/Race_and_intelligence#Test_bias>

But really, why would you even want to use the result of a very flawed test that really does not show the true level of intelligence to hire someone? Assuming that the IQ test was perfect, intelligence is not the be all end all to performance at a company. Why not instead interview the candidates using performance tests in the specific areas that you are interested in?

</comment></comment><comment><USER14> I thought the reason for keeping graduating colleges as a recruitment criterion was because large organizations just don't have the time to wade through thousands of applications. The HR departments can't really tell the difference between someone who can is super creative and someone who can just get the job done. They look at CV, referrals, past experience.

Though I agree that creativity cannot be attributed to ivy-league alone. Reminds me how Howard Roark got hired by Henry Cameron in the book Fountainhead. Inspite of being a dropout, Cameron hires him based on Roark's design work.

Current education system were primarily designed during the industrial revolution. Focus was to give people enough training so that they can _operate the machines_. Though US education system has changed quite a bit, most other countries (for example, India..) are lagging far behind. Hopefully, this will change soon.

</comment><comment><USER15> The other thread (<http://news.ycombinator.com/item?id=2411695>) on HN took a turn for the angry and the personal so I will put my thoughts here. Though there will be few personal bits here as well.

It is ok to be dissatisfied with the education one received in India (and blame your parents for making poor choices while you are at it). But for the complaints to be understood by a non-indian I thing some perspective is in order. I cannot even broach open all that needs to be said to even set the groundwork for a wholesome discussion. So I will stick to few select quirks that are quite unique to the Indian scene.

The first thing is that size of the population seeking college education is just mind-bogglingly huge. College education is perceived as mandatory. Till before a decade ago college education was thought to be the only, yes only, conceivable route to an honourable livelihood. I am talking about people who live above the basic subsitence levels and living (damn! why do I have this. I start typing phonetically when tired and dont even notice it. Meant leaving of course) out the richest.

On one hand we have this huge demand on the other we have the fact that college education is unbelievable cheap, or was. Things are changing now. It is still mostly cheap. To put things in perspective the entirety of my tuition bills for my undergraduate studies in engineering was $15. Yes that is right $15 for all four years put together. The way this works out is through govt subsidies. Furthermore the subsidies are not evenly distributed. There are a few top tier institutes that get a lot, less so for the second tier, drastically less so for the ones that are lower. I think the idea was to establish a a few key stirling institutes and drive traffic there. Part of the reason they converged on this model was scarcity of resources, financial as well as human and the fact that the govt was doing all the lifting.

But the capacity that these institutes can handle is tiny compared to the demand. Hence intense competiton. The only way to get flow control without increasing capacity was to make the process more and more competitive. And that competiton was not always aligned with the final goal of producing a well rounded and competent student.

Then comes the teachers. Apart from the top tier colleges, a teaching job is mostly an easy free parking spot. You can get by doing absolutely nothing. So it attracts people who want to do nothing, or who could not find other suitable means of employment. The salaries are modest, but given what you have to do to earn it, it was pretty much a handout. A part of it was also to absorb the grad students that were being produced and were not in high demand because of then much slower economy.

What about private colleges you say. They used to have a stigma attached. private colleges were the places you went to when you werent scholastically good enough. How a rich dad would bail out his kid. Well the not so rich too, they would rather go bankrupt than deny a college education to their children. These colleges were mostly a glorified retail shop for degrees. Because of this they would not attract the good teachers. But this is changing slowly as they are throwing unignorable wads of money. But people still perceive it as a fight between honour and money.

Now lets turn to the other thread. It was mentioned there that parents decide what you want to study and it is either medicine or engineering. Yes there are parents who are control freaks, quite a few of them actually but the phenomena is not as nearly as widespread as the other thread would make you believe. But yes there is a huge, huge bias for opting for medicine or engineering. The immediate purpose of education is seen as a means of securing your future rather than for the purpose of edification. Till before a decade ago the security in those professions were head and shoulders above the other. By a huge margin. And even then around 60 to 70% of the graduating engineers would find a job right after graduation. A scenario that is quite drastically different now. So you can imagine how the other "riskier" propositions fared. I too was advised to straddle the options of medicine and engineering and did so. Hated the memorization that went into biology. But now I do not begrudge that at all. I feel I am at an advantage because of it.

But how was the quality of the undergrad education you ask? Well I went to a institute that was shy of the top tier, and much of my undergrads I was quite wasted anyway. But very early enough I developed deep contempt for many of our teachers and chose to educate myself on my own. I cut classes frequently but would spend time hidden in the library reading something of interest. Way more productive than a lecture that I was sure I would get nothing from. I started of as a mechanical engineer (well manufacturing to be precise) and now am doing machine learning and there was a bit of robotics down the way, and CNC machine programing and programing computational geometry algorithms in between.

The government is aware of the problem and actually is trying to recruit heavily from the US universities. But then again for the top tier colleges.

<comment><USER16> quite an excellent post. _But very early enough I developed deep contempt for many of our teachers and chose to educate myself on my own._ that would be true for most of us - self taught engineers we are. Also unlike in the US where there are many universities of top repute, in India we have either the IITs or NITs [wrt engineering] - and actual quality of education their is also isnt great [ well i can say about NITs].

</comment></comment><comment><USER17> India follows the "Sheep Herd" mentality. The whole country's economy is based on people getting into "Profitable" domains mostly following the success of a pioneer in the field. The most recent example of this ideology is the "Business Process Outsourcing" industry.

New BPO units are propping up here and there at a dime a dozen leading to a quality deterioration in the final deliverable. This process will continue till a saturation level is reached and then they will wait till another "Killer" domain picks up momentum.

Till then India will be in a so called "Calm Period" where nothing great and major takes place.

</comment><comment><USER18> I guess, these things sort themselves out in a capitalist society. I guess, there is nothing really to worry about :)

Indian higher educational institutes and their ratings correlate well on a log graph. This is the way it should ideally be (it is a well designed filter). Only problem is that the highest rated institutes are few and far between. The students admitted in these top-tier universities have cleared entrance examinations with a standard deviation of less than 5% (this is a guess, it is likely even less). A lot of potentially good students are therefore left out of an opportunity for better education (rather a better starting job, due to the hiring culture).

It is true that the 'education' in India sucks - it is outdated, and often not worth the 4 years spent in acquiring it. However, the log correlation ensures that top-tier universities are damn hard to get into, and those few than do get into them (for example, the IITs) are by far the best in the world (compared to anywhere).

Given some more economic pressure, more top-tier universities should popup soon. As for finding customer service workforce, I think, its about time India starts offshoring it elsewhere ;)

</comment><comment><USER19> Microsoft pioneered the use of brainteasers, really a form of an IQ test

</comment><comment><USER20> "So knowing that a college is rigorous in its admission standards is a way to signal prospective employers that the graduates from that college are already vetted." I would say that the admission standards here in India are very rigid , going by the top two engineering entrance exams. For IITs 4k out of 150k people who write the exam get admissions whereas for the RECS and some second tier colleges the admission rate was around 15-20%. Hence i think the problem is not that the admission standards are lax. What the wsj article was hinting at a lack of basic comprehension and technical skills. Lack of comprehension skills(in English) can be explained by the fact that English is not the first language ,even though it may be the medium of instruction. The other weakness has a lot to do with lack of interest, motivation and also a sense of lethargy which sets in after going through two years of what can best be described as a bootcamp preparing for the engineering entrance exams.

</comment><comment><USER21> "Ultimately, an impressive college credential from a good college serves to a prospective employer as an extended IQ test, a sort of legal signaling device."

I know this community likes to hate on non-technical college degrees, but the sort of thinking treats "real" liberal arts degrees quite unfairly. Believe it or not, but broad, challenging programs produce a substantial change in the willing student. Like it is often said, the technical knowledge is often better obtained on the job.

</comment><comment><USER22> Here is a question for the Indian readers:

Is there a cultural issue here? Perhaps the employers are looking for forthright people, while (the limited number of) young Indian grads I've met are usually soft-spoken and more circumspect. Could this be the issue.

I find what zwischenzug said to be true, that most graduates are trained by their employers, not by the universities.

<comment><USER23> Looking back at myself - how I was when I graduated vs. with experience of ~10 years in the industry - I think it is more of an issue of exposure to the right things than culture.

Besides what I find is a total disconnect of industry reality in college education. The only way we could circle back to correct this is by having experienced people from industry going back to academic roots to teach, to improve quality of experience graduates go through.

With my current employer to bridge the gap & provide more exposure to students & guide them, we go to colleges & schools across rural areas and we conduct a program in partnership with "Junior Achiever" (<http://ja.org/>).

We hope such programs would eventually bridge the gap between industry & academia and also help students get the right exposure.

</comment></comment><comment><USER24> what i have from my own experience is every one treats technical courses like a mathematical function. Go through course Y and you will be more smarter than people from course X.I always keep hearing stuff like "Brigding the gap between industry and acedemia" which i never seem to understand. Trying to do something other then mentioned in your ciricullum is considered taboo. Most of my friends have "outsourced" thier final semester academic projects to a institute which prepares it for them. Dont trust me? have a look at this <http://goaltechnologies.in/new/?page_id=13>

</comment><comment><USER17> IQ + EQ = Fit to Hire

But IITs focus only on IQ and IIMs on EQ.</comment>


Ask HN: Is there a WGET that also works with paginated articles - <AUTHOR>

I'd like to pull down a few articles from some news sites to store on my computer.
The problem is that many of these articles have pagination in them, so I only get the first page. Or they have that thing where you read a little bit, then have to click a button to make the rest of the text slide out.
I'm fairly new to linux. Is there a command-line utility or a program somewhere that will let me point it at a web page and it will get the page and all the sub-pages associated with it? <comment><USER2> A sometimes available workaround is to look for the "Print article" or "print view" button, which will usually pop up the article all on one page. From there you can wget it, or print to file, or whatever.

</comment><comment><USER3> How would the utility know for sure which link will be for the next page?

<comment><AUTHOR> There are already Chrome plugins that do the same thing while you're browsing.</comment></comment>


The long-term rise in IQ scores might be coming to a halt - <AUTHOR> http://www.newscientist.com/article/mg22329831.300-it-would-be-stupid-to-ignore-a-drop-in-human-intellect.html

<comment><USER2> Intelligence is pretty much a result of health (just as beauty, that's why there are a lot of beautiful and intelligent people, that could even explain why IQ correlates with life expectancy). Eventhough medicine has and still is advancing a lot, we could say that exponential population growth and the increase of inequality are making people less healthy. In addition to this, ,just as the article suggests, kids are eating junk food and watching dumb stuff all the time which contributes even more to the decrase in human intellect.

All this years I thought human intelect would constantly increase for ever, but this article certainly gives really good arguments as for why not.

Intelligence is more environment dependent that genetically dependent, we really need to change the environment if we want smarter future generations in this planet.

</comment><comment><USER3> The long-term rise, a/k/a the Flynn Effect (mentioned very briefly in the article) seems to arise from a number of specific factors, mostly associated with the intense modernization of the 20th century, principally that our world requires a greater ability for abstraction.

Flynn himself describes these in the following video:

[http://www.fixyt.com/watch?v=9vpqilhW9uI](http://www.fixyt.com/watch?v=9vpqilhW9uI)</comment>


Ask HN: In simple terms, what caused the recent crash in crypto market? - <AUTHOR> <comment><USER2> Prices being too high to begin with.

It doesn't matter how useful crypto is (marginally, so far) or how much the underlying infrastructure has improved in the last year (a lot). If prices are rising at 10% per _day_ for a couple months - which is what they were doing last December - then it's basically guaranteed that they're going to get ahead of fundamental value. Realistically, the only way out of this situation is for prices to fall by a lot, which is exactly what's been happening over the last year.

Bitcoin has the same price now that it had in August 2017. It's actually done about as well as the S&P 500 since June 2017, and a fair bit better since Trump's inauguration (it's up about 300% since January 2017, while the S&P 500 is up about 20%). It's just that in the middle of that time period it had this huge bubble, which just happens to be when most people heard about it and bought in, so the median crypto investor is now down about 80%.</comment>


How we found a bug in Amazon ELB - <AUTHOR> https://sysdig.com/blog/amazon-elb-bug/ <comment><USER2> Great article. The Sysdig team really knows how to root cause tough problems. The Sysdig tools can be invaluable for getting and making sense of low level data.

If you want to play with ELBs, rolling deploys, connection draining to ECS containers, I humbly submit the open source Convox project I am working on.

[https://github.com/convox/rack](https://github.com/convox/rack)

It sets up a peer reviewed, production tested batteries-included VPC, ECS, ASG, ELB, etc cluster in minutes.

If the conclusion of this Sysdig post was that you always need to run 2 instances per AZ for the best reliability, I would strongly consider adding that knowledge into the tools either as a default or a production check.

Since it sounds like an ELB bug I'll keep the 3 instances in 3 AZs default.

<comment><USER3> Do you have any thoughts on how to scale load balancers horizontally and on demand? I've played briefly with attempting some dynamic DNS routing based on health checks to re-route traffic from balancers that have been shut down due to low traffic, but DNS really isn't designed to work this way.

<comment><USER4> I'm not clear what you're asking... Do you mean auto scaling the EC2 instances in the load balancer? Or auto scaling the # of load balancers? Or something else?

Of course the former is very common with Auto Scaling Groups [1] [2]. Then you can use round robin or session sticky routing algorithms in the load balancers.

(Apologies if I'm totally off-base for what you were asking.)

1: [http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide...](http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/AutoScalingGroup.html)

2: [http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide...](http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/as- scale-based-on-demand.html)

<comment><USER3> I meant the latter; if your load balancers are overwhelmed how do you scale them? Further to that point, is it possible to create an architecture where load balancers are responsive and can spin up in response to traffic? If you have to deal with loads that are prone to bursts, you need to allocate those load balancers in such a way that they can handle the worst case scenario.

<comment><USER4> I haven't worked at the scale where dynamically scaling the load balancers themselves is the bottleneck. I think you pose an interesting question, and I'm hoping someone with more knowledge can comment on that.

<comment><USER5> I don't believe there is any way to scale out the ELB from user side; you can contact AWS support to 'pre warm' ELB's for high traffic sites before cutting over DNS to them.

[http://aws.amazon.com/articles/1636185810492479#pre- warming](http://aws.amazon.com/articles/1636185810492479#pre-warming)

</comment></comment></comment></comment></comment></comment><comment><USER6> As a network engineer, I'm constantly having to prove that "it's not the network" so I love reading others' technical analyses of similar things. Great troubleshooting and technical detail in this write-up.

<comment><USER7> What are some examples where you proved this? Curious about scenarios...

</comment></comment><comment><USER8> We were told ELBs are explicitly not designed for long-running connections when we ran into this exact same issue so know that you will always be working around this design constraint if you do long-running connections through ELBs.

There's another case that the article doesn't really discuss (though the evidence of it is in the beginning when all connections drop simultaneously) where the ELB nodes themselves scale vertically at a particular threshold. I believe the setup described is still vulnerable to those scaling events.

<comment><USER9> We definitely observed such drops that we attributed to presumably internal ELB scaling activity, but they happen so occasionally that for the moment they haven't been a real issue, as opposed to this one described in the article which happened consistently at every deployment in our test environment.

<comment><USER8> Yeah, we've decided to live with the internal ELB scaling risks for the moment as well. We had the exact same situation where a deployment without gradual connection draining (even if we kept an instance in service in every AZ) would cause the ELBs to scale and drop all of our connections every time once we were at a certain scale. Definitely caused us a fair amount of confusion as it would happen minutes after the deploy when everything seemed to be calmed down again.

<comment><USER10> The author said he needed at least 2 instances in a AZ to avoid the bug, and used that as his workaround in the mean time that Amazon works on the bug.

</comment></comment></comment></comment><comment><USER11> In general, if you are using ELBs you should have at least 2 instances per AZ or cross zone load balancing enabled. I've seen this get teams several times.

The other thing to consider when deploying to the cloud with load balancers is to use an immutable architecture. Taking hosts out of service, updating them, and putting them back in service is a bit cumbersome at best and leaves you vulnerable to service outages.

<comment><USER12> While I agree with having an immutable arch is preferable but in some cases it's not viable. In one of our projects we re-use the instances like in the article since we deploy multiple times an hour. In AWS you are billed for each started hour which in this case would mean that we would pay a lot extra if we created new instances for each deploy.

<comment><USER13> Is Elastic Beanstalk not an option? It doesn't replace hosts on redeploy so you wouldn't end up cycling through unnecessary instance.

<comment><USER14> Genuine question: Why is it okay to reuse instances because it's controlled via an abstraction layer, as opposed to doing it yourself?

<comment><USER13> I agree, that doesn't make a difference.

I only mentioned EB because it does that kind of thing for you and if you don't have a highly complicated setup it makes rolling updates without changing instances very easy.

</comment></comment></comment></comment></comment><comment><USER15> We recently discovered that the NAT Gateway also terminates connections by issuing a RST packet when it receives the next packet for a connection that it believes to have timed out, effectively causing the new request to fail. The previous recommended approach of NATing in VPC was to use NAT instances, which sent FIN packets when the timeout was hit, cleanly closing the connection. That behavior was far better, since it indicated that a new request should re- connect first.

AWS Support indicated that this was a feature of the new NAT Gateways, even though it breaks outbound connections made by popular implementations such as the Requests python library's urllib3 connection pools. This is pretty unfortunate, and has been a roadblock in migrating to the NAT Gateways.

<comment><USER16> Full disclosure: I'm an engineer at AWS and I work on NAT Gateway :)

Thanks for the pointer to urllib3 - we'll take a look at it and see if there's anything we can do about the behavior. One of the challenges with sending "FIN" on timeout is, as you write ... it closes the connections cleanly.

Some TCP based protocols (Including even HTTP in some modes) use a successful connection close to indicate that an object has been transferred fully; so what we've seen is that a network connection may stall (internet packet loss for example) ... then the connection eventually times out ... and the "FIN" falsely conveys that the entire object has been transferred. The end result is a truncated object, which is no good either.

<comment><USER15> Thanks for the explanation colmmacc! I agree with the challenge you described, and am not sure what the best approach would be. Perhaps a configurable timeout such as ELBs have?

</comment></comment></comment><comment><USER17> Somewhat unrelated to the ELB problem identified, but an alternative solution to the original deployment problem: assuming that the collectors are stateless (seem to be) start off the deployment by spinning up a new collector with the new code installed. Then, proceed with the deployment in the original fashion. Once that's over, kill the extra collector. This will ensure that load is distributed roughly in the same manner, over the same number of nodes during the deployment as before the deployment. Depending on load caused by initiating a connection, more than one extra mode may be utilized. In any case, this is a much simpler approach than baking in application-level connection termination. All for a few extra bucks per deploy and a small amount of engineering time up front.

<comment><USER9> Definitely a feasible approach. Let's just say that the reality has a bit more color and we have some other practical advantages in controlling the exact moment when we disconnect a particular client :)

</comment></comment><comment><USER18> I don't really see a benefit in updating existing instances in this manner. Launching replacement instances with the new code is much easier for us, and it also provides a super fast means of rollback.

<comment><USER9> Both approaches are reasonable (and there's also a third one, ship your application in containers and replace containers instead of instances).

We update existing instances because in our test environment we deploy at every single new _commit_ (we absolutely love that), and we have hundreds (or more) a day. At that pace, replacing instances would be more time consuming (again, for our specific use case) and less cost efficient.

Plus, updating existing instances is handled automatically by AWS Code Deploy, which provides a very good deploying pipeline that you can control using the aws cli tool.

There are other minor advantages but those are the two main ones.

<comment><USER2> That's an awesomely aggressive deployment rate and a great reason to do instance mutation.

Does something verify every commit in the testing environment too?

<comment><USER9> Yes, every commit gets pulled by jenkins which builds the whole thing, runs unit tests and then starts the deployment once the tests pass.

</comment></comment></comment></comment><comment><USER19> We experienced something like this a long while ago, something like 4-5 years. We still employ our workaround, which is to have a tiny "keepalive" instance in each AZ in the ELB.

</comment><comment><USER20> When the cloud work as desired, life is grand.

But when it doesn't, debugging might actually be simpler with less black boxes between you and the metal.

</comment><comment><USER21> Hmm, this seems like a pretty big bug in connection draining. I feel like one instance per AZ is a pretty common scenario. Great article!

<comment><USER9> To be fair, the scenario is less common due to the fact that it happens just when the drained connections are terminated in a certain pattern (as shown in the charts). Still definitely common enough that can be easily replicated and cause real troubles :)

</comment></comment><comment><USER22> This is a great article to read.

The author mentions WireShark - fun fact: the founder of Sysdig, Loris, is also the creator of WireShark.

<comment><USER23> He created WinPcap, not Wireshark.

</comment></comment><comment><USER24> Nice article.

</comment><comment><USER25> Great work done!

</comment><comment><USER26> wonderful debugged the issue.</comment>


How I Started TDD - <AUTHOR> http://blog.extracheese.org/2009/11/how_i_started_tdd.html <comment><USER2> gah! but all those steps make the whole process harder than just thinking hard and writing down the correct function to start with. Or to write several test cases to start with (because you know many of the expected outputs up front) and writing a single function that passes them all.

TDD should make the process EASIER and MORE efficient.

>>> This isn't a perfect example of TDD, but that's not the point.

Illustrating a process by applying it to a problem that doesn't need it is surely the wrong way to go about it. Unfortunately "the point" is mostly dwarfed by the imperfect example.

<comment><USER3> This post was aimed at the person who is interested in TDD, but hasn't had their first big insight into how it works. It's about "do the simplest thing", not about a full TDD process to build a working production system. As I said to someone else in this thread, such a blog post would be huge. No one would read it. We wouldn't be here talking about it. :)

</comment></comment><comment><USER4> That last step is quite a leap from the previous 6.

<comment><USER5> I agree - this TDD-koan stuff really turns me off. What's preventing the author from just writing fibonacci as an infinite series of tests, and an infinitely long switch statement?

What the article doesn't mention is that full coverage on a function taking all positive integers is impossible unless you're comfortable making some assumptions about the behavior of your program.

The 'leap of faith' here is induction and the transition from simple testability to recursive implementation is huge, and left basically unexplained.

I personally think TDD is a great tool and an awesome way to write code. But it doesn't have to be this mysterious; I just think a function like fib is not a good way to show the benefits.

<comment><USER3> The thing preventing infinite implementation is a combination of (1) the rules of simple design and (2) the definition of "simple". I write about those in the follow-up to this post: <http://blog.extracheese.org/2009/11/the_limits_of_tdd.html>

I've said this several times across several forums since publishing this post, but my goal was to write a very brief example of "doing the simplest thing". It's not about doing the entire TDD process on a real-life software problem, because that post would be so long that no one would read it! :) I don't think TDD can't be adequately demystified in any short example.

<comment><USER6> I'd read it! Well, if I happened to stumble across it anyways. Might I suggest something like, say, Sudoku? :P

Not having done any TDD, I'm feeling the same way as most of the responders here so far, and I think the problem is that Fibonacci is too trivial.

Although, I can come up with something even more trivial - suppose you wanted to TDD a "Hello World" program. Would you start your first test by verifying that the first letter of the output is 'H', and implement as your simplest implementation something that prints only 'H'?

I'm not sure how the design process works under TDD, so, here's a couple of questions.

Suppose you already have some implementation that represents a tic-tac-toe board and you need to determine whether a winning position exists on the board.

Do you begin by working on the X_Wins() method, or do you start looking at a smaller method, say, Count_Xs_in_Row(row)?

If the latter, do you do the same thing for this method as for Fibonacci? (first iteration: return 0. second iteration: return 1 if the first cell is X, else 0. 3rd iteration: return 2 if X, else 1 if Y, else 0. Iteration 3: Truth table. Iteration 4: refactored into a counter with incremented for each X found.)

If the former, well, basically the same question. Do you begin by checking for one row of X's, then eventually expand to checking all 6 row/column combinations, then refactor out the method? (I initially thought this would require many more iterations... but it seems 7 test cases are enough)

Well, in any case, Tic-tac-toe would be quite a bit longer, but it would probably be much better for introducing TDD. Explanations aren't necessarily required - just seeing all the different iterations of the code would be fairly instructive.

Perhaps use Etherpad for their timeline capabilities?

<comment><USER3> I'll think about it. With the awful response from Reddit [1], I'm not sure that I want to make another go at it. :) We'll see.

To respond to your example, I'd almost certainly go with something like your Count_Xs_in_Row path, or some similar subset of the problem. I'd probably first drive out the "win" concept by saying "if there's a row full of Xs, X wins; if a row full of Os, O wins." I don't actually need to be able to count rows for that; I can pass something fake in (probably a stub). Once I'd done that, I'd drive out the row counting, possibly backporting that into the "win" tests, but probably leaving them totally isolated.

In this example, the key insight is that the concept of winning (a full row) can be independent of the process of counting rows. The tests would push you toward that separation naturally, because it would be too hard to think about testing the "X wins" directly based upon a full board.

This is still a bit overwrought, as it's still a toy example. Toy examples make TDD sound silly, which is a big part of its perception problem. I still don't know how to fix that other than pairing with a person and/or talking directly to them in person for a couple hours. :(

[1] [http://www.reddit.com/r/programming/comments/a2yhe/im_not_su...](http://www.reddit.com/r/programming/comments/a2yhe/im_not_sure_if_this_is_an_example_of_how_tdd/)</comment></comment></comment></comment></comment>