More on chloroquine/azithromycin and on Dr. Raoult - <AUTHOR> https://blogs.sciencemag.org/pipeline/archives/2020/03/29/more-on-cloroquine-azithromycin-and-on-dr-raoult <comment><USER2> In those troubled times, a lot of people are just critisizing instead of doing something useful. There is a bibliography studying the effects of chloroquine and derivates to fight viruses. As scientists, the base of our work is to read papers and search for bibliography. Targeting people with ad hominem attacks is plain lame. Do some science FFS, and act swiftly in times of war.

[https://www.sciencedirect.com/science/article/pii/S092485792...](https://www.sciencedirect.com/science/article/pii/S0924857920300996)

[https://aac.asm.org/content/53/8/3416](https://aac.asm.org/content/53/8/3416)

[https://www.sciencedirect.com/science/article/pii/S0006291X0...](https://www.sciencedirect.com/science/article/pii/S0006291X0401839X)

[https://link.springer.com/article/10.1186/1743-422X-2-69](https://link.springer.com/article/10.1186/1743-422X-2-69)

[https://www.sciencedirect.com/science/article/pii/S016635420...](https://www.sciencedirect.com/science/article/pii/S0166354207004597)

[https://www.sciencedirect.com/science/article/pii/S147330990...](https://www.sciencedirect.com/science/article/pii/S1473309903008065)

[https://www.sciencedirect.com/science/article/pii/S016635421...](https://www.sciencedirect.com/science/article/pii/S0166354213001150)

[https://www.thelancet.com/journals/laninf/article/PIIS1473-3...](https://www.thelancet.com/journals/laninf/article/PIIS1473-3099\(06\)70361-9/fulltext)

[https://link.springer.com/article/10.1007/s00535-009-0132-9](https://link.springer.com/article/10.1007/s00535-009-0132-9)

[https://link.springer.com/article/10.1186/1743-422X-3-39](https://link.springer.com/article/10.1186/1743-422X-3-39)

<comment><AUTHOR> That Didier Raoult appears to have a history of image manipulation is not an _ad hominem_ , and is apparently true. His 2006 offense was sufficiently bad as to be banned from publication for a time in a leading journal in his field. That is also not an _ad hominem_.

You also completely fail to engage with the first 2/3 of the text, which has any number of impersonal methodological critiques which are not addressed through a literature search.

<comment><USER2> You point the exact problem here.

As a scientist the first test is intuition. The second test is having people getting better with treatment. The third test is conducting a full, deep study with the utmost scientific rigor.

So now there is a dilemna. People die in front of you. You try something. It seems to work. It uses a widely-used set of molecules (Hydroxychloroquine + azythromycine (+Zinc in some protocols). Will you try it, or will you make a double-blind study with half the people at risk of dying ?

History of aviation. People just couldn't believe that it was possible.

[http://www.wright- brothers.org/History_Wing/Aviations_Attic/...](http://www.wright- brothers.org/History_Wing/Aviations_Attic/They_Wouldnt_Believe/They_Wouldnt_Believe_the_Wrights_Had_Flown.htm)

"Not wishing to be miserly with his information, Root sent an eye-witness account of what the Wrights were doing to the Scientific American, with a letter telling the editor he was free to use it. But the editor was not to be taken in and made no effort to investigate what Root had dropped into his lap. Though the Scientific American printed in 1905 many articles about flying, nearly all were about devices that maybe ought to be tried."

I don't fail in anything, I just don't need to engage in endless debates about methodology. Half of the studies in psychology fail to replicate. There are problems everywhere in science, because geniuses are still rare and now ostracized because they produce new researched and are judged by lords of the old order. If you scratch hard, you can always find _something_.

Some people criticize, others just act. The people who create are always going to be the targets of the people who spend their time criticizing.

Now it's time to act. Not pull over waiting for some authority to decide for yourself. The list of publications is here to show that this available treatment doesn't come from a magical hat.

<comment><AUTHOR> you're good at grandstanding, but you have yet to meaningfully engage with the numerous methodological critiques of Raoult's work which, if unaddressed, make his result unethical and inappropriate for use as approval to act. There have been blinded trials of chloroquine; they have their issues too, but didn't show an effect.

the side effects of chloroquine are nontrivial, at least one person has died in an attempt at self-medication by ingesting a substance that had a similar looking word in it, and pre-existing patients who do need the drug are being deprived of it as hucksters run rampant.

Keeping an even keel in a crisis and knowing when to make informed decisions on limited data and when not to are skills we develop and must have the strength to use as practicing scientists. Especially when it feels tempting not to.

<comment> grayed-down Give me a break...twice. The guy who ingested fish tank cleaner was a tried and true moron. And when you have a crisis of this extent you do what you have to do and relax the, ah, formalisms a little.

<comment><USER3> "Relaxing the formalisms" is great!

"Tolerating scientific fraud" is not. This doctor has previously come very close to scientific fraud. That means that for us to trust him again, his work needs to be impeccable. It isn't.

This potential treatment is promising enough that it is worthy of study, and in lieu of better solutions, administering to patients. These are drugs that have a known safety record for human use. But if you stop and think this is any form of "cure", you are deceiving yourself and endangering lives. It's pretty clear that chloroquine/azithromycin probably doesn't make COVID-19 any worse (in general). But it's not clear yet that it's actually a _good treatment_ , and if we stop the search now, that is to our own detriment.

</comment></comment></comment></comment></comment></comment><comment><USER4> > Now, it would be a more simple world if assholes were always wrong about > things, and I am not yet prepared to say that Dr. Raoult is wrong about > hydroxychloroquine and azithromycin. But neither does he seem to be the sort > of person who is always a reliable source, either. I do not take pleasure in > this. But I am less hopeful about this work than I was when I first read > about it, and I can only wonder what direction those hopes will take in the > weeks to come.

In weeks to come there'll be people living and people dying. I'm not sure in which group I'll be. But all discussions about the Dr. Raoult personality doesn't add up to the big question: does it work or not ?

<comment><AUTHOR> we don't know; the data that personality generated isn't helpful!

See here: [https://sciencebasedmedicine.org/hydroxychloroquine-and- azit...](https://sciencebasedmedicine.org/hydroxychloroquine-and-azithromycin- versus-covid-19/)

the results are so uninterpretable as to not help the SNR on the issue.

</comment></comment><comment><USER5> With all the known cases (e.g. 100k in the US) and about 0.5-1% taking HCQ continuously already for lupus and other diseases, if these people are underrepresented, we have a big clue that it works, almost to the point of proof (need to show that it's not the underlying condition that stops the virus, a-la sickle cell anemia vs malaria). If they are equally represented, it's discouraging, but not proof that it doesn't work (again because of underlying being a confounder).

This information should readily be available to the CDC or whoever else is tracking the cases. What am I missing? Why do you have to wait for double- blind trials?

<comment><AUTHOR> hipaa, nonstandard data recording systems, time, confounds of preexisting medical conditions, scattershot testing, and the overall saturation of the healthcare system are going to make that signal more or less invisible.

<comment><USER5> We are talking about the confirmed positive cases, these people are all potential spreaders and are supposed to be closely monitored. This is a standard CDC playbook (lots of people I'll, find out what's common to them). The list you gave, if true, is total incompetence of e CDC to a level which has never been demonstrated before - in fact, the CDC has generally done well with their playbook even if it was a couple of weeks late (and we're 10 weeks since I heard from a friend who works with the CDC that they're watching it)

</comment></comment></comment><comment><USER6> More likely to work early on in the infection, I doubt any anti-viral would be very effective once the patient experiences ARDS.</comment>


Discussion: Aren't loops the only interesting code? - <AUTHOR> http://www.futurechips.org/thoughts-for-researchers/loops-interesting-code-portions.html

<comment><USER2> Linkbait. "Aren't the teats the only interesting part of a cow?" Uhh, sure, yes, you get the milk from that, I don't know if I'd define "interesting" that way.

As for his actual argument. Depends on the application. If you run 20 lines of code, no loops, for 2mil clients on one server, that 20 lines matters. If that 20 lines includes one line which requires a lock, maybe only that one line matters. Maybe I analyze a graph structure (oh, the social web) and my loop is a loop per say not not anything that can be easily optimized without knowing the topology. The slow part of your loop can be the loop body. Or not --- it can be the allocation/deallocation cost of data structures. Parallelism can be fast --- or the concurrency weight can be crushing. I'm not saying that parallelism isn't a huge win. I'm saying the question is invalid or trivial.

Point is, the generalization here isn't wrong; generalization here is wrong.

</comment><comment><USER3> What code _isn't_ running in some sort of "loop"? As I have discovered when, e.g., writing test build code, that function which "only runs once" actually gets run several times per day, or several times per coder per day, or (when you are debugging or testing new code) several dozen times per hour.

Because every function is potentially callable from within someone else's loop, there is no such thing as a function that isn't part of a loop. There are merely frequent loops and less- frequent loops; it's a question of degree. Unless it's a function that really does never get run, in which case, yes, nobody cares if your dead code is slow.

</comment><comment><USER4> If you're compute bound and are trying to optimize for performance, then sure, you only need to worry about loops.

One way to think about this is that if you need optimize something, it's only because a particular task is taking at least a few seconds to execute. A few seconds means a few billion instructions on a modern CPU. There aren't any executables with billions of instructions of straight-line code so your code surely has a loop (or a million loops).

However, as many others have pointed out, this CPU-centric view won't give any insight into optimizing I/O bound applications.

</comment><comment><USER5> Isn't that simplifying things a bit? Loops are hidden everywhere, just concatenating a string is actually a loop even if there's no visible for/where, but the best optimization for that isn't speeding up the loop, it's removing the call completely.

<comment><USER6> Right, and it's a simplification that doesn't even seem particularly useful. There's a reason why we abstract things and look at them at a higher level.

</comment></comment><comment><USER7> With unlimited resources, it's the code only executed once that becomes the performance issue. Amdahl's law shows that you can't run faster than the sequential sections.

</comment><comment><USER8> My only advice is: run the profiler. You will often be surprised what're causing the bottlenecks.

</comment><comment><USER9> _In fact, I can argue that any time we wait on a computer program to do something useful, we are in fact waiting on a loop_

Plenty of things are bound by I/O. You might have to wait for a disk to spin up, or a packet to get to the other side of the world and back. Indeed, the CPU will, at some level, ultimately be running in a loop, but it's not a loop in order to get anything done, it's just blocking.</comment>


The State of Maritime Piracy 2014: Assessing Economic and Human Cost [pdf] - <AUTHOR> http://oceansbeyondpiracy.org/sites/default/files/attachments/StateofMaritimePiracy2014.pdf <comment><AUTHOR> I pulled this from this Quartz article [1.]; this report seemed more interesting than the summary QZ article which contained this:

"She said that the drop in oil prices, which have fallen by $100 since July last year, was a factor in reducing piracy in the area.

In fact, piracy was falling before the price of oil tanked. "

The 2015 report is not out yet.

[1.] Oil is now so cheap even pirates aren't stealing it any more: [http://qz.com/619281/oil-is-now-so-cheap-even-pirates- arent-...](http://qz.com/619281/oil-is-now-so-cheap-even-pirates-arent- stealing-it-any-more/)

[2.] The State of Maritime Piracy 2013: [http://oceansbeyondpiracy.org/sites/default/files/attachment...](http://oceansbeyondpiracy.org/sites/default/files/attachments/SoP2013-Digital_0_0-1_0.pdf)</comment>


Why the 9-to-5 Day Is So Tough on Creative Workers - <AUTHOR> http://www.theatlantic.com/business/archive/2013/12/why-the-9-to-5-day-is-so-tough-on-creative-workers/282331/

<comment><USER2> This WSJ graphic (linked from the article) should be a wall-sized poster, [http://online.wsj.com/news/articles/SB1000087239639044418000...](http://online.wsj.com/news/articles/SB10000872396390444180004578018294057070544)

Too bad online articles don't come with scholarly references :)

Edit: infographic link: [http://si.wsj.net/public/resources/images/PJ- BJ856A_WORKF_G_...](http://si.wsj.net/public/resources/images/PJ- BJ856A_WORKF_G_20120925235601.jpg)

Edit2: John Medina's _Brain Rules_ , with references to peer-reviewed research that has been duplicated, [http://www.amazon.com/Brain-Rules-Updated-Expanded- Principle...](http://www.amazon.com/Brain-Rules-Updated-Expanded-Principles- ebook/dp/B00JNYEXAM/)</comment>


How to use smart lights to stop people from interrupting your conference calls - <AUTHOR> https://www.coywolf.news/productivity/working-from-home-smart-lights-avoid-call-interruptions/ <comment><USER2> Isn't it easier to just yell throughout the house to STFU? lol

<comment><AUTHOR> Ha! I mean, you could, but it's not a good look on a video call.

</comment></comment><comment><USER3> it can be easy i has it many times and as usual</comment>


The school with no classes, no classrooms and no curriculum - <AUTHOR> https://medium.com/pi-top/meet-the-school-with-no-classes-no-classrooms-and-no-curriculum-7cc7be517cef <comment><AUTHOR> I'd love to know how they're funded. In the initial paragraphs it says they're "awash with cash", but they don't say how they get it - is it private or public?

</comment><comment><USER2> Sounds like my path of learning javascript, except add 'no school'.

That said, I wish I would have spent my formative years in a school like this.</comment>


Dave McClure's 500 Startups Chooses 33 Companies; Bets Big On International - <AUTHOR> http://techcrunch.com/2012/10/31/500-startups-batch-five/

<comment><USER2> This is great that they are starting to look outside of the US for startups. However, in this batch there not one startup that bring some big innovation or that I look particularly forward to use...

I mean ICONFINDER?! Do they really needs to be incubate / raise money?

Tealet? A subscription based business on tea? Wow...

The list goes on...

really disappointed in this batch of 500 Startups.

<comment><USER3> These companies seem to solve very specific issues. It's possible they plan on building a sustainable business model before growing to tackle bigger challenges. Was Google a "big innovation" when it launched, or just another search engine? The world is 500 startups richer and there's nothing to be disappointed about.

Edit: A better example.. Amazon was just an online book store. Now I can't launch a website without getting them involved.

Edit2: I looked up Tealet and it seems like a well executed vision. Writing them off as a disappointment is a dick move. Where are your mind-blowing innovations?

<comment><USER4> In general you shouldn't write off any of the startups in incubators after one month - especially not in 500 startups and YC where there are many talented teams applying and good screening processes.

</comment></comment></comment><comment><USER5> Great to see one of the few Silicon Valley investors who invest outside the Valley. There is a huge potential and talent outside the US.

</comment><comment> k-mcgrady I like that they are trying to select more international companies and companies with female founders.

Reading through the list I don't see any really innovative companies.

</comment><comment><USER6> BabyList launched here on HN almost two years ago - <http://news.ycombinator.com/item?id=2175757>

Disclaimer: I'm married to the founder.

<comment><USER4> BabyList is great!</comment></comment>


Ask HN: Are you learning Kubernetes/Docker? What resources are you using? - jonathan-kosgei I've worked with a number of clients who engaged me to do nothing more than teach/guide them through how to use Docker and Kubernetes (especially Kubernetes). They all mention the inadequacy of existing learning resources.
So my question is, what resources did you/are you using to learn Kubernetes and Docker?
I've been working with Kubernetes and Docker for a couple of years and I'm thinking of developing a course drawing on the knowledge I've acquired. <comment><AUTHOR> I recently read the book "Kubernetes: Up & Running" and it was a great resource. Written by Kelsey Hightower it's short and to the point has a bunch of great examples.

As a starter I would get Minikube going on your laptop: [https://kubernetes.io/docs/getting-started- guides/minikube/](https://kubernetes.io/docs/getting-started-guides/minikube/)

Then write a small REST app in your favorite language, nothing fancy just something you can easily deploy. Get it running in Docker, and the minikube. Google the problems you have along the way. You will learn a lot by doing this. Now deploy another little app into your minikube cluster and have them start communicating over the clusters network.

This will give you a good start and then you'll know enough to start seeking out more.

<comment> jonathan-kosgei Great points +1

</comment></comment><comment><USER2> When my team was learning about Kubernetes we worked through Kelsey Hightower's "Kubernetes the Hard Way": [https://github.com/kelseyhightower/kubernetes-the-hard- way](https://github.com/kelseyhightower/kubernetes-the-hard-way)

Obviously this much more complicated that using a tool such as kubeadm to deploy Kubernetes however it gives you a really good understanding of how a Kubernetes cluster is put together.

One of my colleagues used the experience from working through this with a set of VMs to create a tool called kubicle: [https://ciao- project.github.io/kubicle.html](https://ciao-project.github.io/kubicle.html)

This allows you to build a Kubernetes cluster on your own physical machines by building it on top of a Ciao cluster if you're not able to use public cloud hosted VMs. For learning you can combine this with Ciao's "singlevm"/ccloudvm mode to run a cluster inside a VM (with nested VMs.)

Full disclosure: I currently work on the Ciao team @ Intel :-)

</comment><comment><USER3> I got started with the kubectl command line function as it was packaged with Google Cloud SDK. Then experimented with Minikube locally.

I think what you really want is something like a "Minikube in the Cloud" learning environment. Where you walk students through building an actual service. But if they make mistakes, nothing catches fire ;)

Another recommendation is a gentle intro to serverless deployments such as Fission and Kubeless, since that is maybe where everyone's headed in the near future. Also a great way to introduce design thinking, architecture, distributed systems, fault tolerance, decentralization, etc.

[http://fission.io/](http://fission.io/)

<comment> jonathan-kosgei Thanks for the input :)

I think installing Kubernetes and covering the whole setup especially for production is a whole topic in itself. Hence minikube would be very convenient for students.

That said I've always appreciated an example first approach (with a to the point explanation) other than pure plain theory.

</comment></comment><comment><USER4> Looking for something a bit more advanced? Check out [https://testdriven.io/](https://testdriven.io/)

<comment> jonathan-kosgei haven't started it, but from what I've seen it looks to be very well built

</comment></comment><comment><USER5> Official Kubernetes docs are the best I've seen so far and what I'm using.

</comment><comment><USER6> I found a blog series here:

[https://kumorilabs.com/blog/k8s-0-introduction-blog- series-k...](https://kumorilabs.com/blog/k8s-0-introduction-blog-series- kubernetes/)

It's not necessarily the best resource for actually learning the ins and outs of Kubernetes; however, I think it's a good starting place.

After going through those, I worked on deploying a small application using stuff covered in those labs.

</comment><comment><USER7> I found the official Kubernetes tutorials to be really helpful as an intro: [https://kubernetes.io/docs/tutorials/](https://kubernetes.io/docs/tutorials/)

</comment><comment><USER8> Is there like a 1 pager summary of what Kubernetes/Docker is? Ever since my transition to the business side, I feel like I've lost touch. What's the benefit of deploying using Docker?

<comment><AUTHOR> Isolation, repeatability and speed of deployment:

\- Docker images are portable. They will run anywhere there is Docker. No surprise missing system packages when deploy.

\- They are isolated from the the rest of the machine. Inconsistencies between dev and prod are minimized greatly.

\- Kubernetes allows you to deploy stateless, immutable images using a declarative manifest. IMO this is far superior to imperative scripts that are used in a lot of places.

\- Kubernetes pods start up in seconds when they are added or restarted. Deployments for me routinely take under a minute. Compared to our EC2 deployment strategy which can easily take over half an hour to deploy a single node.

The list goes on but these are the key things for me. I would suggest checking out some videos by Kelsey Hightower is want to see more of it in action.

</comment></comment><comment><USER9> I looked at it a few years back, and I read a book about docker on a flight back from Asia.

I would be interested in some short to the point tutorials with practical examples.

<comment> jonathan-kosgei I'm considering creating the content as short video lectures. But they'd be plenty of notes to go with the videos as well.

<comment><USER9> I would prefer a blog series with maybe some type of interactive examples.

<comment> jonathan-kosgei Noted. Checkout Docker Playground - [http://labs.play-with- docker.com/](http://labs.play-with-docker.com/) for an interactive web based Docker environment.</comment></comment></comment></comment>


Google released a toolkit for building and running large-scale reranking models - <AUTHOR> http://code.google.com/p/refr/ Original release announcement at: http://googleresearch.blogspot.com/2012/10/refr-new-open-source-framework-for.html <comment><AUTHOR> Original announcement at: [http://googleresearch.blogspot.com/2012/10/refr- new-open-sou...](http://googleresearch.blogspot.com/2012/10/refr-new-open- source-framework-for.html)</comment>


Ask HN: Have you tried HEY mail? - <AUTHOR> What are your thoughts? Will you stay with it? <comment><USER2> I tried it and yes, it's something.

Not sure it can handle thousands of emails and the UI doesn't look "professional" but there's a lot of good ideas and after a while, I guess it could be a new and effective way to use emails.

tldr: a work in progress :)</comment>


Microsoft copies your encryption key for Windows 10 to its servers - <AUTHOR> https://theintercept.com/2015/12/28/recently-bought-a-windows-computer-microsoft-probably-has-your-encryption-key/ <comment><USER2> So many submissions, so little discussion:

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

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

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

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

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

<comment><AUTHOR> Oh wow it is a dupe, sorry.

Apparently HN is now allowing dupes within the same few days.

I thought they relaxed dupes but not that much.

Oh I see now, if there are no comments on a submission, they allow re- submission.

<comment><USER2> Indeed. It seems that dupes are allowed after a few hours, provided the earlier submission didn't get any traction. If something is re-submitted then clearly people think it's relevant, so it's allowed a second chance.

Or third.

Or more.

The question is this: What should be done other than just allowing re- submissions?

<comment><AUTHOR> Yeah within 48 hours I feel like allowing dupes is silly, just allow them to become votes so the original gets some attention.

<comment><USER3> The time window for that to work is far less than 48 hours—it's more like 1 hour.

We're working on this; it's harder than it sounds, there isn't a trivial solution, and there are tradeoffs.</comment></comment></comment></comment></comment>


This is for PZ Myers - <AUTHOR> http://infoproc.blogspot.com/2016/04/this-is-for-pz-meyers.html <comment><USER2> This appears to be a blog argument with little relevance to HN.

I'll summarize it as: Physicist Hsu argues that there are techniques by which it may be possible to genetically engineer hyper-intelligent humans. Biologist Myers argues that it's hard to measure intelligence, it's not clear that intelligence can easily be tweaked through the genes, and other biological complications, as well as questions about ethics and the observation that better "sociology and education and social services" is already known to lead to more intelligent people, so why not focus on that instead of "mad scientist" research.

Hsu responds by arguing that population genetics is more additive than biologists - especially evo-devo biologists like Myers - believe, and since chickens can be bred to be bigger and faster maturing, so can human be bred to be more intelligent.

Hsu's response depends strongly on 1) being able to measure a correlation between intelligence and SNPs, and 2) the assumption that these SNPs are "roughly additive" in benefit. See his preprint at [http://arxiv.org/abs/1408.3421](http://arxiv.org/abs/1408.3421) . I attempted to read it, but Gould's "The Mismeasure of Man" strongly affect my understanding of the topic; and Hsu's preprint appears to accept what Gould calls the two deep fallacies of reification and ranking. I do not not have the knowledge to evaluate the abstract in its full context. I do think his discussion of the Flynn effect reveals a severe misunderstanding of history and people.

Hsu does not address the ethical and moral issues that Myers raised.</comment>


Edward Snowden: The Whistleblower Fantasy - <AUTHOR> http://arachne.cc/issues/01/snowden-dorothy-howard.html <comment><USER2> > The Rubik's cube almost as a sex toy of those paranoid for dataveillance, a > symbol of the genius needed to beat corrupt political systems.

Honestly? What is this garbage? Interesting commentary, maybe, but I can't say I agree with any of this. Is this a respected author or news source of whose opinion I should be more accepting?

<comment><USER3> > Is this a respected author or news source of whose opinion I should be more > accepting?

Do you let fame determine the legitimacy of the your media you listen to?

<comment><USER4> How do you not? Someone's history and expertise should absolutely be used as a gauge of how to view the information they're presenting. Do you treat Fox News the same as the BBC? Or are you going to take David Icke at the same level of truth as Glen Greenwald?

<comment><USER3> > David Icke at the same level of truth as Glen Greenwald?

I treat all non lizard-people with similar level of "truthiness"

<comment><USER5> Also, don't forget to buy seeds while you still can!

</comment></comment></comment></comment></comment><comment><USER6> Maybe it's just because I don't frequent social networks all that much, but I've never been exposed to this sort of depiction of Edward Snowden. The only coverage I've come across of him focused solely on what he did or his current predicament, not his image.

Even calling that Wired cover "sexualized" seems a little farfetched to me.

<comment><USER7> Not using social media is probably the simplest and most effective strategy to stick to the 'real issues'.

<comment><USER8> … and yet here we all are.

<comment><USER9> Does HN fall into the social network category ?

<comment><USER10> I don't think so. The signal to noise ratio here is much higher than on typical social media. It's self policing and there are rewards (karma) for good behavior that are absent on most social media. HN to me feels more like early Usenet newsgroups than it does something like Facebook.

<comment><USER7> I appreciate that the ego-factor is very low here. No profiles, no avatars, no 'mentioning' of other people, just the author name of a comment, that's it.

Also - hn doesn't center around people, but around topics. That changes the whole thing.

</comment></comment></comment></comment></comment></comment><comment><USER11> One can further an argument in this way - by simultaneously writing an article sexualizing Snowden and arguing that he is being sexualized in articles.

Recursion should be old hat to this crowd, though. It's not interesting or thought provoking.

</comment><comment><USER12> I followed this expecting an analysis of the "whistleblower protection" that some people think Snowdon could have availed himself of. Instead I got "Hey, look, I hope you're not being distracted by this big media distraction I'm part of."

</comment><comment><USER13> When presenting ideas to primates, it's helpful to create emotion and tension by introducing an element of sex. This applies to any ideas whatsoever.

We are animals.

</comment><comment><USER14> This diatribe is regarding the media's handling of one of _many_ recent whistleblower stories, and an atypical one at that. After beginning with a historical expiation of the etymology of the term, the author goes on to discard other current whistleblower stories, the vast majority of which the media has covered in a starkly different manner, and commits the sin they are condemning, that of sesationalizing the Snowden case.

</comment><comment><USER15> what if this writing is sci-fi theoretical non-fiction? What makes you ascribe the quality of adolescence onto certain forms of theorizing?

</comment><comment><USER16> Hilariously adolescent garbage.</comment>


Google hypocrisy: patenting payment splitting while lobbying reform - <AUTHOR> http://blog.splitwise.com/2013/10/10/google-trying-to-patent-bill-splitting-while-lobbying-splitwise-for-patent-reform/

<comment><USER2> > We are literally being lobbied for patent reform and patent-trolled by > Google at the same time.

Filing for a patent is not patent trolling. Patent trolling is using a patent (particularly one you are not practicing and/or one of dubious originality or dubious patentability for other reasons) to try to extract money from a competitor via suit or threat of suit. Merely filing a patent is not trolling.

While it might be reasonable to _assume_ that a filing is for the intent of trolling when an the entity filing for the patent has a past history of trolling, as the article notes:

> Google has a relatively long history of not suing over patents

\---

> but they are clearly playing the game they are also trying to change, and > this is hypocritical.

No, its sensible. If you pretend the law is what you'd like it to be in a competitive environment, rather than what it actually is, you die before you get to make any changes.

If you want to make changes, it is prudent to make the case for the changes, while still acting in a prudent fashion to protect your interests given the existing rules. (If nothing else, this avoids creating an _additional_ disincentive for your competitors to support rules changes, since if you are acting in a way which makes you weak under the existing rules, your competitors have an incentive to protect the existing regime in order to profit from your weakness.)

</comment><comment><USER3> > but they are clearly playing the game they are also trying to change, and > this is hypocritical.

No, it's practical. Playing by the rules of the game you're currently playing (rather than the rules of the one you wish you were playing) isn't incompatible with wanting to change the rules.</comment>


A Better Spotlight design for iOS - <AUTHOR> http://codysan.me/ios-spotlight-overhaul/

<comment><USER2> I think you design is quite nice. I have a suggestion though. What if you simply put context sensitive buttons on the search results themselves. For example, if you search 'Mike', the contact result would display a Phone/Message icon; if you search for a song, it would display a Play/Pause button. I feel this approach can reduce the number of steps even more since you won't have to select the filter at the bottom. What do you think?

</comment><comment><USER3> This is great work! I could see a form of this being pushed out by Apple, maybe if it were a bit more streamlined and simplified? Not sure how to do that, since you have done a very good job already of making it intuitive IMO.</comment>


How to educate me about prejudice in the open-source community - <AUTHOR> http://esr.ibiblio.org/?p=6758 <comment><USER2> So I'm coming at this with more of a background in academia than open source culture. So these are to some degree outsider comments:

If your culture makes it hard for people to enter, then demanding that people prove they belong to it before they can comment on their difficulties is an immunization strategy.

Demanding strong evidence for the difficult to measure impact of social habits of the in-group on outsiders is a good way to eliminate debate.

What he is saying is reasonable for dealing with discrimination within the scene (and particularly point 5 is very important). It is useless when talking about the place of the scene within wider society. Why are girls less likely to develop interests in computers? I doubt that this has anything to do with actual sexist judgements within the scene. But I do believe that it has a lot to do with the overall social norms of the scene being aligned with male gender roles. Ideally we just get rid of gender roles, but we are far from that. In the meantime we need practical solutions.

Finally and most importantly: The idea that the open source community is so meritocratic as to be immune to biases that have repeatedly been shown to exist, for example in academic mathematics, is ignorant at best. Wilfully so at worst. It shows an anti-scientific mindset on this particular question that belies the "show me the evidence" rhetoric.

<comment><USER3> "Finally and most importantly: The idea that the open source community is so meritocratic as to be immune to biases that have repeatedly been shown to exist, for example in academic mathematics, is ignorant at best. Wilfully so at worst. It shows an anti-scientific mindset on this particular question that belies the "show me the evidence" rhetoric."

YES VERY MUCH THIS!

</comment></comment><comment><USER4> What a terrible post. It is no wonder ESR can claim to have never seen cases of discrimination with such a list of demands any victim must pass before even being heard.

People do make false accusations. But you know what is a lot more common than that in the world at large? Actual discrimination.

The problem is that most of the time Person A discriminates against Person B, Person A will swear up and down they have done nothing wrong and had no ill intent. That is what makes it such a difficult issue and one where people need to be open minded when hearing from people who do not share their life experience or social status.

It's a lot more healthy and beneficial in my view to approach any complaints with an open mind. Obviously in the end we have to try to come to terms with the facts, but when you put up a bunch of barriers before a victim can even be heard you are protecting the status quo. Which probably sounds great if you are a person who is really comfortable, but might not be so great for someone else.

<comment><USER5> > People do make false accusations. But you know what is a lot more common > than that in the world at large? Actual discrimination.

This is really all that should need to be said. Anyone who takes ESR's claims of mental illness of accusers for granted but refuses to accept the claims of those who experience discrimination is part of the problem.

</comment></comment><comment><USER5> I think this post is a perfect example of bias in the open source community. Who the hell wants to put up with people like ESR who use ridiculous lists like this to determine if you've been _actually_ been discriminated against or not?

Obviously ESR is not a socially normal person. Most people can see that from his history and I don't want to beat him up for that because I don't think it's his fault: He just came that way. This post is still utter trash though and an example of the sort of attitude that pushes women and minorities out of the community.

<comment><USER6> Drop the identity politics and re-read. This is him saying "if you claim prejudice, show me the evidence and that it's not a manipulation for personal gain."

<comment><USER2> No. It's really not. It's him demanding exacting standards of evidence for people even raising the topic, while ignoring vast scientific literature on persistent biases.

There are difficult conversations to be had about how we should go about being inclusive, and what exactly that should mean, but this post is a terrible starting point.

How do you proof that you didn't get a spot to speak at a conference because your equivalent work was valued slightly lower by some organizers, especially when the organizer was not aware they were making gendered assessments?

How do you measure people who decided not to engage with a particular community due to unnecessarily adversarial technical discussions. Especially before the background of women not interrupting men at nearly the rate as men interrupt women. This has nothing to do with the technical merits of what is said and everything with who gets to speak.

Whenever you measure these things using science you find that gendered behaviour is absolutely pervasive. Sometimes you learn that things aren't gendered in the way they first appear. For example it often turns out that women discriminate nearly as much as men do against other women. What we can't do is pretend all of that doesn't exist simply because the discrimination isn't manifesting itself as overtly and blatantly as it used to.

This is an important achievement by the way. The fact that overt blatant sexism is almost universally condemned is after all what makes the charge: "That's sexist!" so problematic.

<comment><USER6> > How do you proof that you didn't get a spot to speak at a conference because > your equivalent work was valued slightly lower by some organizers, > especially when the organizer was not aware they were making gendered > assessments?

The way I read what ESR wrote, if you have someone that has a demonstrable history of technical contributions (or per his second point, other _interesting_ factors that make the person notable), then it's objective information that can be used when saying "wait, why isn't Person on the schedule?" Evidence is strong and interesting; identity politics or accusations, far less so.

> How do you measure people who decided not to engage with a particular > community due to unnecessarily adversarial technical discussions. Especially > before the background of women not interrupting men at nearly the rate as > men interrupt women. This has nothing to do with the technical merits of > what is said and everything with who gets to speak.

This is back in the realm of anecdotes. Men interrupt men. Women interrupt women. Vice versa. Some people are jerks, often on accident. ESR is talking about open source culture and, for most participation in it, people only know about your physical identity what you offer.

> Whenever you measure these things using science you find that gendered > behaviour is absolutely pervasive.

If you can link provide actual evidence and not the kind of poor-method pseudo-science that comes out of gender studies, then I suspect this would fall into ESR's:

> If you pass all these filters, maybe you have something to teach me, and > maybe you'll get to see what I'm like when I am righteously pissed off > because hacker norms have been violated in a serious way.

> This is an important achievement by the way. The fact that overt blatant > sexism is almost universally condemned is after all what makes the charge: > "That's sexist!" so problematic.

Speaking from my perspective, and not ESR's (or speaking from/to his article), this is where I think evidence and dispatching of witch hunts in tech is important -- give evidence of _real_ sexism in tech and we can fight it together. If it's constantly trying to blow something out of proportion for personal gain or is something entirely without evidence, "that's sexist!" is going to start falling on deaf ears.

<comment><USER2> No, simply evidence does not pass ESRs filter. It has to be evidence collected by insiders, not outside scientists who don't understand how things function.

There are plenty of studies that show that in collective discussions of womens qualifications are questioned more, but not in a gendered way. Questions like: What was the role of the supervisor in the thesis? are not sexist. That they are raised more with respect to women is.

I could spend an hour on google collecting studies (e.g. a meta study on interruptions [1] the studies on talking time are methodologically simpler and with very clear significance and large effect size, I am not aware of convincing criticism of the studies on the perception of interruptions, e.g. [2], a study that got some attention recently actually had the result that when it comes to interruptions, men interrupt women at about the same rate as women interrupt women, it's just that women interrupt men less Table 1 in [3], etc... again, the literature shows pervasive biases (some strong, some not) of a complex and varied nature). But honestly, I don't see the point, you just dismissed decades worth of studies out of hand. You called these studies anecdotes, but your gold standard of evidence seems to be individual events. When really we are in a much more subtle phase of the struggle for equality.

From your comment I don't think you really care about scientific evidence on this question. Or you haven't bothered educating yourself. Evidence of _real_ sexism is massive, and everywhere. It just doesn't look the way you (and maybe many a SJW, too) maybe imagine it to look. It doesn't show up (usually) in the form of individual events that can be proven to be sexist, but it shows up in social patterns all over the place.

[1] [http://link.springer.com/article/10.1023/A:1018802521676](http://link.springer.com/article/10.1023/A:1018802521676) [2] [http://www.jstor.org/stable/10.1525/si.19188.8.131.52?mag=man-...](http://www.jstor.org/stable/10.1525/si.1922.214.171.124?mag=man- interrupting) [3] [http://journals.sagepub.com/doi/pdf/10.1177/0261927X14533197](http://journals.sagepub.com/doi/pdf/10.1177/0261927X14533197)

</comment></comment></comment></comment></comment><comment><USER3> Thank goodness we are only talking about felt and percieved stigma, imagine if this guy was talking about rape, police violence or some other atrocity. Basically it's a Gaslighing 101 list of how best not to ever see discrimination and pretend it is everyone else's problem.

<comment><USER6> It's pretty crazy that you're trying to equate this with rape or violence.

<comment><USER5> It's the exact same attitude that is often extended to rape and violence.

<comment><USER6> The suggestion that they're the same is histrionic.

If you mean "evidence being desired is wrong", then please do not show up to serve on a jury.

<comment><USER5> This is exactly the same thought process used when saying most women who claim they've been raped weren't really raped and they just did it to manipulate someone. Obviously the severity of the accusation is different but it's the same thought process.

Also, stop all of this talk about a jury. This is about addressing issues in a community. It's not a legal proceeding. OBVIOUSLY in a court of law we'd need strong evidence to convict someone, but we're not trying to convict an individual here. We're just trying to get people like you and ESR to stop claiming our experiences are either invalid because we're mentally ill or entirely constructed because we're trying to manipulate you. It's gaslighting exactly as ummnooo said.

</comment></comment></comment></comment></comment><comment><USER7> Please also remember that ESR has previously written "One was: their skin color looks fecal. The other was: their bone structure doesn't look human. And they're just off-reference enough to be much more creepy than if they looked less like people, like bad CGI or shambling undead in a B movie. When I paid close enough attention, these were the three basic data under the revulsion; my hindbrain thought it was surrounded by alien shit zombies."

</comment><comment><USER6> This is a great post. I'm not sure that I consider ESR to be a "tribal elder", but I imagine I'll be linking to this article at some point in the coming year.

I hadn't previously read his article on "kafkatrapping" ([http://esr.ibiblio.org/?p=2122](http://esr.ibiblio.org/?p=2122)), but it rings eerily true to how it feels to be the target of a manipulation attempt.</comment>


How to generate such beautiful changelogs  - <AUTHOR>

I currently work in a corporate environment where we use SVN and JIRA to manage our code, bugs and development tasks.
I've always been fascinated at how beautiful the changelogs of the best open source projects are compared to the 'release notes' we prepare for our clients using Microsoft Word.
Example: http://rspec.info/rails/changes-rspec-rails.html
The clarity of what's happening is refreshing.
How are such changelogs generated?  What are the tools and processes that a team needs to have in place to generate such changelogs.
Thanks for taking time to share. <comment><USER2> We have our developer intern go through all of the resolved tickets for every release and generate the release notes based on a synopsis of those tickets.

It's a pretty manual process, but there are only 3.5 developers working on our product.

</comment><comment><USER3> IIRC, Fogbugz (fogbugz.com) - a JIRA competitor - has some capability to generate release notes.</comment>


Show HN: Check out my (sort of) weekend project... - <AUTHOR>

Check out my (sort-of) weekend project . . .
And by weekend project, I mean something that I thought sounded like a small idea that I could throw together over one or two weekends, but ended up taking over six months. This is a bit of a long submission, but after lurking on  HN for the last few years, I thought this might be a chance to contribute something back. I'm just going to briefly discuss why my "weekend project" took so long, and how I got where I am.
The url is http://dudmail.com - it's a disposable email site. Similar in intention/scope to the many existing ones out there, but hopefully differentiated a bit based on how long we keep the mail (two weeks), and by accepting attachments and optionally forwarding the email onto a personnel email address. (And of course, by being mine =)
After being inspired by all of you that seem to be actually getting ideas off the ground, over the last couple of years I had tried (and failed) to get two or three other application ideas to succeed. One reason they failed was that my ideas were far too ambitious for me to pull off. Their scope was so large that I could never finish them off, and I never felt they were ready to be released.  It took a year or so (or more) before I was ready to give up on each idea, so this was a huge waste of time for me in terms of not failing often/early. Identifying this large scope issue as a failing,  I thought that a disposable email site was such a simple concept with a single well defined focus (ie email) that I should be able to knock something together quickly and actually get something released...
Why did it take so long? There were a few reasons... The guts of the site were actually thrown together pretty quickly  - not much longer than my naive 'weekend or two estimate'.  The bits that let me down were:
- learning how to render a million different types of email sanely (still in progress).
- trying to learn how to bend postfix to my will (achieved)
- learning how to make a site design that didn't suck (sort of achieved)
- trying to work out why my application keep falling over (problem avoided)
- fear of actually releasing it / considering it finished.
The site was created using Ruby on Rails - it has a really simple database schema and it was all pretty straight forward. The biggest problem was rendering email - this turned out to be far more complicated than I expected. Plain text email is simple, but then you have to handle html mail, multi-part mail (text and html parts!), base64 encoded mail, mail in any one of a million different character sets, email with attachments etc etc. For html mail, you need to be able to render it within the css hierarchy on your page, without impacting adversely how the email was meant to be display. For emails in a odd unicode character set, you need to ensure you're handling and storing it correctly for every step of the process, or the end result will not be pretty. Rendering email correctly was one of the hardest parts of this site, and I'm still finding types of mail that I've not yet encountered and haven't handled yet.
Postfix was a real problem as well - I'd never really dealt with it before, and what I was asking it to do was pretty far out of the ordinary. I wanted any email, coming to any email address, on any subdomain, on any valid domain to be forwarded to my Rails instance for processing. This was strange enough that fine folks in #postfix were hesitant to help me because of the 'overwhelming amount of spam' I could expect to receive. I was expecting 99.999% of emails to be spam, so this was cool.  In the end after many many hours, I was able to make it do what I wanted using virtual_alias_maps and some very generous regular expressions. Any email coming in gets forwarded to an alias, which then pumps it directly into the rails webserver as a POST request (to avoid firing up a rails instance for each email)
The next issue was that of design - I've never been competent in this area. Initially I started off with a free template I found, but I quickly grew dissatisfied with how tacky it looked and at the same time, a number of excellent articles on designing for hackers flowed past on HN. (Not the book, but I have ordered that, and it'll take a few weeks yet to get here, so won't be any use until my next project!). One of the articles was http://www.attackofdesign.com/improving-a-design-step-by-step-part-2/ which helped a lot. It again took a few weekends of effort, but I got there eventually. (You'll see some strong similarities with that article in regards to the colors I chose). In the end, I'm not 100% satisfied with the design, but it's not completely rubbish, and I don't think anyone would care as much as I do anyway =)
After having getting the app working, and the design mostly sorted, I posted a few links on some app directories to try and get some beta users. This was pretty successful, and I got a few users - not many, but enough to test that things were working. The problem was that things were not working, or at least not for long. After a few hours or days, the site would slow down, and then finally fall over and I'd have to manually start it back up. The logs would have some errors about running out of memory, leading me to  assume I had a memory leak. I went through all the code with a ruby gem designed to track down memory leaks (bleakhouse), and found nothing. I switched from Apache+Passenger to nginx+unicorn and back again. I changed from Ruby 1.8 to 1.9 and even tried Ruby Enterprise Edition. I removed other apps I was hosting on the same machine, and killed all non-essential services. I tried periodical restarts of apache and postfix via cron at increasingly small intervals. None of this helped at all. I tried running monitoring software to restart the servers if things fell over (specifically monit) and this still didn't help. It actually seemed to make thing worse as the memory wasn't there for it to restart the services and then monit would get all messed up. In the end . . . on a hunch, I changed VPS providers (to rimuhosting.com), and the problems instantly went completely away.  Memory usage now stays well below 30% on average (about 280 meg), and I've never seen it go above 50%. I've not once had the application fall over in the two months it's been on rimuhosting so I'm pretty happy I've got that situation resolved. It was frustrating though the amount of time I wasted trying to diagnose an issue that turned out to be out of my control. I am not naming the original VPS provider here. Seems it was most likely an issue on their end, but it could just as easily been something I fixed when I reset every thing up on the new provider. (And of course, having to re-install, reconfigure and test the entire rails, ruby,  capistrano, postfix stack soaked up another weekend)
Finally, having made the site stable, I posted out a whole bunch more links, and got a whole bunch more traffic and by and large it's handled it. Not huge amounts, but far more than anything else I've done. I get about 300 hits a day over 3000 page views and about 2000 emails coming in. There's 600+ registered users and the number is climbing reasonably fast (for me at least).  I've managed to get to page two of google results for "disposable email" and hopefully will manage to get a little higher yet.
Even now though I am hesitant to consider it finished - there's a couple of bugs caused by a race condition that I can't seem to track down, and I've just found a new email type that I'm going to have to deal with (emails with inline cid images that I think come from outlook).  However . . . six months down the track, I've actually managed to release something that doesn't suck.
Check it out if you'd like - http:\\dudmail.com - I'd love to hear any feedback, criticisms or questions =) <comment> mike-cardwell You're displaying HTML parts inline. This is both dangerous and unreliable. A _much_ neater solution would be to take the HTML and convert it to a PDF using wkhtmltopdf:

<https://code.google.com/p/wkhtmltopdf/>

Then displaying the PDF to the end user. You can then generate a PNG or something from the PDF using ImageMagick, although the PDF retains the anchor tags and the PNG wouldn't...

The way you're doing it at the moment, there are _loads_ of ways of somebody malicious abusing the site.

<comment><AUTHOR> Hmmm. I did actually look at using wkhtmltopdf for another project so I'm sort of familiar with it at least.

I do definitely see the concerns here, but I've not been able to think of a good way of handling them. I'm not sure how user friendly a pdf download would be. Chromium at least doesn't display them inline, so you'd have to view the email, get prompted to save it to disk, and then open it up using a pdf viewer...

Do you think stripping out all the JS tags from the email before rendering it would be a safe enough solution?

<comment> mike-cardwell There are so many different ways of executing script. Just stripping out script tags isn't really enough. Here's another example which I've just tested with your service and works:

It's also possible to use SVG images with embedded javascript.

You could generate a PNG from the PDF and display that inline in the page. You could then have a "(PDF Version with Clickable links)" link next to it?

<comment><AUTHOR> That sounds more usable. I'll have a look into implementing that.

Thanks heaps =)

</comment></comment></comment></comment><comment><USER2> Mailinator has a blog, at <http://mailinator.blogspot.com> \- you should definitely read everything on there. Some things I recall reading:

\- Mailinator is designed and written from the ground up to be efficient by someone who seems pretty good (Paul Tyma; on the implementation side, it's completely custom SMTP-to-web software keeping e-mail in compressed form in memory; on the design side, it "sheds load" far more aggressively than mail servers that are intended to be reliable, necessary for the constant DoS attacks);

\- Mailinator has lots of imitators, but they tend to find out that the cost of running servers is higher than the ad revenue (see "efficient and cheap", mailinator processes a ridiculous amount of e-mail and recently added its second server _because getting that much bandwidth to a single server was more expensive_ );

\- As I understand, this is a hobby for Paul; he's not exactly getting rich (well, not from Mailinator anyway; he's on LinkedIn if you want an idea.)

I don't mean to discourage you, it sounds like a nice project. Just don't expect to get rich off it, or to be done tomorrow...

<comment><AUTHOR> Yeah, I know what you mean.

I'm not too concerned about costs/add revenue at the moment. The server is relatively cheap, and used for other apps anyway.

I haven't even yet bothered to put up ads on the page - because I know the revenue off them is going to be pretty close to zero, and it means going back and trying to fit the ads on the page in way that doesn't look terrible.

My main goal for this was to actually start a project, finish it and actually get some users. I've managed to achieve this (in a small way) at least.

It was pretty discouraging to fail to get anywhere with the last few projects I attempted, so at the very least getting to this stage with dudmail.com should carry over into some motivation for the next attempt.

(And I'm sure whatever my next project is, it will be the one that makes me rich and famous =)

</comment></comment><comment><USER3> So all !sub-domain emails are publicly accessible? I actually like this idea, sorta like a very lo-fi mailing list.

Anyways, this is very impressive to me. I've only dealt with email servers in the most superficial way and they've always struck me as being tedious to set up and manage. Creating a service that's based on email is pretty much a herculean enterprise in my book.

<comment><AUTHOR> Yup. Pretty much. You do need to know the inbox name they were originally sent to. This is to prevent someone from just wgetting all the emails from id=1 thru id=99999.

(Security thru obscurity I guess =)

Thanks for the feedback =) I actually thought this would be a lot easier when I started before I started digging into it. I guess this is probably thru of a lot of things - they look easy enough until you have to actually start doing them!

</comment></comment><comment> mike-cardwell Your hosting provider has an affiliate program, you link to them on your about page, but you're not taking advantage of their affiliate program. Check it out:

<http://rimuhosting.com/affiliate/about>

<comment><AUTHOR> Cool. I didn't know this! Will definitely check that out.

</comment></comment><comment> mike-cardwell Your signup emails are being sent from an IP address listed on the Barracuda Reputation Block List (BRBL) - <http://www.barracudacentral.org/rbl>

This is a pretty widely used blacklist

<comment><AUTHOR> Yeah, I've had issues with this from the start. (And being listed negatively on sites like <http://www.mywot.com>)

I'm not quite sure what's causing it - suspect maybe email bounces for undeliverable mails could have something to do with it.

I'll have to look into how I get myself off this blacklist though . . . I'm guessing it may one of those things that it's easier to get yourself onto, that it is to get yourself off of!

I do find it kind of ironic that a site that's about trying to prevent spam, gets itself blacklisted for spam =)

<comment> mike-cardwell One thing worth considering in future is to have a separate IP address for sending out signup emails so it's not subject to the same reputation problems. If you grow, and people use your forwarding feature, they _will_ start clicking the "Report as Spam" feature on forwarded email, in things like GMail.

<comment><AUTHOR> Yeah, that sounds like a good idea. I have no idea how I'd be able to implement that from with in the same rails application though. (But I'm sure it's possible!)

I can see I have a lot of homework to do =)

</comment></comment></comment></comment><comment> mike-cardwell Can you please clarify why password lengths are limited to 20 characters when registering.... Are you storing the plain text password rather than hashing it? How are you storing passwords?

<comment><AUTHOR> I'm using the devise plugin for rails which seemed to be the most popular choice at the time. (<https://github.com/plataformatec/devise>)

I've pretty much just gone for the default settings, which I'm guessing must include a limit on the length of the password.

The password is definitely hashed in the database though.

(Thanks for the all feedback you are giving too btw =)</comment></comment>


A Brief History of Graphics [video] - <AUTHOR> https://www.youtube.com/watch?v=dzN2pgL0zeg&list=PLOQZmjD6P2HlOoEVKOPaCFvLnjP865X1f&index=1

<comment><USER2> On pixels versus vector:

Notably, it all began with yet a different technology. Early computer displays were typically point plotting devices, meaning, these were random access displays like vector displays, but had no memory and would plot individual blips on the display. (Moreover, these displays used high-resolution tubes originally manufactured for use in radar displays, employing a dual P7 phosphor that wouldn't only add stability to the image by its sustain/afterglow, but also added iconic trails to any moving objects.) Thus, early games, like Spacewar!, would employ two different modes of graphics: Once, vector like graphics, drawing lines by advancing plotting locations by not more than a screen co-ordinate a step, and on the other hand, painting effects by individual pixels, like the pixel-dust of exploding particles.

These displays were also the most limiting factor in game development. As the beam had to be moved at high speeds, displays were serious pieces of hardware, applying high voltages to address the requested plotting locations. In order to prohibit any resulting ringing and blurred images, there was a wait time required in between individual plotting commands. In case of the DEC PDP-1's Type 30 CRT used for the original Spacewar!, these were 50 microseconds, the equivalent of 10 internal CPU instructions. Provided the program had to repaint the screen in reasonable time in order to maintain a stable image and steady frame rates, the time spent in display routines contributed a significant amount to the runtime of the main loop and limited what could be done during a frame.

<comment><USER2> So you may ask, why random access displays at all?

In the case of the DEC Type 30 CRT, there are 1024 x 1024 plotting locations at 8 intensities. A frame buffer for this would require 8 Mib of RAM. Core memory access times aside, consider that a block of 4k 18-bit words core memory (72 Kib) was listed in 1963 at USD 30,000 (roughly times 10 in todays money) – and you would need about 114 of them! So this clearly wasn't an option. Vector graphics are nice for smooth, seamless lines, but require additional memory and control circuitry to store and manage the path points to be visited round-robin (adding about another 50% to the hefty price of the display of USD 14,300 – a reasonable home). If you were up to displaying individual data points (as in time series experiments and simulations), the additional luxury of vector hardware was of questionable use and probably quite dispensable. Thus, you would go with point plotting devices.

</comment></comment><comment><USER3> The full playlist consolidated into one video is available here [https://www.youtube.com/watch?v=QyjyWUrHsFc](https://www.youtube.com/watch?v=QyjyWUrHsFc)

Ahoy's videos also cover some other topics such as firearms (specifically their depictions in games) and beverages. He also has a good video about easter eggs in games.

</comment><comment><USER4> Great series of videos. Unfortunate that he uses mostly enhanced footage from emulators and modded PC games instead of showing them as they appeared when originally released. Also unfortunate that the aspect ratio is wrong on so many of them.

<comment><USER5> Yeah, that would have been nice. But I can imagine it would be pretty expensive and time consuming to obtain authentic footage of each of these games, particularly some of the more obscure (and therefore, rare) titles.

<comment><USER4> You don't necessarily need authentic footage from the machines themselves. You can use emulators, just render at the original resolution and don't use any image quality enhancements or filters.

</comment></comment></comment><comment><USER6> Highly recommended related video by the same person (XboxAhoy / Stuart Brown):

"Doomed: The Embers of Amiga FPS"

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

</comment><comment><USER7> Lovely, I'll use this to educate my boss who keeps saying "those animations in Assassin's Creed look so unrealistic, is this the best they could come up with?"</comment>


George Lucas reportedly creating Star Wars sequel trilogy - <AUTHOR> http://io9.com/5671722/george-lucas-reported-creating-new-star-wars-sequel-trilogy-thats-not-about-the-skywalkers?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+gizmodo%2Ffull+%28Gizmodo%29

<comment><USER2> Oh dear gods please no! I'd be like the Facebook movie all over again: I'll feel obliged to watch it while intensely hating myself for this humungous waste of time and money :-/

</comment><comment><USER3> There was a rumor around the time _Return of the Jedi_ came out that Lucas intended to create both a prequel trilogy, which he has since actually done, and a sequel.

</comment><comment><USER4> WARNING: Google Chrome is reporting that this site hosts malware

</comment><comment><USER5> please tell its april 1st.</comment>


Chrome For Android Update - <AUTHOR> http://chrome.blogspot.com/2012/04/chrome-for-android-update.html

<comment><USER2> They finally fixed the user agent! It used to be CrMo instead of Chrome, which broke a lot of sites. Back to Chrome now (with "Mobile" suffix to distinguish it from the desktop/tablet build) and the sites work.

<comment><USER3> There are still a lot of sites that sniff the UA rather than feature test?

<comment><USER4> For mobile sites, UA sniffing uses less data and fewer round-trips, so (usually) happier visitors.

<comment><USER5> I wish they'll say _Tablet_ on tablets instead of _Mobile_ , like Firefox will do:

[https://developer.mozilla.org/en/Gecko_user_agent_string_ref...](https://developer.mozilla.org/en/Gecko_user_agent_string_reference#Mobile_and_Tablet_indicators)

<comment><USER6> I wish website developers would stop using UA sniffing. WTH do you care whether it's a Tablet or a phone? Don't you frecking care for the resolution instead?

What the heck are you going to do on a Galaxy Note? Are you serving the same site on a Wildfire S as you are serving a Galaxy Nexus?

9 times out of 10, whenever a webdev tries to be "smart" and serves up a mobile version of a website, I don't want it because it's a crippled, badly working knockoff of the real thing. Chrome and Firefox on Android are real browsers and can display the full site, so stop feeding them this _crap_.

I heard there's a room in hell where you are forced to use various Android browsers on various mobile devices all day.

<comment><USER7> Major e-commerce product detail page html for PC: 240775 bytes

For smartphone: 15903 bytes

For old phones (mostly text): 2369 bytes

Server-side device detection does make a difference here, and in other footprints (initial external resources, backend services) as well.

<comment><USER6> I think you just confirmed my complaint that smartphones get a crippled site.

I don't think UA sniffing tells you what connection I am on, right?

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> Still no buildable source distribution. Just a bunch of component drops. Sigh.

</comment><comment><USER9> I can't wait for them to include webgl.

</comment><comment><USER10> AFAICT, there is still not fully buildable source, and it is still somewhat less smooth than the stock browser. I wonder if they will fix those issues anytime soon?

Until the code becomes more open this is a step backwards.

</comment><comment><USER11> Why haven't they noticed that Blogspot layout doesn't render properly on Android?</comment>


Deconstructing K&R C (2010) - <AUTHOR> http://c.learncodethehardway.org/book/krcritique.html <comment><USER4> Shaw mischaracterizes K&R by making anachronistic assumptions about its intended audience and ignoring the context in which it was written.

When it was written, a beginning C programmer was most likely coming from a background in assembly and accessing the computer as a professional in the workplace or a student with substantial privileges. The intended audience was sitting near the cutting edge and was assumed to be sophisticated. Data validation could be left as an exercise for the reader in good conscience.

This audience is distinctly different from those who learned programming typing code from magazines and Shaw's current audience for whom he is simulating that experience.

Editorially, K&R has chosen to remain a slender tome. It has let others create fat cookbooks and "for idiots". Forty years on, Shaw criticizes the _Wright Flyer_ by the criteria of Second World War aviation.

We don't hold K&R on a pedestal because of its pedagogical methods, but because of the power of the language it describes. _The C Programming Language_ was a byproduct of creating a language.

Kernigan and Ritchie were programming. Their book is properly judged by different standards than Shaw's educational project.

None of which is to suggest that Shaw"s project may not achieve a comparable level of esteem

<comment><USER5> He mentioned that the intended audience was different, and even talks about it a little -- what he objects to is that people learning C are being pointed to it in a way that removes all of that context. Especially, it seems like holding K&C up as a paragon of "style" offends him.

That's what he means when he says it should be relegated to 'history.'

I'd submit that K&C is the fastest way to learn C if you knew nothing about C, or the best way to acquire the Zen of C, and that for those purposes it's still second to none, and its conciseness is a virtue ... but that Zed might be right about people pointing to it as a paragon of style to newbies who hope to write it professionally someday.

In fact, I'm disappointed that Zed let this project drop. Seemed neat.

<comment><USER6> you can always read and benefit from an old text without anachronistic mistakes, and any text written today will also be obsoleted quickly. it is usually better reading the masters than the pupils.

</comment></comment></comment><comment><USER7> > we will be modernizing the code in K&RC [...] It will be more verbose, but > it will be clearer

It's been at least a year since the article first showed up on HN, and the author still hasn't made good on this promise. It's actually hard to do, because verbosity and clarity are usually at odds with each other.

One of the main attractions of K&R C is exactly its _lack_ of verbosity, its extraordinarily high content-to-length ratio. In a very short space you learn to do a lot of sophisticated programming, and most if not all code examples fit on one page or less.

Of course, optimizing for conciseness has its costs, as anyone who has debugged segmentation faults knows. So you avoid some of this shooting- yourself-in-the-foot that C is infamous for by using various crutches: add an extra argument for some functions, build your own Pascal-style strings etc. And if you pass in external input then you should definitely use some of them, such as strlcpy (which is actually preferable to the four-argument function that this article is getting to).

But there are also lots of cases where plain old strcpy will do fine, and for simplicity sake it's better to use it. I believe one of these cases is a learning experience in which you want to get the big story as soon as possible, and are willing to wait until later to get acquainted with the inevitable caveats and detours.

<comment><USER8> >> One of the main attractions of K&R C is exactly its lack of verbosity, its extraordinarily high content-to-length ratio. In a very short space you learn to do a lot of sophisticated programming, and most if not all code examples fit on one page or less.

Funny.

The same goes for "Programming Erlang" by Armstrong.

On contrary: "Erlang and OTP in Action" is quite boring (in comparison with book by Armstrong). Definitely it's not a book for "enlightment" but for practice, sometimes dull: "Do it in such way, you don't need understand why, you'll get accustomed to it in future"

</comment></comment><comment><USER9> I think Zed is right to point these errors out - there are quite a lot of issues with edge case inputs and undeclared assumptions, that people definitely need to hear about.

That said, he appears to be dealing in absolutes too much. If you care about performance (and let's face it, if you're using C you do, otherwise you probably shouldn't be using C) then sometimes you can't handle as much error checking or error correcting as you'd like.

In games (where most of my experience is), it's common to have functions that are 'unsafe' by his definition, but that are hidden in compilation units and not exposed in the header, so that the programmer can control exactly where they're called from. If you have a limited number of 'gatekeeper' interface functions that are actually called from outside the module, and these either check/sanitise/assert on their inputs, then the internal private functions can safely assume that they have valid input and just run as quickly and as simply as possibly.

<comment><USER10> There are many other good reasons to use C besides performance.

For instance:

      - cross platform portability

      - <USER2>

      - <USER3>

      - long term stability / maintainability

      - low run-time overhead, fine grained control of memory

<comment><USER11> Don't forget the people.

Long-time C coders are among the best programmers around. It's hard to understand just how damn good they are until one has gotten a chance to work with one or more of them.

The good ones know all levels of the hardware and software stack they're working with. Coupling this knowledge with the raw power of C, they can put together amazing and resource-efficient software in very little time, yet without sacrificing maintainability, security, portability and the other factors you've listed.

These are truly the people who make the impossible become possible.

<comment><USER12> if this is true, then I'm going to take C more seriously. I have to move myself forward from TurboC programming.

<comment><USER13> It is true. How much of the truth is credited to "longtime" and how much is credited to "C" is up for debate, though. Personally I'd put most of it on the "longtime" side, and observe that if you want to learn how to write really efficient, performant code quickly, there are a number of other options developing where you can skip the part where you stab yourself with the language for five years learning where the sharp bits are. C is not dead yet, but I'm feeling increasingly confident we've finally entered the era where its days are now numbered.

<comment><USER14> based upon what? from what I've seen C is doing great, it has it's particular domains which in my opinion are low-level programming and performant, portable code with a small footprint.

I can't recall seeing a new language challenging C in the aforementioned areas.

<comment><USER13> Based upon the increasing number of languages showing up that combine high performance with higher levels of abstraction than C, and the increasing number of serious languages gunning for C specifically, like Rust.

C has ridden for a long time on the fact that we didn't know how to combine high performance and systems functionality with high abstraction languages, so you had your choice of C or C-like and fast, or high abstraction and slow, like Python or Perl or Ruby. This gap is closing, fairly quickly now, and once it does C will start experiencing a rapid decline into a niche language, rather than the lingua franca of computing. It has advantages that have kept it going for a long time, but it has terrible disadvantages too, and once the two are separable, people are going to want to so separate.

Already a great deal of what was once automatically C or C++ has gone to some sort of bytecode (Java or .Net), even on things you would used to simply automatically assume to be "embedded", like your cell phone. The decline has already started.

Of course it won't _die_. Computer languages never really _die_. You can still get a job doing COBOL, and in fact get paid quite well. But 10 years from now, I think on the systems considered "modern" at the time, it will not be the "default" language anymore.

<comment><USER10> Any new language will have a maturity gap to make up for that will be hard to bridge.

Java has to some extent displaced C++ (and the .net framework has done some more of that), but I haven't seen any language that displaced C in an arena where C is strong.

For rust to make this happen they'll have to finalize the language spec, gain a decade+ experience in what the quirks are (these things only come out over time it seems), sway a generation of programmers to adopt it rather than the incumbent.

Go is shooting for the same space and it already lost the plot in several aspects (for instance: newer Go versions break older code).

<comment><USER15> Go is not shooting for the same space. Go is garbage collected.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER16>
        // use heap memory as many modern systems do
        char *line = malloc(MAXLINE);
        char *longest = malloc(MAXLINE);

        assert(line != NULL && longest != NULL && "memory error");

        // initialize it but make a classic "off by one" error
        for(i = 0; i < MAXLINE; i++) {
            line[i] = 'a';
        }

So, you create something that does not fulfill the C library invariant of what constitutes a "string", and then pass it to a copy function that assumes this invariant? It isn't a fair thing to do, and frankly, I doubt it many beginner programmers care about things like this. Yes, they may run into such a "defect" and be very miserable for a while, but that will just teach them about debugging, and most important, invariants.

Zed, I appreciate your work, but if this is the direction you'll be taking with these articles, then don't bother.

<comment><USER17> You are being too kind. I was expecting some earth shaking discoveries, only to find the author doesn't understand C.

<comment><USER11> Zed and his writings are not to be taken too seriously.

<comment><USER18> I suspect this one is a diversionary tactic.

I guess Zed Shaw suffers from nerd burnout. As in, a sort of more emotional burnout from having had to deal with them all the time in the past - or at least, that's what I get from some of his writings anyway. So I imagine him popping this stuff in as a sort of early warning system. It's all true enough to be right, and true enough to get his point across, BUT IT'S NOT TRUE ENOUGH FOR A NERD. So any time somebody complains about his strcpy example, or 0-terminated C strings, or whatever, that's his nerd alert. This person is not worth dealing with, and now he can block them, or set up a mail filter to put their email in the junk folder, or whatever, without having had to invest any time in finding this out the long way.

There was also a bit in one of his essays about the way ruby fans were always these stupid armchair pop psychologists.

<comment><USER19> I think it functions less as a "nerd" alert but more as a _"recognizes I may not be as profound as I like to imagine myself"_ alert.

I mean, he's right.. but he's not being profound. You may as well tell me that I should be careful about losing precision while using floats. Yes... _no shit?_

</comment></comment></comment></comment></comment><comment><USER20> There is no reason to assume that the correct length parameters would be passed to safercopy. Indeed, there are many buffer overflows and off-by-one errors in C programs which involve buffers with explicit size values instead of null-terminated C strings.

The real problem with C is that it relies on bare pointers, where it would have been better to use slice-type structures that describe a buffer by pairing the base pointer and size, so that they are naturally kept in sync. This article takes a lot of time to "deconstruct" C strings, but never gets to the real issue.

The "stylistic issue" is also debatable. With the indentation given in the example, nobody would think that the "while-loop will loop both if- statements", as the author claims.

<comment><USER21> In short, Zed had all of Rob Pike's sneering anger and none of his technical mettle.

What has Zed said about C that wasn't already answered more thoroughly by Go?

</comment></comment><comment><USER22>
        A = {'a','b','\0'}; B = {'a', 'b', '\0'};  safercopy(2, A, 2, B);
        A = {'a','b'}; B = {'a', 'b', '\0'};  safercopy(2, A, 2, B);
        A = {'a','b','\0'}; B = {'a', 'b'};  safercopy(2, A, 2, B);
        A = {'a','b'}; B = {'a', 'b'};  safercopy(2, A, 2, B);

This analysis only tries different values of A and B, not the lengths. A proper analysis of "for what values does it fail" should include _all_ parameters. What happens if you do `safercopy(3, A, 2, B)` or `safercopy(3, A, 3, B)`?

<comment><USER23> Exactly what I noticed. The "safer" function relies on the length arguments being correct, just as the copy function relied on the strings being null- terminated. The safer function is more explicit so less prone to error, but both rely on the programmer doing the right thing, which is what he was trying to avoid...

</comment></comment><comment><USER24> Zed is dinging examples in K&R for incorrectness, but he's inadvertently deconstructing the notion of correctness. It's more contextual than most developers want to believe.

<comment><USER25> Agreed. And it starts from his very first example, about the implementation of the copy() function. C is not a type safe language and programmers who use it knows that, sometimes it might even be an advantage. For instance for me, if I'm writing or using such a copy() function which does not ask for a length to copy, I know it is because it will need a proper C string. For some others it may be that they know that their functions will use a global maximum length and that the inputs they provide to the function are respecting that. But no half-decent C programmer will use this function as a totally safe one on any possible inputs. Especially if they saw the implementation.

The "correctness" the author is asking for here is not what you want from a typical C functions. If you really need this kind of "correctness" then maybe you are using the wrong language and should check our either a high-level tolerant scripting language or a statically typed one.

<comment><USER24> Yes, and that is just one level. When you write about programming you have to be very clear about what you are trying to get across, and when you put that focus into practice other things suffer because you are competing against the rest of the world for the reader's attention.

Kernighan and Ritchie could have decided to write the book as absolute hard- asses, making the most bullet-proof copy routine imaginable, but in the end they would've been writing a different book, not a primer for a language.

<comment><USER26> If you're illustrating concepts — such as iterating through an array to find a specific value which will be there because the data structure being examined is defined to contain it at some point, then writing a function that assumes the value won't be there is didactically bizarre.

Zed is suggesting that the teaching point of the code sample be ignored in favor of an altogether different and less useful teaching point. This is not a case of not understanding C (which he cleary does understand) but not understanding how to teach.

At best, his entire point could be addressed in K&R by a cautionary footnote or a later discussion of code hardening.

</comment></comment></comment></comment><comment><USER27> the point of the exercise is to understand how a copy works, and stylistic issues aside, the point is made.

if you supply a function with inputs outside of it's specification (NULL- terminated strings), then undefined behaviour is (by definition) going to happen.

besides, what's to stop someone from calling safercopy like so;

        safercopy(strlen(str1), str1, strlen(str1), str2);

then strlen will fail (albeit a bit more safely - perhaps).

it's a safe bet, that in production code, we'll not be working with fixed length strings. so we need to get the length of the string somehow. all his safercopy does identify a problem that he himself already points out is impossible to solve - how do we differentiate from a NULL-terminated string, and one that isn't?

the only real solution (i can think of) is a string class, where the constructor is guaranteed to return valid (or no) strings. then (assuming other functions can't overwrite our memory - already an unsafe assumption) we could guarantee a safe string copy.

programming is hard.

</comment><comment><USER28> I am wondering when will the author take on correcting errors in MMIX code in Knuth's books. He will at least earn a hex dollar for his efforts.

Jokes apart, I admire the bravery in questioning K&R C's status. I have only a few personal insights to share as I don't code much these days.

1\. I got introduced to C in 80's via some popular book. K&R not only taught me C but also was my entry point into the systems programing world. Before K&R, the BASIC programming books never allowed me to deal with memory or interrupt vectors in the way C allowed me.

2\. C has a great power dynamic built in to it. You are on your own in dealing with this power. It's you who crashed the machine, not C and surely not K&R C.

3\. Almost every language since C has borrowed something from C. Hence, anytime I saw a familiar notation or code block in any language that reminded me of C, I got confidence that I can learn this language.

K&R's many virtues give it an unique status. It did something that no C book or website can do it. It is the word of the language designer themselves. They shared their reasons of the choices they made.

</comment><comment><AUTHOR> Theres an analysis of his deconstruction here:

[http://functional- orbitz.blogspot.se/2013/01/deconstructing-...](http://functional- orbitz.blogspot.se/2013/01/deconstructing-zeds-k-deconstruction.html)

</comment><comment><USER29> Even if I made a function copy(char to[], char from[], int lenTo, int lenFrom) it would still be incorrect using his reasoning because most of the possible inputs would still cause the software to crash. I could symply add a wrong lenTo and lenFrom.

<comment> guard-of-terra Garbage in, garbage out.

</comment></comment><comment><USER30> I don't understand it. His solution to non-safe introduction to non-safe language is to slap defensive checks everywhere? I am not sure that scaring his students shitless by having them check every input is as effective as concise explanation why and when you should check your inputs.

Criticizing K&R because of their safety assumptions is a faux pas.

</comment><comment><USER31> Though Shaw raises a valid point based on the fact that we program in more diverse and hostile situations today than K&R did back in their days, I'm unsure how deep one needs to go into program correctness when teaching a language. Wouldn't it suffice, for example, to have program correctness highlighted as a chapter?

Take this -

> Also assume that the safercopy() function uses a for-loop that does not test > for a '\0' only, but instead uses the given lengths to determine the amount > to copy.

It is possible to write a safercopy() conforming to that loose specification that will not terminate. Just make the test something like "i != length" instead of "i < length". Then you can supply negative length arguments and get it to fail. Of course, that would be stupid, but it already illustrates the art of specification. .... Well, with finite precision integers, "i != length" would terminate at _some_ point due to wrap around, but would take the universe to end if you'd used 128bit integers. To do it even more simply, `safercopy(1,2,3,4)` can crash the program.

Is the moral of this story that programs are not valid outside the context they were created for? .. or is it to never use data structures whose integrity cannot be proved without failure? .. or is it that proving a program's correctness using some method only indicates a failure of imagination? .. or, to put it differently, that you can only prove a program wrong but never one right?

</comment><comment><USER32> This article is bashing just for the sake of bashing. While it pretends to offer constructive critiques and solutions, it fails miserably. One can certainly have productive discussions about the proper way to handle buffers in C, but this isn't it. Zed Shaw should stick to Ruby or whatever area he's actually good at.

<comment><USER21> He did the same thing in Ruby first, before everyone got sick of him and he moved to C.

</comment></comment><comment><USER33> Annoyingly clever. Even while running Ito JavaScript I have to debate whether I should be annoyingly clever or not.

      /* bad use of while loop with compound if-statement */
      while ((len = getline(line, MAXLINE)) > 0)
        if (len > max) {
            max = len;
            copy(longest, line);
        }
     if (max > 0) /* there was a line */
        printf("%s", longest);

What do you do?

<comment><USER34> _(i'm not certain what aspect you are trying to discuss but i'm assuming braces-- as that seems the primary point in the article)_

My personal solution (again for JS) would be to use a new line with no braces to split up an if-statement, but to never nest a braced statement as part a pseudo-one-liner, nor to nest many levels of one-liners - as these situations could lead to confusion.

Eg for the above;

      while ((len = getline(line, MAXLINE)) > 0){
        if (len > max) {
            max = len;
            copy(longest, line);
        }
      }
      if (max > 0)
        printf("%s", longest);

This is a personal preference- i find it adequately splits up a one-line `if(max > 0) printf("%s", longest);` statement to be clearly identifiable as an if (while/for/etc) block, without the verboseness of the extra line/2 for braces, which i personally find makes code harder to read.

<comment><USER35> If I'm intentionally writing a one-line if I will write it on one line. I think using an indented second line without braces is less clear, and more prone to problems later when the code is modified.

So I'd write:

      if (max > 0) printf("%s", longest);

or

      if (max > 0) {
        printf("%s", longest);
      }

but never

      if (max > 0)
        printf("%s", longest);

</comment></comment></comment><comment><USER36> I have been through both, K&R and Shaw. K&R is the resource I point new developers to who want to learn C.

</comment><comment><USER37> This book introduced me to modern languages, from my previous experience coding in assembler. It inspired the millions of lines of code I've written since.

I now understand why my subsequent programs, and those of many in my generation, have been riddled with bugs for 3 decades.

<comment><USER10> K&R is hardly the only book written about C, nor is it the best. You should definitely not stop learning about a language after you've read just one book about it.

K&R C was best practice in 1980 or so, since then we've learned a lot about C, about what to do and what not to do. If you still program C like it is 1980 then you can't really blame that on a book from 1978.

<comment><USER38> I am midway through K&R, but now I am curious, what other book would you suggest?

<comment><USER39> Popular suggestions (not introductory):

        C Interfaces and Implementations (David R. Hanson)
        Expert C Programming (Peter van der Linden)

I'm also a fan of _C Programming: A Modern Approach_ (K. N. King) as an introductory book, but it's _very_ different in intended audience from K&R. King is writing for students, and he assumes nearly nothing. K&R are really writing for experienced fellow programmers, I think. So it's an apples to oranges comparison. But King is certainly more modern. He includes a fair amount of C99 material. The writing can't compare with K&R. It's nowhere near as dense or elegant. But if you find parts of K&R a bit _too_ dense and elegant, it's a good trade-off. (I used them both in tandem while trying to learn C this summer. It worked well for me. When King got too verbose, switch to K&R. When K&R lost me, switch to King.)

<comment><USER40> King's book was my introduction to _serious_ programming when I was younger. In an era of my life where I usually prefer ebooks, I still have King's book, in dead-tree format, and love it.

</comment></comment></comment></comment></comment><comment><USER41> Ironically, I most likely wouldn't hire Kernighan or Ritchie because of their poor programming style.

<comment><USER42> Your hubris takes my breath away, which makes it difficult to laugh at your ignorance. Painful.

<comment><USER41> I am sorry, there was no 'hubris' at all. You obviously misunderstood my comment along with other few not very bright people. Recently I had to conduct a number of job interviews on C/C++, and then I came across this article, and a thought came to my mind that great people cannot be measured with a scale of mediocrity, and that the mainstream in every field of human knowledge is used to be very focused on non-essential detail. Sapienti sat, but in your case it is the reversal.

<comment><USER10> Do you have this a lot, that other, not very bright people misunderstand you?

<comment><USER41> Looking at your responses, I see you are a guy with very straightforward stereotypic thinking, you are aggressive, and your little taunt is also childishly primitive and straightforward. Does it make sense to talk to you at all? So the answer is 'no', of course, I do not 'have this a lot', as I usually simply ignore this kind of people, but unfortunately there is an option to downvote a comment for the benefit of the stupid.</comment></comment></comment></comment></comment>


Harvard student loses Facebook internship after pointing out privacy flaws - <AUTHOR> http://www.boston.com/news/nation/2015/08/12/harvard-student-loses-facebook-internship-after-pointing-out-privacy-flaws/zASZFdUjn6PoliUiR9kVHJ/story.html?p1=feature_pri_hp

<comment><USER2> It's hard to get too outraged about this. Imagine you go behind your current employer's back and release an exploit against one of their own products. Would you expect them _not_ to fire you on the spot?

The ethical course of action is to first use the internal communication channels afforded you as an employee to try to remedy the problem from within. Only if your employer refuses to fix the problem, is it ethical to whistleblow.

Given that this kid _already had an offer and a start date_ , he was literally only _days_ away from having access to such communication channels, whereupon he would have been in a much better position to asses his employer's willingness to patch the security hole (which it seems they had already started doing).

Instead he chose to throw egg in his (future) employer's face, and publicize a tool that could actually endanger people.

I'm not at all denouncing whistleblowing… many whistleblowers are tantamount to martyrs. But publicly calling out your own employer without having assessed their awareness of the issue – and expecting them not to fire you – is just _dumb_.

<comment><USER3> I agree 100%. Nearly any employee/intern at any company would have landed in the same hot water.</comment></comment>