The Algernon Argument (2010) - <AUTHOR> https://www.gwern.net/Drug-heuristics <comment><USER2> Hypothesis: The main evolutionary benefit social animals get from IQ is understanding the thinking of others and communication.

Thinking and understanding others is more important than thinking better. Slightly higher than average IQ is beneficial, but too much higher is net negative.

You can understand others in two ways.

1) Build a internal model for how others think. This is a difficult problem. It involves complex decode-encode process that eats resources and can fail. For social animal this process must be almost always on.

2) Have the same underlying thinking process as other individuals. The communication and understanding is now effortless.

If this hypothesis is true, social species have lower IQ variation than species where individuals live alone.

<comment><USER3> This is a very interesting hypothesis on the evolutionary origins of anti- intellectualism!

So I agree that a homogeneous population will be much better at communication (no one needs to "talk" down to each other).

But given that social animals often form a hierarchy, do you think it still matters as much? The "smarter" ones can get others to follow him without the rest understanding his internal thought process. Group selection should vastly favor tribes that are good at producing these intellectual leaders then.

<comment><USER2> Social intelligence that leads to the top may not be related to IQ or fluid intelligence. It may be ability to communicate, read and project ideas, not thinking better ideas.

ps. Group selection is very controversial theory. I think most evolutionary biologists reject it.

</comment></comment></comment><comment><USER4> There are some things that we talk about everyday and even attempt to measure without having an explanation of what they are. For instance, we say a person is 'happy'. Or 'we feel that...' ('feel'? 'we'?)

Intelligence seems to me like one of those qualities. It's real, but it isn't what we think it is. To me it seems like it ought to be, and often is, subject specific. Yet IQ tests are apparently predictive of career salary.

Some people seem incredibly smart but they don't create anything new. So their impact on the world in limited to 'more of the same'.

Then there's the fact that intelligence isn't additive. A person can make massive contributions to an academic department simply by being _genuinely motivated_ and thereby boosting the morale of his more intelligent colleagues. Whereas a bad genius can retard an entire field (or was is merely that he was mistaken?)

<comment><USER5>
      more of the same

Oh, I don't know about that.

There are many new things I can think of, and wish to create, but there are some non-trivial artificial barriers between me, and the tools I need, to complete the tasks.

Things like licensing dongles and lawsuits, and access tokens, and passwords, and CD keys, and agreements to never reverse engineer, and bandwidth caps, and CPU core count or MAC address access limits. And lockstep dependency hell, and the decay of unavailable compatible versions reaching EOL.

Even if I had unlimited time to do whatever I want, I don't have capacity for unlimited spending, to authorize access to all the tools and remote resources needed, to create all the prototypes I want.

Then, what about getting you to even consider my voice as credible? What would I have to do, to prove myself, such that you'd consider adopting my invention.

Lastly, what if I am not regarded as morally pure, or somehow unsavory in character? This is to say, maybe some find my political leanings dubious. To some people that might preclude them giving me the time of day, let alone considering the utility of my invention.

Maybe the morality or default practical utility of my invention is suspect, and thus reflects upon my character.

I'm smart enough to invent a new application for the remote control of a device, but I'm unable to collect the resources I need to do it. So, intellect isn't the limiting factor here. I'm prevented from accomplishing the goal, because no one will sponsor the effort.

Some people don't like my appearance. Others don't like my personal style. Still others look at my code and scoff at the runtime, or the syntax formatting, or the compositional choices. Others think they can guess my age. Others carry an ethnic or sexist bias. The list goes on. But no one wants to see me as their boss, and raise an eyebrow at the idea of me even as a peer.

I cannot dress as I want, keep my hair as I want, speak as I want. I have to jump through hoops of social decorum, such that select audiences will not cringe and flee.

And this is just me. I'm sure there are other people like me or smarter no doubt, out there, stuck in a cage. Doomed to age out and whither away, never adding to the conversation, because of all the prerequisites to speaking at all.

<comment><USER4> Yes, most smart people invest their creativity into 'fitting in' better and enacting social memes more faithfully that the norm. Whereas the (rare) creative genius is disagreeable and thus usually ignored.

</comment></comment></comment><comment><USER6> Or, possibly, intelligence beyond a certain point wasn't useful until recently, and didn't provide an evolutionary advantage.

For that matter, I'm not sure how much reproductive advantage intelligence beyond, say, 130 provides for a person now. Are there _that_ many situations where it would keep someone alive long enough to reproduce?

</comment><comment><USER7> Only quickly skimmed the beginning of this very long essay, but aren't Algernon's story and the first paragraphs of the essay about the impossibility of increasing the intelligence of a single individual? And what does evolution have to do with it? It seems to be impossible to increase the intelligence of, say, an average individual; yet Einsteins exist, there is actually a large number of them in absolute terms. One thing is the average level of human intelligence, evolutionarily determined; a completely different thing is the possibility of increasing the IQ of specific individuals during their lifetimes.

</comment><comment><USER8> This is meta but does anybody know the name of any disciplines where human history is studied through the perspective of evolution theory?

This subject is a mite tricky to Google.</comment>


Google Design - <AUTHOR> http://www.google.com/design/

<comment><USER2> As a user I've been really unhappy with their designs lately. I often have to click around in maps to try to figure out how the heck to change it from one type of nav to another, for example. There's also often tons of mystery icons in their apps when I try to do something. It's very frustrating. The older versions of maps with more controls were a lot easier to use.

Their design patterns fail in user testing too. Moving actions to an unlabeled icon in the top right like they recommend to Android developers now instead of a large clear button just causes users to never find the action.

The recent Android Wear release is similar. All notifications are stripped of anything but text and an image and there's no way to put a button in where users may want one like the notification API already supports with RemoteViews. Google is forcing a certain look on the developers at the cost of the users.

I think their whole design initiative is just trying to make things look pretty and screwing over their users, personally.

<comment><USER3> I hate their maps UX now. Just trying to pull up traffic is incredibly annoying! The whole auto drop-down thing is terrible.

<comment><USER4> They removed features, too. They used to have a feature that allowed you to view traffic patterns at a future time of day -- what traffic looks like during rush hour vs. weekends, for example.

<comment><USER3> They didn't but they re-named it. You have to click on "Typical Traffic" and then adjust the time and date from there.

<comment><USER5> So they've added it back in - that's good to know. It was missing ever since the redesign last year until just recently.

</comment></comment></comment></comment></comment><comment><USER6> Tongue firmly in cheek; but does this mean they're going to start applying design to their products? I could fill a book of examples just from Gmail (settings screen, inconsistant placement of reply button, no option to reverse converstation view).

<comment><USER7> GMail is often trumpeted as great example of a clean, well-designed web app, but I find it downright messy, complicated and unnecessarily simplistic. Everytime I need to do something simple like forwarding or adding a rule for deleting emails, I have to waste a good 10 minutes digging through that horribly designed settings menu. And even the main screen isn't that good, for example, there's no way to delete every email from a given contact, or at least not an obvious one. I try to use GMail as little as I can, because every time I do it's a real nightmare.

<comment><USER8> I've had the opposite experience. To delete all emails from a given contact....search for from:contact, select all, delete. Idk how that could be more intuitive?

<comment><USER9> More intuitive would be not having to know the command. Is it still "from" if my gmail is set to German or French?

Anyway, I do think google solved this in to ways: type contact and from:contact is suggested

If you rest the curser over a contact name, a box with an option to see all conversation appear.

</comment></comment></comment></comment><comment><USER10> If only they could describe their simple intuitive design goals, in simple intuitive language

> A material metaphor is the unifying theory of a rationalized space and a > system of motion.

<comment><USER11> Apple isn't much better: [https://developer.apple.com/library/ios/documentation/UserEx...](https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/index.html#//apple_ref/doc/uid/TP40006556)

<comment><USER12> In both cases the idea is to obfuscate the complexity - remove it from the user's view to make it effortless. UX is not easy. What you are looking at is the "how," not the "what."

</comment></comment></comment><comment><USER13> Last October I made a CSS3 demo where the three-bar navicon icon transforms into an arrow. I'm very excited to see Google adopting it to their new designs.

