Ask HN: What is your opinion about 99designs? - <AUTHOR>

<comment><USER2> I have used 99designs for two logos and used Logoworks back in 2007 for one logo. 99designs produces many more creative and professional designs than Logoworks. Logoworks owned by HP was more expensive and we were ultimately unsatisfied with the experience after being beaten down going back and forth on the little choices we had, even after they offered to throw in a few more "staff" designers.

Getting close to 100 designs with 99designs even though many were variations still gave us far more alternatives that we were happy with. In fact, it became difficult to choose a winning design.

You have to stay active during the process. Offering suggestions on what you want to see and what you do not like. The designers usually do exactly as you say. After their initial concept they usually just make minor changes. Comments like "like this but can you be more creative with this part" does not usually work.

As a startup, I believe it was both cost effective and the best use of our time. Instead of spending time finding a designer with a portfolio we liked and then going back and forth with revisions with them. Almost every revision we requested on 99designs was done within a few hours. I also feel the anonymous process of 99designs prevents wasting time by trying to be too nice with comments.

I have not worked with a designer, how many choices are you really going to get before it starts to be uncomfortable as you are wasting both the designers time and yours. Five designs? Ten designs? With 99designs you might get 20-40 unique designs. It just seems like better chances for success in a short time.

</comment><comment><AUTHOR> I've asked different people their opinions. Coders say its great, cheap and effective. Designers despise its existence.

The designers argue that it is bad for them, however from my perspective it lowers the barriers for entry if you are a young talent trying to build a name.

How easy is it to put a value on good design? I see big companies out there with what I believe to be terrible logos that I know would have costed hundreds of thousands. On the other hand, I see companies like facebook and twitter that started out with plain text logos and spent nothing yet still have a powerful brand.

</comment><comment><USER3> I've used it twice in the past for logo work, with good results both times. Comparable to using a professional design shop, which I've also done multiple times.

However, some notes:

\- You'll want to pay more than the average to attract a wide range of designers. It's still cheaper than a professional designer, but don't think you can lowball the 99designs market and still get good results.

\- 95% of what you get back will be utter crap, and responding to this can will up a _lot_ of time, much more than working with a professional design shop.

\- Both times my winning designer was someone from southeast Asia with a shaky grasp of English. Perhaps my experience was atypical, but I suspect you'll have to deal with this as well.

\- Some of the nicer-looking stuff was ripped off from elsewhere with the colors re-changed, which I only caught through some image searches. You may pick a winner you don't actually own, and I don't know how to guarantee against this.

\- In both cases I had a good sense of what I wanted in advance and provided very specific instructions to the designers. If you're looking for someone to brainstorm ideas your results might vary.

\- Yes, it's spec work and since I wouldn't work for spec, asking someone else to do it is sort of problematic. But no one's forcing the designers at gunpoint to use 99designs, and there's no denying the cost difference (although it does come with significantly more hassle.)

</comment><comment><USER4> If you can afford it, hire a real designer directly. Look around on <http://www.dribbble.com>, find some designs you like, and contact the designer. 99Designs will get you subpar work _and_ you'll be slowly killing the design industry.

</comment><comment><USER5> As a fledgling designer, I think it has some cool features:

a) Gives you an place to see how other designers interpret a concept, some good some not so good, helps build your eye for your style.

b) Gives you a chance to show/hone your work, build your portfolio, and get clients.

</comment><comment><USER6> <http://antispec.com/>

<comment><AUTHOR> What are the options for a cash strapped startup? Would it really be justified to spend $10,000+ on agency work without even being established yet?

<comment><USER6> You didn't mention if you were looking to use 99designs or work for them. I'd never recommend doing free design, but it can work out if you're looking for a designer.

You can certainly find lowend design agencies or student designers, so thinking you'd otherwise spend $10,000+ isn't completely accurate.

I challenge whoever downvoted this to come up with a good reason why. This debate is really over personal preference. I've simply given evidence against it. I don't even completely agree.

<comment><AUTHOR> Sorry, I should clarify. I'm looking to use the for a new logo.

What raised the question was a friend of mine who is a designer who blasted me for using their service. He said its branding that I'm after, not logo design. To that, I disagreed so I wanted to get the communities thoughts.</comment></comment></comment></comment>


Ask HN: Are JavaScript developers divided into 'fron-end devs' and 'true devs'? - <AUTHOR>

