Most downvoted comments in the history of Reddit - <AUTHOR> https://www.reddit.com/r/ListOfComments/wiki/downvoted <comment><USER2> Is there something interesting about this list other than its entertainment value?

Comments have to be submitted it looks like, so this isn't even Reddit providing the actual list.</comment>


FCC's System Crashes After Net Neutrality Video Goes Viral - <AUTHOR> http://recode.net/2014/06/03/fccs-system-crashes-after-net-neutrality-video-goes-viral/ <comment><USER2> Emblematic of the problems with the telecom industry as a whole. Paying just enough to scrape by with the bare minimum capacity, spending money on anything but improving the situation for consumers, and then passing the costs on to them (In the FCC's case, to taxpayers).</comment>


Shared City by Brian Chesky - <AUTHOR> https://medium.com/p/db9746750a3a?

<comment><USER2> All of these images are quite annoying. If you're gonna write something, write -- media is sometimes a crutch.</comment>


Using role attribute instead class name in JavaScript FTW - <AUTHOR> https://github.com/kossnocorp/jquery.role

<comment><USER2> Random usage of role doesn't make sense.

The spec states that "Authors must not set the ARIA role and aria-* attributes in a manner that conflicts with the semantics described in the following table"

[http://developers.whatwg.org/content- models.html#annotations...](http://developers.whatwg.org/content- models.html#annotations-for-assistive-technology-products-\(aria\))</comment>


Andy Weissman Leaves Betaworks For Union Square Ventures - <AUTHOR> http://www.betabeat.com/2011/09/15/exclusive-andy-weissman-leaves-betawork-for-union-square-ventures/

<comment><USER2> Interesting note.

Andy Weissman and John Borthwick are both alumni of Wesleyan University.

USV co-founder Brad Burnham is from Wesleyan.

A strong community of liberal arts educated folks making big waves in the New York tech scene, both on venture and new media.

<comment><USER3> Funnily enough all the Wesleyan people are now have PhDs in quantum chemistry or biophysics. When I first moved to the US, I just assumed it rocked for theoretical science.

</comment></comment><comment><USER4> WORLD BEST DOWNLOADS AND A EARNING WEBSITE

WWW.WELMAX.BLOGSPOT.COM WWW.WELMAX.BLOGSPOT.COM WWW.WELMAX.BLOGSPOT.COM</comment>


Ask HN: What's your keyboard of choice? - <AUTHOR>

What model keyboard do you guys use? I'm starting to feel some minor pain in my hands and was considering getting this:<p>http://www.newegg.com/Product/Product.aspx?Item=N82E16823109066 <comment><USER2> Have you tried the Dynaflex and powerweb exercisers? Also the wrist curl bar

<http://www.fitter1.com/Catalog/Category/35/HandWrist.aspx>

[http://www.amazon.com/GoFit-GF-WFB-Wrist-Forearm- Blaster/dp/...](http://www.amazon.com/GoFit-GF-WFB-Wrist-Forearm- Blaster/dp/B0007W2FJA/)

\</comment><comment></comment><comment>--- giant bookmark dump

<http://news.ycombinator.com/item?id=185743>

[http://www.reddit.com/r/programming/comments/7apqt/ask_progr...](http://www.reddit.com/r/programming/comments/7apqt/ask_progreddit_can_you_recommend_me_a_good/)

[http://stackoverflow.com/questions/687/keyboard-for- programm...](http://stackoverflow.com/questions/687/keyboard-for-programmers)

[http://stackoverflow.com/questions/288856/best-keyboard- for-...](http://stackoverflow.com/questions/288856/best-keyboard-for-high-wpm)

[http://stackoverflow.com/questions/327129/whats-the-best- wir...](http://stackoverflow.com/questions/327129/whats-the-best-wireless- keyboardmouse-set-for-programmers)

[http://stackoverflow.com/questions/96944/what-is-the-best- ke...](http://stackoverflow.com/questions/96944/what-is-the-best-keyboard- mouse-for-ergonomics-or-to-prevent-wrist-pain)

<http://developerlife.com/reviews/?p=46>

<http://news.ycombinator.com/item?id=199493>

[http://amarsagoo.blogspot.com/2008/05/science-of-keyboard- de...](http://amarsagoo.blogspot.com/2008/05/science-of-keyboard-design.html)

</comment><comment><USER3> The last few MS wireless keyboards/mice I've used seem to have ridiculously bad range even on full battery. The worst part was it's not consistent. You can be typing a sentence and go back and notice every 5 or 6th letter just isn't there or duplicated. The only way I could get it to work reliability was to have the wireless transceiver practically touching the keyboard itself.

</comment><comment><USER2> 2 other points that are important for RSI/wrist care: keep your wrist in line when you're keyboarding: top of hand in line with top of forearm, and not cocked in towards thumb or out. This means (for me) rolling up a hand towel , put under heels of hands.

Also mind your wrists when you're driving, riding bike, using power tools, stuff like that. It's easy to cock your wrists at bad angles doing all of those and more.</comment>


Show HN: Fuzzysort – Fast SublimeText-Like Fuzzy Search for JavaScript - <AUTHOR> https://github.com/farzher/fuzzysort <comment><USER2> I'm confused. Fuzzysort is a fuzzysearch algorithm?

<comment><AUTHOR> i wanted to just call it fuzzysearch, but all the good variations of that word are already taken!

most of them don't sort results correctly though so i went with fuzzysort for this.

the real definition of fuzzysort is a numerical sorting algorithm which has nothing to do with this.</comment></comment>


Ground-effect vehicles are a clever idea whose time has never come–so far - <AUTHOR> http://www.economist.com/news/science-and-technology/21629224-ground-effect-vehicles-are-clever-idea-whose-time-has-never-comeso-far-phoenix

<comment><USER2> Video: [https://www.youtube.com/watch?v=Odd8iYYLpRg](https://www.youtube.com/watch?v=Odd8iYYLpRg)</comment>


Facebook for developers – Custom Audiences - <AUTHOR> https://developers.facebook.com/docs/marketing-api/audiences-api <comment><AUTHOR> "Custom Audiences from CRM Data

Build the target Custom Audiences from customer information. This includes email addresses, phone numbers, names, dates of birth, gender, locations, App User IDs, Page Scoped User IDs, Apple's Advertising Identifier (IDFA), or Android Advertising ID."

How and where does one get Apple's and Google/Android's Advertising ID? This rings quite different to Apple's current privacy stance of preventing tracking in upcoming iOS and macOS releases.</comment>


Bloomberg:  Crypto exchange Bitfinex, tether said to get subpoenaed by CFTC - <AUTHOR> https://mobile.twitter.com/JoeSaluzzi/status/958397728324759552 <comment><USER2> If Tether crashes, it could pull down Bitcoin's price significantly. With the current availability of different altcoins, it could crash the whole market.

This is why we need more pairings between BitcoinCash, Ethereum, etc. Otherwise the price of BTC has too much power.

An interesting report on Tether: [http://www.tetherreport.com/](http://www.tetherreport.com/)

And the HN discussion: [https://news.ycombinator.com/item?id=16226521](https://news.ycombinator.com/item?id=16226521)

</comment><comment><USER3> More context on the shadiness—notice this was called out in October of last year but we are wayyy beyond rational markets for these tokens:

[https://medium.com/@bitfinexed/bitfinex-never-repaid- their-t...](https://medium.com/@bitfinexed/bitfinex-never-repaid-their-tokens- bitfinex-started-a-ponzi-scheme-86a9291add29)

</comment><comment><USER4> Here's the actual bloomberg story that the tweet is referring to: [https://www.bloomberg.com/news/articles/2018-01-30/crypto- ex...](https://www.bloomberg.com/news/articles/2018-01-30/crypto-exchange- bitfinex-tether-said-to-get-subpoenaed-by-cftc)</comment>


(Mostly) Good Times for Software Developers - <AUTHOR> http://graysky.org/2011/09/software-developer-job-market/

<comment><USER2> Interestingly, locally to me most software development jobs want Oracle, Java, and Microsoft to be on your resume. There's an odd posting here and there for embedded developers (bare metal, Linux, RTOS, etc), but by and large, if you can't do Oracle, Java, and Microsoft (.NET, etc), you're going to have way less jobs to apply for. Ruby, Python, Haskell, and other things discussed on HN don't seem to be in demand based on my limited searching around.

I'd postulate that working in startups will net you skills that are valuable to other startups. Working in established companies using "enterprise" software systems will net you value to other "enterprise" software companies.

On a slightly sad but related note, there's not much on indeed.com for mechanical engineers. They all seem to be leaving upstate NY even faster than the software people.

Personally, I'd like to see more local jobs posted for up-and-coming tech. I think OpenCL / CUDA has quite a future solving some rather hard problems quite a bit faster.

<comment><USER3> I've also noticed regional variation in tech. Generally the lowest common denominator is Java/EE stuff, often with Spring/Hibernate.

Kind of annoying, since I'd really like to have more job location flexibility, and I really don't like Java & the "Enterprise IT (tm)" approach.

</comment></comment><comment><USER4> "My one true fear working in software is letting my skill-set become deeply disjointed from what the market values."

Excellent truth, it is a market, with supply and demand. Be hungry to learn.

<comment><USER5> You should be hungry to learn software development regardless of whether or not you are working as one professionally.

<comment><USER6> Could you ... expound upon that? I don't think my grandmother has any want or need to learn software development

<comment><USER5> If your grandmother develops software she should be eager to learn more about it regardless of salary. I don't like the attitude that one should only learn and grow for the purpose of making more money.

If you don't want to learn and improve as a software developer, you shouldn't be anywhere near developing software in my opinion.

</comment></comment></comment></comment><comment><USER7> There's also the danger of being ahead of the market (at least your local market): in '98, I wanted to take this great language (Java) I'd spent a year working with but none of the companies in Ireland had adopted it yet. Now I'm itching to ditch Java for Rails which I've been using in my spare time. Now all the local companies only want Java :(

Matching your skills to market isn't just about learning the latest tech. And, incidentally, most of these companies still discount any experience that isn't "commercial"

<comment><USER8> I was doing the same thing and that's essentially how I ended up moving to Silicon Valley.

</comment></comment><comment><USER9> Does anybody have a working link? I keep getting redirected to some onswipe spam page which won't let me scroll down and which appear to have been installed as some sort of hack on his blog (similar to to those hackers which serve up million of spam links to google from some blog, but hijacking my browser instead)

<comment><AUTHOR> Odd. I'm not the blog author, but I do know him pretty well. His whole blog is pretty simple. It's just jekyll with disqus for comments. Obviously other things could happen on the frontend, but maybe your DNS is whacked out?

</comment></comment><comment><USER10> There is no shortage of software developers with the "right skills". Companies just aren't willing to pay them enough. As an experiment, try offering a salary of $1 million and see how many qualified applicants show up.

<comment><USER11> Sure. There is no such thing as "unemployment" either. If you're willing to work for $1/month that is.

It's about market reality, not about greedy CEOs who try to screw the hard working developers.. If the best programmer you can hire is expected to produce $X worth of value, you can't just offer a salary of 2 x $X. How many programmers do you know who can produce something worth $1M+...every year?

<comment><USER10> Even though the $1M figure was meant to be rhetorical:

[http://www.google.com/finance?q=NASDAQ:GOOG&fstype=ii](http://www.google.com/finance?q=NASDAQ:GOOG&fstype=ii)

Google had revenues of $31B with less than 30,000 full time employees over the last year. Programmers there are bringing in over $1M on average. There must be some there that are actually worth it.

<comment><USER11> Let's say I own a building which I'm renting for $10M/year and I employ 10 people to service the building. Are these employees "bringing" me $1M on average? Or maybe the main factor is that I own a building, worth millions?

Anyway, I know you were not serious about the $1M figure. That wasn't my point either. All I'm saying is that the expected value of your work <= your salary. And sky isn't the limit for that number so employers have to take this into account.

</comment></comment></comment></comment><comment><USER12> When the term 'software developers' is used, I agree. When you pick a certain language, I almost always disagree.

See, true software developers will work with whatever language they have to to do the project correctly. They'll change with the times and constantly upgrade their skillset. Single-language developers will almost always have a hard time finding a job.

<comment><AUTHOR> Sure, but a language doesn't stop doing a particular job either. While there are certainly better ways to be doing things discovered all the time, software is susceptible to fads just like any other industry. Sticking with something proven isn't always a bad strategy. Especially if it lets you focus on solving a real problem rather than a growing pain.

<comment><USER12> Sticking with something proven is one thing. Refusing to use another language is another.

Yes, there are fads... But that's how the industry improves as a whole right now. As new fads come and go, we take the best pieces and it drives further fads. Sometimes, we end up with a real gem of a language from it. Sometimes, we just learn a lesson.

But as a developer, if you want to find work, you need to be willing to keep up with at least some of the fads and increase your overall skills.</comment></comment></comment>


PadMapper is now on Android - <AUTHOR> http://blog.padmapper.com/2015/08/07/padmapper-is-now-on-android/ <comment><USER2> Love the simplicity of PadMapper. Haven't used them since the last time I searched for a pad but I'm glad to see they're still around -- and with a relatively new web interface it seems (not to mention an Android app!).</comment>


ThruDB: Faster and Cheaper than SimpleDB - <AUTHOR> http://www.igvita.com/2007/12/28/thrudb-faster-and-cheaper-than-simpledb/

<comment><AUTHOR> Interesting write-up. The stack is implemented in Thrift (Facebook's framework) and can be deployed on S3.

Tobias Lutke also has a post about this. <http://blog.leetsoft.com/2007/12/28/futuretalk-thrudb>

</comment><comment><USER2> Cool...I was looking at the www.spread.org archives a couple days back and saw a post from the ThruDB guys about their release, using the messaging service for replication.

</comment><comment><USER3> Is the person who created this present on news.YC?</comment>


Suggestion: Add Y Combinator Comments Link to Feeds - <AUTHOR>

<comment><AUTHOR> I do most of my YCombinator News 'browsing' via Google Reader. After reading an article I often want to come back and read the comments (or add my own), but it's such a pain to have to physically type in the URL, find the article in question, and visit the comments section.

Why not include a "YCombinator Comments" link within the body of the article in the feeds?

<comment><USER2> There are comments links in the feed (view source on it) but for some reason they get ignored by feed readers. If anyone has a better suggestion, include it in this thread.

<comment><USER3> Bloglines shows the comments links fine, so not all feed readers ignore them.

What I'd like to see in the feed is some indication that the link points to an external site. We get that locally, but not in the feed.

Edit -- that looks unclear upon rereading. When we see an article in the list on news.ycombinator.com, it looks like this:

Y Combinator a new twist on finding hot companies (mercurynews.com)

The same article in the RSS feed doesn't show the (mercurynews.com) part. It would be convenient to have that in the feed as well, so we know that we need to pop two new tabs for that article, rather than just one.

</comment></comment></comment><comment><USER4> I second the suggestion... I have to come back here often to see whether there are replies or not

</comment><comment><USER5> or make the bookmarklet not upvote, so we can use it to find comment threads.

<http://news.ycombinator.com/comments?id=3902>

</comment><comment><USER6> good idea

</comment><comment><USER7> Good idea</comment>


New material steals oxygen from the air - <AUTHOR> http://www.sciencedaily.com/releases/2014/09/140930113254.htm <comment><USER2> How quickly does it absorb atmospheric oxygen?</comment>


Insurance market for football evaporating, causing major threat for NFL - <AUTHOR> http://www.espn.com/espn/story/_/id/25776964/insurance-market-football-evaporating-causing-major-threat-nfl-pop-warner-colleges-espn <comment><USER2> Insurance is useful to spread the cost for things that are:

\- Rare, but predictable in a statistical sense, ie x% of people will claim for y amount, and actuarial tables say so.

\- Expensive to compensate. This is why we need to spread the risk.

\- Where's it's hard to separate risk levels of different people. If not you get adverse selection, where the average cost discourages the safer people, leaving the less safe.

With the recent revelations about brain damage from tackle football, the actuaries will rightly decide that their old tables are systematically biased. More people will be allowed to claim that initially believed from the old evidence. Furthermore, you can't just up the premium to compensate, you don't know how bad it might get. There was that one study of old NFL players' brain that concluded all of them (!) had damage to their brains. You also don't have any idea what the courts will award, so you really have no clue how much to ask for.

You also have to ask whether general health insurance will start asking people whether they play football. (I'm not familiar with the US system). Much like smoking, it might turn out to be a predictable high risk group, so that people in it will have to pay prohibitively more for coverage, or not get covered at all.

So if all the youth players can't get insurance, you have to wonder what will happen to the professional game.

Perhaps there's some major rule change necessary. I'm not sure how I'd change it to be similar but safer, something about the game seems to require tackling to be football.

<comment><USER3> Does rugby have the same problems?

Is it a problem that the helmet etc allow harder tackles? Much like boxing gloves allow harder punches?

<comment><USER4> There are studies that show that the hard helmets in American football are actually less protective than the old leather helmets. The hard plastic transmits the forces better in a fast impulse, the exact opposite of what you want. They have been designed to prevent a skull getting crushed but that isn't a problem in football. Bad engineering and bad science perpetuated and now the hard helmet is such a macho symbol of the nfl they will never change it.

<comment><USER5> The big difference is that rugby players actively protect their head as part of their play, whereas american football players have a perceived notion that the helmet is providing all of the support. I wouldn't be surprised if there are studies out there that show that Rugby players have less issues.

<comment><USER6> I have to think you'll still get quite a number of blows to the head over the course of a rugby career though. Maybe not worse than football but possibly still enough to reliably cause brain damage

</comment></comment></comment></comment></comment><comment><USER7> So the football industry now has to pay for their externalities. That's progress.

<comment><USER8> Now if only we could get the fossil fuel and agricultural industries to do same.

</comment></comment><comment><USER9> What surprises me about this is the throwaway remark suggesting soccer and hockey should be lumped in with American football. As I understand it, they are not close to being in the same category for brain injury. What's the justification for that remark?

<comment><USER10> First let me start by saying that the research on brain injuries and sports is very new and at times has shown fairly bad protocols in the studies, so basically anything you read on the subject requires more specialist context than I have.

That said, in reading about this for the last decade or so when it became a top news item, its become apparent that most brain injury news stories don't report on them very well and lump 2 drastically different kinds of brain injury into the same bucket. Concussions and CTE. The former is caused by a single traumatic event that can leave the brain damaged after it. The latter is probably a repetitive injury, lots of small events that add up to brain damage.

Gridiron football has the opportunity for both. Big shots on open field runners frequently lead to concussions, but for CTE the most dangerous position may be offensive linemen who infrequently take those high speed impacts that get so much coverage. Instead on every play they are taking repeated small blows to the head.

This is how soccer gets lumped in. There is at least circumstantial evidence that the arial game in soccer and potentially even header practice can lead to CTE at fairly high incidence rates. Given the lack of studies its unclear what the level of danger is.

Hockey on the other hand has the opposite danger. Repeated small head hits are rarer than in football but the incidence of traumatic concussion causing hits is similar if not higher.

American football is the first sport to have major studies around brain injury and those are fairly early days. As the other sports have more studies, and as the studies get more data, I suspect we will find that all contact sports put you at risk of brain injury and that football and rugby have higher incidence of CTE than the others. But thats just guess work right now.

<comment><USER11> For soccer it's trivial to remove the aerial aspect from the youth game, in fact they've already done it. No headers, no throw ins, etc. Doing so doesn't do much to change the game at a youth level.

Football on the other hand... it's pretty much impossible to take the CTE risk away without ending up with another sport (rugby, Aussie rules, whatever).

IMO the long term viability of US football is not good.

<comment><USER6> I would bet also that an effective soccer helmet is at least feasible.

</comment></comment></comment></comment><comment><USER12> Unless you're interested in the finer details, the article is very long.

Basically, the NFL should be fine, but even they may be self-insuring head trauma nowadays.

For youth and school contact football programs, they are in jeopardy. Insurers are increasing premiums and/or requesting waivers for all neurological injuries. Some schools are already folding their teams. Probably with no end in sight. Where will the next generation of players come from?

<comment><USER13> As a non-American, this is something that confuses me about American culture. I see a lot of statements along the lines of "I should be able to do X if it only harms me" but people also sue for X causing them damage.

If you play football then surely you accept certain risks onto yourself?

<comment><USER14> 100% agreed. If you take a risk and it doesn't pay off, you shouldn't be able to sue other people for your own decisions or mistakes.

Played an extreme sport (like skydiving or winggliding or snowboarding or mountain climbing or anything else) and got injured? Tough, you decided to do that, and you and your family should stop something looking for someone to blame/sue because of it.

Same goes for any other hobby, whether it's fishing or caving or climbing the outside of buildings for Instagram photos. You took a risk, and if it didn't pay off, tough luck. You made that decision.

And this especially goes for anything illegal. Oh sure, there are exceptions for legal activities if some party did do something wrong that caused it to become more dangerous than expected (like say, telling kids to play American football without padding and helmets on ice) then maybe there may be a case that someone is to 'blame'. But if you break the law and get injured doing so, well tough luck. You did something illegal and it worked out horribly, what you'd expect?

For instance, I distinctly recall cases of burglars suing because they got injured robbing some property or trespassing. That's ridiculous, and the whole idea should be immediately tossed out with 'well if you didn't break into a property you weren't supposed to be in, you wouldn't have got injured'.

People should take responsibility for their own mistakes and decisions, and accept that sometimes things don't work out well and that it's merely part of life.

<comment><USER15> Taking on a known extreme risk isn't the same as taking on an unknown risk that exists due to the negligence of others.

</comment></comment></comment></comment><comment><USER16> NFL should guarantee lifetime health coverage for anyone who plays one NFL regular season game. If that craters salaries, so be it.

<comment><USER6> They should do this, though as the article demonstrates good luck finding a carrier to buy it from

<comment><USER17> The NFL doesn't need a carrier. They can self insure and contract with a health insurer to just do the claims administration.

</comment></comment></comment><comment><USER18> Surely in terms of brain injury American football is comparable to professional boxing? If so, that sport seems to be doing right.

<comment><USER19> Boxing is the canonical example of a sport in decline. It went from most popular sport in America to a minor sport today.

<comment><USER20> Minor in what sense? It's still one of the largest in terms of industry revenue and viewership.

<comment><USER21> Pro boxing can continue as a profitable spectacle without requiring lots of "developmental" amateur participation. For decades, most boxers have been drawn from relatively disadvantaged populations (recent immigrants, minorities, etc.) who are less likely to have access to the sort of legal representation required to address CTE liability. Who would they sue anyway? Most boxing gyms are dumps that barely keep the lights on.

It's interesting to imagine football going that way. The college game would probably have to disappear. (which it should do anyway because institutions of learning should not concentrate most of their energies on frivolous contests between indentured servants) High school teams might be replaced by AAU teams run by shady coaches who could never be sued. I'm not sure where they would play, however. A football field is a big investment that is always going to be attached to some deep pockets. It's not clear that football could survive in the same way that boxing survives.

</comment></comment></comment></comment><comment><USER22> From public health perspective do not underestimate the importance of gladiatorial sports in channeling society-wide aggressive impulses

<comment><USER23> I'd like to see some data on that.

</comment></comment><comment><USER24> Why is this on HN?

<comment><USER25> Because it's interesting to the HN users; I know I found it interesting a few days ago when I read it.

HN isn't just about tech, startups, and the ilk. :)

</comment></comment><comment><USER26> The solution seems clear: prohibit tackling in football or change the rules to discourage it (for example no heavy helmets)

<comment><USER27> IE just shutdown the sport. I personally have no personal opinion on that. But tackling is pretty baked into the game.

<comment><USER26> I don't see UFC being "shut down" with the safety rules they have added since their beginning, so I'd say it's adaptable

Rugby doesn't have as many issues it seems

<comment><USER28> Not clear to me how much that has to do with lack of collected data on the issue. Head trauma is a big and growing concern within rugby, with some high- profile casualties. It is possible that we're just a few years later than American Football to raise this concern.</comment></comment></comment></comment>


China now has more supercomputers on the world's top 500 list than the U.S - <AUTHOR> http://mashable.com/2017/11/14/supercomputer-china-us/#3KO5R65A8iqi <comment><USER2> China flooded the list with non HPC machines, pushing out true scientific systems with several telco clusters. All you need is to run Linpack. These results are no longer useful or valid.</comment>


Please, no more LinkedIn invites ("get yourself onto Facebook if you wish to grab my attention") - <AUTHOR> http://segala.com/blog/please-no-more-linkedin-invites/

<comment><USER2> Yeah, except everyone who went to college has tens or hundreds of questionable photos of themselves (tagged and posted by other people) which were originally posted because facebook was "just for college."

"We finished doing our due diligence on your founding team, and we was wondering if that 28 second kegstand was with a fast count or not"

<comment><USER3> Heh good point. On the other hand, on facebook access to basic functions like sending messages and viewing profiles doesn't cost $20/month.

</comment></comment><comment><USER4> It would be hard to find a more convincing business argument to joining Facebook than this.

</comment><comment><USER5> All I see on his personal facebook page is a login screen. Not very compelling.</comment>


Virally grow an email list with contests - <AUTHOR> http://contestdomination.com/

<comment><USER2> I run several programming related e-mail newsletters and have considered this route after seeing the success AppSumo is having with the technique. And anytime I mention I might try it.. I get flooded with responses saying it looks lame/desperate/cheap/etc yet.. they keep retweeting and entering the contests. Argh! :-)

<comment><AUTHOR> What people say, and what people do are often two different things!

<comment><USER2> I think this is part of Noah Kagan's genius. He always pushes with what works rather than what people are screaming at him to do/not do. I am not quite so resolute or thick skinned yet ;-)

<comment><AUTHOR> Meh, just do what works. You will have a vocal minority opposing you no matter what - so just make data driven decisions and be on to the next one.</comment></comment></comment></comment>


Interactive explanation of marching cubes and dual contouring - <AUTHOR> http://wordsandbuttons.online/interactive_explanation_of_marching_cubes_and_dual_contouring.html <comment><USER2> For those interested, or want to see a different presentation, here is the original 'Marching Cubes' paper:

[http://academy.cba.mit.edu/classes/scanning_printing/Marchin...](http://academy.cba.mit.edu/classes/scanning_printing/MarchingCubes.pdf)

And here's the Dual Contouring Paper:

[https://www.cse.wustl.edu/~taoju/research/dualContour.pdf](https://www.cse.wustl.edu/~taoju/research/dualContour.pdf)

Interestingly; the static presentation of showing all 15 different possibilities of a 3d cube (plus the fact that it works out to 256 possibilities in 3 dimensions) actually made it much easier, for me, to understand what the Marching Cube algorithm is trying to do, and why it's popular.

Then again, second presentations tend to be easier than the first; as you have been already been given a 'spoiler' on what you're trying to understand.

Thanks to the author for making the cool page. :)</comment>


Is Throttling Smartphones Pointless? Study Suggests So - <AUTHOR> http://bits.blogs.nytimes.com/2012/02/23/data-throttling-validas/?hp <comment><USER2> Seriously?

TL;DR version the 'unlimited guys' use the same total bandwidth as the 'limited' guys.

This is extreme proofiness[1]. You notice that the 'average' is much higher in unmetered plans while the median is the same? If you know your maths you will recognize that data hogs hog a _lot_ which results in a higher average. AT&Ts throttling on the other hand keeps the 'median' about the same.

The real issue for the carriers is that they have a fixed amount of bandwidth within their system which is difficult (read expensive) to increase.

Network bandwidth is one of those commodities that exists all the time, whether or not it is being used.

People don't predictably use the bandwidth so its hard to sell "all" of it for money.

So you end up with bandwidth that is sitting there unused and losing money (it has a constant cost of ownership which is an amortization of maintenance, depreciation, and licensing fees)

Their solution was to offer an 'unlimited' plan which, for an extra fee, lets folks go over the max tiered plan. This allows them to 'sell' bandwidth that might have otherwise gone unused. But if they drive the total use over their hard stop EVERYONE runs out of juice.

So their 'fix' is that if you're pushing the average up they clip your usage. That keeps the median in line with their highest rate plan while allowing them to sell the excess bandwidth they have for those cases when everyone asks at once for it.

[1] [http://www.amazon.com/Proofiness-Youre-Fooled-Numbers- ebook/...](http://www.amazon.com/Proofiness-Youre-Fooled-Numbers- ebook/dp/B0042VJ1OE)

<comment><USER3> This isn't about price. In a business where you can consistently sell 160 bytes of data for >10c over a span of many many years, the problem is flawed antitrust laws or enforcement and no competition.

<comment><USER4> You're not selling 160 bytes, you're selling >1 second of airtime in two geographical locations in licensed spectra for which licenses cost billions, with support infrastructure costing millions.

See e.g. [http://www.cwta.ca/CWTASite/english/pdf/Ovum_SpectrumFees.pd...](http://www.cwta.ca/CWTASite/english/pdf/Ovum_SpectrumFees.pdf)

<comment><USER5> SMS utilises control messages that get sent/recived anyways, it quite litterally cost nothing and takes zero extra resources.

<comment><USER4> If they were "sent/received anyways", your phone's battery would last about half an hour between charges. In reality the phone is powered off most of the time, using neither battery or network capacity. A high precision timer wakes its receiver at specific intervals to check if the network is paging.

In GSM, something like the following happens:

1) User submits SMS to their mobile phone.

2) Phone starts paging on a random access channel (no synchronization, lots of phones trying to talk at the same time - limited resources for phones to transmit, and limited chance for base station to receive an intact message). Increased load on these channels require operator to have increased capacity, and thus increased spectrum, increased hardware to handle peak throughput (even if network is idle most of the time - one reason prices may not drop as the network's popularity increases)

3) Base station manages to hear an intact access request, allocates a dedicates timeslot on a control channel (a timeslice of spectrum dedicated entirely to one particular handset - the number of available slices in a given area is more likely measured in the 10s, not the 100s), uses yet more spectrum to inform phone of allocation.

4) Phone indicates desire via dedicated control channel to start SMS transaction.

[half a second of allocated time on a licensed band elapses]

5) Phone transmits message.

6) Phone retransmits message due to poor network visibility.

7) Network signals SMS received, closes transaction.

[resources used within network to route, store and forward message, payment made to peering network to which the target phone is connected to]

8) Remote network begins paging target handset on a camping timeslot it shares with a bunch of other phones, on frequencies covered by a second billion dollar spectrum license.

9) Remote phone wakes up, begins placing load on random access channel.

[lots of retries and corrupting of other users' random access requests later]

10) Remote network allocates control timeslot, and begins attempting to inform target phone of its allocation.

[another few second of allocated spectrum go here]

<comment><USER6> _[resources used within network to route, store and forward message, payment made to peering network to which the target phone is connected to]_

I spent two years working on carrier software for this section of the SMS transmission procedure and there are plenty of things here which cost the carriers money. SMS is definitely not free to the carrier.

Also, from my understanding, they don't actually piggy-back on the control messages, at least not after they have entered the wired part of the system (I never worked in the over-the-air part of the system, so have no knowledge of what happens there). That is, even if the control messages were sent constantly, SMS messages don't get a free ride, but rather they share the bandwidth with the control messages, since those messages do not require near as much bandwidth as the voice channels do.

As an aside, one carrier we installed our system in could only handle a thousand or two messages per second tops, after that, messages were dropped (well, TCAP transactions meant they were re-transmitted later), so there isn't some magical unlimited bandwidth available to SMS messages.

</comment></comment></comment></comment></comment></comment><comment><USER3> It obviously is. Just mobile companies thinking they can still gouge prices and corner people. But this time people have an comparison; they know that they can download 5GB over their home line in a matter of an hour.

And that is food for thought when your provider is giving you 5GB or otherwise limited plans _for a whole month_ while marketing phones with transfer rates well above (or on par) with most home connections.

<comment><USER7> As usual, assuming that corporations are competent but lying about their motivations is helpful.

In this case, the observed effects of throttling are: \- customers paying more money for overages \- customers with grandfathered unlimited plans sticking around even if they might be better off elsewhere \- customers reducing usage \- customers paying more for higher limits \- customers at the right edge of the graph looking elsewhere

</comment></comment><comment><USER8> The last part about purpose-based pricing is what really scares me.

<comment><USER9> This is already being used in some places:

[http://www.movistar.co/Personas/Internet_Movil/Planes/Paquet...](http://www.movistar.co/Personas/Internet_Movil/Planes/Paquetes_de_internet/)</comment></comment>


Writing English as a Second Language - <AUTHOR> http://www.theamericanscholar.org/writing-english-as-a-second-language/ <comment><USER3> I agree with and like William Zinsser on many points, and I believe he has helped countless budding authors and language learners over the years to develop good writing skills. I know I read his books years ago and profited from them (I will never forget a funny introduction to _On Writing Well_ , where he highlighted the point that good writing skills can only be developed through persistent, hard work over a long period by featuring a conversion between an author and a brain surgeon - who did writing "on the side" - <USER2> which the author chimed in that he too planned to do some brain surgery "on the side").

That said, English is a rich, beautiful, and varied language and we should be careful not to box ourselves in with arbitrary rules that limit our style. Mr. Zinsser's admonition not to use or over-use Latin-origin words does just that and is therefore too arbitrary to be productive.

Take the word "productive," which I just used. At its root is the Latin _duco, ducere, duxi, ductus,_ generally meaning "to lead." So we get, in English, a rich range of words such as duke, duct, deduce, reduce, induce, introduce, produce, and all their variants (deductive, inductive, productive, etc.), all useful words in the right context.

Now there are countless words like this in English, and I don't think it is meaningful to try to sort them out from words having an Anglo-Saxon lineage and others thought to have punchier qualities. After all, well over half of English vocabulary derives from Latin and it seems self-defeating to limit yourself to less than half of the words available to you in choosing ways to express yourself.

Yes, do avoid writing in a bloated or hopelessly abstract style. Use punchy verbs to liven things up as occasion allows. But don't waste your time trying to sort words out by their etymological origin because words derived from Latin are not "the enemy" and, even if some of them are stilted, many or even most are not.

If I may suggest my own rule: do not mechanically apply arbitrary rules on word choice but rather choose your words to suit the context, following your instincts for what sounds right for your intended reader.

<comment><USER4> _Use punchy verbs to liven things up as occasion allows_

Neither Zinsser, nor Orwell (who wrote the famous essay with similar advice) say the use of such words is to be 'punchy'. I don't know where you and the angry commenter I replied to get that from. It's not advice meant to be make your prose 'punchy' but clearer and better. 'Punchy' is, frankly, dismissive.

Latin words are, of course, unavoidable and necessary in English. They're hardly all bad. Many often sound more 'formal' and important and are thus overused, though. The advice offered is really a call for vigilance and care - it's easy to slip into the overly-ornate style. It's particularly relevant to the foreign students Zinsser was addressing.

No style rules are immutable and absolute. But the guidelines offered by Orwell and echoed by Zinsser and many others form an important baseline. It's not supposed to be a narrow rail of a style you should never stray from. You're better off learning it well, though, before you do.

<comment><USER3> As I recall, the warning about overuse of Latin derives from Fowler and goes through Strunk and White (might be mistaken about the latter), where I think the contrast is drawn with words that are described as being more "vivid."

I stand corrected on having used "punchy" in a way that appears dismissive. I am in complete agreement with the rest of your analysis as well, including with your admiration of Mr. Zinsser. Believe me, I spent years trying to master style, and I highly value the guidelines put forth by Mr. Zinsser and others to assist in that process. As long as they are not treated as rigid rules, they are most salutary (or is it healthful) for our learning.

 _Gratias tibi ago._

<comment><USER4> Ah you're right, it's in Fowler and in fact, in the earlier (first edition 1906) _The King's English_. Fittingly, for something that evolved into a classic, it touches on almost all the points discussed in this thread, in one paragraph and a footnote:

<http://www.bartleby.com/116/101.html#5>

</comment></comment></comment></comment><comment><USER5> I'm a big fan of this style, and I recommend Orwell's "Politics and the English Language" as the canonical take on it. He would have a field day with "Enhanced Interrogation Techniques"!

<http://www.mtholyoke.edu/acad/intrel/orwell46.htm>

There is a tradeoff here though. Shakespeare's language was elaborate and complex but still powerful. He loved rummaging through the back of the vocabulary cupboard to find just the right word.

<comment><USER6> Orwell's and Shakespeare's style are both to be emulated, in the appropriate contexts.

<comment><USER4> Orwell's, more likely than Shakespeare's. The context 'Iambic pentameter blank verse play in Early Modern English' simply doesn't come up that often. Although there is the rare exception -

<http://www.runleiarun.com/lebowski/>

<comment><USER7> That is incredible. My weekend is now officially over.

</comment></comment></comment></comment><comment><USER8> Quibble: he should have mentioned Joseph Conrad (or another writer like him), whose first language was not English.

</comment><comment><USER9> As a German learning to write in English I had to constantly remind myself to keep my sentences short :)

<comment><USER10> Not to mention your words. English doesn't have nearly as ... robust a mechanism for generating compound words as German.

<comment><USER11> "Whenever the literary German dives into a sentence, that is the last you are going to see of him till he emerges on the other side of his Atlantic with his verb in his mouth." (Mark Twain) (I am German btw)

</comment></comment></comment><comment><USER12> I share his stylistic preferences, but Zinsser is a prick. (How's that for simple and forceful?) He's a prick suffering from a bad case of déformation professionnelle. (Ha! That isn't even English!) To further express my disdain for his advice, I have made my response extremely long.

Consider his first example:

 _"Dear member: The board of governors has spent the past year considering proactive efforts that will continue to professionalize the club and to introduce efficiencies that we will be implementing throughout 2009." That means they're going to try to make the club run better._

His translation is incomplete. "Better" isn't a synonym for "more professionally and efficiently." "Better" could mean all kinds of things. Perhaps it would be plainer to say they're trying to cut down on waste and sloppiness, but that may not be accurate either. Waste and sloppiness are relative to a person's awareness and capabilities. Perhaps raising their their awareness and capabilities to the point where they recognized waste and sloppiness in their operation was part of the process. That would be rather complicated to explain, but if they refer to "waste and sloppiness" then the reader is likely to get the impression that the waste and sloppiness have long been evident.

He also didn't communicate the time frame: they've spent a year discussing what to do, and now they're going to spend a year (or whatever remains of 2009) doing it. Whatever. He doesn't care. Their version communicates that they've done a lot of careful work to plan the improvements; he prefers a version that implies they don't know what they're doing. How easy it is to be concise when you want your readers to lose confidence in you.

Could he really write what they wanted to say more concisely? Probably so. There are some obvious improvements to make. But he refuses to try or even to offer any useful advice, because he doesn't give a shit about what they wanted to say, or what they were trying to accomplish by sending the letter. He has contempt for the task they are faced with. Contempt for what they do and what they're trying to say.

It's the same story with the next example:

 _"As I walk around the Academy," she writes, "and see so many gifted students interacting with accomplished, dedicated adults" [that means boys and girls talking to teachers] and consider the opportunities for learning that such interpersonal exchanges will yield…" Interpersonal exchanges! Pure garbage. Her letter is meant to assure us alumni that the school is in good hands. I'm not assured._

She conjures an image and interprets the image. He would strip out the interpretation and leave only the concrete image of students talking to teachers. Why? Her interpretation is a sentimental, idealistic sales pitch. "Pure garbage." Well, yes, but it's her _job_ to provide a sentimental and idealistic sales pitch. He has contempt for her writing because he has contempt for her job.

Perhaps he could do a better job in these situations, but he obviously isn't interested. In neither case does he suggest a useful alternative. Instead, he suggests they should use language that is utterly inadequate for their purpose, and then presumably start looking for a less distasteful profession.

 _The words derived from Latin are the enemy—they will strangle and suffocate everything you write.... Those nouns express a vague concept or an abstract idea, not a specific action that we can picture—somebody doing something._

Pity anyone who needs to communicate concepts and abstract ideas and who isn't free to use fiction or anecdote to do so. Clearly their writing skills are inferior to such people as

 _Joan Didion, who grew up in California and wrote brilliant magazine pieces about its trashy lifestyle in the 1960s. No anthropologist caught it better._

Should we really declare one approach to a subject "better" because it results in punchier prose? I enjoy simple, readable writing as much as anybody, and outside my own field I read it almost exclusively, but I wouldn't want to live in a world where all the anthropologists, economists, historians, doctors, lawyers, and bureaucrats gave up words such as _communication, conversion, reconciliation, enhancement,_ and _verification_. I'd hate to read a shareholder report written in concrete images. (Perhaps each segment of a pie chart would be labeled with a vivid, engaging anecdote?)

All those nasty Latin words have "infected" our language because they're useful. "Approximation" cannot be used interchangeably with the nice, robust Anglo-Saxon "guess." (Or "stab" -- so much more vivid!) "Communicate" cannot be used interchangeably with "say," since often what is communicated is exactly the opposite of what is said.

 _You'll be interviewing the men and women who are trying to solve those problems—school principals, social workers, health-care workers, hospital officials, criminal justice officials, union officials, church officials, police officers, judges, clerks in city and state agencies—and when you ask them a question, they will answer you in nouns: Latin noun clusters that are the working vocabulary of their field. They'll talk about "facilitation intervention" and "affordable housing" and "minimum-density zoning," and you will dutifully copy those phrases down and write a sentence that says: "A major immigrant concern is the affordable housing situation." But I can't picture the affordable housing situation. Who exactly are those immigrants? Where do they live? What kind of housing is affordable? To whom? As readers, we want to be able to picture specific people like ourselves, in a specific part of the city, doing things we might also do. We want a sentence that says something like "New Dominican families on Tremont Avenue in the Bronx can't pay the rent that landlords ask." I can picture that; we've all had trouble paying the landlord._

Now he's just being lazy. He laments that people talk using "the working vocabulary of their field." Why shouldn't they? It's _his_ job as a writer to produce the working vocabulary of _his_ field, which is punchy writing that keeps readers engaged. Doesn't he realize how frustrated _other_ people must be with his insistence on dealing in nothing but vivid concrete images, not to mention his disdain for people who, because they face different tasks, must resort to different tools? Does he realize how frustrating it must be to talk to a writer who claims to be interested in the affordable housing situation but has no interest in the concepts and legal tools being used to address it, because they don't fit his professional mindset?

And that's why I say he suffers from déformation professionnelle. He judges everyone's prose as if they wrote for the same reasons he does. He says he wants to help people write, but he really just wants to make people write to a certain standard, the standard appropriate to one particular kind of writing, regardless of why and for whom they actually write. If they try to adapt their style to their actual circumstances, they cannot expect any help from him, only contempt.

<comment><USER13> The russian language has a special term set aside for this kind of round-about linguistic constructionism – "fish language". It's like the English "legalese", but with no relation to lawyers specifically.

The idea is that a fishes mouth opens and closes all the time, but all that comes out is air-bubbles.

I'm with master George Carlin on this one, "simple, direct language" is appropriate everywhere there isn't a justified need for domain-specific terminology to be used.

<comment><USER14> > The russian language has a special term set aside for this kind of round- > about linguistic constructionism – "fish language". It's like the English > "legalese", but with no relation to lawyers specifically.

You talking about "Канцелярит" (kantceliaryt?). "Канцелярия" means "office". Suffix "ит" here means language or disease. So "канцелярит" means "official language/disease". See [http://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D0%BD%D1%86%D0%B5%...](http://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D0%BD%D1%86%D0%B5%D0%BB%D1%8F%D1%80%D0%B8%D1%82) <http://zhivoeslovo.ru/content/view/85/143/>

"Fish" (рыба) - is template or form: you need just to fill gaps between prewritten sentences. It looks like "fish bones".

<comment><USER13> Нет, я про "рыбий язык". "Канцелярит" мне что-то из иврита уже навевает, наверное, все же.

(No.)

</comment></comment></comment></comment><comment><USER15> after her first example i'm wondering if i should read the rest of the article:

""" Here's a typical sentence: "Prior to the implementation of the financial enhancement." That means "Before we fixed our money problems." """

"fixed", "money" and "problems" are -- afaik -- what she calls latin words...

oooops!

</comment><comment><USER16> "Don't say currently if you can say now." Nice read.

<comment><USER17> _"Don't say currently if you can say now."_

Hmm.

To me, the most interesting thing about English is that there is a lot of additional meaning invested in what seems to be a choice of synonymous words.

"I am not currently married" conveys to me "I am not married but I will/want to be".

"I am not married now" means "I am not married but I used to be".

No?

[Disclaimer: English is not my first language, though by now I have the greatest fluency in it]

<comment><USER18> You are correct, there are cases where "currently" carries a shade of meaning over "now." The author is not saying never to use "currently." He's saying that in cases where either are ok, use "now." English diction can give some very dense and precise meanings (try reading Poe!), but often people use the longer word simply because it's more ornamental rather than because of its specific connotations. This tends to hurt more than help, as many of his examples show.

</comment></comment></comment><comment><USER19> Great read. As a multilingual speaker, I had quite some chuckles. And then there are pearls like these:

"Now I think it's lovely that such a decorative language as Arabic exists. I wish I could walk around New York and hear people talking in proverbs."

"It no longer rains in America; your TV weatherman will tell that you we're experiencing a precipitation probability situation."

"Remember: how you write is how you define yourself to people who meet you only through your writing. If your writing is pretentious, that's how you'll be perceived. The reader has no choice."</comment>


How to Achieve Polished UI - <AUTHOR> http://chrislord.net/index.php/2017/05/27/free-ideas-for-ui-frameworks-or-how-to-achieve-polished-ui/ <comment><USER2> _As careful as you may be, it's practically impossible to write software that will remain perfectly fluid when the UI can be blocked by arbitrary processing._

Well, that's what they did! All UI events and layout on the original iPhone were handled on the main thread. I doubt asynchronous layout or event handling would have improved the experience on its single-core CPU.

The key technical advantage the original iPhone had was Core Animation, which _composited_ the laid-out views and applied animations to them in a separate process. It ensured that all views would appear at the correct position in their animations each frame with no jitter, and kept most of the per-frame work in one place. But the animations were all initiated on the same main application thread that handled events, performed layout, and so on.

<comment><USER3> > All UI events and layout on the original iPhone were handled on the main > thread.

But what else happens on the main thread? The way I understand the article, UI and input are delegated to a dedicated compositor thread to prevent the heavy processing on the main thread from interfering with responsiveness.

I would assume that iOS also separates the timing-sensitive UI handling from anything that might take longer than a single frame to process. Either way, you end up with one thread doing the heavy lifting and another keeping the UI responsive.

<comment><USER4> I found the article a little confusing to be honest. I wonder if the author has written a traditional widget toolkit that isn't Firefox oriented.

In old widget toolkits, going back to the 90s here, there was a single UI thread per app that did all drawing and sending of commands to the graphics hardware. Keeping the UI responsive on such toolkits simply meant doing things as much as possible in the background. Touching the UI data structures from other threads was forbidden.

This architecture was adopted due to painful experiences with attempts to build thread-safe toolkits in the 80s such as Motif and the original Win32 widget library. None of it worked very well. Motif apps tended to be deadlock prone and Win32 was just a total API nightmare because it tried to hide the thread affinity of the underlying widgets, but didn't do a good job of it.

Some systems in the 90s like NeXT and BeOS started experimenting with moving the rendering into a separate process, the window server. Note that X Windows, despite having a window server, did not use "retained mode" rendering and still required the app to respond to do every repaint such as if an occluded window was moved to the top. Systems with this sort of retained mode rendering pushed "draw lists" into the window server so the OS could draw the window from memory without having to wait for the app to respond. This used more memory but meant that overall window UI stayed responsive and fluid even if apps were under heavy load. However, anything that could _change_ the UI like needing to respond to user input, of course stayed in the app and on the UI thread.

MacOS X introduced a variant of the design, which I know less about, but I believe it basically just stored fully rendered copies of the image. _Very_ RAM intensive and one reason MacOS X was considered very slow and heavy in the early days, but it made it possible to do things like the genie effect and exposé later on where the window server could animate the contents of windows without the app needing to be responding.

All that is OS level compositing. The app itself did not do any asynchronous compositing. So dragging windows around was fast, but animations inside the app didn't benefit.

So the next level of asynchronicity is toolkits that push app level rendering into a separate thread too. iOS, JavaFX, modern versions of Qt and modern versions of Android work this way. In these toolkits, the app's GUI is still constructed and manipulated on the primary/UI thread, but when the main thread "renders" the UI, it doesn't directly draw it, it constructs a set of draw lists for the apps own use. Again, these draw lists look a bit like this:

1\. Clear this area of the window to this colour.

2\. Draw a gradient fill from here to there.

3\. Draw texture id 1234 with that shader at these coordinates, at 50% opacity.

4\. Invoke remembered draw list 111.

5\. Remember this set of instructions as draw list 222.

Once these lists are created they're handed off to a dedicated render thread which starts processing them and turning them into commands to the GPU via an API like OpenGL or Direct3D. Note that these APIs are, in turn, simply creating buffers of commands, which eventually get dispatched to the GPU hardware for actual rendering. Because the render thread doesn't run any callbacks into app code, and because it's cooperating with the GPU hardware to remember and cache things, it doesn't have that much actual work to do and can process simple animations very fast and reliably.

However, responding to user input is still done on the main thread. If you block the main thread, your UI will continue to repaint and may exhibit simple behaviours like hover animations, but actually clicking buttons won't work. That's because the most common thing to do in response to user input is change the UI itself in some way, and that must still be done on the main thread.

I hope that helps.

<comment><USER5> Thanks for this very informative post! However, I think you disparage good old win32 just a tiny wee bit. It was quite well designed for its time - perhaps a little too ahead of its time. Everything was async, to communicate between windows you needed to post events to queues, you could customize the window classes any way you wished - it was perhaps an extraordinarily sophisticated and flexible framework and lots of talented folks made it dance. It had a really good and long 20+ year run. (and still running strong in some desktop software)

<comment><USER6> To me, Win32 was already falling away from the more intriguing model, which was Win16.

Effectively, a Win16 system is/was basically exactly equivalent to an Erlang node, but one where your "processes" just happened to be paired, component- wise†, with handles to structs of GUI properties held in window-manager memory.

Like an Erlang node, Win16 is/was:

• green-threaded — i.e. they both have very low-overhead in-memory structures containing a tiny heap/arena and a reference to an in-memory delegate code module, through which execution would pass in turn. In Erlang, these are "processes"; in Win16, these are _windows_ —i.e. actual windows, but also "controls" in the controls library.

• cooperatively-scheduled (yes, Erlang is cooperatively scheduled—when you're writing C NIFs. When you're executing HLL bytecode in the Erlang VM, this fact is papered over by the call/ret instructions implicitly checking reduction- count and yielding; but if you're writing native code—like in Win16—you do that yourself.)

• Message-passing, with every process having a message inbox holding dynamically-typed message-structs that must be matched on and decoded, or discarded.

• Offering facilities to register and hold system-wide handles to large static data-blobs (Erlang large-binaries, Win16 rsrc handles);

• Capable of doing IPC only by having processes post messages to another process's queue, and then putting themselves into a mode that waits for a response;

• Based on a supervision hierarchy: in Erlang, processes spawn children (themselves processes) and then manage them using IPC; in Win16, root-level windows spawn controls (themselves windows) and then manage them using IPC.

And, crucially, in both of these systems, real machine-threads are irrelevant. Both Win16 and Erlang were written in an era when "concurrency" was a desired goal but multicore didn't yet exists—and so they don't really have any concept of thread affinity for processes/windows. Both systems are designed as if there is only one thread, belonging to a single, global scheduler—and then their multicore variants (SMP Erlang and Win32) attempt to transparently replicate the semantics of this older system (though in different ways: Erlang allows processes to be re-scheduled between scheduler threads, while Win32 pins windows to whatever scheduler-thread they're spawned on.)

Win32 later introduced an alternative model to take better advantage of multithreading: COM "multi-threaded apartments", allowing windows (or, as a generalization, COM servers, which could now execute and participate in IPC on a thread without spawning any window-instances) to interoperate across thread boundaries without requiring a message be serialized and passed through the scheduler/window-manager process.

† [http://cowboyprogramming.com/2007/01/05/evolve-your- heirachy...](http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/)

<comment><USER4> Well, I hope we're not getting sentimental about Win16. I've written more than my fair share of Windows API code and even though some of the concepts are now coming back into fashion again, largely due to the limits of browser engines, it really isn't an era I'd return to at all. Those models were all abandoned for solid reasons and Apple's failure to do so in time nearly killed the company.

I'm not sure your description of COM is quite right. The way I remember it, windows (HWNDS) were and still are objects with thread affinity. COM had the notion of a "single threaded apartment" which basically meant the COM server received RPCs using regular Window messages, and the MTA that you mention simply meant no inter-thread marshalling was done at all i.e. the object was inherently thread safe using locks or whatever. But Windows never changed to a model where the controls library was thread safe: changing the contents of an edit box from another thread, for instance, always required a context switch.

COM's usage and abusage of the window message system for fast inter-thread switching was only ever an ugly hack, which caused all kinds of weird problems and glitches. Most obviously it caused Windows' reliance on actually having a GUI layer to deepen considerably because now inter-thread/inter-process RPC - that on Linux and MacOS were well modularised into things like Mach IPC, SunRPC, DBUS etc - were totally tied to the windowing system.

IIRC the entire apartment concept was also stupidly designed, so there were constant problems with Microsoft using COM internally to implement some APIs, which would by default enter an STA and require the _caller_ of the API to pump the message queue otherwise the API they'd just used would silently fail to work. In the era I was working with it that fact wasn't always properly documented, I think.

<comment><USER6> > COM's usage and abusage of the window message system for fast inter-thread > switching was only ever an ugly hack

This is effectively the entire point I wanted to dispute in my original post above; I guess I didn't get it across clearly enough.

As can be seen from how pre-COM (e.g. DDE, OLE) IPC was achieved on Windows, Microsoft truly believed that sending messages through the window-manager was a _good_ way to do IPC. Their designs just kept doing it, over and over. STA COM messaging wasn't a hack; it was more of the same, a doubling-down on a long-standing design paradigm. _MTA_ COM messaging was the hack—a way to make everything continue to _look like_ HWND messaging (with an abstraction layer added), but have it transparently optimize to SHM IPC in cases where that was beneficial [and where the developer had ensured their ADTs were compatible with it.]

> Most obviously it caused Windows' reliance on actually having a GUI layer to > deepen considerably because now inter-thread/inter-process RPC - that on > Linux and MacOS were well modularised into things like Mach IPC, SunRPC, > DBUS etc - were totally tied to the windowing system.

And, driven by the "evidence" of this repeated doubling-down above, I would conclude that _this was the point_ : Microsoft considered Windows to be about, well, _windows_.

As I was saying above, a "window" in the Win16 sense was effectively the same thing as an Erlang process, but with some extra (optional-to-use!) GUI data stuck to it. The "correct" way to achieve async parallelism in Win16 was literally to create a "background window" that would register a kernel timer to send it tick events, and then do work when it received one. Which is the _same_ thing you do if you want to write an Erlang process to wake up and poll some data source every so often.

My point isn't just that there are parallels here; my point is that Microsoft expected you to _use_ the "window" primitive in _exactly_ the ways that Erlang expects you to use the "process" primitive. Windows _are_ the "process" primitive of Win16—they're tiny, green-threaded processes, and the window- manager _is their scheduler_.

That statement should make Microsoft's views on IPC clearer. Of course Windows IPC is achieved by putting messages through the window-manager. The window- manager _is_ the scheduler†; knowing about other window-processes and routing messages to them is its _job_. It _is_ DBUS—and it is also, given DDE, the equivalent of macOS's LaunchServices daemon.

\---

† ...or rather, the window-manager is the scheduler _for anything that 's not a DOS VM_. Windows, from 2.x through to 9x, was effectively a two-layer system: a bare-metal hypervisor "kernel" (KERNEL.EXE/KRNL386.EXE) with one Windows dom0 and N DOS domUs; and then an OS "kernel" running in that Windows dom0. That dom0 OS kernel _is_ GDI.EXE, and cooperative message-passing _is_ its scheduling algorithm. It also happens to do graphics. (It's a _paravirtualized_ kernel that relies heavily on the hypervisor kernel above it, yes, but it's still the kernel of the Windows domain.)

</comment></comment></comment></comment></comment></comment></comment><comment><USER7> It's quite useless without examples. I know some frameworks do all rendering in a separate thread but you almost completely forfeit all UIView based rendering. With the native UI toolkit you always go back to the main thread so I only put long running processes like network requests, image rendering or database access in a separate thread.

</comment><comment><USER8> Reminds me of common practises in game engines.

<comment><USER9> Yea. It's not very hard - if you want something responsive, you have a limited amount of time between when you read input and when you present something on screen.

This delta can be greater than the rate at which you present images. For example, most game engines take 30ms to read input and simulate on a thread, then take 30ms to renders on another thread while the next frame is simulated. This means that they present something every 30ms, but the delay between input and rendering is 60ms. This delay can be up to 100ms and not be noticed by players.

<comment><USER10> A 100ms delay is extremely noticeable, especially for faster paced games. That's 6 frames at 60FPS, or 3 at 30. While you may get away with that on 4X games, no FPS will ever get to more than 50ms input lag, because it seriously becomes unpleasant to play.

</comment></comment></comment><comment><USER11> In landscape mode on mobile there is a bar that takes up 20% (at a guess) of the screen just to contain a single icon.

Does everyone browse mobile in portrait? My eyes are horizontally arranged.

<comment><USER12> How do you hold your book, in landscape or portrait mode? Pages in almost all scripts are traditionally always in portrait orientation.

<comment><USER13> Pages are also traditionally larger than a cellphone. On a 4"/5" smartphone, text in landscape orientation is much closer in font size and line length to a normal book than in portrait orientation.

</comment></comment></comment><comment><USER14> It is ironic how the author is speaking about polished iPhone UI and his blog has big stupid "to the top" button^ fixed at the bottom, covering two lines of the text. Every iphone user knows that he can go to the top by tapping above the address field, no buttons required.

^ not actually a button, but "polished" invisible plane that randomly cuts text.

Can we please, please return to the era when ui was humane?

<comment><USER15> not every iphone user. magic UX like that is not very discoverable.

<comment><USER14> I'm pretty sure it was described on small introduction booklet in iphone 4 package. "Shake to undo" was also there.

Do you guys ever read instructions? :)

<comment><USER15> I don't recall paper instructions in the iphone 6 package. Maybe they put up an ill timed tutorial on screen with the first boot. I needed to skip that to finish setting up the phone in store. Sometimes I think getting a user to read instructions is the worlds hardest problem.

</comment></comment></comment></comment><comment><USER16> Would anyone here have resources on writing similar highly-responsive GUI frameworks?

I'm considering writing a Rust-based one with Linux, BSD, macOS, Windows and Android backends.</comment>