[http://codepen.io/bennettfeely/pen/twbyA](http://codepen.io/bennettfeely/pen/twbyA) [http://www.google.com/design/spec/animation/delightful- detai...](http://www.google.com/design/spec/animation/delightful-details.html)

<comment><USER14> I highly doubt Google adopted this from your demo.

</comment></comment><comment><USER15> Isn't material design basically re-invented skeuomorphism?

From Google's Material Design guide:

"...visual cues that are grounded in our experience of reality. The use of familiar tactile attributes speaks to primal parts of our brains and helps us quickly understand affordances."

<comment><USER16> Skeuomorphism is adopting the style of physical incantation of an object for its digital display. Material design dictates a single physical incantation for the UI- everything should feel like paper.

A contrived example of this is a skeuomorphic car dashboard display would have photo-realistic guages with lighting reflections from the cover glass, detailed bezel, etc. My read of a Material design implementation is that it should have a flat design with lighting and depth effects for contrast and shape recognition.

<comment><USER17> I don't see the ultimate difference between the skeuomorphism of Apple (which was extreme) and this. It's applying "physical" properties to the digital.

I'm gonna pass, and slag this "material design" every time it comes up. Clownshoes design philosophy, though I suppose I'm not surprised. Look how many steps it takes to "logout/login from a different account" now.

<comment><USER18> The icons on your desktop do not have any physical existence or properties beyond what we assign them. It's not even a desktop. If you really want to experience the true self of your files, you'll see a visual representation of the zeroes and ones that represent them, for even then they are nothing more than ghosts frozen in electrical charges.

</comment></comment></comment></comment><comment><USER19> Edward Tufte tells us that we should strive for information-dense, multidimensional visuals. Bret Victor says, "What he said," and adds that these visuals should exploit the magical potential of dynamic displays.

As several have remarked, the principles in the OP tend to yield low- information interfaces. Colors, sizes, and spatial relations are not used as variable axes because they are subservient to visual appeal and "responsiveness".

I suspect that the Tufte-style displays (besides being difficult to craft in the first place) are difficult to suit to _doing_ a lot, and the "material" style visuals are difficult to use for _conveying_ a lot.

This has inspired me to work on an "almost-almost-flat" design that is high on information _and_ affordances, while teaching itself.

</comment><comment><USER20> These new "Material" design guidelines are great and I hope that we see designers start adopting them. I also hope developers start adopting Googles great animation guidelines. The added depth combined with the animation provides a great UX. Start of the next trend in UI for sure. Albeit a combination of skeuomorphism and flat.

Reminds me of this post - [https://news.ycombinator.com/item?id=7555012](https://news.ycombinator.com/item?id=7555012)

</comment><comment><USER21> This really is print design tyranny. When one of the leading web companies distributes their design guide as pdf . . .

Google, historically, has benefited from immunity to design nazis, but it now looks like they've completely taken over.

<comment><USER22> wait, what? there's one downloadable pdf for offline viewing, the main version (bigger, literally the first thing listed)is not pdf: [http://www.google.com/design/spec/material- design/introducti...](http://www.google.com/design/spec/material- design/introduction.html)

</comment></comment><comment><USER23> Some day I'm hoping Google will deal with the 960px gap, but judging by YouTube and gmail not any time soon.

1920x1080 is a common form factor, yet for some reason they are allergic to the idea (as are a lot of other people) that their web-apps should not break when split to half the screen size.

</comment><comment><USER24> I like that they've released all resources. This means 3rd party apps could in turn apply these same layouts and principles, creating a consistent user interface where it won't matter as much how unintuitive it is.

</comment><comment><USER25> I worry that this color scheme is very hard to maintain. It's a very opinionated color and heavy color scheme rather than a more generic supporting color-scheme.

It feels like at design style rather than a design framework.

<comment><USER26> They aren't any color schemes that they show... They show some examples and give advice on how to make your apps and sites aesthetically pleasing. They give you a pallet of colors [[http://www.google.com/design/spec/style/color.html](http://www.google.com/design/spec/style/color.html)] that should be considered. This isn't a design framework....

<comment><USER25> Yes and it's that pallet I think is problematic.

<comment><USER26> How is it a problem when you have hundreds of colors to choose from? If you really wanted to you could choose your own...

<comment><USER25> You don't have hundreds of colors to choose from.

</comment></comment></comment></comment></comment><comment><USER5> The "Surface Reaction" responsive interaction pattern just seems superfluous and distracting. I care that the button I hit was hit, not where I hit it.

Very similar to how in Windows7 the task bar follows your cursor with a glowing highlight - which I found very distracting and useless (not unlike the OSX dock magnify-on-mouseover). At least in Windows and OSX I can turn that off - since these are guidelines for new apps, I don't think Android users are going to be given those options.

</comment><comment><USER26> Material Design Reel Video: [https://www.youtube.com/watch?v=Q8TXgCzxEnw](https://www.youtube.com/watch?v=Q8TXgCzxEnw) There are soft button differences when they display the nexus devices, could these possibly be part of Googles Re-Design for the next Android release?

</comment><comment><USER14> The Material Design PDF seems like it's nothing but pretty pictures with copy. I think Google could do a better job of explaining the concept by using examples from their redesigned UI.

</comment><comment><USER27> It looks nice. However, my biggest complain is that it's playing too safe. So that it feels more like a style guide than a vision.

E.g. When the style guide talks about mass and force in animation, I was expecting something much more than some recommendations on tweening. In many cases, it feels like a shallow reference to the physical / material, not quite the meaningful "metaphor" that it aspires to be.

Polymer, on the other hand, is pretty awesome.

</comment><comment><USER28> Does anyone remember the TAT Foldout UI demo from way back in 2009?

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

That was definitely way over the top, but there is a lot of potential in naturalism (depth, lighting, shadows, paper) as well as natural motion in a phone UI. I'm glad Google is going in this direction.

</comment><comment><USER29> So … are they really still fully embracing the hamburger menu? That seems like such a horrible design pattern to me.

</comment><comment><USER30> I like that UIs are being given depth, but they should respond as physically expected to, too. Why can't buttons move into the screen when pushed instead of changing color and rippling?

</comment><comment><USER31> Youtube is one of the worst designed, user-unfriendly websites ever. And it only got worse with each update.

</comment><comment><USER32> Are there any other company design guidelines like this one that someone can recommend?

</comment><comment><USER33> "At Google we say, focus on the user and all else will follow."

Presumably they are talking about cameras.

<comment><USER34> I just assumed this was a typo:

'At Google we say, "Focus on the user data and all else will follow"'

<comment><USER35> Here we go:

"At Google we say, 'Focus on the user data and all else will follow.'"

</comment></comment></comment><comment><USER36> Google "Design"

</comment><comment><USER37> From the website:

> Color is inspired by bold color statements juxtaposed with muted > environments, taking cues from contemporary architecture, road signs, > pavement marking tape, and sports courts. Emphasize bold shadows and > highlights. Introduce unexpected and vibrant colors.

Is that announcing they're launching a text generator for design guidelines?</comment>


Balsamiq integrates with UX.StackExchange.com - <AUTHOR> http://blogs.balsamiq.com/product/2012/02/27/uxstackexchange/ <comment><USER2> Whoops, here's an unfortunate UX hiccup in the implementation:

Here is how to edit someone else's mockup for your own post:

         1) edit the original question/answer containing the mockup you want to improve

         2) copy the part between
             <!-- Begin mockup
            and
            End mockup -->

         3) hit cancel

         4) .. more steps

This seems poorly planned to me. Instead, like the edit link, there should simply be an iterate link.

But otherwise, I think this is a very positive and helpful integration. Perhaps similar positive integration might be sites like JS fiddle that allow you to run code in the browser would be great integration for the programming stack overflows.

<comment><USER3> I agree, we'll make that better (already have plans for it). We punted on that for MVP, stay tuned!

</comment></comment><comment><USER4> I wonder how they can do this without compromising sales of their main product -- it seems like many people can now just use the free version linked from ux.se instead of getting a proper myBalsamiq account.

<comment><USER5> Just an FYI: This is not the mental model of people who actually pay money for software.

I've been at the table where Balsamiq has been purchased before. Here's a conversation I've had three times.

Me: So here's my concept for a redesign of the $FOO page. You'll notice that I moved the conversion buttons to ...

Engineer: Oh that's cool. What did you do that in?

Me: Balsamiq Mockups. It is a design tool written by a buddy of mine which...