Recently I have read the discussion in twitter between overlords of JavaScript about if they have to give examples of how to work with their complex tools in ES5 rather than in ES6, because ES5 is only for 'front-end devs' but not for 'true devs'.<p>So, I wander, is there such a deep division in JavaScript community ? <comment><USER2> It is just a common thing everywhere, not just in javaScript. It even has a Wikipedia page: [https://en.wikipedia.org/wiki/No_true_Scotsman](https://en.wikipedia.org/wiki/No_true_Scotsman)

"Well, no _true_ developer uses ES5"

Ignore the haters. Use what is best for the job based on a variety of criteria.

<comment><AUTHOR> I needed to ask about this division because I'm rather new in this community, and I created the tool which is devoted to simplify development of UI (react- ui-builder). And now I'm deciding if I need to switch generation of the source code to ES6, or wait a bit.

<comment><USER3> You can still target ES6 and have people use a transpiler to hit ES5, noting that not everybody is familiar with the tool chain(s) necessary to do that efficiently.

</comment></comment></comment><comment><USER4> I identify more with the front-end devs, even though I've spent the last few years working with node, sails and meteor.js.

I think that a lot of javascript devs (compared to java, C etc) get into it via web design and j query, whereas 'true devs' often have a real CS background.

It seems like just another 'web dev isn't real programming' bias but on a smaller scale.

<comment><AUTHOR> Aha, I got it. So, front-end developers may event don't know about nodejs ?

<comment><USER3> Sure, because they have no exposure to it. Doesn't mean they're not a "true dev"; that's orthogonal.

</comment></comment></comment><comment><USER5> My take is that JavaScript development has never been viewed as 'real development' and that devs that have felt insecure about this have latched on to ES6

</comment><comment><USER3> It's an artificial distinction. There are good ("true") and bad ("front-end") in all environments. The language itself is immaterial.</comment>


Elon Musk Shows off the Dragon Capsule, Back From Space (video) - <AUTHOR> http://science.slashdot.org/story/12/06/14/2032230/elon-musk-shows-off-the-dragon-capsule-back-from-space-video <comment><USER2> Cue comments about how Elon Musk is doing so much more with his money than everyone else, and how SpaceX/Tesla Motors/SolarCity are so much more valuable than anything else.

Cue complaints about how no one works on hard problems any more, and that everyone is just chasing instagram/facebook/twitter/groupon/zynga/social/local/mobile.

Forget that Elon Musk started an advertising/publishing company in 1995-1997, intelligently riding the bubble, and then created X.com (a more complex Mint.com), which he then merged with Confinity to create PayPal (from where he was essentially fired - unfortunately).

Forget that battery tech wasn't useful enough until just over 5 years ago (not nearly dense/cheap enough), and how we needed the massive production increases in laptop battery production for Tesla to make sense. Also forget that NASA had 0 use for SpaceX until the Space Shuttle program was shutdown - which is curiously lined up with the COTS program. Also forget that Solar panels required massive production gains thanks to China which only occurred within the past 5 years. Finally, ignore the fact that he would never have been able to do anything without the money from a stupid email payments thing.

Big problems are awesome. Little problems are better.

Everyone starts small. Even Elon (a personal hero of mine and a man I deeply respect).

Start on new small things, work hard, and TIME your entry/exit with extreme precision. Malcolm Gladwell says a lot of things which are "truthy", but his Outliers book was right on the money.

"Big things have small beginnings" (<http://www.youtube.com/watch?v=eB52xyaY4kk>).

<comment><USER3> Your core message was pretty fantastic, and with a different tone it could be even better, and better received.

<comment><USER2> Felt like I had to get it off my chest. My sincere apologies for the ranty tone everybody.

</comment></comment></comment><comment><USER4> As a decade-long reader of Slashdot, who transitioned almost completely to HN several years ago, it's remarkable how good the visible comments on /. seem after a long absence.

On discussions of sufficient size, because of the depth-first nature of HN I almost inevitably bail out around the 2000 pixel mark. I just don't want to wade through that much garbage, and that's about as much space as it takes for HN threads to devolve into a pointless tête-à-tête these days.

I think when I switched to HN, there basically _weren't worthless comments_ , but those days appear to be over. The transition here wasn't noticeable, but going back feels like a breath of fresh air.

<comment><USER5> I'd suspect the current state of Slashdot is helped by Slashdot not being the "in" thing anymore too. A lot of the noise-makers have moved on, or aren't finding the site in the first place any more.

</comment></comment><comment><USER6> Thank you. It's such a refreshing sight as just 3 months ago, Elon was visibly quite disappointed in this video: [http://www.youtube.com/watch?v=pJnW7vtqaf4&feature=relat...](http://www.youtube.com/watch?v=pJnW7vtqaf4&feature=related#t=11m40s)

2 months later, the Dragon successfully docked with the space station. <http://www.youtube.com/watch?v=YjuvIlskUf4#t=7m20s> Just look at Elon's excitement at the 9:36 mark of this video as well as all of SpaceX employee's enthusiasm. This was truly a huge success despite the challenging odds.

Looking forward to the future Grasshopper mission. Perhaps it will fail at its first few attempts just like the Falcon1, but with Elon's determination and his excellent team of engineers, I believe they can do it. They have already proven themselves during the darkest times in SpaceX history. Skip to [38:30] to hear it from Elon himself. [http://www.bloomberg.com/video/73460184-elon- musk-profiled-b...](http://www.bloomberg.com/video/73460184-elon-musk- profiled-bloomberg-risk-takers.html) And his reaction after Falcon9 successfully launched on the very first try. [39:12] All that hardship and pain, totally worth it.

We will be victorious, indeed.

</comment><comment><USER7> Weirdly enough the thing I'm fixated on in this video is the fact that he's meeting with NASA at a press event dressed in a t-shirt.

</comment><comment><USER8> When did Slashdot get TV?

<comment><USER9> yeah, that's totally the biggest news here for me. Is there actually a decent half hour video program of technology news that's not just a beauty pageant for new consumer electronics?

<comment><USER10> > beauty pageant for new consumer electronics

That's a good way to describe it. There's been a lot of crappy 30 minute tech shows, with CNET TV (has local versions produced in suprisingly many countries) being the latest one I've been exposed to (and one of the worst.)

The same was once true of game-review shows. But in Australia at least, the show "Good Game" (and the for-kids spinoff "Good Game Spawn Point") have completely amazed me with it's quality and the hosts being the kind of people who would watch the show.

Sorry for the long-winded post, but I find it hard to articulate the huge shift that happens going from a technology show that's basically shows paid- for advertising to ones that are GOOD.

I hope somebody can make the weekly 20-30 minute show that I crave, but can't articulate :)

</comment></comment></comment><comment><USER11> This video reminds me of another of Elon's strengths, beyond just a technical mind and an entrepreneurial mind: he's very well-spoken, and he's very charismatic -- and it comes off as very natural, so it helps to close the gap with his audience whenever he speaks. He doesn't come off as some egghead academic or engineer -- though clearly he can think like one. Instead he talks like he's a friend speaking casually and calmly, off-the-cuff, with a mixture of what you might call British-style humility. But backed by confidence and a sense of persistance. One of his repeated phrases across many interviews is that he's determined to make X thing happen, and he's confident he can, that they can. If they can't make something happen the first time perfectly out of the gate, then they'll learn, adjust and try again until they do.

He probably has a one-in-a-million combination of both a strong technical mind, a strong business sense, and strong personal charisma. There are a ton of folks out there that have maybe one of those things, and rarely two, but it's extremely hard to find all three. Plus he scored big early with Zip2 and PayPal. Arguably this fourth thing -- a huge war chest to draw from, beginning in the late 90's or so -- has made him even more rare. Indeed, a Tony Stark of his age.

</comment><comment><USER12> Don't miss seeing the animation toward the end of the video.

<comment><USER13> The first instance of that landing would be quite something to witness!

<comment><USER14> I would drive any distance to see a vstol landing of an suborbital or orbital vehicle. Talk about game changing.

<comment><USER11> Agreed. If you'd like to cheat and get a sneak preview of what it could be like, at least the last leg, go dig up the Armadillo Aerospace videos of their capsule VTOL launch/land successes. As a thumbnail argument, if we've seen Armadillo do just the VTOL launch/land part, and we've seen SpaceX do the rocket launch & parachute splashdown part, it's not hard to imagine the engineering equivalent of smooshing those two solution spaces together into a single entity which can accomplish both.

I will be as giddy as a lunch table of teen girls at recess when I see SpaceX pull this off.

<comment><USER15> Armadillo, Blue Origin, and Masten (and the DC-XA before them) have all been working on rocket powered VTVL flights and have done sub-scale test flights. It's a technology that just plain makes sense, especially now that computers are so cheap and so fast. Perhaps in 20 or 30 years it will be so common and routine that a lot of people will think it's a natural part of spaceflight and wonder how it could possibly be done any other way.</comment></comment></comment></comment></comment>


Expose Thyself: On the Digitally Revealed Life - <AUTHOR> http://www.iasc-culture.org/THR/THR_article_2018_Spring_Rosen.php <comment><USER2> Eloquently formulated case against the blind acceptance of digital devices into our lives, and outsourcing ever more of what makes us human to algorithms. While we have always been talking of splintering of our attention, and the constant background anxiety resulting from frequent social media use, this article furthers the concerns in the direction of complex hard-to- understand algorithms mediating human communications using the signals harvested from sensors on smartphones.

I don't know when the time will come when we just say enough. No more wondrous technological conveniences that purport to make our lives simpler and easier with little thought or understanding of the great opportunity costs borne by the users. One terrific example is the plainly obvious alienating effect of this 21st century world of instant messaging from every corner of the globe, only to find the crushing effect it has on actual phone conversations even between close friends. The author nails this collective, global loss of empathy here with this example. Did any of the brilliant "technologists" envision this would happen? No. "Connect the world! Saturate it in social media. Good things ought to happen. Right?"

My fear is that that the widespread use of these attention hoarding devices and platforms is so oppressive that the thoughtfulness and awarness it takes to even formulate such questions will never come for the greater public. And so in this quasi-zombie state of tech consumption, harmful and poorly understood inventions will continue to reign supreme.

Dystopia? No, just look around you. The grip of tech companies (I work for one) is huge and I don't like the endless (and I hope involuntary) dehumanizing aspects of some of these technologies.

I cant be the only one who wants a world where people reach for their phones to talk to friends, or educate themselves about the world by reading books, instead of whatever poorly conceived alternatives we have today.</comment>


3mindme - Dead Simple Reminders - <AUTHOR> http://3mindme.com/ <comment><USER3> Good implementation.

You could cut the text on the homepage way down - the complexity of the instructions is incongruous with the simplicity of the system. You could dump all the text I've put in square brackets:

[Hi! Thanks for contacting 3mindMe.com, here are some instructions to get you started:]

Quick reference: email@example.com - Emails you back this information <when>@3mindme.com - Emails you at <when> email@example.com - Emails you at the <when> specified in the Subject:

Quick examples: email@example.com - Emails you in 24 hours firstname.lastname@example.com - Emails you at today 5pm (in your timezone) email@example.com - Emails you tomorrow at 5pm PST firstname.lastname@example.com - Emails you in 48 hours

What does 3mindMe.com do? Basically, we're a gateway to your future self: email us anything, and we'll mail it back to you at a future time and date of your choosing.

[How much does it cost? Nothing! This is just a fun project for me.]

[put this on a separate page] What's new? (updated 2008/5/3) Hooray, the first update not for timezones! Unfortunately, it's for spam. Luckily, I did something really tricky, so I'm hoping it won't be a problem... If you do get any spam via 3mindme, let me know. [/put this on a separate page]

How do I use 3mindMe.com? There are two primary ways: \- Email <when>@3mindme.com and your email will be reflected back to you at whatever time or date you specify. \- Email email@example.com and it'll be sent back to whatever time is set in the Subject line

[What do you mean by "<when>"?] You can construct your <when> in three steps:

[1) Ask yourself "When you want your email sent back to you?"]

2) Write that down just as you'd say it out loud, for example: friday tomorrow noon next tuesday at 5pm PST 2 weeks 5 minutes before January 1st 2008

3) If you're emailing firstname.lastname@example.com, you're done! Just put that on the Subject: line of the email and send it, and it'll be sent back to you at the time and day you picked. For example, you could make the subject: 5 minutes before January 1st 2008: Get champagne, quick!!

4) Alternatively, just take all the spaces out and stick @3mindme.com on the back, and mail to that. For example, the above ones would be converted to: firstname.lastname@example.com firstname.lastname@example.com firstname.lastname@example.com email@example.com firstname.lastname@example.com

[put this on a separate page] Do you store my mail? Only as long as it takes to deliver it. After it's sent back to you, the mail is deleted. [/put this on a separate page]