Engineer: How much? (and/or Why not just use Photoshop? and/or You didn't pay for that, did you? You can do it in Excel.)

Decisionmaker: Doesn't matter. Get a copy for everyone, put it on the company card. You were saying, Patrick?

[Addendum regarding strategic use of freebies: Peldi emailed me a license key when asking for a review way back in like 2007. I don't think I ever actually blogged a formal review, but that email has been a big win for both of us over the years. He's got a Marketing For Startups blog post where he discusses that technique in detail. It's still one of the best actionable posts I've ever read.

[http://blogs.balsamiq.com/product/2008/08/05/startup- marketi...](http://blogs.balsamiq.com/product/2008/08/05/startup-marketing- advice-from-balsamiq-studios/) ]

<comment><USER6> Thank you for constantly bringing reason to this type of comment on HN.

I don't read names first for some reason, but reading this, I thought to myself, "heh, sounds like Patrick". You're consistently great.

<comment><USER7> I appreciate Patrick's intent and mission to get engineers to value their wares more but I don't think his anecdote makes the most compelling argument.

For a counter-anecdote, I will say that in +10 years of a software career I have never, not even once, seen a "decision maker" say anything near "Doesn't matter. Get a copy for everyone, put it on the company card." _¥_

 _¥ Most likely because that would be a stupid and reckless thing to say._

<comment><USER8> The presumption is that a piece of wireframe-sketching software that a consultant has brought on their laptop is not going to cost enough to be worth talking about.

</comment></comment></comment></comment></comment><comment><USER9> Always crazy ironic that Balsamiq requires Flash, possibly the most UX-hostile platform out there.

Strategically speaking it's awkward because Flash is literally dead†, and unavailable on the most popular couch computer ever, the iPad.

What's the UX look like for someone coming across one of these posts on their couch, now?

†Officially abandoned on mobile & Linux, as Adobe realigns Flash to niches like gaming

<comment><USER10> People are mainly using Balsamiq to create things. The iPad isn't typically used for content creation, but for content consumption. For a UI editor, drawing tool, etc. like Balsamiq you'd be more productive with a more precise pixel pusher like a mouse rather than a fat finger. Not to say that you can't do any prototype design, while laying around on your couch with an iPad -- just that beyond a few things when you get into the details it's not that great of a form factor.

<comment><USER9> Kind of a narrow view isn't it? People do use iPads for "content creation" (ask Harry McCracken) but even without disputing that, consider that Windows 8 Metro mode means no browser plug-ins. And that will definitely be used on devices with keyboards and pixel-precise input methods.

</comment></comment></comment><comment><USER11> My company uses JIRA (with Balsamiq integration) and it rocks! I am so glad to have this implemented on the UX.SE site. Thanks.

</comment><comment><USER12> This is one of those beautiful win-win-win situations - everyone in this situation is happy - StackExchange, Balsamiq, and the users. What a great idea, and props to all involved for making it happen.

</comment><comment><USER13> Nice!

My first words after reading, (and I'm alone in my office, so totally unsolicited) "Ohhh, how awesome is that!"

It's always nice when you can do something to make the world a better place at scale.

</comment><comment><USER14> Very cool indeed, but ironically, I don't think editing the wireframe is very "user friendly". Anything requiring me to click "edit" on someone's post, copying code, canceling, pasting, and THEN having the ability to edit the mockup isn't ideal.

<comment><USER3> Totally agree. We're working with the SE peeps to make this workflow smoother. We just punted about it for MVP. :)

</comment></comment><comment><USER15> Great idea. Having Balsamiq integrated into ux.stackexchange.com seems to be a win-win for both companies. Stackexchange get more tools for describing Q & A, and Balsamiq gets more people aware of and using their product.

</comment><comment><USER16> This is really awesome. I will use this a ton.</comment>


Ask HN: HTTP Path vs. Query Parameters - <AUTHOR> What sort of design considerations might sites like YouTube use when deciding between path or query parameters for identifying resources?
For example, YouTube uses a query param 'v' to specify a video id:

  youtube.com/watch?v=<video_id>
 Instead of sticking it in the path:

  youtube.com/watch/<video_id>
 <comment><USER2> I use the first if video_id can not fit in a hierarchical model

<comment><USER3> Can you elaborate, I am interested? What do you mean by "if video_id cannot fit in a hierarchical model"?

<comment><USER2> Like a matrix versus a tree</comment></comment></comment>


Ask HN: Why some stories rise while others go unnoticed? - <AUTHOR> I just saw this story "Google Spreadsheets and Python." in the #1 of HN. I made a library that does almost the same for Node.js ( https://github.com/franciscop/drive-db ) but it didn't get so much attention compared to it [1].
So my question is, what influences on the ranking/votes of the stories? I'm not complaining, just curious, this is my best guess:
- Tech: innovative, quality, etc
- Landing page/PR (or "hacker PR")
- Company name behind it
- People you know in the industry+silicon valley?
- What else?
I have some ideas as I've landed few projects on the front-page of HN, but somehow it seems quite random. I have observed a direct relationship with the mentioned points and appraisal/hate in the comments, but not with the vote count. So does anyone have anything to add?
[1] https://news.ycombinator.com/item?id=8914508 <comment><USER2> In this case my ordered guess is: (more important first)

* It's a nice blog post that is easier to understand than a github repository. The repository has a good readme, but the blog post has more details.

* Brand recognition: twilio is more famous than you. This gives a little more confidence in the project. (Don't get offended, twilio is more famous than me too.)

* Bonus point for a tweet/photo of patio11.

* Sometimes the fanboys of a language can help. But I'm not sure if phyton is more popular than node.js here

* Luck. Sometimes it's just luck. HN has a system where the mods select an autoresubmit a post to try to reduce the luck factor.

<comment><USER3> This article from 2009 by Matt Cutts (formerly the web spam guru of Google) was submitted twice: [https://www.mattcutts.com/blog/write-google-spreadsheet- from...](https://www.mattcutts.com/blog/write-google-spreadsheet-from-python/)

The high water mark was nine points a few years after it was written. The first submission was completely ignored.

</comment></comment><comment><USER4> Plenty of articles get submitted multiple times and get minimal activity on some and spikes on others, even when the link is the same.

The odd part about that Google Spreadsheets and Python post today from Twilio is that underlying library, gspread, is several years old. Twilio is also not the first one to write about the topic.

Randomness and timeliness to current events definitely play a factor. Maybe there's a trend right now of going "back to the basics" with things like microframeworks when it comes to building out MVP side projects.

<comment><AUTHOR> Trends are a really interesting topic that I didn't consider. Some of the libraries that got in the front page in HN for me where riding the you might not need jquery/bootstrap wave (+small libraries), so I totally see that happening and didn't really consider it. There was definitely a Node.js, machine learning and arguably now there is a love/hate React wave. I'll try to dig deeper but this (trends) is not something I consider myself good at.

</comment></comment><comment><USER5> There are a lot of factors. The time of day of the submission itself can make a difference.</comment>


Microsoft was violating the GPL after all [repost] - <AUTHOR> http://www.osnews.com/story/21882/Microsoft_s_Linux_Kernel_Code_Drop_Result_of_GPL_Violation/ <comment><USER2> Pretty ironic with preceeding commentary by Linus. As so often happens, he speaks on licensing, or on free vs. proprietary and it bites him in the ass.

<comment><USER3> Pretty much anything he talks about outside of his area of expertise makes him sound like an idiot. I especially enjoy his rants about how OOP is useless, Emacs sucks, and how databases are too slow for real work.

It is amusing because he uses OO techniques in Linux and Git, mg is a more complex and harder to customize than emacs (and has fewer features), and databases are not slow by design; svn and monotone just happened to misuse them.

I am not so hot on monolithic kernels or UNIX either, but those are issues for another day ;)

<comment><USER4> I really fail to see how any of this "bites" him or makes him look like an "idiot."

Specifically, I don't see how any of the broad sentiments he expressed (tech over politics etc) is at all impacted by the contention that MS's hand was forced by a GPL violation.

Yet more generally, it seems out of place to speak on his behalf as to what his area of expertise is. For example on OOP its been rather more about C++'s implementation vs the explicit expression of OOP in C.

Certainly he has the right to an opinion based on his own observations and experiences, and certainly those opinions are interesting because they come from a different perspective.

So when those opinions happen to differ from one's own, is it really fair to suggest he now looks like an idiot?

<comment><USER2> It bites, because he dismisses certain people as paranoid crackpots, expressing lack of respect to FS movement in whole, while, as found later, their paranoia was justified.

I wasn't ever calling him an idiot, because he isn't. He is however would be better advised to shut up and wait sometimes, before jumping the gun.

You'd think he knows better after that BitKeeper saga, but duh.

<comment><USER4> Whoa.

He merely said there are extremists in FS, that he does not want to be associated with people espousing exclusion or hatred, and that is a reason why he doesn't like referring to what he does as "Free Software" anymore.

I'm not aware he used the term "paranoid crackpots" at all, surely there are extremists in any movement, and certainly he did not suggest all or even the majority of the FS movement falls into that category.

I've had many occasions where people have thought I must be an MS-bashing zealot when I mention "free software", and I've had many other occasions where people have understood the broader idea of freedom. Clearly there are multiple interpretations of the term "free", and certainly I (or Linus) have a right to manage what connotation we want to be associated with or disassociated from.

So, for my connotation to the term "free software," I hardly consider this a lack of respect to the FS movement as a whole (especially taken in context with all his other actions).

Further I don't understand what paranoia this is that is so justified. So they contributed some code to the kernel so that it might run better on their virtualization. But this must be selfish because its to benefit them. So they scratched their own itch (though no-one seems to mention that it might be to the disadvantage of Windows as a client OS if linux as a client OS suddenly runs better). So? So it turns out really they had to because of the GPL. Again, selfish because it was not about contribution. So?

Facts are: 1\. they contributed code 2\. they complied with the GPL 3\. they did this without kicking, screaming & court cases (that I know of) 4\. this (supposedly) improves running linux on certain environments - technically its an improvement and not a step backward.

Lets say (hypothetically) things are wholly different and the intent here is really to usurp the kernel, pollute the GPL, inject patent violations into the kernel or whatever -- well if one day this turns out to be the case, then at that time the phrase "paranoia was justified" would itself be justified. But even then I would not say "wow that Linus fellow really sounds like an idiot now and should have kept his mouth shut because he never saw this coming" -- because hindsight is always 20/20 and it does not seem to me that any reasonable person looking at the facts now on the table, would surmise there to be that type of hidden agenda.

<comment><USER2> Look, he wrote his rant in response to voices suggesting that Microsoft would not contribute to Linux unless there was some compelling, unadvertised, hidden motive for that. Turned out they were right in the end (license violation), but already got under the swing of Linus. Declaring them fanatics, implying that he shy to associate with FS due to them (which means they're not a fringe in Free Software movement one can shrug off, but more like a norm, right?).

Just ask yourself, would've he likely put it as harsh now, with the hindsight? I still maintain that it's best if he takes effort to postpone insults a few days or so, just in case he is not right. This is not a technical debate, and as a geek celeb whose opinion has extra weight he should be careful before throwing accusations.

All of that has nothing to do with Linux (which I use daily since 1999 and wrote a few device drivers for), or Microsoft (which I'm mostly indifferent to). Just about some basic caution in making wide ranging statements on political subjects or personal traits.

</comment></comment></comment></comment></comment></comment><comment><USER5> Given that none of the articles referenced actually give any details about what GPL'd code was improperly used or linked, I'm still skeptical.

Call me a fanboy but I believe in innocent until proven guilty. Show me the offending code.

Don't say "it's open source, see for yourself," because I'm not the one making the claim.

<comment><USER4> I'm also skeptical. As I recall the GPL only requires source code to be made available to someone who has been provided the binary; ie in effect MS would only have to make source available to their customers if asked, there would be no requirement to make it available to the community at large.

Last time I checked, e.g., Windriver was only making available their linux patches to customers who had purchased their embedded linux flavor, citing precisely this interpretation.

</comment></comment><comment><AUTHOR> Earlier submission <http://news.ycombinator.com/item?id=720261> didn't get the attention it deserved ( _EDIT_ url edited)

<comment><USER6> There has been reams of discussion of this on the other threads about it :)

(my opinion: it doesnt matter - this happens _all_ the time, it's only news because of it being MS)

<comment><AUTHOR> Thanks, I hadn't noticed any comments about it actually being a GPL violation, just speculation. Probably added after I'd looked.</comment></comment></comment>


Let's Take Back Columbus Day  - <AUTHOR> http://www.foxnews.com/opinion/2010/10/08/thomas-bowden-columbus-day-holiday-western-civilization-pledge-allegiance/ <comment><USER2> I've always been confused by why Columbus Day wasn't seen as the "hispanic" equivalent of Martin Luther King day (and why they needed to invent Cesar Chavez Day as a substitute). While Columbus himself was Italian rather than Hispanic, his expedition was basically a Spanish one, undertaken by Spain for the benefit of Spain, and which led directly to the Spanish dominance of the southern half of the Americas. If there's a good day to celebrate Hispanic heritage it's Columbus Day.</comment>


Make Your Texts More Readable - <AUTHOR> http://www.merttol.com/articles/typography/make-your-texts-more-readable.html <comment><USER2> These tips are written with legal writing in mind (and desirably so; as a cohabitant of a recent legal graduate I can report that the legal world has some awfully retrograde typographical principles), but I would not hesitate to recommend all of them to anybody writing block text.

And I must say, an example like the paragraph from Oscar Wilde is as beautifully composed a work of human art as I am likely to see on a daily basis. Surely worth emulating in any field.

<comment><USER3> I thought that Oscar Wilde example was beautiful as well. Does anyone know what font it uses?

<comment><USER4> Yes, it is beautiful indeed.

Does anyone have a guide for laymen like me for selecting fonts for text. The Article mentions a huge list of fonts (New Baskerville, Book Antiqua, Calisto, Century, Century Schoolbook, Bookman Old Style, Baskerville, Bembo, Caslon, Deepdene, Galliard, Jenson, Minion, Palatino, Pontifex, Stone Serif, Trump Mediäval, and Utopia), but doesn't explain the difference in them, or when to use which.

</comment></comment></comment><comment><USER5> I would add these two tips:

Don't use gray text on a white background.

Don't be afraid of larger font sizes.

 _Cough_.

<comment><USER6> 1\. The contrast is a bit on the low side. But generally grey text on non- white background is the way to go. You have to reduce contrast a bit when writing for the web. Straight black on white text is just a bit too much on most modern LCDs. I would say they overshot a bit. Could also be the result of different hardware displaying stuff differently. Bright and dim monitors really make a difference.

2\. That's why the FSM gave you CMD+. The proportions are correct and that's all that counts on the web.

<comment><USER5> 1\. Agreed. They have #666 on #f5f5ed, which is too much. A slightly colored background allows you to use #000 without it looking harsh. I like combinations such as #000 on #fcfaf4.

2\. Larger font size makes up for lower contrast. The proportions can be correct, but if the text is low contrast the size should be upped to compensate. Ctrl++ is an extra gesture that annoys users (especially when they have to Ctrl+- when they return hit back). Why not make things easier for users?

<comment><USER6> See, if I were to watch this website on my crummy 1024x768 LCD the font would be positively huge :)

</comment></comment></comment></comment><comment><USER7> I especially like the last thing I read on that page: "Maybe you may want to share this."

</comment><comment><USER8> Comic Sans ftw!

</comment><comment><USER9> "Cut down on long footnotes and long block quotes. Because block quotes and footnotes count toward the type volume limit, these devices do not affect the length of the allowable presentation. Note: Does not apply to House of Leaves."</comment>


Ethical fields that use AI for other reasons than mining personal data? - <AUTHOR> As a field that I want go into, AI and data science seems like it is being use for some pretty shallow, unethical reasons (mass manipulation, advertising, disinformation etc). Does anyone on HN do cool work with AI that makes the world a better place? Like this one story that was posted a while ago:<p>https://www.blog.google/topics/machine-learning/fight-against-illegal-deforestation-tensorflow/ <comment><USER2> I am going to be working on a ML + expert system + genetic algo hybrid for the UK's Network Rail, specifically its research organization. Managing delayed trains is a big issue - the trains impacted by the delayed train can be dealt with more or less, but trying to figure out the best course of action to deal with the trains delayed by that set (and so on) is essentially a NP hard problem. Competing cost functions to optimize etc and the traditional methods are not as effective anymore due to infrastructure changes, more trains, more passengers, etc.

There has been a lot of academic research, but only in the past few years have transport companies been investigating and implementing more sophisticated solutions (Japan is of course a decade ahead of the West).

So what you are looking for is out there, but you have to get away from the IT industry. Look for jobs involving IT that involve supporting businesses / business sectors that are not primarily IT or consumer focused. I feel your pain - I got tired of only seeing companies focused on marketing and all that sort of thing. This is more a research contract to investigate the feasibility, so perhaps you should find a university and do some networking.

Finance is another sector to look at, but I don't know about the better world aspect of that...</comment>


Why So Many Londoners Live in 'Two-Up, Two-Down' Housing - <AUTHOR> https://www.citylab.com/design/2020/01/london-architecture-history-home-design-building-floor-plan/603184/ <comment><USER2> Only mentions one very practical aspect of the layout in passing: The original heating system is three coal fires, plus a coal-fired stove in the kitchen/dining room at the back. In a two-up two-down arrangement these can be fed into a single chimney stack (also shared with the neighbouring house which has the mirror floor plan). If there was another set of rooms on the other side then those rooms would be permanently cold, or else you'd need a second chimney.

Each pair of houses is really built around the massive chimney. You can see it as shaded boxes on the left in the diagram in the center of the page, although these boxes underestimate the real size of the chimney-breasts:

[https://cdn.theatlantic.com/assets/media/img/posts/2019/12/B...](https://cdn.theatlantic.com/assets/media/img/posts/2019/12/British-1/76fb9bacf.jpg)

Our house has this arrangement except a former owner removed the chimney stack at the back to get more space in the back rooms. When we moved in the chimney stack, weighing perhaps 10 tons, was resting on a piece of wood on the wooden ceiling joists - it's one of the things we have since fixed at great expense.

When you're in London and you see a building with chimneys you can tell two things: (1) It was built before 1960. (2) Count the chimney pots and it will tell you how many internal rooms there are, since each room will have its own fireplace, flue and chimney pot. eg: [https://stockarch.com/images/buildings/urban/rooftops- chimne...](https://stockarch.com/images/buildings/urban/rooftops-chimney- pots-6792)

<comment><USER3> Why built before 1960? Were there regulations restricting the build of new coal heated houses in London after this?

<comment><USER4> Smog pollution was a big issue back then. You'll have seen the old movies where London is "foggy".

<comment><USER5> Hah, those quotation marks definitely changed the way I see the brand identity of an American raincoat manufacturer.

The manufacturer is London Fog, and their brand is supposed to conjure an image of sophistication by association with a romantic ideal of London. But the reference they are making is actually, at least somewhat, a reference to a euphemism for pollution.

</comment></comment></comment></comment><comment><USER6> The truth is in the article, but surprisingly well hidden. Most of it is misunderstanding mid Victorian housing, or at the very least the term, and talks about derivatives not 2+2s. The key point of a 2+2 is the rooms are the full width of the house.

The floorplan shown is _not_ a typical UK Victorian two up, two down. It's a three up, three down, sometimes called by estate agents an _extended_ two up, two down. Count the rooms, it's not difficult. It's clearly heavily influenced by the 2+2. :)

The only point he gets it right is in the caption under the photo further on down the article:

 _Note that the houses in the foreground are built along more generous lines than those at the back, with bow windows on both floors and an extra room built above the projecting ground-floor kitchen_

Yes, three up, three down, or as the the aerial photo two up, two down, with attached kitchen/bathroom. More like the shown floorplan to allow an extra _third_ room on each floor, one of which being the then new innovation of indoor bathroom/toilet.

A two up, two down has a feature that the rooms are the _full width of the house:_ reception, with kitchen in back -- one of those two has the stairs within it, the second floor has two bedrooms and a "landing" that's often just the width of the stair treads and two doors at the top. The toilet is outside by the coal house, and the bath was tin, hung up in the kitchen when not used, often under the stairs. They have often gained a 20th century replan or rear extension to permit the indoor bathroom/toilet, and frequently larger or separate kitchen underneath -- though many have kitchen and bathroom in a single ground floor extension.

Nowt else is a two up, two down, they're relatives, derivatives. Many mid Victorian 2+2 terraces came with colossal garden plots - 150-300 foot long, giving loads of scope for later indoor bathrooms, kitchens, and garages -- sometimes double length at the far end.

<comment><USER7> Well, that depends on whether you consider the kitchen (which in that floor plan is an annex of the dining room) and bathroom (which, as the article mentions, was added later in older houses) as "rooms". In Germany, these are usually not counted as rooms, hence acronyms such as "2ZKB" (2 Zimmer, Küche, Bad -> 2 rooms, kitchen, bathroom) for apartments.

<comment><USER6> Well when the term was coined, the key was two full width rooms each floor. Get out into the industrial and poorer areas especially in the North, Scotland and Wales and there were some one up, one down back to back terraces. Most of those went in slum clearances, but some survive...

Sure, the indoor bathroom/toilet was added later as it was a Victorian era innovation, but the second room on the ground floor was generally a back kitchen/diner. So you'll find a great many with a later kitchen extension (frequently flat roofed, and incredibly poorly, or not insulated) that permit separating kitchen and dining room, often adding an upstairs indoor bathroom/toilet for the first time. When those extra rooms were there from new build they weren't called 2+2s -- though they were clearly two bed houses derived from them.

UK estate agent standard for describing housing is number of bedrooms. Apparently we're meant to figure everything else from "two bed", "five bed". What else is in there is often quite varied and ludicrously (fraudulently) creative in estate agent blurb. Thank heavens for the relatively recent expectation of a floorplan and regulation limiting estate agent creativity. Until the 1980s or 1990s you almost never got a floorplan unless buying new, or exceptionally upmarket. :)

</comment></comment></comment><comment><USER8> I would personally like to see higher buildings with parks around them rather than having houses packed.

More space, higher density. Win, win.

<comment><USER2> This was tried in the 1960s and turned out to be a disaster. People didn't want to live in those houses.

<comment><USER9> The New (quite old) Town of Edinburgh is mostly 4 or 5 story buildings of flats (a lot originally very grand town houses) with shared private gardens for each small area. It's a great place to live (we lived there for ~25 years, with kids growing up there) and is pretty desirable.

NB I don't know it would be economically feasible to replicate the New Town - but it does demonstrate to me that if you get the layout and quality right then people will happily live in an environment like that.

<comment><USER2> 4 or 5 stories is very different from 20+ story tower blocks. Also those flats have private gardens at the back.

<comment><USER9> The private gardens at the back are, in every case I knew of in the New Town (although not elsewhere in Edinburgh), owned by the lowest flat in the building. The trade off being that get a garden but the flats themselves tend to be darker and dingier than higher flats.

</comment></comment></comment></comment></comment><comment><USER10> Also a common feature is the galley kitchen, an unpleasantly small working space that often doesn't accommodate more than one person at a time.

It's quite different to what I'm used to from Ireland, where the kitchen is the second social space of the home after the sitting room, and often contains the dining table.

<comment><USER11> You say that, we stayed in a farmhouse in Ireland. Two rooms - one bedroom and the kitchen/sitting room, around a huge hearth. With the cowshed directly attached. Ours was vaguely modernised, hearth ripped out, small bathroom add- on. Without the warm hearth, the building started to suffer. If only these old stone cottages were insulated beneath and outside.

Small windows were a result of the window tax.

<comment><USER10> Well, peasant cottages from the 19th century, for sure; I lived in one at one point too, and there the cooking would have been done on the hearth, the focus of the living space.

That cottage was cool in summer and cold in winter and damp all year around, walls made from stone and mortar over 1 metre thick, originally with a thatch roof but since replaced with tile after a fire. The economy that built those cottages was basically subsistence living, hardly a structure built with surplus to make different choices.

</comment></comment></comment><comment><USER12> An under-appreciated aspect is how land law interacts with building preferences. In the UK if you own a house, broadly speaking you have complete control over its configuration and its costs.

Leasehold, which is the dominant model for apartments, gives that control to the owner of the whole building. This is basically a recipe for nasty surprises.

The average English person isn't a law expert. But they know someone with a flat, and that they're constantly complaining about their landlord.

<comment><USER13> Leasehold has been creeping in to regular terraced housing, too, along with its associated ground rent scandal.

</comment></comment><comment><USER14> Next in the series: [https://www.citylab.com/design/2020/01/berlin- architecture-h...](https://www.citylab.com/design/2020/01/berlin-architecture- history-home-design-rental-mietskasernen/604795/)

</comment><comment><USER15> Mandating a large proportion of units constructed to be high density 3 bedroom would change the London housing market. Currently young couples get a 2 bed (with one bed being a box room) and have to move out once the second baby comes (the pressure when a first baby gets to three is high as well). Three beds would make for long term family viability and would knock the pressure out of the housing market.

<comment><USER16> A big issue in London and the UK is that everyone wants a house and garden, and flats are usually poorly designed and poor quality.

One reason many couples move out of London when they have children is that it is impossible for most to afford such a house in London.

This also makes housing quite low density, which leads to longer commute and more expensive public transport.

<comment><USER17> Housing is low density because you can't build higher by law, in most cases. It's one of the socialist aspects of the UK.

<comment><USER18> > socialist aspects of the UK

I think you're thinking of the other UK, the imaginary one that right-wing commentators make out to be a hellish nightmare of bad teeth inflicted upon the populace by fiendishly free health care. Instead of the real UK, with it's right-wing, capitalist, free-market friendly, populist government.

Building regulations aren't in any way socialist, they are pretty much global and many countries, including the "freedom" loving USA, have extensive government-mandated building codes which include height restrictions or mechanisms to limit height.

<comment><USER19> You are right that building codes aren't a sign of socialism at all.

The UK however has a pretty interventionist state. (But yes, they are less interventionist than eg the French. Low bar, though.) And eg re-nationalising the railways is perennial popular with the population. Luckily, no government has been crazy enough to do it, nor has it even featured much in election campaigns.

<comment><USER20> Not sure that's right re railways. Railtrack was de facto renationalised by the Blair government (becoming Network Rail) in the early 2000s, and we had an election one month ago where the main opposition party campaigned on a promise to not relet the private sector passenger franchises, ie de facto take them back into public ownership at the end of their terms. That isn't quite all of the railways (you've still got a few privately owned pieces of infrastructure, freight operators and rolling stock leasing) but it's pretty close.

<comment><USER19> Interesting, thanks! Please imagine I added the appropriate hedge words in my comment above.

With your corrections, it does move Britain a bit more into the interventionist state direction.

</comment></comment></comment></comment></comment></comment></comment><comment><USER21> I lived in a two-up, two-down in Windsor, and my wife (when I met her) had one in Bexley.

They're nice houses. The main issue is that most now have to have an extension on the back to house an indoor bathroom. In my house, it was ground floor after the kitchen. In my wife's it was upstairs above a kitchen extension, but you could only get to it after going through the main bedroom. Handy as an en- suite, awkward if you had friends to stay.

</comment><comment><USER11> There's plenty of space in the UK for housing. Just go up in a plane to look. The greenbelt curtails sprawl, and inflates housing value.

I don't think low-density has to even be that bad. Dumping the inner/town city road network would be a huge boon, freeing that space for green leafy walk/cycle/scooter/ways and parks.

<comment><USER22> Combined with the enormous levels of NIMBYism in the UK, it's amazing anything gets built at all.

</comment></comment><comment><USER11> The floor plan shows a knock through, that's quite non-typical, non-original.</comment>


Flowcharts of programming language constructs - <AUTHOR> https://www.progsbase.com/blog/flow-charts-of-programming-language-constructs/ <comment><USER2> Pretty neat. Three things that occurred to me while reading it.

(1) Makes it pretty clear why exceptions are even more of a control-flow nightmare than goto. What a messy graph.

(2) The 'defer' diagram is a big WTF. Couldn't even figure out which box is supposed to represent which statement in the example.

(3) I'd love to see a graph of the control flow when you throw in a few spurious lambdas like "advanced" C++ programmers tend to do (and similar in a few other languages). Might even make exceptions look good.

<comment><USER3> My takeaway was the exact opposite of yours. For example the goto graph seems very intuitive and simple. But it is much more complex to reason about compared to exceptions. My takeaway was that simple graphs like these can't really explain the pros and cons of high level programming constructs.

<comment><USER4> The tradeoff in goto-vs-exception is that a goto needs an explicit label, while an exception allows the destination to be unnamed, constrained only by the callstack at the site where it's raised.

That makes exceptions fall more towards the "easy-to-write, hard-to-read" side of things; implied side-effects make your code slim in the present, treacherous as combinatorial elements increase. With error codes you pay a linear cost for every error, which implicitly discourages letting things get out of hand, but adds a hard restriction on flow. With goto, because so little is assumed, there are costs both ways: boilerplate to specify the destination, and unconstrained possibilities for flow.

Jumping backwards is the primary sin associated with goto, since it immediately makes the code's past and future behaviors interdependent. There are definitely cases where exceptions feel necessary, but I believe most uses could be replaced with a "only jump forward" restricted goto.

</comment></comment></comment><comment><USER5> A brilliant explanation of why no-one uses flowcharts.

<comment><USER2> ...because if they did, they might realize that some of their favorite structures are a hot mess. Seeing things in a new way often leads to learning, which a good developer would welcome. Personally I can't remember the last time I used an actual flowchart, but I do use state machines. Sometimes I'll go through an exercise of re-casting complex logic as a state machine. Often, that leads to a realization that making the state machine explicit would yield far more testable and maintainable code than leaving it in its more common if/loop/nested-function form.

<comment><USER6> > ...because if they did, they might realize that some of their favorite > structures are a hot mess.

They may only be a hot mess _when expressed as a flowchart_. But so what? I'm not programming in flowcharts. If exceptions can do what I want cleanly, why do I care if it's a mess considered as a flowchart? That's not my problem.

This argument is like saying that the library function I call is a mess of a flowchart. Why should I care? Can I express what I need to express cleanly by calling that function, or not?

Of all the arguments against exceptions, "it's got a mess of a flowchart" is the absolutely least relevant one.

<comment><USER7> The flow charts in the link represent control flow. Compiler optimizations are, in part, constrained by their ability to map and statically determine control flow. So I think it is a grave mistake to say that something having a 'mess of a flowchart' is the least relevant concern about some PL construct. The implication that a flowchart representation offers nothing to a programmer, implies that the performance characteristics of your code does matter to the programmer. So sure, in some application domains (although I don't think there are any) performance may take a backseat to performance and efficiency, this information is useful and can very well illustrate the pitfalls and trade offs of using certain constructs in code.

<comment><USER6> I'm pretty much never worried about the performance of the "exception taken" case. The compiler can be really quite inefficient there before I have any reason to care.

There are places to worry about compiler efficiency. I don't think that this is one of them.

</comment></comment></comment></comment></comment><comment><USER8> Have a look at these diagrams for PL concepts, but done formally and with execution rules:

[https://tnttodda.github.io/Spartan- Visualiser/](https://tnttodda.github.io/Spartan-Visualiser/)

</comment><comment><USER9> I don't know about everyone else, but to me these are confusing as fuck. In continue/break/early return diagrams, there is no second condition, so it is not clear when/why the dotted line logic path happens. The "no fall-through" has so many arrows it takes some zen meditation to figure out what it means. And the exception diagram is just amazing, does the catch block get executed no matter whether there was an exception or not? Because there is an arrow leading to it from the regular, no exception, path. I could go on, but it becomes progressively more and more bizarre.

<comment> keithb- I agree. The semantics even within this set of flowcharts is confusing: blocks start out representing statements but by the time you get to Dependency Injection, they represent anything (library, service, etc.). Also the dotted- line vs solid line doesn't help. With Goto or Exception, the dotted line _is_ the process, not the alternative which is solid. Those need to be inverted because "normal" flow of control from statement to statement is altered and the "exceptional" flow is now active and other statements are ignored. Just waiting for someone to say "we tried this with UML already. please just stop."

</comment></comment><comment><USER10> The point this article makes most clear is exactly to what extent C++ has the attitude of "screw it, let's put it in". There are only a handful of constructs listed that C++ doesn't implement.

Also, TIL about "long jump". Seems like a feature I'd never use in a million years, but maybe it has its applications.

<comment><USER11> LongJmp can be used as a way to implement exceptions at a low level, especially in languages like C, where you dont have them as a language construct.

You call SetJmp, where you would want to put your try/catch blocks, then no matter how deep down some call stack you go, if an errir occurs, you can immediately jump back to where you called setjmp and handle it / report the error or whatever, rather than having to handle and bubble up the error by at every intermediate level, "returning" your way up the call stack.

</comment></comment><comment><USER12> Raise your hand if you at first thoroughly expected to mock this, and then giggled at "function" (vs. subroutine), patted yourself on the back for knowing everything up until ... ASPECT? DAFUQ IS ASPECT?

Just me? Ok, I'll show myself out.

Great way to visualize. I think Exceptions, Finally (and Promises) got a little messy, but would make a good poster.

<comment><USER13> The actual question is : did it allow you to quickly understand the "aspect" concept by using a common graphical representation? If yes, that's a win

<comment><USER12> No. The explanation isn't clear: why is g() inserted at one point and h() inserted at another. This needs to be explained.

However, from what I observe, "aspects" look a lot like Common LISP Object System (CLOS) before/after/around methods.

</comment></comment></comment><comment><USER14> The C-style switch/case construct is obsolete and awkward, and cleaner alternatives exist, such as VB.net's technique. There is no need for "Break".

The following could be added to C-style languages without overlapping with the existing syntax:

         select(a) {
            when 1,2,3 {...}
            when 4 {...}
            when 5,6 {...}
            ...
            otherwise {...}
         }

C# recently added a pattern-matching alternative, but it's still a bit verbose for most needs.

<comment><USER15> GCC has had case ranges as an extension for a long time now: [https://gcc.gnu.org/onlinedocs/gcc/Case- Ranges.html](https://gcc.gnu.org/onlinedocs/gcc/Case-Ranges.html)

It's a far cry from general pattern matching (a la Rust, Scheme) but it's helpful in some circumstances. Otherwise, you can also stick multiple case labels together, i.e.

        switch(x) {
            case 1 ... 4:
            case 7:
            case 9 ... 16:
                ...
            default:
                ...
        }

I don't see why you need to call the C-style construct obsolete and awkward, though. It works plenty well for enumerations, which is basically what it was designed for. If you need to do something more fancy, if/else if chains always work.

<comment><USER14> Ranges are nice, but not a replacement for sets. (Allow both!) The main "fix" I propose is to get rid of the Break statement and the very need for it. If you have set-based lists, you don't need "fall through" behavior because you can have more than one item per matching expression.

The Break statement is _error prone_ because it's easy to forgot. Some languages "solved" that by making Break required; but if it's required, then it's superfluous: code-bloating eye clutter. If you never used a language that didn't need "Break" you may not understand how annoying it is to go back.

My suggestion above allows C-ish languages to add a modernized version and yet keep the existing construct for backward compatibility. In other words, the old one would be "deprecated".

<comment><USER16> > If you have set-based lists, you don't need "fall through" behavior because > you can have more than one item per matching expression.

This is not entirely true. Ranges and sets allow you to run the same code for different inputs. Fallthrough allows you to run _partially_ the same code for different inputs.

It's a rare case, so I don't think its utility warrants making fallthrough behavior the default. But it's nice to have it explicitly, like "goto case" in C#.

Anyway, the reason why it is the way it is in C, is because case labels are literally _labels_ , and the switch statement itself is just a branched goto - which is why e.g. Duff's Device is a thing. And that, in turn, is probably because it's a descendant of "switch" in Algol-60, which was basically an array of labels.

<comment><USER14> > Fallthrough allows you to run partially the same code for different inputs.

True, but it's a screwy way to manage such overlaps. The volume of errors and confusion exceeds the benefits in my opinion. There are other ways to do such. For non-trivial conditionals (such as overlaps), if-else is often the better tool anyhow. Case/Switch should only be used for simple mutually-exclusive value look-ups.

</comment></comment></comment></comment></comment><comment><USER17> I actually really like flowcharts, though they are somewhat inefficient to draw out more complex structures, they are great for working out small sections of thorny logic. The only issue I sort of take those in the article is the physical flow is a little distracting when decisions don't branch laterally. having them continue top to bottom sort of throws me off. perhaps its just because i draw them with branches to the side.

</comment><comment><USER18> As someone who's self-taught everything, this is... awesome. It's exactly what I needed to be able to up my game in describing code to management using the flowcharts they've asked for.

<comment><USER5> In case you haven't gleaned it from the majority of comments here, flowcharts are a terrible way to describe code, particularly modern, multi-threaded code that uses exceptions. Don't go there.

<comment><USER18> I quite agree. Unfortunately management wants single-threaded code and wants it documented with flowcharts. So right now there's lots (!) of clouds detailing "this calls into another API documented in another flowchart..."

<comment><USER6> To me, that screams "put your resume out on the street".

I mean, I'm not opposed to documentation. It's important. But if your management thinks that flowcharts are the way to do it, I wonder what millennium they think it is.

<comment><USER18> Indeed? Flowcharts aren't the only documentation. Swagger describes the API parameters, flowcharts describe the API code flow, and text provides a story, and comments in the code describe particulars.

Flowcharts are just where I've felt that I've significantly underperformed; where management has asked for more of them.

Putting my resume on the street is something I do often. Want to look at it?

If you think flowcharts aren't the way to describe code flow, then I'm curious what method you think is better.

<comment><USER6> Ah. Flowcharts were all you mentioned, so I assumed (bad move) that they were all you did.

Depending on what exactly you are doing, parts of UML _might_ be better. It lets you describe different aspects with different diagrams, so that, if one kind of diagram is sub-optimal for showing some aspect of what's going on, another kind might be better.

</comment></comment></comment></comment></comment></comment><comment><USER19> The break one does not make a lot of sense to me. Shouldn't they use another rhombus and a solid line instead? Same for continue and early return. Similar thing holds for goto.

</comment><comment><USER20> Speaking of reasoning, I believe a Hoare proof of correctness for a flowchart is

* a choice of a precondition and postcondition, Pre(B) and Post(B), for every basic block B

* for every basic block B, a proof that {Pre(B)} B {Post(B)}

* for every arrow a : B1 -> B2, a proof that Post(B1) /\ Cond => Pre(B2) where Cond is the condition for the arrow to be taken

</comment><comment><USER21> Best article I have read in a while. I'm going to try to incorporate this into my PL course.

</comment><comment><USER22> I love this! Visually seeing computation flow is great for understanding what the code is doing.

</comment><comment><USER20> The goto diagram contains an erroneous arrow and an extra block. It should look like

           o
           |
           v
        +--□
        |
        |  □<-+
        |  |  |
        |  v  |
        +->□--+

</comment><comment><USER23> Pretty decent, but covers the pre-test loop as "loop" (unqualified), omitting the post-test loop.

</comment><comment><USER24> I think flow charts are a lot more useful when the granularity is more coarse: the boxes should represent functions, not the logic inside.

        compute thing -> predicate true </comment><comment>> compute some other thing
            |         -> predicate false ->|
            \</comment><comment></comment><comment>---loop</comment><comment>-----/

... etc ...

</comment><comment><USER25> Pretty neat, but notably missing some of the more functional control flow concepts: tail calls, call with current continuation, delimited continuation, etc.

</comment><comment><USER26> What did the author use to make the charts?

<comment><AUTHOR> I used "yEd live".

</comment></comment><comment><USER27> The Nassi-Shneiderman diagram is one way of representing structured program flow by dividing up a two-dimensional area. It can't represent unstructured gotos and exceptions, though.

[https://en.wikipedia.org/wiki/Nassi%E2%80%93Shneiderman_diag...](https://en.wikipedia.org/wiki/Nassi%E2%80%93Shneiderman_diagram)

>A Nassi–Shneiderman diagram (NSD) in computer programming is a graphical design representation for structured programming. This type of diagram was developed in 1972 by Isaac Nassi and Ben Shneiderman who were both graduate students at Stony Brook University. These diagrams are also called structograms, as they show a program's structures.

>Overview: Following a top-down design, the problem at hand is reduced into smaller and smaller subproblems, until only simple statements and control flow constructs remain. Nassi–Shneiderman diagrams reflect this top-down decomposition in a straightforward way, using nested boxes to represent subproblems. Consistent with the philosophy of structured programming, Nassi–Shneiderman diagrams have no representation for a GOTO statement.

>Nassi–Shneiderman diagrams are only rarely used for formal programming. Their abstraction level is close to structured program code and modifications require the whole diagram to be redrawn, but graphic editors removed that limitation. They clarify algorithms and high-level designs, which make them useful in teaching. They were included in Microsoft Visio and dozens of other software tools, such as the German EasyCode.

>In Germany, Nassi–Shneiderman diagrams were standardised in 1985 as DIN 66261. They are still used in German introductions to programming, for example Böttcher and Kneißl's introduction to C, Baeumle-Courth and Schmidt's introduction to C and Kirch's introduction to C#.

>Nassi–Shneiderman diagrams can also be used in technical writing.

When Ben Shneiderman and Ike Nassi (who were grad students at the time) submitted their paper about them to Communications of the ACM, it was quickly rejected on October 4, 1972, with the most brutal rejection letter Ben Shneiderman has ever received.

But then they submitted it to the unrefereed ACM SIGPLAN, where it was published in August 1973, and since then it has been cited many times, widely implemented by many tools, and used for educational and documentation purposes. It's a great example of the importance of persistence for people whose new ideas are brutally rejected by respected authorities:

Flowchart techniques for structured programming:

[https://dl.acm.org/doi/10.1145/953349.953350](https://dl.acm.org/doi/10.1145/953349.953350)

Scan of the brutal referee's report:

[https://www.cs.umd.edu/hcil/members/bshneiderman/nsd/rejecti...](https://www.cs.umd.edu/hcil/members/bshneiderman/nsd/rejection_letter.pdf)

>My first thought was to write a referees report which would by its sarcastic nature be funny. For example, I thought of writing that it was a sound, useful theory, but it wasn't practical because it would be difficult to design flowcharting templates to be manufactured and sold.

>I guess, however, that it is best to come right out and say that I feel the best thing the authors could do is collect all copies of this technical report and burn them, before anybody reads them. My opinion is that it shows the inexperience and ignorance of the authors with respect to programming in general, and their misunderstanding of so-called structured programming.

>To say that [BEGIN body END] should be written as [NS diagram] is ridiculous. Even more ridiculous is having to write [DO i=1 TO N; DO J=1 TO N; S = 0; DO K=1 TO N; S=S+A(I,K)*B(K,J) END C(I,J)=S END END] as [NS diagram].

>The authors mention that "the ease with which a structured flow-chart can be translated into a structured program is pleasantly surprising". My retort is "yes, just erase those silly boxes!"

>Flowcharts are a crutch we have invented to try to understand programs written in a confusing style. This was due to our ignorance of the programming process and what was needed -- after all, programming is only 20-30 years old. So-called "structured programming" helps to limit us to, as Dijkstra calls them, "intellectually manageable" programs, in which case flowcharts are completely useless and in fact a hindrance to programming. They shouldn't be used.

>I shudder at the thought of further explorations revolving around the context-free nature of this [flowchart] language.

Ben's rejection letter story:

[https://www.cs.umd.edu/hcil/members/bshneiderman/nsd/rejecti...](https://www.cs.umd.edu/hcil/members/bshneiderman/nsd/rejection_letter.html)

>Rejection letter from the Communications of the ACM

>Ben Shneiderman, June 12, 2003

>Our submission of the structured flowcharts to the Communications of the ACM was quickly rejected, on October 4, 1972, by the Programming Languages Editor David Gries of Cornell University. He included a single anonymous reference letter which is on paper that has a Cornell University watermark. I assume Gries gave our paper to one of his colleagues (you can play the guessing game too), who wrote the most brutal rejection letter I have ever gotten.

>The reviewer wrote: "I feel that the best thing the authors could do is collect all copies of this technical report and burn them, before anybody reads them." As graduate students, this stinging rejection shocked us, but we kept getting enthusiastic responses from people around us. We sent the paper to the unrefereed ACM SIGPLAN Notices, where it was published in August 1973. It didn't take long for others to produce extensions, software tools, and applications of structured flowcharts.

>The next problem was theft of the idea. I had sent a draft to respected colleagues, and soon others published slight variations. One of these respected colleagues was Ned Chapin, who greatly troubled us by publishing what he called 'Chapin Charts.' A friend of mine sent me his published paper with a note encouraging me to sue. For several years I feared that Chapin's reputation and his frequent professional seminars would wind up leaving the idea tied to his name, but as the decades passed, the ending has proved to be a happy one. We called the idea 'structured flowcharts, but they are widely known as Nassi-Shneiderman Diagrams.

>Another problem was the appearances of patents for variations on our idea, but these have not limited the widespread recognition we have gotten over the years.

>I wish every graduate student or young inventor would have the pleasure of seeing his/her ideas spread so far and influence the work of so many people. I also hope that the story of the bold rejection of our novel idea and its eventual international success, is an inspiration for anyone whose new ideas are rejected by some respected authorities.

More on Ben Shneiderman and NS diagrams:

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

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

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

</comment><comment><USER28> This is a wonderful idea, but by the given numbering scheme, I can identify a slew of problems.

[1a. If] _Note This is the first time we see synchronous calls, decisioning, and the representation makes no specific callout to the structure. The structure IS the case.

[4. Break] _Inconsistency _Confusion This is the first time we see a specific part of the flow called out as the structure (it isn 't a structure). This is flow control, not a construct. This confusion plagues the rest of the document.

[7. Switch (No Fall-Through)] _Inconsistency _Confusion This is the same as If /elseif.../else/, but the post goes with the oddly specific "switch". Would be more appropriate as [1c. if/elseif.../else] and a [1d. Switch] - The different terminology if/switch does not change the fact they are the same structure. Grouping Switch-type by name is a bad choice.

[9. Local Goto] _Omission The Goto example has no exit node.

[11. Exceptions] _Mistake The exception travels the stack, meaning (from the perspective of the original parent function), from grandchild to the child, to the parent catch.

[12. Finally] _Omission _Confusion Finally should be it 's own block, since it is treated as such and has an implicit catch mechanism, even if it's not always required in the syntax.

[13. Blocking, Synchronous Calls] _Confusion This is rather pointless. All the flows, prior, were blocking. Now introducing another metaphor that changes past examples is inconsistent. Blocks which are synchronous (blocking) are represented by 2 different forms. It's unnecessary.

[14a. Non-Blocking, Asynchronous Call, Callback] _Inconsistency_ Confusion There is a whole function called, which should be represented by a starting and ending node.

[14b. Device Input] _Inconsistency_ Confusion This isn't even a different construct. Event handling is what this is and is poorly represented, in the same way as 14a.

[15. Framework] _Mistake_ Confusion This isn't a construct, nor is it an accurate representation. Frameworks are a collection of idioms, which usually has little to do with constructs (as defined in the beginning). It feels like the author has gone off the rails here.

[18 Come-from & 19 Aspects & 21 Destructor] _Confusion? The size of the block is supposed to indicate a specific syntax, which is inappropriate for describing logical constructs. They should be full sized and optionally labeled blocks, as they are evaluated.

[20 Dependency Injection] _Confusion This is another "timing adds a new way to represent things" issue. There's no difference between an Aspect and DI, logically.

[22. Defer] *Confusion Adding data (even a function) to a separate stack, which is called later, does not make the diagram presented.

All in all, this needs work. Even the grouping description at the bottom does nothing to help make this more useful.</comment>


Is Apple Looking For A Replacement For CEO Cook? - <AUTHOR> http://www.forbes.com/sites/genemarcial/2013/04/21/is-apple-looking-for-a-replacement-for-ceo-cook/

<comment><USER2> "But if it isn't yet pursuing such a goal, it should"

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

"This story is a great demonstration of my maxim that any headline which ends in a question mark can be answered by the word "no." The reason why journalists use that style of headline is that they know the story is probably bollocks, and don't actually have the sources and facts to back it up, but still want to run it."

</comment><comment><USER3> The only tenable premise here is that the market had priced ridiculous future growth into Apple, which is now leaking out due to reduced confidence in same.

The problems are: Apple's valuation was never optimistic (rather pessimistic compared to peers).. Apple's growth has barely slowed since Cook took over (we'll know more on Tuesday), but regardless Apple is still well ahead of the rest of the industry.. And the "fix" would be to bring in someone else who would restore the market's faith in Apple's return to ridiculous future growth...because there's _a single CEO anywhere_ who could do that.

Apple's board is too smart to whipsaw around due to quarterly market drama. Cook is the right choice, though not alone. The mgt team at Apple is solid.

Sentiment is fickle and temporary. Numbers will eventually rationalize. Apple can afford to wait.

</comment><comment><USER4> When will people stop paying attention to Forbes and their badly vetted contributors? I'm as foolish as anyone, every time I get linked to a Forbes piece and only while reading it do I remember how bad most of their content is.

As pointed out by one comment on that piece, the biggest error the contributor includes is "Apple's stock has lost about half of its market value since October 2011, when he took over as CEO". In actual fact, Cook took over as CEO in August when the the price was $376.18, lower than it is right now at $390.53.

I'm sure there are arguments to be made that Cook should be replaced (not saying they are or aren't the right arguments), but they shouldn't be made by someone who screws up the facts that badly, whether it was a mistake or just talking shit to fit his story.

<comment><USER5> Not only that, but he was interim CEO for quite some time before that.

</comment></comment><comment><USER6> _> The Street's bullish stance is astonishing considering that some $290 billion of Apple's market value has been wiped out in just six months. Of the 37 analysts from major securities firms who follow Apple, none has downgraded the stock to a sell, according to available data from MSN.com. But 25 of them still recommend the stock as a "strong buy" and six others rate it as "moderate buy." Another six Apple watchers rate the stock as a hold.

One of the chief reasons why these analysts continue to favor the stock is Apple's huge cash pile, estimated at more than $137 billion, and what the company could do with it to win back the thickening crowd of disappointed and displeased investors. And strong demand for Apple's innovative products has continued, led by the iPhone and iPad. And speculation persists that soon Apple will announce another new must-have product, which should help the stock recoup its sharp decline._

So essentially, despite no good reasons for the price to drop, the stock price is dropping because analysts are afraid the stock price is dropping regardless of what the company is actually doing. Now, because of that, those same analysts want to get rid of the CEO that basically engineered Apple's ability to make ridiculous margins on through their operating systems efficiency. This is absurd. Does anyone else want these analysts to just shut up?

</comment><comment><USER7> "Some Wall Street sources close to some Apple executives..."

In other words, my sister's brother's cousin. What a trash piece. Just in place to grab a view extra page views.

</comment><comment><USER8> I dont really think they do. Apple is smart enough to know that no other CEO can turn that trend around. Its not the CEOs fault anyway, how can anyone follow up Steve Jobs run without the hyped stock price taking a hit?

They still have been tremendously successful in the last 2 years but stock price is irrational anyway. I doubt there currently is anyone with similar experience and understanding of Steves vision than Cook. Some might say Ive, but i dont think he is the type of guy for a CEO position of this size and he already is at the very top of the company anyway.

</comment><comment><USER9> The hilarity of all of this is that the current product pipeline was signed off by Steve Jobs whilst he was alive. And the same people (except for Forstall) are still there plugging away.

But that said Apple just needs to follow the iPod strategy for the iPhone/iPad and they will continue to pour in the cash. By that I mean products at lower price points but still maintaining the same premium aesthetic.

Also I would stake my life that Apple WILL release a TV. But it will be 4K and coincide with a "H.265 across the company" strategy.

<comment><USER10> Totally agree. I believe they're waiting till 4K reaches a price that will sell - which is just beginning to happen ( [http://www.engadget.com/2013/04/15/seiki-offcially-prices- it...](http://www.engadget.com/2013/04/15/seiki-offcially-prices- its-50-inch-4k-tv-at-1500-for-late-april/) ). It's the only realistic way they can offer a future-proofed device that will look great for an extended period of time as more 4k content becomes available.

</comment></comment><comment><USER11> One of the things the punditry never stops to deliver is flip floping following the trend. Apple is no different company now that it was a year ago.

While apple bashing is all the rage now, the (supposed) problems it is having are the same as the day Cook took the office.

While I would enjoy tremendously the fall of apple (and any other walled garden) I would prefer too see it on the basis of failed ideology than mass market psychosis.</comment>


Snapnator: Your MacBook Snap feature is back - <AUTHOR> https://www.kickstarter.com/projects/436147229/snapnator-your-macbook-snap-feature-is-back <comment><USER2> Not sure if Kickstarter is required for this. You can already order magnetic adapters for micro USB and Lightning ports fom China, and I even found existing solutions for the Type C port [1].

[1]: [https://www.aliexpress.com/item/WSKEN-Type-C-Adapter-USB- Fas...](https://www.aliexpress.com/item/WSKEN-Type-C-Adapter-USB-Fast-Charger- Magnetic-data-Cable-Metal-Data-Micro-USB-Wire-For/32754712372.html)

<comment><USER3> Or this one from Griffin, and already available through Apple accessory retailers worldwide: [https://griffintechnology.com/us/breaksafe-magnetic-usb- c-po...](https://griffintechnology.com/us/breaksafe-magnetic-usb-c-power- cable)

</comment></comment><comment><USER4> Does Apple have a patent on this, or is it just not novel enough to warrant it?</comment>


By limiting encryption government is increasing terrorists ability to sabotage? - <AUTHOR>

So there are multiple reasons to post it here. Primarily being HN with its set of users can likely prolong this point further and make law makers aware of it.<p>Governments are well meaning in terms trying to protect the citizens. Intention seems right. But by weakening the encryption and likely other security measures (phone encryption etc) aren't governments leaving the door for terrorists to do the same. Status quo and governments understanding is that terrorists will never have as much resources as them. To me it seems shortsighted and preposterous stand. And can result in some massive security compromised by rogue elements down the line. Your views? <comment><USER2> They aren't well meaning, terrorism is a convenient excuse.</comment>


Useful GitHub patterns - <AUTHOR> http://blog.quickpeople.co.uk/2013/07/10/useful-github-patterns/ <comment><USER2> _GitHub's functionality around PRs (such as inline commenting, replies, notifications and diffing) is excellent for facilitating code and design discussion_

I agree but one thing I've realized recently is how all the history and discussion happening in a PR tend to be lost once the PR is merged. Not completely lost because it's still there in the "closed" PRs, but undiscoverable.

For example, you come across one line that doesn't make sense to you but you sense that there's a reason behind it. 'git blame' will tell you the specific commit but the commit message might not be explicit and you won't be able to find the corresponding pull-request easily.

I mentioned it on Twitter and exchanged with a GitHub employee that seemed to understand my issue. Hopefully they'll improve on that…

<comment><USER3> Imho GitHubs pull requests shouldn't be used as a replacement for good commit messages or code comments - GitHub might go away, you might decide you don't like them anymore or whatnot. If you feel like someone raised a question about some part of your code in a PR that does have an answer that's only obvious to you, there's no harm in just adding another commit adding comments to the code (you can even squash that commit into the commit changing the code between merging to master and pushing).

<comment><USER2> I agree. It just doesn't always happen. I'm guilty of leaving too-short commit messages and not enough commenting as much as some of my teammates.

</comment></comment></comment><comment><USER4>
      4. the sneaky commit
        when do I use it?

        after the code has been reviewed and merged into master
        I need to make a small change (eg a copy change or
        bugfix) that's not even worth notifying others about

      what I do

        just push the new commit to master.

ಠ_ಠ That's not something you're supposed to admit in public.

I will note that github has being particularly prolific in getting git advice out there, they're working to educate developers in git, full stop. Though one or two pieces (such as this one) seem to suggest it's github specific advice.

</comment><comment><USER5> > _GitHub deals well with force-pushing to a PR branch, ie it doesn't lose the > comments on the previous commits, etc_

This has not been my experience at all, it seems to loose non-line comments always, and line comments sometimes.

\---

In any case, I've been doing a lot of work on the Rust language recently, and there is an integration bot ("bors") which detects `r+` comments on the last comment on a pull-request, then runs 13 different configurations of the full test suite (4 platforms, 2 architectures, optimisations on/off, with/without valgrind; although not all combinations of these). If (and only if) all 13 test runs pass, the bot automatically pushes the commits to master.

(Almost) all commits go through bors, with increasingly less common pushes straight to master to get the test suite to pass again after some breakage. (The test suite used to only with 3 configurations for each pull request, so breakage occurred semi-often.)

(An example, [https://github.com/mozilla/rust/pull/7693](https://github.com/mozilla/rust/pull/7693))

When it works, it is really nice; get someone to review, they approve it and the whole process is managed from there, no mistakes possible. (However, apparently the GH api is unreliable, so bors has moments of madness.)

</comment><comment><USER6> My employer is similar but a little stricter about how we use GitHub pull requests. All new code goes in via pull request. All pull requests are reviewed by another developer. Almost all pull requests are sent to QA to test acceptance criteria.

The sneaky commit will get you many frowny faces on chat.

It works rather well. Does anyone else work like this?

<comment><USER7> My team works like this with a twist. You merge your own pull request. You have developers, designers, pm's, etc to help review the change. You use them if you need them and you take responsibility for your bugs. We'll drop everything to review someone else's pull, and in turn that happens for your own pulls.

<comment><USER6> We also merge our own pull requests but there is less concept of code ownership. Bugs can be fixed by anyone who grabs them and assigns them to themselves. Blame may point out the cause and you can send the author a friendly message on Skype so they are aware of your fix. Perhaps they can even mark your fix as peer reviewed while they're at it.

</comment></comment></comment><comment><USER8> This was actually a pretty decent read. The author lists a number of common use-cases for Github pull requests and how they can be used in practice.</comment>