[What's with the crappy name? Ya, 3mindMe.com doesn't exactly roll off the tongue, but all the good names were taken. Please don't hesitate to email me suggestions at email@example.com.]

[put this on a separate page] Who are you? I'm David Barrett, and you can read more about me at <http://quinthar.com>, or just email me at email@example.com. [/put this on a separate page]

[Thanks for using 3mindMe.com, and enjoy!]

[-david]

<comment><USER4> For the most part, I agree with what you've chopped, but I'd leave the developer's information on that page--it's small enough that, with the rest of the edits, it'll be above the fold and present the _entirety_ of the app's information in one screen!

<comment><USER5> I agree. It definitely needs to get down to one page. I'm not sure if it was by design, but the page I saw was just a bunch of plain text on the screen with no text wrapping. The service might be great, but to an uninformed user it might look like there's something wrong with the site, causing him to leave without reading. Based on the title alone, I expected to have some sort of interaction with the site itself, I didn't realize that my only interaction would be via email. Great idea, and a great home page will help it appeal a wider audience.

</comment></comment></comment><comment><USER6> Spoofing of email addresses?

\---

Great service, really very nice.

One problem obviously is there's no verification of the email address being yours to send.

So annoying spammers can 'remind' people of their viagra and what Paris Hilton has been up to lately.

This is an SMTP problem, not just 3mindme. Maybe they use DomainKeys or some other cert scheme.

</comment><comment><USER4> I _really_ like this. It's something I've wished for, and have set up with other systems (various online todo/calendaring etc. apps) but never this easily. I think the simplicity is what's incredible.

I like the <when>@3mindme idea, but I'll probably just be sticking to using echo@3mindme, just because I can store that as a contact to save typing, since I'll have to type the <when> anyway.

Regardless, I'm impressed. This doesn't seem to be trying to be more than it is, and that's a great thing.

[edit] Jumped the gun with the submit. Have you considered having a more appealing front page? I know that you're striving for simplicity, and having a page like that appeals to me as a member of the HN audience, but I can't imagine someone like my dad thinking this is something he would use based on how it looks.

</comment><comment><USER7> I think it's a great idea, but too many people have beaten you to the punch. I googled "email yourself reminder future", and just from the first page of results I come up with:

<http://www.futureme.org/> <http://futuremail.bensinclair.com/> <http://emailfuture.com/> <http://www.hitmelater.com/> <http://www.resnooze.com/> <http://www.emailfuture.com/> <http://www.mailfreezr.com/index.php>

So what makes your site better than those?

</comment><comment><USER8> An SPF record would be useful, so mail doesn't get unnecessarily queued with some providers (like GMail.)

</comment><comment><USER9> Cool. Similar to <http://www.poingo.com/Home.php> (which I tried, but was flaky).

Ultimately, though, I wanted an email interface to write to my Google calendar, so I hacked that up for myself.

</comment><comment><USER10>
      > Basically, we're a gateway to your future self: email us
      > anything, and we'll mail it back to you at a future time
      > and date of your choosing.

Isn't 3mindMe a gateway to your _past_ self?

<comment><USER11> Well basically your past can send stuff to your future self, in effect its both ways

</comment></comment><comment><USER12> How can they reliably ensure that an email will arrive at certain time? Does email protocol support this? (just asking)

<comment><USER13> I imagine they receive your email, extract the requested time, create the reply, then store the outgoing email in a cron-like outgoing batch system. Then at the appointed time your email is sent back from their system. Emails are usually prompt, and they probably assume a flight time of seconds.

If I'm right then the system will work pretty well almost all the time. It's a simple but great/fun idea. Their ability to interpret times may be taken from something like the *n?x "at" command, but it looks quite nice.

Don't rely on this working to sub-minute accuracy, though. Email flight times can be significantly longer when things go wrong.

But I like it - I may well be using this.

<comment><USER12> >> Don't rely on this working to sub-minute accuracy, though. Email flight times can be significantly longer when things go wrong.

Yes, this is exactly what I was asking...what do you do when "things go wrong"...and they do with email, occasionaly. So this I see as an issue...whether you can rely on it.

</comment></comment></comment><comment><USER14> Brilliant, great re-use of existing, tested and proven technology.

I'd love to see how it scales, I'm guessing well?

</comment><comment><USER15> <http://www.ohdontforget.com/>

Same concept, but for SMS.

</comment><comment><USER16> I love it. Simple enough for me to actually use. That's rare.

</comment><comment><USER17> cool---could this be a decent substitute for iwantsandy?

<comment><USER18> That's what I was wondering. I was a big fan of Sandy, especially with its (her?) Twitter integration.

Any chance of seeing that, I wonder? Emails are quick to send, but a tweet is even quicker for many people

<comment><USER19> I reckon I am about 1 month away from a 'Sandy' type replacement - <USER2> by publicly saying this (even if only a few see it), I will actually pull my finger out and get it finished, instead of wasting time on HN!

Hadn't thought of Twitter integration all the same, and I never actually used Sandy (started working on this before I even heard of Sandy, very much a part time project) so I may be in danger of disappointing fans of Sandy!

</comment></comment></comment><comment><USER20> google cal has reminder emails, but it's a bit more of a hassle to setup.

</comment><comment><USER21> Great service. If you could cut down the amount of information on the front page that would be great.</comment>


Intel 1103 (First commercially available DRAM, 1970) - <AUTHOR> https://en.wikipedia.org/wiki/Intel_1103 <comment><AUTHOR> Excerpts:

"Introduced in October 1970, the 1103 was the first commercially available DRAM IC..."

Capacity: 1 Kilobit (128 bytes)

Package: 18 Pin DIP

"Technical Details:

tRWC 580 ns Random read or write cycle time (from one +ve Precharge edge to the next)

tPO 300 ns Access time: Precharge High to valid data out

tREF 2 ms Refresh time

VCC 16 V Supply voltage

p-MOS 8 μm[8] Production process (silicon gate MOSFET)

Capacity 1024x1 Capacity x bus width"</comment>


America's Nuclear Tomb Is Breaking Open - <AUTHOR> https://www.vice.com/en_us/article/3kxmav/climate-change-is-breaking-open-americas-nuclear-tomb <comment><USER2> Yikes, poor people. I wonder if there is also a similar site from the French testing in the South Pacific?</comment>


Joi Ito raised money from and invested with Jeffrey Epstein - <AUTHOR> https://www.media.mit.edu/posts/my-apology-regarding-jeffrey-epstein/ <comment><USER2> This title seems to bury the lede.

The money is being returned and funds will be raised to support trafficking victims:

"I vow to raise an amount equivalent to the donations the Media Lab received from Epstein and will direct those funds to non-profits that focus on supporting survivors of trafficking. I will also return the money that Epstein has invested in my investment funds."

<comment><AUTHOR> I don't think the lede is that he's giving back the money now that all of this has become public. I think the lede is that Ito raised money, coinvested with and visited multiple homes of Epstein _after_ Epstein became a convicted sex offender.

<comment><USER2> Perhaps, though as Ito is the author here, perhaps the author's title "My apology regarding Jeffrey Epstein" is more appropriate?

<comment><AUTHOR> I don't think that's the important part of this post. It's the first place that confirms that Ito and MIT raised money from Epstein; a fact they've denied in the past [1]. It's also the first mention that Ito allowed Epstein to co-invest in his startups.

* [1] [https://twitter.com/David_Ingram/status/1162457071633293312](https://twitter.com/David_Ingram/status/1162457071633293312)</comment></comment></comment></comment>


WebKit Feature Status - <AUTHOR> https://webkit.org/status/ <comment><USER2> Why does it specifically mention Linux applications but not at all Windows. Which applications are even ment here?</comment>


Kung Fu Typing - <AUTHOR> http://www.weathersealed.com/2010/01/26/kung-fu-typing/ <comment><USER2> The first 10 years of touch typing, I thought that writing in a language that had very long variable and method names was unpleasant, as the time it took to focus on writing code delayed my mind thinking about the code. I'm not sure when the final shift happened, but it is now nearly twenty years I have been typing, and my hands know where all the keys are. I have no idea which finger presses which key, because my mind is 100% not involved. A direct mental interface would certainly be a nice improvement though.

To anyone out there who is still hunting and pecking, do yourself a huge favor that will pay dividends over the years, force yourself to learn to touch type. It doesn't take long to at least get to the point where you don't have to look at the keyboard.

</comment><comment><USER3> Hm. I use all my fingers, but the pinkies only hit Enter, Shift, and other modifier keys. But I learned to play piano before I learned to type, so it has been remarked that I type like someone would play the piano. I employ a lot of hand movement, and employ a lot of "hand rolls".

Not only can I maintain about 90 wpm normally, but I also don't suffer any RSI type symptoms. I think the downfall of touch typing is actually that it reduces the motion of your hands, so you find yourself making a lot more painful reaches. In piano playing, unless you are playing a big chord you don't stretch your fingers, you just move your hands so that you don't have to.

<comment><USER4> I think that I type similar to the way that you do.

I don't make my individual fingers move, instead I arrange my fingers into different patterns (repositioning my hands if needed) and then kind of execute the key sequence. It is weird and I don't really think about it but my fingers never return to the 'home keys'. (Normally they are already on the next key that they need to be on). (If i'm typing 'ere' my left-middle will stay on 'e', if i'm typing 'different' my left-middle will be on 'e' and left index will be on 'f' before i'm done typing 'i').

I think it has to do with being able to think a few of symbols ahead, as you would with music.

I'm probably > 90 wpm, as well, and no RSI.

<comment><USER3> Yeah, that sounds quite similar. A side effect of typing this way is that changing keyboard layouts didn't change my typing speed at all after I had learned the keys. Which annoyed me initially, because I was hoping for an easy way to increase speed.

</comment></comment></comment><comment><USER5> Awesome graphics. I do touch typing with the home return, does that make me cybernetic? :P

@jessejmc I tried to switch to dvorak once. It's a very efficient layout, and I might have stuck to it if it weren't for the fact that I need to switch regularly between english and portuguese, and dvorak is not at all targetted to languages other than english.

It doesn't help that, between laptops and keyboards, I have pt, es, us and uk physical layouts... nowadays I find myself just customizing the keyboard layout to my needs - US international as base, then switch and add all the accents and symbols around to optimal places - that way I don't care much what's printed on the keyboard.

I wonder what that does to the pretty diagrams? :)

</comment><comment><USER6> I typed with an index, middle, and ring finger style (+thumb for space) before devoting a few weeks to convert to full touch typing. I went from 50 wpm to 70 wpm.

That said, the only time I ever maintain 70 wpm is stream of consciousness writing. If I'm thinking about the words, the bottleneck isn't my typing speed.

On a semi-related note, a friend and I were talking about a switch from qwerty to dvorak. Has anyone that was a touch typist in one made the switch to the other? Thougts afterwards?

<comment><USER7> There was recently a long discussion here or on reddit/r/programming about dvorak vs qwerty. Did not seem to go in favor of dvorak.

<comment><USER5> Not surprised, dvorak is optimized for speed in pure text, and programming is not pure text, nor does it need a lot of speed most of the times, and the ()[]{};.$ symbols are the most important, which clashes with what the dvorak layout considers important.

<comment><USER8> As a dvorak programmer, it just prompted me to write more python. If you're typing {} characters all day, you should consider how much semantic value that's adding to your programs vs. the cost to type them.

Other characters (',."<>) are clear wins on dvorak, and they contain considerably more semantic value than {} do in any language. ";" is also easier in dvorak.

<comment><USER9> The semi-colon is on the home row on qwerty.

<comment><USER8> Yea, but it's right pinky which is weaker for most people. By moving it you also gain the -_ being on the home row (which you type less than semi-colon while programming in syntax demanding languages)

<comment><USER9> Why then would dvorak put s there if it were difficult?

Sensibly most English punctuation is on the left hand along with the vowels on dvorak; which is easy to remember.

Dvorak is very well considered. The combos: qu, th, wh, ph feel really nice.

What amazes me is the fact that the keys are staggered on a computer; I'd expect them to be radial; with my fingers. It appears no one's ready for a radical departure from the typewriter layout. Let's see what happens with the ipad.

<comment><USER8> Yea, I'm 100% ready for touch screens to become a reality so I can start playing with more complicated keyboards. The idea of physical keys (even with a better layout like Dvorak) seems so antiquated when everything else we use on the computer is infinitely customizable.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER10> Nice diagrams. Dvorak (and Colemak) please.

</comment><comment><USER11> Thank goodness I took typing in high school. If you didn't, then get yourself a "typing tutor" program and practice, practice, practice. Amaze your friends with touch-typing prowess and vim muscle memory!

</comment><comment><USER12> I don't do structured touch typing, I learned to read on a computer (early for my age, an old atari) and typing is more natural than writing. When I was in college, I used to do medical transcription and I peaked at about 120WPM with an acceptable error rate, I'd like to generate those diagrams myself... one thing is I'm much larger than average so one of my hands actually spans the keyboard, traditional touch typing rules just don't make much sense in my head.</comment>


Major Facebook Insights Changes You Need To Know About - <AUTHOR> http://blog.getpostrocket.com/2012/08/this-just-in-major-facebook-insights-changes-you-need-to-know-about/

<comment><USER2> it's crazy it's taken facebook this long to actually give fan-specific insights data... great read.

<comment><AUTHOR> yeah I agree. This will FINALLY let page owners understand how their content resonates with their fans, rather than the friends of fans (who probably don't care about their posts) the page also reaches through engagements.</comment></comment>


Where'd my 'm's go? (bug report) - <AUTHOR> https://github.com/FreeBSDDesktop/freebsd-base-graphics/issues/56 <comment><USER2> I had something interesting happen to my fonts on a Linux machine a while back

[http://imgur.com/a/LakuU](http://imgur.com/a/LakuU)

I still have no idea what happened, I logged out and back in again and it was fixed</comment>


On $400 Hammers, $100 Bolts, and Cost-Plus Contracting - <AUTHOR> http://littlebitofcode.com/2010/02/14/on-400-hammers-100-bolts-and-cost-plus-contracting

<comment><USER2> Please provide some more background on why the project was created and the ultimate goal. Without that I do not really buy your argument as I have also worked with government contracts (including cost plus) and spent six year in the US Air Force. The problems are these. (1) Did they really need this system in the first place? Example: The F22 Raptor a fifth generation multipurpose fighter. I would argue that we do not really need this system but, sadly the people I worked for (Air Force Generals) the guys who create the ideas and sign the contracts did not even think to ask that question. Building another fighter was a forgone conclusion to them. It was purely about building something and not about defending against a real threat or even a perceived future threat. To the guys who run the Air Force (former fighter pilots primarily) of coarse you need a new plane. (2) Are you building yet another proprietary system on top of other proprietary systems. Example: JSTARS or the E8-C built by Northrop. This system collects a bunch of data about movement on the ground. The problem is Northrop created a proprietary mechanism for getting the data off of the plane. So now the government has to buy the plane and the system to get the data. (3) Was there another way to solve the problem? Example: Microsoft Sharepoint. There are so many sharepoint sites setup in the DOD it is complete waste. Every single unit thinks they need a sharepoint site because other units have sharepoint sites. No one is bothering to ask; hey instead of all setting up our own site why dont we just create a big repository where everyone can drop there (docs, ppts, xls, pdfs, etc...) and tag them with the unit they are from. So I would ask did you need this emails system? Are you perpetuating the problem of continuing to build proprietary systems? Is there another way to accomplish this task outside of an email system? Why did you need t1 lines by the way? Now to the Hammer and the bolt example you give. Instead of building a new bolt for every project and then having to test it and build spares etc... build a bolt that can be used on many projects. I have been in these contract meetings. The private companies intentionally build as many one off solution as possible so we have no choice but, to keep coming back to them. You say build a company and bid on contracts. If you work in contracts you know it is not that simple. I would love to if I had some help navigating the bureaucracy... Again give some more background on that project if you can.

<comment><AUTHOR> We're talking about two different things. The government decides its requirements, not the contractor. Essentially, the government says what it wants, and how you are to deliver it.

For the email example, they said how many servers, how many T1 lines, and how powerful they all had to be. They also wanted usage logs from the T1's for capacity planning. The contractor doesn't have input there.

That's essentially the case with the bolts as well. It's in the specification, the contractor doesn't have the power to say we are going to use these other bolts because they're standard. Items are specified in a specific way for a reason, with bolts, it's because those particular bolts absolutely have to stand up to the rated forces, because they're likely to experience them, with combat and all.

<comment><USER2> Right so the people creating the contracts are not doing their research. We need to spend more time thinking about how we do things so we dont pay for the same thing over and over. We need a way to make the fact that this bolt has been built public and accessible so if someone needs something similar they can contact the right folks and ask. Why would they say how many t1 lines are need and how many servers? That is silly. What if someone could get the same effect with less power and bandwidth? why wouldn't we use the superior solution. Again to make your point we would need to know what the ultimate goal of the system is and determine if indeed that was the only way to solve the problem. That is the whole point of having competition after all.

<comment><AUTHOR> "We need a way to make the fact that this bolt has been built public and accessible so if someone needs something similar they can contact the right folks and ask."

Not really. If you need a bolt that absolutely needs to be able to withstand the rated forces at the specified size and weight, it needs to be non- destructively tested. The expensive part isn't the bolt, it's the testing.

You don't want it to be tested when it's the last bolt left in a redundant pair and it sheers off.

"Why would they say how many t1 lines are need and how many servers? That is silly. What if someone could get the same effect with less power and bandwidth?"

Because they did a needs analysis and calculated the probable amount of bandwidth, and decided that redundancy was necessary as well. This stuff isn't just a guess, it is based on hard data.

<comment><USER2> Can you provide the analysis? It seems like you are doing some hand waving and have resolved that fact that this solution was the only solution which I am skeptical of. Perhaps you can provide the RFP?

</comment></comment></comment></comment></comment><comment><USER3> As someone who supplies $400 hammers to the government I assure you that $395 of that is the cost of all those man-hours needed to produce all the docs and ppts needed to explain why they need that hammer, what kind of nails it can pound, why we built it the way we did, and how it is intended to be used. It's not nearly as much of a ripoff as most people with an agenda would like to think.

Your tax dollars hard at work, I suppose.

<comment><USER4> Not all such perversions are justifiable:

[http://www.lessonsoffailure.com/software/military- software-s...](http://www.lessonsoffailure.com/software/military-software- sucks/)

</comment></comment><comment><USER5> This article would have been a lot better with a bit of context at the beginning. I vaguely remember hearing something about the "$400 hammer" contract, but he speaks of "the bolt" and "the hammer" as if we're continuing a conversation. Otherwise, good article.

<comment><USER6> Agreed. I vaguely recall some Doonesbury or Bloom County jokes about it in the eighties.

Apparently there was also a $7,600 coffee maker.

</comment></comment><comment><USER7> The biggest problem I have with defense contracting is that the people in the contracting office often are not subject matter experts in what they buy.

This is less true with vehicles, pencils, etc. It is particularly true with IT. I'm not very familiar with the huge weapons systems purchases -- those are probably subject to a lot of other factors since there are only a few firms who can compete.

Part of this is due to the general government skills shortage in IT, but more that the top IT people tend to remain in operational roles, vs. going over to contracting.

The problems happen at the requirements phase -- government asking for very specific terms which exclude functional products, e.g. specifying file formats, number and type of hardware, etc. Sometimes this is for integration with existing government equipment, but more often it is because whoever specified the contract doesn't understand the set of possible solutions. In a lot of cases, too, a 95% solution that is COTS (and thus has less schedule risk, lower cost, etc.) is superior to a 100% solution which has to be custom built.

They HAVE gotten a lot better at this in the 1990s and 2000s. Part of the problem is an essentially limitless budget.

</comment><comment><USER8> This source article goes into depth on the original hammer issue and contains more information than the linked article: [http://www.thefreelibrary.com/The+case+for+the+$435+hammer-a...](http://www.thefreelibrary.com/The+case+for+the+$435+hammer-a04619906)

</comment><comment><USER9> the article explains the reasoning behind why this sort of accounting is allowed. that is not the issue, the issue is the abuse.

<comment><USER10> I quit working at a huge defense contractor last year (perhaps the largest in the world?), it's a big one... you know it. Some of the nonsense that they had going on included but was not limited to charging the government $150/hr at a rate of 1.5 lines of code per hour. The code that was being written was not being written by software engineers (it was mechanical engineers, and some other engineering disciplines, but no one that really knew how to write code) and was not being tested (integration tests, but not unit tests or anything).

The biggest piece of bullshit that I saw while working there was this: I was one of the few software engineers on my particular team. My code was more concise (by a factor of 3.5 on average) and contained an order of magnitude less bugs than the team's average bugs per sloc. This was expected because I was one of the few software engineers, it makes sense that my code would be better than a non-software engineer. I was approached by someone in a position of authority and told that the work I was doing was great, but I needed to slow down. I was told "I wasn't earning my value.", which is code speak for "You're working too fast, and if you slow down we can charge the government more because we bill by the hour."

I quite last September and haven't looked back.

<comment><USER9> these types of stories seem pretty ubiquitous in the public sector, but I worry that confirmation bias colors perception of it. I wish there was a way to do a anonymous but rigrous study on it.

<comment><USER11> It's not just the public sector. There are plenty of shady services firms (law and marketing especially) who work the same way. In those areas the only thing that mitigates abuse is essentially firm reputation and goodwill between individuals.

It's hard to design a contract that gives the right incentives to the right people. Because the government is essentially _banned_ from using goodwill and reputation as a basis for buying decisions (as it gets called cronyism and/or the old boys network) they are stuck trying and failing to enumerate a fair contract instead.

</comment></comment></comment></comment><comment><USER12> Sometimes the Defense department intentionally overpays certain contractors for cheap items as a means of funding secret, off-budget programs.

<comment><USER13> Source?

<comment><USER14> [at the secret government lab]

President Thomas Whitmore: I don't understand, where does all this come from? How do you get funding for something like this?

Julius Levinson: You don't actually think they spend $20,000 on a hammer, $30,000 on a toilet seat do you?

<http://www.imdb.com/title/tt0116629/quotes>

</comment></comment></comment><comment><USER15> I was with you until the boo-hoo white men are so oppressed bit at the end. Exactly the opposite analysis of the first part, which is to say going beyond the soundbite and into the larger context.

<comment><USER16> I totally agree. It all got a little Rush Limbaugh at the end. For some perspective, the top 5 Government contractors are:

1 Lockheed Martin Corp. $14,983,515,367 2 Boeing Co. $10,838,231,984 3 Northrop Grumman Corp. $9,947,316,207 4 General Dynamics Corp. $6,066,178,545 5 Raytheon Co. $5,942,575,316

Here are the CEOs of those companies...

<http://littlesis.org/person/1931/Robert_J_Stevens> <http://littlesis.org/person/1418/W_James_McNerney_Jr> <http://littlesis.org/person/1052/Dr_Ronald_D_Sugar> <http://littlesis.org/person/2363/Nicholas_D_Chabraja> [http://www.raytheon.com/ourcompany/rtnwcm/groups/public/docu...](http://www.raytheon.com/ourcompany/rtnwcm/groups/public/documents/image/rtn_leaders_swanson_lg.jpg)

All white men, if anything they should up the affirmative action programs in my opinion. Oh, and stop spending so much of our money on military and start putting it into public healthcare and education.

<comment><USER7> There's also preference for small businesses, service related disability, veteran, etc. on certain contracts. I'd like to see female and minority preference phased out over time (which it is) due to their success in the overall marketplace, but at present I can see some benefit to keeping preference.

</comment></comment></comment><comment><USER17> All this is fine and well but it fails to address the fact that the way things are currently done is not the right way to do things.</comment>


Retirement Benefits Are to White Collar Crime What Handguns Are to Street Crime - <AUTHOR> https://larrylittlefield.wordpress.com/2019/05/25/retirement-benefits-are-to-white-collar-crime-and-generational-inequity-what-handguns-are-to-street-crime/ <comment><USER2> For anyone who was drawn in by the analogy and wanted to know how they support it, they don't: it never appears in the body of the article.

<comment><USER3> The title is poor and there are a few angry typos but overall this appears closely reasoned. I say appears because it would take a lot of unpicking to be sure.

I don't understand why this is flagged really.

<comment><USER2> I don't know about the flagging either; just talking about the analogy in the title, which was a trick hook.

</comment></comment></comment><comment><USER4> I'm treating any retirement benefit I have as essentially worthless unless it's a defined contribution cash amount in a fund in my name. For example I'm not realistically planning on my state or military pensions existing in thirty years.

<comment><USER5> Losing those is highly, highly unlikely.

<comment><USER4> The government already varies state retirement age and pension amount whenever they want. How can you sensibly factor an unknown amount at an unknown age into your retirement planning?

</comment></comment></comment><comment><USER6> This article is useful for showing how some workers can get screwed in the transition from a pension to a defined contribution plan.

I don't think it's sound on social security. Something needs to happen and nobody really knows how the political system will react. But it seems like the most likely scenario is some combination of deficit spending and more taxes, because cutting benefits is politically untouchable.

<comment><USER7> The cap on taxable SSI wages went up 7% in 2017 and no one really noticed or complained. It's a relatively progressive way to keep things funded. I don't see why we'd need to do much else.

<comment><USER8> Currently, only 8% of wage earners are over the $128400 social security maximum.

[https://dqydj.com/income-percentile-calculator/](https://dqydj.com/income- percentile-calculator/)

The social security tax is actually regressive to an extent. If you make between $82500 and $128400 your marginal tax rate is higher than someone making between $128400 and $157500. So there is that.

</comment></comment></comment><comment><USER9> My employer froze pension benefits at current salary level, freezing people out of 20 years of salary growth. I switched 17 years ago to the portable pension plan (annuity), which was probably the wise thing to do. At least I can convert that lump sum to an IRA, or choose a pension (won't do that).

The really dirty thing they did a few years ago was promise medical benefits to those that retired that year, then promptly pulled them a year later.

At least I have been maxing out my 401k for 20 years.

</comment><comment><USER10> I once calculated that if the same percentage of the population was eligible for Social Security retirement benefit as when the program started under FDR, the retirement age would be closer to 75.

<comment><USER11> Being 75 after a lifetime in an office job versus after a lifetime as a diner waitress are two very different things.

<comment><USER12> What's the difference? I can think of lots of advantages for both.

<comment><USER11> Physical labor is harder on the body and takes a toll. Retiring at 75 is unreasonable for them, they can't continue to work like that into their late 60s</comment></comment></comment></comment>


MIT has just announced a $1B plan to create a new college for AI - <AUTHOR> https://www.technologyreview.com/f/612293/mit-has-just-announced-a-1-billion-plan-to-create-a-new-college-for-ai/ <comment><USER2> 2018\. One year ago today.

</comment><comment><USER3> why does AI have to go to college</comment>


PyParallel: How we removed the GIL and exploited all cores - <AUTHOR> https://speakerdeck.com/trent/pyparallel-how-we-removed-the-gil-and-exploited-all-cores <comment><USER2> A quick summary, from the slides:

The mechanism PyParallel uses is that it still has the one, main thread with GIL. It also has parallel threads with their own heap and a trivial pointer- incrementing allocator in a thread-local pool that deallocates on completion by dropping the whole pool. Either the main thread is running, in typical Python fashion, or some parallel threads are running. When parallel threads are running, the main Python heap is all marked read-only and all reference counting is disabled. I believe communication from parallel threads to the main thread is done by sending serialised objects.

<comment><AUTHOR> InfoQ did a surprisingly accurate summation, too: [http://www.infoq.com/articles/PyParallel](http://www.infoq.com/articles/PyParallel)

> I believe communication from parallel threads to the main thread is done by > sending serialised objects.

That's one of the open areas of exploration... how do you share things in a shared-nothing approach? This isn't as important for stateless I/O-driven applications (like an HTTP server), but it becomes very important when trying to leverage PyParallel for, well, exactly that, parallel computation.

</comment></comment><comment><AUTHOR> If you want to see me try get through 153 slides in 45 minutes (and fail), this talk was recorded here: [http://vimeo.com/79539317](http://vimeo.com/79539317).

There's a more recent but slightly shorter deck that focuses more on the general concurrency/parallelism problem here: [https://speakerdeck.com/trent/parallelism-and-concurrency- wi...](https://speakerdeck.com/trent/parallelism-and-concurrency-with-python)

<comment><USER3> > 153 slides in 45 minutes (and fail)

less is more :) one one the best and most memorable talks i went to was 4 slides long.

that said i've been thinking a lot the past week or so about a machine i can dedicate to scientific computing, preferably using Sage noteboks or something like that. i have some long running evaluations (graphs) that i would rather not crush my laptop for. and so i get to thinking about the kind of machine i want to do this on, something parallel is tempting because of the higher speed gains. that said, i'm wondering if that would help Python (and hence Sage) or not. so now i'm looking at something like iJulia (Julia in an IPython notebook) and cobbling together something like this.

than i see your parallel python mods and wonder if i should try this. should i? will it help me in my use case (speeding up a Sage server)?

<comment><USER4> My guess is that you can't drop in PyParallel without any work of porting Sage because it's not clear how you would pass objects around like those used for GAP. Sage also would have to be rewritten to use this new API of implementing protocol-based classes.

You probably don't want to use all of Sage for that anyway because you are most likely not using GAP, for example. Instead gut out parts of Sage and look at IPython's interface to Spark [http://nbviewer.ipython.org/gist/JoshRosen/6856670](http://nbviewer.ipython.org/gist/JoshRosen/6856670) or implement a protocol for your specific computation and use PyParallel.

I highly doubt you just point to new a Python implementation and tell Sage to just roll with it and expect things to be automagically faster.

Also, if you have a long running job, then why would you do it in a notebook that requires you to keep your browser open?

<comment><AUTHOR> ^^^ what turnersr said.

(Spot on, by the way.)

</comment></comment></comment></comment><comment><USER5> I'm really glad to see some of the Python committers taking a serious look at the GIL. Python is either posed for great victory (given its rapid rate of adoption in academia) or slow failure (given the rapid rate at which server apps are starting to migrate from Python to Go).

However, between accomplishments like Micropython (huge potential for Python on mobile/resource constrained devices) , PyPy's slow but steady gains, and projects like this, it's at least an interesting time for Pythonistas.

Now, if we could only get an optional static type checker... (heresy, I know). Dynamic typing is great for quick prototyping, and I would never want to lose that in Python, but I'm very uneasy now taking on any large projects or long- term projects without static typing. Mypy holds some promise here, but I think it will take sponsorship from a big company to push something like this to a mature state.

<comment><USER6> > (given the rapid rate at which server apps are starting to migrate from > Python to Go).

Do you have data for this claim or is it a hunch? I've seen this meme repeated a lot in HN.

<comment><USER5> Thank you for not asking in a rude and confrontational manner.

No, I don't have any solid data, but I do think the majority of people posting about Go on HN have either Python or Ruby backgrounds. I 've also found a lot of Python people in the Rust community (which I personally prefer vastly to Go).

People need more performance, particularly multicore performance. Traditional Python supporters can put their head in the sand about this if they want, but these highly-performant new languages have clearly found a niche among Python folks tired of trying to optimize all the time.

And yes, there's a fine line between conducting needed optimizations and wasting time prematurely optimizing, but people would clearly rather spend a little more time up front in exchange for a big speedup. The choice is no longer between C and Python -- there's a nice middle ground.

<comment><USER6> > No, I don't have any solid data, but I do think the majority of people > posting about Go on HN have either Python or Ruby backgrounds.

Right. I find it odd because I don't get why Go is a supposed replacement for Python. Does Go have a framework like Django, a good SQL API/ORM, numerical computing packages, scientific packages, machine learning? This is where I see people using Python the most.

> And yes, there's a fine line between conducting needed optimizations and > wasting time prematurely optimizing, but people would clearly rather spend a > little more time up front in exchange for a big speedup

Yeah, fast by default is not only acceptable but desirable, I don't think using a modern compiled language counts as premature optimization. It doesn't look like using Go is a lot more complex/time consuming than Python, you lose some flexibility but win others (e.g., being able to distribute binaries).

<comment> vertex-four Go is vaguely Pythonic (extensive stdlib, and generally adheres to the Zen of Python). Even if there's not much in terms of frameworks, it's great for replacing small parts of a server that have to handle a lot of load. A lot of people have existing Python servers that grew into being performance hotspots. It fits into the sort of niche that node.js does.

Personally, I'm not keen on it - I find that roughly 2/3rds of my code end up being error handling - and hope Rust eventually takes off.

</comment></comment></comment></comment></comment><comment><USER7> Is there some mechanism to selectively escape the protection of each thread's memory? If not, how do I communicate between threads if my application has some kind of shared state? Do I have to pass any messages to the main thread each time, for it to be forwarded to another parallel thread? Does that create a kind of BSP-style point where all the parallel threads stop and the main thread has to synchronise between them? How do you stop this becoming a bottleneck, and how do you load manage if all parallel threads have to stop to allow the main thread to run?

<comment><AUTHOR> So, I have actually spent a lot of time thinking about these exact problems, but it would have been too overwhelming to try include that information in this initial deck.

I'm not even sure if I can adequately summarize it here :-)

(I'm planning on covering this stuff in a subsequent presentation.)

I played around with a few approaches to the things you're asking. Had good results with specialized interlocked container-type classes (e.g. xlist(); a simplified list-type object) that parallel threads could use to persist simple scalar objects (string, int, bytes).

I think there's definitely room for sharing techniques that exploit the fact that threads inherently share address space -- I don't want to say that shared-nothing is the only paradigm supported and all communication must be done by message passing (like Rust?), because that's not the best solution for all problems.

As for the main-thread/parallel-thread pause/run relationship... it won't be as black and white as I allude to in the deck -- the main thread will still be running, albeit with a limited memory view (i.e. you'll be restricted with what you can do in the main thread whilst parallel threads are running).

Ideally, the only time all the parallel threads get paused is when global state needs to be updated by the main thread. Constantly pausing the parallel threads just because the main thread needs to do some periodic work won't be ideal.

The application you're referring to... is it something that exists, or are you just using hypothetical examples? I'm always curious to hear of architectures where threads need to constantly talk to each other in order for work to get done -- does your app fit this bill?

<comment><USER7> I'm just talking theory, but there is a whole class of applications that are very difficult to express without any shared state, or state shared by relative expensive message passing.

The Lonestar benchmark suite from Texas includes good examples [http://iss.ices.utexas.edu/?p=projects/galois/lonestar](http://iss.ices.utexas.edu/?p=projects/galois/lonestar).

<comment><AUTHOR> Thanks for the pointer to Lonestar, I'll review. (PDF link to the relevant paper: [http://iss.ices.utexas.edu/Publications/Papers/ispass2009.pd...](http://iss.ices.utexas.edu/Publications/Papers/ispass2009.pdf))

Re: target problems... the catalyst behind PyParallel can ultimately be tied back to the discussions on python-ideas@ in Sept/Oct 2012 that led to Python 3.4's asyncio.

I wanted to show that, hey, there's a different way you can approach async I/O that, when paired with better kernel I/O primitives, actually allows you to exploit parallelism too (i.e. use all my cores).

I'm particularly interested in problems that are both I/O-bound (or driven) _and_ compute heavy, which is common in the enterprise. The parallel aspect of PyParallel is an area I'm still flushing out (I wanted to get the async stuff working first, and I'm happy with the results). I definitely want to spend the next sprint focusing on using PyParallel for parallel computation problems, where you typically go from sequential execution, fan out to parallel compute, then fan back in to sequential execution. This is common with aggregation- oriented "parallel data" problems.

I'm definitely less familiar with problems that inherently require a lot of cross-talk between threads, like the agglomerative clustering referred to in that paper linked above.

Now, all that being said, I did have some good results simply wrapping Windows' synchronization primitives ([http://msdn.microsoft.com/en- us/library/windows/desktop/ms68...](http://msdn.microsoft.com/en- us/library/windows/desktop/ms686360.aspx)) and exposing via Python: [http://hg.python.org/sandbox/trent/file/0e70a0caa1c0/Lib/asy...](http://hg.python.org/sandbox/trent/file/0e70a0caa1c0/Lib/async/test/test_primitives.py#l427)

Things like `async.signal_and_wait(object1, object2)` are actually pretty darn useful. Again, it's thanks to the vibrant set of synchronization primitives provided by Windows.

</comment></comment></comment></comment><comment><USER8> So writing to the main thread from a parallel context crashes the thread, but what about interrupting a parallel thread from the main thread and send data to it? Not that one should do something like that but how does PyParallel handle it? Also, what would PyParallel look like if it has to support all these _NIX systems? As the OP pointed out, all we do now for "async IO" on these _NIX is basically polling the crap out of the OS.

<comment><AUTHOR> > So writing to the main thread from a parallel context crashes the thread

Well... er, that's a bit of a vague sentence :-)

> but what about interrupting a parallel thread from the main thread and send > data to it?

That is the most UNIX-ey signal-ly thing I've ever heard :-) That's sort of what's wrong with signals on UNIX, a paradigm that's useful at the process level when you have one thread of execution, but falls apart in a multithreading world.

The correct approach is to use a mechanism like IOCP: [https://speakerdeck.com/trent/pyparallel-how-we-removed- the-...](https://speakerdeck.com/trent/pyparallel-how-we-removed-the-gil-and- exploited-all-cores?slide=63)

That slide depicts how the kernel pushes completion packets onto an I/O completion port, such that they can be processed by waiting threads, but that's just one example. _Anything_ can push a completion packet to an IOCP -- in fact, that's exactly how you'd get your parallel worker threads to gracefully shutdown: have the main thread enqueue a "shutdown please" completion packet (via PostQueuedCompletionStatus()), which you'd detect in your parallel threads.

> Also, what would PyParallel look like if it has to support all these NIX > systems?

The GIL-sidestepping techniques via Py_PXCTX are conceptually platform independent -- they'll work fine on any POSIX platform (although things like interlocked lists that I get for free on Windows and OS X will need to be re- implemented on other platforms).

The intrinsic pairing between asynchronous I/O and parallelism (that is, automatically and efficiently handling work in an I/O-driven system on all hardware cores) _needs_ kernel-level support: [https://speakerdeck.com/trent/parallelism-and-concurrency- wi...](https://speakerdeck.com/trent/parallelism-and-concurrency-with- python?slide=27)

Linux and BSD are the odd ones out here. AIX copied the IOCP API verbatim soon after NT 4.0 came out (I suspect they recognized a good thing when they saw it!), Solaris implemented something very close with event ports (except for the kernel being cognizant of event port concurrency, which is a key piece), and OS X got Grand Central Dispatch, which is a wildly different API (and a bit nicer, to be honest), but semantically equivalent to IOCP+threadpools on Windows.

There are two outcomes re: Linux/BSD/POSIX support.

1\. They implement the same kernel-level primitives for async I/O and synchronization supported by Windows/OSX, which PyParallel would be able to use directly.

2\. They don't, so the PyParallel-backend is implemented via existing primitives (epoll/kqueue etc).

I'm of the opinion that the Windows kernel-level primitives are fundamentally superior at the architectural level compared to the existing facilities provided by Linux/BSD/POSIX, evidenced by: a) better performance on identical hardware, b) less code required to achieve the desired effect, and c) much cleaner code versus the alternative.

</comment></comment><comment><USER9> Could someone more knowledgeable please comment if this is Windows only? And if yes, could the mods append (Windows) to the submission title?

<comment><AUTHOR> There are two components to PyParallel: the alternate approach to async I/O afforded by Windows and IOCP, and the changes to CPython that facilitate multiple interpreter threads running simultaneously in parallel.

The latter is, at a conceptual level, not limited to Windows.

The proof-of-concept implementation that pairs the two concepts is Windows- only, at the moment, because Windows simply has better out-of-the-box scaffolding for this sort of stuff: [https://speakerdeck.com/trent/parallelizing-the-python- inter...](https://speakerdeck.com/trent/parallelizing-the-python-interpreter- the-quest-for-true-multi-core-concurrency?slide=26)

As for non-Windows implementations, there _are_ other operating systems out there that provide similar primitives: AIX copied the IOCP API from Windows verbatim, Solaris has event ports, and OS X got GCD.

I'd love to see the Linux kernel provide semantically equivalent primitives. You simply can't achieve the same affect without kernel-level thread dispatching support tied into the mix ([https://speakerdeck.com/trent/parallelism-and-concurrency- wi...](https://speakerdeck.com/trent/parallelism-and-concurrency-with- python?slide=27)).

<comment><USER9> Thank you for explaining that! So, theoretically OSX could use this paradigm assuming PyParallel is (re?)written making use of GCD? How likely do you feel this will happen and sooner/later?

<comment><AUTHOR> Yup, OS X wouldn't be that hard to port to at all as all the primitives I need are provided already by the OS. Vastly different APIs so still a bit of code needed, but definitely viable.

I'd love to see that happen before the year is out :-)

</comment></comment></comment></comment><comment><USER10> Very intriguing, thanks for the excellent slides.

Is it possible to know the thread ID efficiently on Linux or other *NIX systems, using a similar fashion presented for Windows in the slides? I have no idea on how much calling pthread_self() every time impacts the performance, but it would be better if a faster method is available.

<comment><USER11> Speculating here, but all that method needs to do is access some thread record struct. The big question is whether it does a context switch to access this struct in memory every time. Maybe the struct is in some read-only memory, and can be read from user space, but not written?

<comment><USER12> On i386 and amd64 on essentially all operating systems there is some kind of thread description structure that is accessible through one of segment registers which contains low-level thread context, some way to get to thread ID and user-accessible space for thread local variables (or pointer to such space). Getting some kind of thread ID is thus only about one "mov dest, [?S: some offset]", which is what both pthread_self() on linux and GetCurrentThreadId() on windows does (note that linux stores pointer to pthread_t in there, windows stores some opaque number that you have to convert to handle yourself if you need handle. The point is that in both cases the function does not do any kind of involved computation as would be the case if it had to traverse list of currently running threads).

This mechanism is essentially the only reason why amd64 in long mode still has limited support (complete enough to implement this, nothing much more) for segment registers.

</comment></comment></comment><comment><USER13> Congratulations to @trentnelson on joining Continuum.

Does anyone (or Trent) know how this appointment will support or hinder further development of PyParallel? I assume that Continuum could accelerate this development or direct Trent's efforts to other areas.

Either way, I'm sure there will be benefits for the Python ecosystem.

<comment><AUTHOR> Thanks darkseas :-)

It's been a busy time since I first presented PyParallel to the core Python developers at PyCon last year -- incidentally it was also when I met Peter and Travis and joined Continuum.

I've since relocated from East Lansing to NYC, via visas and trips to Australia and whatnot, and have been very busy engaged with client consultancy here in NYC since arriving officially around July/August last year.

Peter (President) and Travis (CEO) are very supportive of PyParallel, and it's actually an incredibly good fit within Continuum's existing ecosystem. I'm primarily engaged with consultancy at the moment, but we're looking at having me spend more time on PyParallel development very soon. Watch this space!

</comment></comment><comment><USER14> A perfectly written parallel Python app without GIL would be ideally 8 times faster on an 8 core system, compared to stock Python.

Rewriting the original program in Java would make the program about 100 times faster... on one core.

Now let's see. We deal with hacked Python, with complex error-prone thread synchronization code in Python for 8x gain, or grab the 100x gain in a single thread in Java?

While I don't mind Python getting faster, threading should be the last thing to try before everything else is exhausted in order to make Python run fast in one thread.

<comment><USER15> Give me Numpy, Scipy, Matplotlib, Scikit-learn, and iPython in Java and we are talking.

<comment><USER16> I think you missed his whole point. Whoosh.

His point was about using Java instead of Python. It was that at best, a perfect parallel CPython can yield a N times more performant program (where N = number of cores). And that's for a perfect parallel CPython, and only when there's very little sync/sharing overhead and the program is also fully parallelizable. So, even for an 8 core machine, parallelizing Python can yield at best c*8 better performance, where c < 1.

Now, what he says is, there are languages that run stuff 10 and 100 times faster than CPython on a SINGLE core. So maybe start from there (improving single core CPython performance), something which has much more room to speed up our code, even if it's not parallel.

<comment><USER17> I think you missed his whole point. Whoosh.

His point was about using the language with the most productive / fastest libraries. Single-thread python vs 8-thread python vs java makes no difference if the majority of your processing time is spent inside a highly optimised native library.

<comment><USER16> I think you missed my whole point. Whoosh.

I (or the OP) didn't tell anybody to use Java instead of Python. What we said is that it will be better for performance to optimize CPython's core speed instead of its multi-core capabilities.

So the remark about Python having more libs than Java is beside the point, since Java wasn't mentioned as a migration option, but as an example of how far single-core performance can be taken, and as an advice to try to get some of that to Python.

Oh, and the "but still it doesn't matter because Python has fast native libs" is not an argument either, because if that was enough people wouldn't care about parallelizing Python to get more speed. Which was the whole topic that started this thread.

<comment><USER17> I think you missed my whole point. Whoosh. (PS. This is silly :P)

> if [native code] was enough people wouldn't care about parallelizing Python

They would, for the same reason that they care about parellelizing Java -- once you're hitting the limits of single-thread speed (whether it's by being fast yourself or by having fast extensions), multithreading is next on the list.</comment></comment></comment></comment></comment></comment>


Visualizing Fitts's Law (2007) - <AUTHOR> http://particletree.com/features/visualizing-fittss-law/ <comment><USER2> IIRC this is one of the reasons the UI on the Mac opted for a fixed context- dependant menu bar at the top of the screen instead of the per-window one used by Windows (and Java).

It's basically 'fling your pointing device at the top' and 'go left or right to get the button you want'. Due to the lack of borders/stops, this would be harder if it was sandwiched between a titlebar and window content.

<comment><USER3> The reasoning is that mouse stops the border of the screen no matter how far the mouse is moved, making an effective target that is huge off the screen, so easy and quick to hit. This would hold true even with large screens, unless you dial down the acceleration of the mouse for fine control--as others have pointed out.

But the issue is Apple broke the whole mechanism with hot corners. Now if I move fast anywhere near a hot corner, it gets activated. And now the menu bar near the corners is tiny and hard to hit with a "huge" hot corner right nearby (the hot corner gets the benefit of the inifinte off-screen target). I find the same problems will full-size browsers (with tabs along the top), I'm always hitting the hot corners instead of the top lerpft and right tabs. I guess I can always change my corner settings.

Additional gripe about the top menu in MacOS: the biggest fault I've found is that it can be active for an app whose windows are hidden or that currently have any windows, thus creating a mismatch between what you see (other windows) and what is active (responding to keyboard shortcuts for example).

<comment><USER4> > But the issue is Apple broke the whole mechanism with hot corners.

Well I always hated hot corners, and anyway by default they're disabled on macOS.

</comment></comment></comment><comment><USER5> The engineers way of thinking about Fitt's Law is as a human control system. We motion control our hands by using feedback (visual, tactile, proprioceptive). The servo time response to a step function (new location to click) of that feedback loop depends on the required accuracy and allowed overshoot. The larger the target, the higher a velocity/acceleration you can use to hit it without missing. You learn very quickly that large objects (like edge of screen) allow much more gross movements than single pixel target... and the farther you have to go the larger the time at a given tracking velocity.

What is at least as interesting is the cognitive load of tracking/pointing, clicking/chording . Mental load and apparent time appear to be the reason why typing can be slower than a menu system, but it feels faster. Similarly, people will report a feeling like a trackpoint (IBM keyboard nipple) takes longer than a mouse even when they're actually faster in hitting targets. Presumably, this is because they have to track the cursor to know velocity and position, while a mouse or touchpad uses your body's knowledge of hand position/velocity that is missing from a force based input.

What you're used to feels right in any case.

</comment><comment><USER6> And after you've read that, give yourself The Quiz!

[http://www.asktog.com/columns/022DesignedToGiveFitts.html](http://www.asktog.com/columns/022DesignedToGiveFitts.html)

</comment><comment><USER7> Laws of UX has a nice overview of the different laws that exist in user experience! Fitt's law: [https://lawsofux.com/fittss- law](https://lawsofux.com/fittss-law)

<comment><USER8> Principles of interaction design has even more entries and is quite detailed. Unfortunately, it's a book that isn't free!

<comment><USER9> I think you meant: "Principles of Interactive Design" by Lisa Graham. Right?

<comment><USER8> No. I got the name completely wrong:

[https://books.google.com/books?id=3RFyaF7jCZsC&printsec=fron...](https://books.google.com/books?id=3RFyaF7jCZsC&printsec=frontcover&dq=universal+principles+of+interaction+design&hl=en&sa=X&ved=0ahUKEwjlma7GwfbZAhUSz2MKHWjdA3AQ6AEIJDAA#v=onepage&q=universal%20principles%20of%20interaction%20design&f=false)

Universal principles of design. The book is like an encyclopedia of design principles.

</comment></comment></comment></comment><comment><USER10> On some early graphical computer user interface, I can't remember which one, one could specify that the mouse cursor would "wrap" to the opposite edge. It was like the ultimate non-Fitt's law configuration. I hated it when I tried it, I would lose the cursor and not be able to find it.

<comment><USER11> Just to be pedantic, while somewhat related, that's not Fitts Law.

Fitts Law is specifically about targeting.

The 'feature' to wrap the pointer may compound targeting issues but it's secondary. Again, Fitts' is about distance to and size of a target.

<comment><USER10> You're right. What I discovered was that I would lose the mouse cursor because I couldn't quickly move it to an edge without tracking it visually all the way to begin with and once the cursor crosses the edge it breaks visual continuity by jumping to the opposite side. Today's multimonitor configurations have the same problem to some extent because they have so much area with small discontinuities at the edge where the cursor jumps to a different monitor.

</comment></comment></comment><comment><USER12> Windows 8 Start UI was designed to take advantage of this. Theoretically it was great: when you open start menu the mouse pointer is in the bottom left corner, tiles close to you are wide and tall, tiles far from the pointer are smaller, wider at the bottom, narrower at the top. Hot corners were supposed to be easily accessible (infinite distance). Yet is was a failure, because uses were not familiar with it, it broke their habits.

<comment><USER13> The whole problem with the tiles is that they are much too big. Bigger targets are easier to click, but targets farther away are again harder to click. The targets in the start menu were plenty big to start with anyways.

</comment></comment><comment><USER14> Previous discussion : [https://news.ycombinator.com/item?id=11208463](https://news.ycombinator.com/item?id=11208463)

I posted this in previous discussion too, a much simpler explanation : [https://www.youtube.com/watch?v=E3gS9tjACwU](https://www.youtube.com/watch?v=E3gS9tjACwU)

</comment><comment><USER15> Clicks edge of screen above NetworkManager icon ... Confirms it's still broken in XFCE 4.

</comment><comment><USER16> How does this work with radial menus and touch interfaces?

<comment><USER17> Pie menus benefit from Fitts' Law by minimizing the target distance to a small constant (the radius of the inactive region in the menu center where the cursor starts) and maximizing the target area of each item (a wedge shaped slice that extends to the edge of the screen).

They also have the advantage that you don't need to focus your visual attention on hitting the target (which linear menus require), because you can move in any direction into a big slice without looking at the screen (while parking the cursor in a little rectangle requires visual feedback), and you can learn to use them with muscle memory, with quick "mouse ahead" gestures.

[http://www.donhopkins.com/drupal/node/100](http://www.donhopkins.com/drupal/node/100)

An Empirical Comparison of Pie vs. Linear Menus

Jack Callahan, Don Hopkins, Mark Weiser (+) and Ben Shneiderman. Computer Science Department University of Maryland College Park, Maryland 20742 (+) Computer Science Laboratory, Xerox PARC, Palo Alto, Calif. 94303. Presented at ACM CHI'88 Conference, Washington DC, 1988.

Abstract

Menus are largely formatted in a linear fashion listing items from the top to bottom of the screen or window. Pull down menus are a common example of this format. Bitmapped computer displays, however, allow greater freedom in the placement, font, and general presentation of menus. A pie menu is a format where the items are placed along the circumference of a circle at equal radial distances from the center. Pie menus gain over traditional linear menus by reducing target seek time, lowering error rates by fixing the distance factor and increasing the target size in Fitts's Law, minimizing the drift distance after target selection, and are, in general, subjectively equivalent to the linear style.

[http://www.donhopkins.com/drupal/node/98](http://www.donhopkins.com/drupal/node/98)

The Design and Implementation of Pie Menus -- Dr. Dobb's Journal, Dec. 1991

There're Fast, Easy, and Self-Revealing.

Copyright (C) 1991 by Don Hopkins.

Originally published in Dr. Dobb's Journal, Dec. 1991, lead cover story, user interface issue.

Introduction

Although the computer screen is two-dimensional, today most users of windowing environments control their systems with a one-dimensional list of choices -- the standard pull-down or drop-down menus such as those found on Microsoft Windows, Presentation Manager, or the Macintosh.

This article describes an alternative user-interface technique I call "pie" menus, which is two-dimensional, circular, and in many ways easier to use and faster than conventional linear menus. Pie menus also work well with alternative pointing devices such as those found in stylus or pen-based systems. I developed pie menus at the University of Maryland in 1986 and have been studying and improving them over the last five years.

During that time, pie menus have been implemented by myself and my colleagues on four different platforms: X10 with the uwm window manager, SunView, NeWS with the Lite Toolkit, and OpenWindows with the NeWS Toolkit. Fellow researchers have conducted both comparison tests between pie menus and linear menus, and also tests with different kinds of pointing devices, including mice, pens, and trackballs.

Included with this article are relevant code excerpts from the most recent NeWS implementation, written in Sun's object-oriented PostScript dialect.

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

Demo of Pie Menus in SimCity for X11. Ported to Unix and demonstrated by Don Hopkins.

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

Pet Rock Remote Control: Pie menu remote control touch screen interface for sending commands to pet rocks.

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

MediaGraph Music Navigation with Pie Menus Prototype developed for Will Wright's Stupid Fun Club: This is a demo of a user interface research prototype that I developed for Will Wright at the Stupid Fun Club. It includes pie menus, an editable map of music interconnected with roads, and cellular automata.

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

The Sims, Pie Menus, Edith Editing, and SimAntics Visual Programming Demo: This is a demonstration of the pie menus, architectural editing tools, and Edith visual programming tools that I developed for The Sims with Will Wright at Maxis and Electronic Arts.

<comment><USER16> Thanks for the references!

Any idea why these are not often used with touchscreen mobile interfaces, e.g. press for contextual pie menu? Even without OS support, they could be implemented within apps.

<comment><USER17> There have been various implementations of pie menus for Android [1] and iOS [2]. And of course there was the Momenta pen computer in 1991 [3], and I developed a Palm app called ConnectedTV [4] in 2001 with "Finger Pies" (cf Penny Lane ;). But Apple has lost their way when it comes to user interface design, and iOS isn't open enough that a third party could add pie menus to the system the way they've done with Android. But you could still implement them in individual apps, just not system wide.

Also see my comment above about the problem of non-transparent fingers.

Swiping gestures are essentially like invisible pie menus, but actual pie menus have the advantage of being "Self Revealing" [5] because they have a way to prompt and show you what the possible gestures are, and give you feedback as you make the selection.

They also provide the ability of "Reselection" [6], which means you as you're making a gesture, you can change it in-flight, and browse around to any of the items, in case you need to correct a mistake or change your mind, or just want to preview the effect or see the description of each item as you browse around the menu.

Compared to typical gesture recognition systems, like Palm's graffiti for example, you can think of the gesture space of all possible gestures between touching the screen, moving around through any possible path, then releasing: most gestures are invalid syntax errors, and they only recognizes well formed gestures.

There is no way to correct or abort a gesture once you start making it (other than scribbling, but that might be recognized as another undesired gesture!). Ideally each gesture should be as far away as possible from all other gestures in gesture space, to minimize the possibility of errors, but in practice they tend to be clumped (so "2" and "Z" are easily confused, while many other possible gestures are unused and wasted).

But with pie menus, only the direction between the touch and the release matter, not the path. All gestures are valid and distinct: there are no possible syntax errors, so none of gesture space is wasted. There's a simple intuitive mapping of direction to selection that the user can understand (unlike the mysterious fuzzy black box of a handwriting recognizer), that gives you the ability to refine your selection by moving out further (to get more leverage), return to the center to cancel, move around to correct and change the selection.

Pie menus also support "Rehearsal" [7] -- the way a novice uses them is actually practice for the way an expert uses them, so they have a smooth learning curve. Contrast this with keyboard accelerators for linear menus: you pull down a linear menu with the mouse to learn the keyboard accelerators, but using the keyboard accelerators is a totally different action, so it's not rehearsal.

Pie menu users tend to learn them in three stages: 1) novice pops up an unfamiliar menu, looks at all the items, moves in the direction of the desired item, and selects it. 2) intermediate remembers the direction of the item they want, pop up the menu and moves in that direction without hesitating (mousing ahead but not selecting), looks at the screen to make sure the desired item is selected, then clicks to select the item. 3) expert knows which direction the item they want is, and has confidence that they can reliably select it, so they just flick in the appropriate direction without even looking at the screen.

I wrote some more stuff about pie menus in the previous discussion of Fitts' Law. [8]

[1] Android Pie Menus: [https://play.google.com/store/apps/details?id=com.lazyswipe](https://play.google.com/store/apps/details?id=com.lazyswipe)

[2] iOS Pie Menus: [https://github.com/tapsandswipes/iphone-pie- menu](https://github.com/tapsandswipes/iphone-pie-menu)

[3] Momenta Pen Pie Menus: [https://www.microsoft.com/buxtoncollection/detail.aspx?id=17...](https://www.microsoft.com/buxtoncollection/detail.aspx?id=170)

[4] Palm ConnectedTV Finger Pie Menus: [http://uk.pcmag.com/connectedtv/29965/review/turn-your- palm-...](http://uk.pcmag.com/connectedtv/29965/review/turn-your-palm-into-a- tv-remote)

[5] Self Revealing: [http://uxmag.com/sites/default/files/uploads/Brave-NUI- World...](http://uxmag.com/sites/default/files/uploads/Brave-NUI-World-Sample- Chapter.pdf)

Self-revealing gestures are a philosophy for design of gestural interfaces that posits that the only way to see a behavior in your users is to induce it ( afford it, for the Gibsonians among us). Users are presented with an interface to which their response is gestural input. This approach contradicts some designers' apparent assumption that a gesture is some kind of "shortcut" that is performed in some ephemeral layer hovering above the user interface. In reality, a successful development of a gestural system requires the development of a gestural user interface. Objects are shown on the screen to which the user reacts, instead of somehow intuiting their performance. The trick, of course, is to not overload the user with UI "chrome" that overly complicates the UI, but rather to afford as many suitable gestures as possible with a minimum of extra on-screen graphics. To the user, she is simply operating your UI, when in reality, she is learning a gesture language.

[6] Reselection: [https://www.billbuxton.com/PieMenus.html](https://www.billbuxton.com/PieMenus.html)

In general, subjects used approximately straight strokes. No alternate strategies such as always starting at the top item and then moving to the correct item were observed. However, there was evidence of reselection from time to time, where subjects would begin a straight stroke and then change stroke direction in order to select something different.

Surprisingly, we observed reselection even in the hidden menu groups. This was especially unexpected in the Marking group since we felt the affordances of marking do not naturally suggest the possibility of reselection. It was clear though, that training the subjects in the hidden groups on exposed menus first made the option of reselection apparent. Clearly many of the subjects in the Marking group were not thinking of the task as making marks per se, but of making selections from menus that they had to imagine. This brings into question our a priori assumption that the Marking group was using a marking metaphor, while the Hidden group was using a menu selection metaphor. This may explain why very few behavioral differences were found between the two groups.

Reselection in the hidden groups most likely occurred when subjects began a selection in error but detected and corrected the error before confirming the selection. This was even observed in the "easy" 4-slice menu, which supports the assumption that many of these reselections are due to detected mental slips as opposed to problems in articulation. There was also evidence of fine tuning in the hidden cases, where subjects first moved directly to an approximate area of the screen, and then appeared to adjust between two adjacent sectors.

[7] Rehearsal: [https://www.billbuxton.com/MMUserLearn.html](https://www.billbuxton.com/MMUserLearn.html)

Requirement: Novices need to find out what commands are available and how to invoke the commands. Design feature: pop-up menu.

Requirement: Experts desire fast invocation. Once the user is aware of the available commands, speed of invocation becomes a priority. Design feature: easy to draw marks.

Requirement: A user's expertise varies over time and therefore a user must be able to seamlessly switch between novice and expert behavior. Design feature: menuing and marking are not mutually exclusive modes. Switching between the two can be accomplished in the same interaction by pressing-and-waiting or not waiting.

Our model of user behavior with marking menus is that users start off using menus but with practice gravitate towards using marks and using a mark is significantly faster than using a menu. Furthermore, even users that are expert (i.e., primarily use marks) will occasionally return to using the menu to remind themselves of the available commands or menu item/mark associations.

[8] TLDR: bla bla bla pie menus bla bla bla. ;) [https://news.ycombinator.com/item?id=11219792](https://news.ycombinator.com/item?id=11219792)

</comment></comment></comment></comment><comment><USER18> We merged the earlier discussion ([https://news.ycombinator.com/item?id=16610903](https://news.ycombinator.com/item?id=16610903)) into this one.

I invited Kevin to repost his old article that was posted in 2007 but never got any discussion on Hacker News: [https://hn.algolia.com/?query=Visualizing%20Fitts%27s%20Law&...](https://hn.algolia.com/?query=Visualizing%20Fitts%27s%20Law&sort=byDate&dateRange=all&type=story&storyText=false&prefix=false&page=0).</comment>


A Proposal Generator Template for Freelancers - <AUTHOR> http://gun.io/blog/a-proposal-generator-template-for-freelancers/

<comment><USER2> Damn i thought my screen was super dirty but it was the fixed background lol. service looks useful too. Maybe if I start doing more freelancing this will be useful.</comment>


Advertising your software on Facebook (=Fail) - <AUTHOR> http://successfulsoftware.net/2010/11/12/advertising-your-software-on-facebook-fail/ <comment><USER2> In Facebook I can delete advertising using the X-button, and radioselect a reason (inappropriate, uninteresting, ...).

Do you get feedback on those actions, or does facebook use that only internal?</comment>


A Quantitative Approach to Product Market Fit - <AUTHOR> https://tribecap.co/a-quantitative-approach-to-product-market-fit/ <comment><USER2> Thanks for sharing this.

I also love it when venture capitalist firms share their knowledge.</comment>