<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><title>bosisler's shared items in Google Reader</title><language>en</language><managingEditor>noemail@noemail.org (bosisler)</managingEditor><lastBuildDate>Tue, 22 Sep 2009 22:22:27 PDT</lastBuildDate><generator>Google Reader http://www.google.com/reader</generator><description></description><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>The Search</title><link>http://xkcd.com/638/</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">(author unknown)</dc:creator><pubDate>Thu, 17 Sep 2009 21:00:00 PDT</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/78352670292e40d4</guid><description>&lt;img src="http://imgs.xkcd.com/comics/the_search.png" title="I am so excited about the Kepler mission. This is the second most important thing our species has ever done, right behind inventing the concept of delivery pizza." alt="I am so excited about the Kepler mission. This is the second most important thing our species has ever done, right behind inventing the concept of delivery pizza."&gt;</description><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">11760406602318236277</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">00249362911802403115</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">07677446722046255371</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">03641713801363831354</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">12135532746836323409</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">17338896065969400510</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">15687942234892547420</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">00336636927048158010</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">01257198879025517818</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">09284061551964605530</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">18195596315968849756</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">12576515014619286609</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">09077825778045571871</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">08178141419296508184</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">16181531287267937652</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">13345519443336942279</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">00319180390340199299</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">03274825852134955930</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">07613539665544116241</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">00085636695613773011</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">03287959375786101111</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">16220327301131725567</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">06484152174917594660</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">03955721831327715687</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">17578390103906123513</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">07585202540651210769</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">05030109886527877869</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">02438731866835478013</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">06009673846707481345</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">18174617082890673583</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">08610022088181315668</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">10828574395111843436</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">14334942897146844067</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">08474505159552874872</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">15963914873140213203</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">03098916796745868276</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">10720685492899097606</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">08677048408504920611</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">00525543317120879644</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">05681920164039597084</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">16447104425607920255</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">02337963130092926628</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">06837222006381110949</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">05179377467019915416</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">01008377889417097771</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">01681826984294370122</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">15128652417755079809</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">06294193727278866701</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">01775954692681420275</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">01605672015732182524</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">06289376932330464743</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">13201737307773548606</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">08729413362266242937</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">17615258178402895330</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">06357189685275807073</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">06836422528150126485</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">03134942318655872530</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">15179861392732612091</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">01915102895628563025</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">13495976290274769648</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">05453755222541483962</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">13047431856233922168</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">00666605023632803448</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">07506585351234531391</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">17722001012160051895</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">17653885563315788582</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">13965816818182080802</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">08795782422471485002</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">07313246352496600452</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">02935050653038506477</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">01895563545796903224</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">07950976214312570214</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">07208983641575094860</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">17100522944077116665</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">01631561733662965249</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">03043185676656307084</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">09264649249892760114</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">16006206976272716455</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">04917150861196500322</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">13213522958287504987</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">09803098588727110477</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">07755314047748132625</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">06112051552392924641</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">01115183714201285092</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">01768970591241172809</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">18378639451176311429</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">09998627589987341710</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">07770755621387279023</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">05757550912035039614</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">05681458703641721445</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">00588039875197613350</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">05776046613396449723</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">09012001576539520384</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">04984609354671728870</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">16804554562423400402</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">03403876199271712382</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">04487600087672997659</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">15567531406767322295</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">04561579906758536682</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">03277080920919879239</gr:likingUser></item><item><title>The Only Truly Failed Project</title><link>http://www.codinghorror.com/blog/archives/001297.html</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jeff Atwood</dc:creator><pubDate>Thu, 20 Aug 2009 00:59:59 PDT</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/c6edcc0702560d8f</guid><description>&lt;p&gt;
Do you remember &lt;a href="http://en.wikipedia.org/wiki/Microsoft_Bob"&gt;Microsoft Bob&lt;/a&gt;? If you do, you probably remember it as an intensely marketed but laughable failure -- what some call &lt;a href="http://www.microsoft-watch.com/content/operating_systems/bill_gates_legacy_microsofts_top_10_flops.html"&gt;the "number one flop" at Microsoft&lt;/a&gt;.
&lt;p&gt;
&lt;a href="http://img237.imageshack.us/img237/9201/bobfrontlargero7.jpg"&gt;&lt;img alt="Microsoft Bob, front" src="http://www.codinghorror.com/blog/images/bob-front-small.png" width="300" height="363" border="0" style="border:1px solid silver"&gt;&lt;/a&gt;
&lt;a href="http://img241.imageshack.us/img241/9260/bobbacklargehs7.jpg"&gt;&lt;img alt="Microsoft Bob, back" src="http://www.codinghorror.com/blog/images/bob-back-small.png" width="300" height="361" border="0" style="border:1px solid silver"&gt;&lt;/a&gt;
&lt;p&gt;
There's no &lt;i&gt;question&lt;/i&gt; that Microsoft Bob was nothing short of an unmitigated disaster. But that's the funny thing about failures -- &lt;b&gt;they often lead to later successes&lt;/b&gt;. Take it from someone who &lt;a href="http://www.techflash.com/microsoft/Innovation_The_lessons_of_Bob_53605837.html"&gt;lived and breathed the Bob project&lt;/a&gt;:
&lt;p&gt;
&lt;blockquote&gt;
I was the one who sent Bill Gates email at the height of the positive Bob-mania that said we were likely to face a horrible backlash. Tech influentials had started telling me that they were going to bury Bob. They not only didn't like it, they were somehow angry that it had even been developed. It was personal.
&lt;p&gt;
And that's exactly what happened. Bob got killed. But first, it was ridiculed and stomped.
&lt;p&gt; 
For Microsoft, it was a costly mistake. For the people who worked on it, Bob taught many lessons. Lessons that came into play for subsequent products that made a big impact, both at Microsoft and beyond.
&lt;p&gt;
How many people know that the lead developer for Bob 2.0 was also the &lt;a href="http://en.wikipedia.org/wiki/Gabe_Newell"&gt;co-founder of Valve&lt;/a&gt; and the development lead for Half-Life, which became an industry phenomenon, winning more than 50 Game of the Year awards and selling more than 10 million copies?
&lt;p&gt;
Or that Darrin Massena - development lead for Bob 1.0, most recently named Technical Innovator of the Year here in Washington State - and Valve co-founder Mike Harrington are the co-founders and partners behind &lt;a href="http://en.wikipedia.org/wiki/Picnik"&gt;Picnik&lt;/a&gt; - which is now the world's leading online photo editor, attracting almost 40 million visits a month and a million unique users a day.
&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;
And then, of course, I'd be remiss if I didn't mention that Melinda French -- Bill Gates' &lt;a href="http://en.wikipedia.org/wiki/Melinda_Gates"&gt;future wife&lt;/a&gt; -- managed the Microsoft Bob project at one point. Bob was the first Microsoft consumer project that &lt;a href="http://www.post-gazette.com/businessnews/19990523bob6.asp"&gt;Bill Gates personally had a hand in launching&lt;/a&gt;. Well, at least he got a wife out of it.
&lt;p&gt;
Yes, Bob was an obvious, undisputed and epic failure. We can point and laugh at Bob. But to me, &lt;b&gt;Bob is less of a comic figure than a tragic one&lt;/b&gt;.
&lt;p&gt;
Unless you're an exceptionally lucky software developer, you've probably worked on more projects that failed than projects that succeeded. Failure is &lt;a href="http://www.codinghorror.com/blog/archives/000588.html"&gt;de rigeur in our industry&lt;/a&gt;. Odds are, you're working on a project that will fail &lt;i&gt;right now&lt;/i&gt;. Oh sure, it may not seem like a failure yet. Maybe it'll fail in some completely unanticipated way. Heck, maybe your project will buck the odds and even succeed.
&lt;p&gt;
But I doubt it.
&lt;p&gt;
I &lt;a href="http://www.codinghorror.com/blog/archives/000770.html"&gt;own a boxed copy of Microsoft Bob&lt;/a&gt;. I keep it on my shelf to remind me that these kinds of relentless, inevitable failures aren't the crushing setbacks they often appear from the outside. On the contrary; I believe it's &lt;a href="http://www.codinghorror.com/blog/archives/000300.html"&gt;impossible to succeed without failing&lt;/a&gt;.
&lt;p&gt;
&lt;blockquote&gt;
Charles Bosk, a sociologist at the University of Pennsylvania, once conducted a set of interviews with young doctors who had either resigned or been fired from neurosurgery-training programs, in an effort to figure out what separated the unsuccessful surgeons from their successful counterparts.
&lt;p&gt;
He concluded that, far more than technical skills or intelligence, &lt;b&gt;what was necessary for success was the sort of attitude that Quest has -- a practical-minded obsession with the possibility and the consequences of failure&lt;/b&gt;. "When I interviewed the surgeons who were fired, I used to leave the interview shaking," Bosk said. "I would hear these horrible stories about what they did wrong, but the thing was that they didn't know that what they did was wrong. In my interviewing, I began to develop what I thought was an indicator of whether someone was going to be a good surgeon or not. It was a couple of simple questions: Have you ever made a mistake? And, if so, what was your worst mistake? The people who said, 'Gee, I haven't really had one,' or, 'I've had a couple of bad outcomes but they were due to things outside my control' -- invariably those were the worst candidates. And the residents who said, 'I make mistakes all the time. There was this horrible thing that happened just yesterday and here's what it was.' They were the best. They had the ability to rethink everything that they'd done and imagine how they might have done it differently." 
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;
I recently watched the documentary &lt;a href="http://www.amazon.com/dp/B000OV967S/?tag=codinghorror-20"&gt;Tilt: The Battle to Save Pinball&lt;/a&gt;.
&lt;p&gt;
				&lt;embed src="http://www.vimeo.com/moogaloop.swf?clip_id=1232459&amp;amp;server=www.vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" allowFullScreen="true" allowScriptAccess="never" width="400" height="300" wmode="transparent" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;
&lt;p&gt;
It's a gripping story of a pinball industry in crisis. In order to save it, the engineers at Williams -- the only remaining manufacturer of pinball machines in the United States -- were given a herculean task: invent a new form of pinball &lt;i&gt;so compelling&lt;/i&gt; that it makes all previous pinball machines seem obsolete. I don't want to spoil the whole documentary, so I'll gloss over exactly how that happened, but astoundingly enough -- they succeeded.
&lt;p&gt;
And then were promptly laid off en masse, as Williams shut down its pinball operations.
&lt;p&gt;
Unlike Microsoft Bob, the Williams engineers built an almost revolutionary product that was both critically acclaimed and sold well -- but &lt;b&gt;none of that mattered&lt;/b&gt;. It's sobering to watch the end reel of Tilt, as the engineers involved mournfully discuss the termination of their bold and seemingly successful project.
&lt;p&gt;
&lt;blockquote&gt;
Everyone was in awe. They couldn't understand why it happened. Here we'd just done this thing that from all we could tell was a total success. Why would they do that?
&lt;p&gt;
We succeeded. Management gave us an impossible goal, and we sat there and we actually did what they thought we couldn't do.
&lt;p&gt;
You know, we didn't really win... we lost. I gave it everything I had. I think that those fifty guys that worked on it, they also passionately did everything that they could.
&lt;/p&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;
Sometimes, &lt;b&gt;even when your project succeeds, you've failed&lt;/b&gt;. Due to forces entirely beyond your control. It's depressing, but it's reality.
&lt;p&gt;
The trailout isn't all doom and gloom. It also documents the ways in which these talented pinball engineers went on to practice their craft after being laid off. Most of them still work in the video game or pinball industry. Some freelance. Others formed their own companies. A few went on to work at Stern Pinball, which figured out how to make a small number of pinball machines and still turn a profit.
&lt;p&gt;
These two stories, these two projects -- the abject failure of Microsoft Bob, and the aborted success of Pinball 2000 -- have something in common beyond mere failure. All the engineers involved &lt;b&gt;not only survived these failures, but often went on to greater success afterwards&lt;/b&gt;. Possibly as a direct result of their work on these "failures".
&lt;p&gt;
Failure is a wonderful teacher. But there's no need to seek out failure. It will find you. Whatever project you're working on, consider it an opportunity to learn and practice your craft. &lt;a href="http://www.codinghorror.com/blog/archives/001207.html"&gt;It's worth doing because, well, it's worth doing&lt;/a&gt;. The journey of the project should be its own reward, regardless of whatever happens to lie at the end of that journey.
&lt;p&gt;
The only truly &lt;i&gt;failed&lt;/i&gt; project is &lt;b&gt;the one where you didn't learn anything along the way&lt;/b&gt;.
&lt;p&gt;
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;
[advertisement] Interested in &lt;a href="http://www.atlassian.com/agile" rel="nofollow"&gt;agile&lt;/a&gt;? See how a world-leading software vendor is practicing &lt;a href="http://www.atlassian.com/agile" rel="nofollow"&gt;agile&lt;/a&gt;.
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</description><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">13951094807588655845</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">15572256151170942180</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">06707171982735950621</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">14663303872579884098</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">10187252157379862641</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">07891174635210880442</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">14257833598367792388</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">08610022088181315668</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">15025620491447498877</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">00777939951689159322</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">16491353731719296603</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">09320443835051372286</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">12852960037362729179</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">13833541379917089398</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">00870921868256972939</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">18373978344818481116</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">16983678210633994627</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">14740908696596665604</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">17995883858094687099</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">01524350228458144880</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">16798624487237931691</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">10812825205775087563</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">17864719274518975546</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">03911420922383773120</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">11218026139464319719</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">06157501981069861963</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">16371607697534062656</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">09748589906472105075</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">09651988640480677623</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">09034332661962541319</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">16511498786131603990</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">00566019527005948853</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">10396699665996961732</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">10622267668276303534</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">06783304409252427905</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">05979608432730590670</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">04144217073567998263</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">03506979255397830379</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">15980114758141432741</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">17788135283534745309</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">13799267971280571210</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">01355404977268185859</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">11112571639563984714</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">04324406804468397495</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">06071340498367257937</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">01921296854652091847</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">11322677593789412312</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">08187693269187516027</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">10065689251771835886</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">18213632203746903045</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">05525997793636420413</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">08215204130703594012</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">16365693219804654853</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">04349087295503910487</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">01774080255580463838</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">15784045441835069158</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">07765913683367705170</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">16226366522791707997</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">09204273600346242374</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">15742073179819008737</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">18387793208265709264</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">01599759008460581768</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">05227462590824060329</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">02806722448384700258</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">12520023426249820967</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">10999666915994700397</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">18281847282686570686</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">13543417870915298760</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">07074102476394265731</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">04573724387091216075</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">18308872264579086555</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">10029071079986132446</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">11313715401375862926</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">15913894529627756681</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">17836187280174899872</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">18428314717381457666</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">10449576730732992672</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">13979767349801260721</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">16556866349542892790</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">10755012102408385127</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">04721131802086413668</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">01790056869450559846</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">12455041414458661736</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">17733310661264896587</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">04853917464167875211</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">00964421015043614741</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">03519344396102899195</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">16912722399615519165</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">00033119960899879882</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">10502399701156327733</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">16472705871399381209</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">03635878917927505010</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">16654030060461367478</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">11851927471754354854</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">12754777704073624787</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">05107068444228729956</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">00001615121144922696</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">09593184903756704274</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">01452261219366318122</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">01262108606719890143</gr:likingUser></item><item><title>Supported Features</title><link>http://xkcd.com/619/</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">(author unknown)</dc:creator><pubDate>Tue, 04 Aug 2009 21:00:00 PDT</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/a70334efa3686781</guid><description>&lt;img src="http://imgs.xkcd.com/comics/supported_features.png" title="I hear many of you finally have smooth Flash support, but me and my Intel card are still waiting on a kernel patch somewhere in the pipeline before we can watch Jon Stewart smoothly." alt="I hear many of you finally have smooth Flash support, but me and my Intel card are still waiting on a kernel patch somewhere in the pipeline before we can watch Jon Stewart smoothly."&gt;</description><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">11760406602318236277</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">17338896065969400510</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">01576021373957880141</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">17514311894549379198</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">01257198879025517818</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">03927399699815094208</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">11648805971880323922</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">12576515014619286609</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">07360715595789637594</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">13345519443336942279</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">00319180390340199299</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">07444913212837582716</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">11901039497644195023</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">00713582172517263421</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">10288673935201115950</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">16220327301131725567</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">15039097359405420902</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">06484152174917594660</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">07554726491720289951</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">14164386189811631008</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">16147746235451299976</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">02438731866835478013</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">06009673846707481345</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">11173223074777763197</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">10828574395111843436</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">02781385729008634358</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">00938665623961442346</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">07790024215958814624</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">02161054272510094858</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">11452033041324339283</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">01577710401183883704</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">10016816567644393455</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">05702968272989245389</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">02231633552906552093</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">12824296383580743571</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">18141781241153297728</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">03814105847357398276</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">03145104158991883148</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">10374057548596880566</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">17252187327101606658</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">02280609264158219422</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">16745247337337186216</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">06836422528150126485</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">16184355918372665988</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">05669836152188157550</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">02029464480365309395</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">11461282880310706449</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">08521113978464594739</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">00451470333538167256</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">06840299852053242435</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">14141208387109706289</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">13837274790097513820</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">00112992359468314630</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">12397309183341871372</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">09781759323519763641</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">07950976214312570214</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">11076953532573089941</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">09264649249892760114</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">03742097854546555139</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">17838031857241705973</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">12607183518146228722</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">05973822568496677809</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">13781263807563081057</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">01704910556200547170</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">12399971614853239327</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">09998627589987341710</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">17372304348586973862</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">07770755621387279023</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">06912244698658986356</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">14876383526232223300</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">14175737266025155315</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">05426708642155025626</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">15192830485062905958</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">04641481724898100835</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">02837601840807028217</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">12791786101531406620</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">03403876199271712382</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">03068927180644466677</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">15433620362752488647</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">17063494901316973784</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">15309362315656867734</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">00958259408592311365</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">02760940318859734550</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">11905982029837519475</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">06478836598396210211</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">05673001139276622958</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">16074178892347991385</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">04042990237054175584</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">04798189903983289911</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">03413582656393608803</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">12249640565981841634</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">06157501981069861963</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">16739702604270920330</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">18397086036380475533</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">15897709213485880892</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">11556882384495057980</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">03371212558146727554</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">13995533247842367499</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">06715572903698865996</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">14269394501220498705</gr:likingUser></item><item><title>Ali Erkan İMREK: Bunu yapmak çok mu zordu? :D</title><link>http://armuting.blogspot.com/2009/07/bunu-yapmak-cok-mu-zordu-d.html</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">(author unknown)</dc:creator><pubDate>Mon, 20 Jul 2009 18:05:09 PDT</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/b79fb3d8aa335ecd</guid><description>&lt;img src="http://nonfictionlover.today.com/files/2009/03/shocked-look-on-a-monkeys-face.jpg" border="0" alt=""&gt;&lt;br&gt;&lt;div align="justify"&gt;Bir disk bölümünü istediğim gibi bağlamayı beceremeyince gogıllamaya başladım, sırasıyla çeşitli siteleri açıyordum ve bir dağıtımın e-posta listesinde birden harika bir bağlantı gördüm, önce  bağlantının harika olmasının nedeni üzerindeki "You are lucky, your solution is here..." yazısıydı ama sonra yaşadığım dumur daha harikaydı, size de yaşatmak isterim;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://lmgtfy.com/?q=Bunu+yapmak+%C3%A7ok+mu+zordu%3F+"&gt;Your solution is here...&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Bunu forumlarda sık sık kullanacağım sanırım :)&lt;/div&gt;&lt;div&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/6806075996663386433-5173274045649834824?l=armuting.blogspot.com"&gt;&lt;/div&gt;</description></item><item><title>CNR</title><link>http://xkcd.com/583/</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">(author unknown)</dc:creator><pubDate>Tue, 12 May 2009 21:00:00 PDT</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/418100ec52328b6b</guid><description>&lt;img src="http://imgs.xkcd.com/comics/cnr.png" title="Can&amp;#39;t and shouldn&amp;#39;t." alt="Can&amp;#39;t and shouldn&amp;#39;t."&gt;</description><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">08474505159552874872</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">07706670141400530955</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">10046997903863367897</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">11958599383422095273</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">16839009344492397805</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">05300697168151124794</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">03925819693100793790</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">14226161980536805311</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">11838832369020064799</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">04921836943293394547</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">07966533737122928229</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">01645092557333190469</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">00119385485503762076</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">02268964141486497809</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">10819158844817089501</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">00448256185805693086</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">03957265431858698748</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">03513807721303163060</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">12460474329737576136</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">12114108214223267879</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">08267488414556871704</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">07114837508974043693</gr:likingUser></item><item><title>Ali Erkan İMREK: Kamu Kurumları Artık Açık Standartlar Kullanmak Zorunda</title><link>http://armuting.blogspot.com/2009/04/kamu-kurumlar-artk-ack-standartlar.html</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">(author unknown)</dc:creator><pubDate>Tue, 21 Apr 2009 05:29:20 PDT</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/c186ea9f00033f10</guid><description>&lt;div&gt;&lt;a href="http://aykutaktas.com.tr/wp-content/uploads/images/firefox-ie.gif"&gt;&lt;img src="http://aykutaktas.com.tr/wp-content/uploads/images/firefox-ie.gif" alt="" border="0"&gt;&lt;/a&gt;Bu aralar, ülkemizdeki Linux kullanıcılarının belki de en büyük sorunlarından birisi olan, internet ile sunulan kamu hizmetlerindeki IE-Windows zorunluluğu konusuna takmış durumdayım.&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Önceki günlük girdisinde böyle yaygın bir sorunun Linux Şenliğinde de gündeme gelmesi gerektiğini yazmıştım ve "&lt;span&gt;Hadi mevcut siteleri boşverin en azından yeni açılan hizmetlerde özgürlüğün sağlanması Başbakanlıktan yayınlanacak iki satırlık bir genelge ile de halledilebilir.&lt;/span&gt;" demiştim. Böyle bir genelge kısa süre önce yayınlanmış;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Evet Başbakanlıktan yayınlanan &lt;a href="http://mevzuat.dpt.gov.tr/genelge/2009-4.htm"&gt;2009/4&lt;/a&gt; sayılı genelge ile e-devlet projesi kapsamında düzenlenen "&lt;a href="http://www.bilgitoplumu.gov.tr/yayinlar.asp"&gt;Birlikte Çalışabilirlik Esasları Rehberi&lt;/a&gt;"'nin artık kamu kurumlarının internet üzerinden vereceği hizmetlerdeki standartları belirleyeceği, mevcut hizmetlerin de bu rehbere uyumlu hale getirilmesi isteniyor. (Belge sürekli güncelleneceğinden doğrudan bağlantı vermedim)&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;Şu anda ikinci sürümü yayınlanmış olan belgedeki bazı ifadeler şöyle;&lt;br&gt;&lt;div&gt;&lt;br&gt;"&lt;span&gt;Merkezi ve yerel düzeydeki tüm kamu kurum ve kuruluşları, bu Rehber’de yer alan esaslara uymakla yükümlüdür.&lt;/span&gt;"&lt;br&gt;&lt;br&gt;"&lt;span&gt;Bilgi ve hizmetlerin web sayfası ve diğer alternatif kanallardan, kullanıcılar için tespit edilen arayüzlerin toplumun tüm fertleri tarafından kolay kullanılabilecek ve &lt;span&gt;kullanıcı tarafında gerekli olabilecek ek ticari yazılımları mümkün olan en alt seviyede tutacak şekilde sunumu hedeflenmektedir&lt;/span&gt;.&lt;/span&gt;"&lt;br&gt;&lt;br&gt;"&lt;span&gt;3.2.2 Ana İletişim Mekanizması Olarak İnternet ve www’in Kullanımı&lt;/span&gt;&lt;br&gt;&lt;span&gt;Hedef, küresel İnternet devriminde maliyeti ve riski düşürebilmek, İnternet’in tüm taraflarca aktif olarak kullanımını sağlamaktır. Bu amaçla geliştirilecek uygulamaların arayüz olarak W3C standartlarını sağlayan İnternet tarayıcılarını (browser) desteklemesi esastır. &lt;span&gt;Kullanıcı tarafından herhangi bir lisans ücreti gerektirmeyecek şekilde tarayıcı vasıtasıyla indirilebilen eklenti ve aracı yazılımlardan yararlanılabilir.&lt;/span&gt; &lt;/span&gt;"&lt;br&gt;&lt;br&gt;"&lt;span&gt;3.2.6 Açık Standartların ve Uluslararası Standartların Kullanımı&lt;/span&gt;&lt;br&gt;&lt;div&gt;Birlikte çalışabilirliği mümkün kılma ve rekabeti artırma hedefi kapsamında açık standartların kullanımı benimsenmiştir..... " (Sonrasında açık standardın tanımı yapılıyor)&lt;br&gt;&lt;/div&gt;&lt;span&gt;"Standartlar belirlenirken dikkat edilen temel noktalar; sunulan bilgilerin kullanıcı tarafında asgari derecede ek yazılım gerektirmesi, &lt;span&gt;kullanılacak araçların mümkün olduğunca açık standartlara dayalı olması ve bu bilgilere farklı platformlardan ulaşılabilmesidir.&lt;/span&gt;&lt;/span&gt;"&lt;br&gt;&lt;br&gt;"&lt;span&gt;Üzerinde işlem yapılabilmesine olanak sağlayan kelime işlem, sunum ve elektronik çizelge belgelerinin paylaşımı için aşağıdaki tabloda belirtilen formatlardan en az birinin kullanımı zorunludur. Bunlardan hangisinin kullanılacağına ihtiyaca göre karar verilebilir.....&lt;/span&gt;" (Listede Microsoft'a ait sadece Microsoft Office 97 biçimi bulunuyor, sonraki sürümleri yok, tabii ki OpenOffice belgeleri var)&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;div&gt;Uzun lafın kısası artık hiçbir kamu kurumu "&lt;span&gt;Bu site sadece IE ile düzgün görüntülenir&lt;/span&gt;", "&lt;span&gt;Bu site sadece IE ile çalışır&lt;/span&gt;" veya "&lt;span&gt;Belgeleri açmak için MS Office 200x sürümü gereklidir&lt;/span&gt;" diyemeyecek, artık bu genelge gerekçe gösterilerek sitelerin Firefox ile çalışması ve belgelerin OpenOffice biçiminde yayınlanması talebinde bulunabileceğiz.&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;div&gt;Hadi durmayın, Microsoft ürünleri kullanmadığınız için alamadığınız kamu hizmetleri için kurumlara baskı yapma zamanı.&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;img width="1" height="1" src="http://res1.blogblog.com/tracker/6806075996663386433-7334953903589345313?l=armuting.blogspot.com"&gt;&lt;/div&gt;</description></item><item><title>Emrah Eryılmaz: Gerçek zamanlı (real-time) sistem nedir?</title><link>http://emrahcom.blogspot.com/2009/04/gercek-zamanl-real-time-sistem-nedir.html</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">(author unknown)</dc:creator><pubDate>Tue, 21 Apr 2009 01:13:00 PDT</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/d7cc3c3e745c173a</guid><description>İşlerini, tam zamanında yapan sisteme, gerçek zamanlı sistem denir. Dolayısı ile tam zamanında yapılması gereken işlerimiz yoksa, gerçek zamanlı bir sisteme de ihtiyacımız yok demektir.&lt;br&gt;&lt;br&gt;Bir işin, tam zamanında yapılması gerekiyorsa bu iş, zaman açısından kritik bir iştir. Zaman açısından kritik işler, zamanında yapılamazlarsa başarısızlıkla sonuçlanmış olurlar.&lt;br&gt;&lt;br&gt;Örneğin yemek pişirmek, zaman açısından kritik bir iştir. Bir yemek, olması gerekenden az veya çok pişirilirse, başarısızlıkla sonuçlanmış demektir. Dolayısı ile iyi aşçılar, gerçek zamanlı çalışan organik sistemlerdir.&lt;br&gt;&lt;br&gt;Yalnız bu tanımda dikkat edilmesi gereken bir şey daha vardır. O da &lt;strong&gt;tam zamanında&lt;/strong&gt; ifadesi ile kastedilen işin bitirilme anının, aslında akıp giden zaman içinde bir anı değil, bir süreyi ifade ettiğidir.&lt;br&gt;&lt;br&gt;180°'de 45 dakika pişmesi gereken levrek buğulamayı, 44. dakikada veya 46. dakikada fırından çıkarırsak aslında hatalı birşey yapmış olmayız çünkü bu ufak sapma, kabul edilebilir düzeydedir ve kimse kalkıp da '&lt;em&gt;bu yemek iyi pişmemiş&lt;/em&gt;' demez. Eğer yemeği yapan, işinin ehli bir aşçı ise yemeğin, çiğ veya yanık şekilde önümüze gelmeyeceğini biliriz.&lt;br&gt;&lt;br&gt;Gerçek zamanlı sistemler, &lt;strong&gt;latency&lt;/strong&gt; terimi ile ifade edilen bu sapmaların, belli bir değerden küçük olacağını bize garanti ederler.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;strong&gt;Soft Real-time ve Hard Real-time&lt;/strong&gt;&lt;br&gt;Aşçı denilen organizmaların, yemeklerin pişirilme süreleri konusunda ne kadar hassas sistemler olduğuna değinmiştik. Peki ama aşçılar hiç mi hata yapmaz? Bir aşçı, arada bir hata yapıp yemeği hafif yaksa ne olur?&lt;br&gt;&lt;br&gt;Ne olacağı, bu aşçının yemeklerini kimin yediğine bağlıdır. Eğer Sirkeci'de bir lokantada çalışıyorsa (ki burada kasdedilen Konyalı'nın aşçıları değildir) hafif yanık yemeği müşteriye kakalarsın gider, en kötü ihtimal o müşteri, bir daha lokantaya uğramaz. Yani çok da dert değil, müşterinin suyu mu çıktı? Bu gelmezse öbürü gelir.&lt;br&gt;&lt;br&gt;Eğer söz konusu aşçımız, sarayın aşçıbaşısı ise ve yemeklerini yiyen padişah ise, işte o zaman durum kritiktir, hayati bir durum söz konusudur. Artık aşçıya reset mi atarlar, kazığa oturtup Youtube'da videosunu mu yayınlarlar bilemiyorum.&lt;br&gt;&lt;br&gt;Birinci aşçı organizması, &lt;strong&gt;soft real-time&lt;/strong&gt; sisteme; ikinci aşçı organizması, &lt;strong&gt;hard real-time&lt;/strong&gt; sisteme örnektir.&lt;br&gt;&lt;br&gt;İşlerimizi, belli bir sapmayı aşmayacak şekilde yapacağını bize garanti eden sistemimiz, arada sırada bu sözünü yerine getiremiyor ama bu kusurun, göz ardı edilebilir sonuçları oluyorsa, söz konusu sistem &lt;strong&gt;soft real-time&lt;/strong&gt;'dır.&lt;br&gt;&lt;br&gt;Sistemimiz, garanti edilen sapma aralığının asla ve asla dışına çıkmıyorsa ve bu sistemde çalışan işler, sapma aralığının dışına çıkıldığında kabul edilemez sonuçlar doğuruyorsa, sistemimiz &lt;strong&gt;hard real-time&lt;/strong&gt;'dır.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;strong&gt;Jitter&lt;/strong&gt;&lt;br&gt;Aşçıların bir tipi vardır ki buna da jitter denir. Mutfak havalandırmasının iyi olmamasından dolayı sürekli buhar altında kalan ve yamaklığı sırasında her gün zorla üç çuval patates soydurulan aşçılar arasında sıklıkla bu tipe rastlanır. Jitter'lar yemeği, bazen az pişmiş bırakır, bazen hafiften yakarlar. Ama bazen de bakarsın en mükemmel yemekle çıkıp gelirler.&lt;br&gt;&lt;br&gt;Bu tip aşçılar lokanta sahipleri tarafından pek sevilmez ve istenmezler çünkü müşteriyi kaçırırlar. Yemeği hep pişkin yapsa sorun değil, o zaman en azından pişkin yemek seven müşteriler sürekli gelir. Sürekli az pişmiş bıraksa da sorun değil, o zaman da az pişmiş yemek seven müşterilerle idare edilir. Mutfaktan ne çıkacağı belli olmayınca, müşterinin hiçbir türü kalmaz.&lt;br&gt;&lt;br&gt;Bu nedenle gerçek zamanlı sistemlerde jitter sevilmez. Sapma olacaksa bile (ki mutlaka olur, bu sadece ne kadar hassas ölçüm yaptığımıza bağlıdır) en azından sapmaların hep aynı yönde ve benzer oranlarda olması istenir; tabii garanti edilen aralığı da aşmamak koşulu ile...&lt;br&gt;&lt;br&gt;&lt;strong&gt;Gerçek zamanlı sistem hızlı mı olmalı?&lt;/strong&gt;&lt;br&gt;Aşçımız, evde çocuklarına yemek pişiren bir anne ise hızlı olmasına gerek yoktur, üç tencereyi kontrol altında tutabilmesi yeterlidir. Ama onlarca yemeğin aynı anda hazırlanması gereken bir lokanta söz konusu ise bunca yemeği aynı anda kontrol edebilecek ve hepsinin tam kıvamında pişmesini sağlayabilecek hızlı bir aşçıya ihtiyaç vardır.&lt;br&gt;&lt;br&gt;Tabii aşçının hızlı olması, yemekleri tam kıvamında pişireceğinin garantisi değildir. Ama aynı zamanda, beş kap yemeği tam kıvamında pişirebilen bir aşçının, yeterince hızlı değilse on kap yemeği tam kıvamında pişireceği de garanti değildir.&lt;br&gt;&lt;br&gt;Gerçek zamanlı sistemler, kaldırabileceği oranda iş yükleri varsa gerçek zamanlı olma özelliklerini koruyabilirler. Dolayısı ile gerçek zamanlı bir sistem kurgulanırken iş yükü, baştan kesin bir doğrulukla hesaplanmalıdır.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;strong&gt;Gerçek zamanlı sistemde tampon (buffer) kullanımı&lt;/strong&gt;&lt;br&gt;Börekçiler tampon ile çalışır. Bi sabah börekçiye gidip '&lt;em&gt;peynirli var mı&lt;/em&gt;' diye sorulduğunda '&lt;em&gt;10 dakika sonra hazır&lt;/em&gt;' cevabı alınabilirken, ertesi gün tezgahın üzerinde tonlarca peynirli börek bulunabilir. Dolayısı ile '&lt;em&gt;bugün kesin peynirli börek yiyecem&lt;/em&gt;' diye börekçiye gidip oturduğumuzda böreğin ne zaman önünüze geleceğinden asla emin olamayız. Bu nedenle hard real-time sistemlerde tampon kullanılmaz.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;strong&gt;Pre-emptive nedir?&lt;/strong&gt;&lt;br&gt;Aile terbiyesi almamış aşçıya, pre-emptive denir. Bu aşçı tipi, yemeklerine özen göstermez, kimini yakar, kimini çiğ bırakır. Yemek diye çiğ tavuk sunduğu bile görülmüştür ama ne zaman ki kapıdan yağlı bir müşteri girer, hemen Oktay Usta kesilir. Bu müşterinin yemeklerine özel bir hassasiyet gösterir, mükemmel olması için gayret eder. Tabii bu tip bir aşçı bozuntusunun ne derece mükemmel(!) iş yapacağı malumunuz. O nedenle hard real-time dünyasında yeri yoktur, adam yerine konulmaz.&lt;br&gt;&lt;br&gt;Bu yazıdan çıkarılacak sonuca gelirsek, son söz olarak şunu diyebiliriz: '&lt;em&gt;Hamburger yemeyin&lt;/em&gt;'&lt;div&gt;&lt;img width="1" height="1" src="http://res1.blogblog.com/tracker/1730393987854368920-4307443750178133929?l=emrahcom.blogspot.com"&gt;&lt;/div&gt;</description></item><item><title>Serkan Kaba: Evince ile özgür PDFler</title><link>http://serkank.wordpress.com/?p=276</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">(author unknown)</dc:creator><pubDate>Fri, 17 Apr 2009 12:16:18 PDT</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/d8e7220bdd63ffed</guid><description>&lt;img src="http://cekirdek.pardus.org.tr/~baris/img/serkankmr7.jpg" align="right" width="64" height=""&gt;
&lt;div&gt;&lt;br&gt;&lt;p&gt;Geçenlerde elime yazdırma korumalı bir PDF geçti. O an elimde sadece Acrobat Reader olduğu için yazdırma imkanım olmadı. Ancak GNOME masaüstünde kullandığım Evince’in bunu bir şekilde aşabileceği düşüncesi oluştu. Ne de olsa ekrana gösteriyorsa yazdırabilirdi de. Evince kaynak kodunu incelerken bunun &lt;strong&gt;/apps/evince/override_restrictions&lt;/strong&gt; anahtarıyla kontrol edildiğini farkettim. Üstüne üstük bu anahtarın varsayılan değeri &lt;strong&gt;true&lt;/strong&gt; idi. Bunun düşünülmüş olmasına şaşırmadan PDFyi açtım ve dosyaya yazdır seçeneği ile yeniden kısıtsız PDF olarak oluşturdum. Bu adımdan sonra oluşan PDFyi Acrobat Reader ile yazdırabildim. Eğer bu ayar dağıtımınızda varsayılan olarak &lt;strong&gt;true&lt;/strong&gt; değilse ekrandaki gibi değiştirebilirsiniz.&lt;a rel="attachment wp-att-277" href="http://serkank.wordpress.com/2009/04/17/evince-ile-ozgur-pdfler/gconf3/"&gt;&lt;img title="gconf3" src="http://serkank.files.wordpress.com/2009/04/gconf3.png?w=550&amp;amp;h=459" alt="gconf3" width="550" height="459"&gt;&lt;/a&gt;&lt;/p&gt;
Posted in gezegen, linux, pdf  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/serkank.wordpress.com/276/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/serkank.wordpress.com/276/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/serkank.wordpress.com/276/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/serkank.wordpress.com/276/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/serkank.wordpress.com/276/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/serkank.wordpress.com/276/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/serkank.wordpress.com/276/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/serkank.wordpress.com/276/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/serkank.wordpress.com/276/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/serkank.wordpress.com/276/"&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=serkank.wordpress.com&amp;amp;blog=906032&amp;amp;post=276&amp;amp;subd=serkank&amp;amp;ref=&amp;amp;feed=1"&gt;&lt;/div&gt;</description></item><item><title>Zemberek NLP: Zemberek Ubuntu paketleri hazırlandı</title><link>http://zembereknlp.blogspot.com/2009/04/zemberek-ubuntu-paketleri-hazrland.html</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">(author unknown)</dc:creator><pubDate>Wed, 08 Apr 2009 05:47:30 PDT</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/9363286b233a31d9</guid><description>Daha önceki &lt;a href="http://zembereknlp.blogspot.com/2008/12/zemberekin-datmlardaki-durumu.html"&gt;yazımda&lt;/a&gt; Rail ALİEV'in Ubuntu paketlerinin hazırlanmasına yönelik çalıştığından bahsetmiştim. Evet, çalışmaları meyvelerini verdi ve kütüphane, sunucu, zpspell (Zemberek KDE3 eklentisi için gerekli program) Openoffice.org ve Firefox eklentileri için hazırlanan paketler kendisinin &lt;a href="https://launchpad.net/%7Erail/+archive/ppa"&gt;kişisel paket arşivinde&lt;/a&gt; (PPA) yerini aldı. Bağlantıda yer alan depo adreslerini kullanarak paketleri kurup kullanmaya başlayabilirsiniz.&lt;div&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/1720576558802393126-7727313412489962986?l=zembereknlp.blogspot.com"&gt;&lt;/div&gt;</description></item><item><title>The Hardest Interview Puzzle Question Ever</title><link>http://www.codinghorror.com/blog/archives/001243.html</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jeff Atwood</dc:creator><pubDate>Tue, 17 Mar 2009 00:59:59 PDT</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/e6feed9775fdb08e</guid><description>&lt;p&gt;
Have you ever been to an interview for a programming job where they &lt;b&gt;asked you one of those interview puzzle questions?&lt;/b&gt; I have. The one I got was:
&lt;p&gt;
&lt;blockquote&gt;
How much of your favorite brand of soda is consumed in this state?
&lt;/blockquote&gt;
&lt;p&gt;
And no, the correct answer is not &lt;i&gt;who cares&lt;/i&gt;, unless the thing you don't care about is getting the job you're interviewing for. I didn't know it at the time, but this is a Fermi Question. (To prevent spoilers, the answer can be found in &lt;a href="http://www.codinghorror.com/blog/archives/000627.html"&gt;a previous blog post&lt;/a&gt;.)
&lt;p&gt;
Puzzle questions were all the rage in programming interviews in the 90s and early aughts. This is documented in the book &lt;a href="http://www.amazon.com/dp/0316919160/?tag=codinghorror-20"&gt;How Would You Move Mount Fuji?&lt;/a&gt; with a specific emphasis on Microsoft's hiring practices.
&lt;p&gt;
&lt;a href="http://www.amazon.com/dp/0316919160/?tag=codinghorror-20"&gt;&lt;img alt="How Would You Move Mount Fuji? Microsoft&amp;#39;s Cult of the Puzzle - How the World&amp;#39;s Smartest Company Selects the Most Creative Thinkers." src="http://www.codinghorror.com/blog/images/how-would-you-move-mount-fuji.png" width="289" height="450" style="border:1px solid silver"&gt;&lt;/a&gt;
&lt;p&gt;
It is prudent to &lt;a href="http://www.techinterview.org/"&gt;study common interview puzzle questions&lt;/a&gt; if you know you'll be interviewing at a company that asks these sorts of questions. And if you think you're ace at programming puzzle questions, then I challenge you to point your massive brain at this, &lt;a href="http://www.cartalk.com/content/read-on/2008/08.23.2.html"&gt;the hardest interview puzzle question ever&lt;/a&gt;:
&lt;p&gt;
&lt;blockquote&gt;
A hundred prisoners are each locked in a room with three pirates, one of whom will walk the plank in the morning. Each prisoner has 10 bottles of wine, one of which has been poisoned; and each pirate has 12 coins, one of which is counterfeit and weighs either more or less than a genuine coin. In the room is a single switch, which the prisoner may either leave as it is, or flip. Before being led into the rooms, the prisoners are all made to wear either a red hat or a blue hat; they can see all the other prisoners' hats, but not their own. Meanwhile, a six-digit prime number of monkeys multiply until their digits reverse, then all have to get across a river using a canoe that can hold at most two monkeys at a time. But half the monkeys always lie and the other half always tell the truth. Given that the Nth prisoner knows that one of the monkeys doesn't know that a pirate doesn't know the product of two numbers between 1 and 100 without knowing that the N+1th prisoner has flipped the switch in his room or not after having determined which bottle of wine was poisoned and what color his hat is, what is the solution to this puzzle? 
&lt;/blockquote&gt;
&lt;p&gt;
In other words, &lt;a href="http://www.codinghorror.com/blog/archives/000226.html"&gt;I hate puzzle questions&lt;/a&gt;.* 
&lt;p&gt;
&lt;blockquote&gt;
I'm also not a huge fan of those abstract impossible questions, eg, "how many optometrists are there in Seattle?", but I suppose that's a matter of taste. If you absolutely must, at least ask an impossible question that has some relevance to a problem your very real customers might encounter. &lt;b&gt;I just can't muster any enthusiasm for completely random arbitrary puzzles in the face of so many actual, real world problems.&lt;/b&gt;
&lt;/blockquote&gt;
&lt;p&gt;
And yes, I totally failed that interview. Which was disappointing, because it was kind of a cool job.
&lt;p&gt;
Not that &lt;a href="http://www.codinghorror.com/blog/archives/000226.html"&gt;my proposal for interviewing programmers&lt;/a&gt; was any more popular, though I do think it's much better.
&lt;p&gt;
&lt;blockquote&gt;
I have my own theory about the ideal way to interview developers: &lt;b&gt;have the candidate give a 10 minute watercooler presentation to your team on something they've worked on&lt;/b&gt;. I think this is a far better indicator of success than a traditional interview. You'll quickly ascertain:
&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;Is this person passionate about what they are doing?
&lt;li&gt;Can they communicate effectively to a small group?
&lt;li&gt;Do they have a good handle on their area of expertise?
&lt;li&gt;Would your team enjoy working with this person? 
&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;
You'd certainly want to complement this type of interview with some actual hands on programming, to make sure the applicant isn't full of crap -- although I'm pretty sure that you can't B.S. your way through a technical presentation to a handful of your peers if you truly have no idea what you're talking about. (And if you can, you should be CEO of a startup by now.)
&lt;p&gt;
&lt;b&gt;What I'm optimizing for here is the ability to communicate&lt;/b&gt;. Most programmers, once they &lt;a href="http://www.codinghorror.com/blog/archives/000781.html"&gt;pass the FizzBuzz level of competency&lt;/a&gt;, are decent enough. But coding chops aren't enough. To go from good to great, you must be able to communicate effectively: with your teammates, your manager, the users, and ultimately the world.
&lt;p&gt;
My wife and I just finished a five day hospital stay for &lt;a href="http://www.codinghorror.com/blog/archives/001242.html"&gt;the birth of our first child&lt;/a&gt;. During our stay, we were assisted by a parade of different nurses, at least two different nurses every day, sometimes more as we progressed to different areas of the hospital and through daily shift changes. The quality of care at this particular hospital is generally quite high, but we were flummoxed by the disparity in care between the &lt;i&gt;worst&lt;/i&gt; nurses and the &lt;i&gt;best&lt;/i&gt; nurses. After a few days, I finally figured out the common characteristic -- &lt;b&gt;the worst nurses were invariably the worst communicators!&lt;/b&gt; The fact that these nurses couldn't effectively &lt;i&gt;communicate&lt;/i&gt; with us:
&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;why they needed to do something
&lt;li&gt;what the options were
&lt;li&gt;offer advice
&lt;li&gt;troubleshoot our problems
&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ul&gt;
Meant they ended up feeling like rigid, inflexible proceduralists who didn't care or constantly had to appeal to authority. Of course, this wasn't true. I'm sure they were perfectly competent registered nurses. But in the absence of reasonable communication, it sure &lt;i&gt;seemed&lt;/i&gt; that way. To be fair, these nurses were frequently (but not always!) non-native English speakers.
&lt;p&gt;
Hiring is difficult under the best of conditions. But an interview process that relies too heavily on puzzle questions is risky. Sure, you may end up with programmers who can solve (or memorize, I guess) the absolute gnarliest puzzle questions you throw at them. But isn't &lt;b&gt;effectively communicating those solutions to the rest of the team&lt;/b&gt; important, too? For many programmers, &lt;i&gt;that's&lt;/i&gt; the hardest part of the puzzle.
&lt;p&gt;
*  although I expect aficionados of the style should be able to identify all the classic interview puzzle questions represented here.
&lt;p&gt;
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;
[advertisement] Improve Your &lt;a href="http://www.atlassian.com/software/fisheye/?s_kwcid=codefish" rel="nofollow"&gt;Source Code Management&lt;/a&gt; using Atlassian Fisheye - Monitor. Search. Share. Analyze. &lt;a href="http://www.atlassian.com/software/fisheye/?s_kwcid=codefish" rel="nofollow"&gt;Try it for free!&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</description><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">02237498051488619728</gr:likingUser></item><item><title>On the spectrial</title><link>http://geekswithblogs.net/osnosblog/archive/2009/02/24/129638.aspx</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Joaquin Jares</dc:creator><pubDate>Tue, 24 Feb 2009 05:09:28 PST</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/3c2988d5c5a343ff</guid><description>&lt;p&gt;Last week started the spectrial, a trial between some international movie, music and tv producers and The Pirate Bay. In case you've been living under a rock for the past few years, The Pirate Bay is one of the biggest torrent trackers in the world, run in Sweden by a number of people. The spectrial (so called by TPB members) was announced more than a year ago, and now it's here. The folks at TPB want to make it as public as possible. The producers are used to making this trials very secret and introducing all sort of semi-truths and outrageous lies. They won't be able to if too many people are watching.&lt;/p&gt;  &lt;p&gt;First let's take something out of the way: I'm absolutely on the side of TPB in this trial. That doesn't make me an anti-copyright zealot. I think producers have a right to enforce their copyright. But this is much more than that. The trial on TPB is not about copyright, it's about technology. Many people around the world are seeing that TPB is winning, and they think this is a great news for anti-copyright movements. Let me tell you, it's not. If TPB wins, nothing will happen. No international laws will change and the ruling will probably be appealed. If TPB loses the site will not go down. It'll get moved to a place where this trial hasn't set a legal precedent (as a matter of fact, it already is). But the blow on technology will be great.&lt;/p&gt;  &lt;p&gt;Content providers have a right to enforce their copyright, but they think they have much more than that: they think they can dictate which technology is good and which technology is bad. In this case, they think that anything related to torrents is bad. And they want to ban it. No private company with partial and focused interest should be able to do that. It's as if horse raisers many years ago when the car was first introduced could have said "cars may be a danger to the horses we sell, we should get to dictate which car is ok" and then imposing all sorts of artificial limitations on what cars can do not to make the public safe but to make their business safe. &lt;/p&gt;  &lt;p&gt;They did it before, also: your dvd has a "region code", which is an artificial limitation on where you can use your dvd because it affects the content provider's business. And the fact that the region code is enforced is not a business contract between hardware producers and content providers, it's the law. If this were a business contract, money will exchange hands. As it is the law, hardware providers all over the world are forced to do it with no compensation. And if you try to bypass it (as you should, since you legally bought both the dvd and the dvd player) you're also a criminal (in the US at least) thanks to the DMCA. And that's not the only case. You might have heard of Spore's DRM. Limiting what a legal owner can do while not stopping piracy at all. Or the infamous betamax (Sony vs Universal) trials where content producers wanted to stop you from getting a video recorder because you could potentially pirate their content. &lt;/p&gt;  &lt;p&gt;They have a right to enforce their copyright, they don't have the right to state that a technology capable of violating their copyright must be illegal. At some point in time, they will find out that the internet can help violate their copyright and they'll try to ban the internet. It's not like they're not trying.&lt;/p&gt;  &lt;p&gt;What I really don’t get is why the recording industry is not seizing this opportunity. The distributors may be at risk (partially) since distributing is now close to free. But the recording industry should be benefiting from this reduced cost. And benefiting for worldwide reach without international contracts. And benefiting for millions of extra eyes. And benefiting from social networking and the new fans they can get out of that. But they aren’t. Instead, they’re treating their fans as thieves. Just watch the academy awards, where they were proud of a very big wall they put in place to avoid outside people from watching what was happening in the red carpet. Got that? You’re a fan, you love a show/director/actor/whatever. You go to the ceremony just to catch a glimpse of one of these guys, and they love you so much that they put a wall there so you can’t. &lt;/p&gt;  &lt;p&gt;That’s what the producers think of their fans lately. There is a barrier today between established producers and their fans. The fans are trying to tear it down. The producers are building a higher wall. That just doesn’t add up. And as soon as a quality content producer with quality content comes up and tears the wall the fans will go to him. There’s no doubt about that.&lt;/p&gt;  &lt;p&gt;If I had a say, I’ll follow two very simple rules:&lt;/p&gt;  &lt;p&gt;1) Don’t charge for something that can be had for free, either legally or illegally. When your fans can download your music/movies/etc for free and you’re charging over $40 dollars for the same content with no added benefit, they feel cheated. You know there’s other ways to make money out of the content. You’ve been doing it on TV for as long as I’ve been alive.&lt;/p&gt;  &lt;p&gt;2) Don’t be greedy. These other ways to make money come with an added cost: they may hinder the artistic quality of your content, turning it into more business than art. Don’t do that. You’ll loose your audience, and that’s not good business.&lt;/p&gt;  &lt;p&gt;I don’t get why content providers are not doing this, specially TV content providers. Is it that hard to place a few ads on top of the action in Prison Break, in a non-invasive way, and charge private companies for them while knowing that the series will be seen by millions of people because it’s freely available on the internet? Is it that hard to place ads that people will actually enjoy at certain points in the show, in a non-invasive way, etc etc? I simply don’t get it.&lt;/p&gt;  &lt;p&gt;And then there’s the issue of statistics and previewing. Content on internet is very easy to publish, and it gives a lot of good feedback. Content on TV/theaters is far more complex and it doesn’t provide good feedback. Imagine a world where the content gets to the internet first, gets “prescreened” by true fans, and then goes to the regular media where lots of people will also watch it, but you already know which content had a bigger audience and you can plan accordingly. &lt;/p&gt;  &lt;p&gt;TV is not going away anytime soon. I know producers think it is, and that worries them. We have the WGA strike from last year to prove it. But we still have a lot of good TV years. The internet is not that accessible for the average user and it’s transmission quality is yet not on par with cable TV. We technical folks do not yet have a clue on how to make it accessible for the average user. That’s the content producers’ head start. But they are not getting it. Instead, they try to turn the internet to a TV. But the internet is not (and hopefully will never be) like the TV. The internet is like a high quality video phone. The TV allows a monologue from the producers to the viewers. The internet is a dialogue. Producers should be benefitting from this dialogue.&lt;/p&gt;  &lt;p&gt;So in conclusion, producers may be able to win this trial (although it doesn’t look like that right now), but they won’t be defending anything. I sincerely hope TPB wins, but not because of copyright. I just want the studios to wake up, and this trial may help. The betamax trial did help. The future lives in these sharing systems and sooner or later someone will notice. And when they do, producers will tell them “there’s no way that someone that’s not us can provide a quality product”. But someone will. And when he does, producers will be dead. Hopefully they realize that this is inevitable before it happens. And then copyright will die, and then we will have our flying cars and live in the future (at least in the future of media distribution). &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;amp;u=129638"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;amp;u=129638" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://geekswithblogs.net/osnosblog/aggbug/129638.aspx" width="1" height="1"&gt;</description></item><item><title>The Bad Apple: Group Poison</title><link>http://www.codinghorror.com/blog/archives/001227.html</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jeff Atwood</dc:creator><pubDate>Thu, 19 Feb 2009 23:59:59 PST</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/dc0e9ad2e1913c98</guid><description>&lt;p&gt;
A recent episode of &lt;a href="http://www.thisamericanlife.org/Radio_Episode.aspx?sched=1275"&gt;This American Life&lt;/a&gt; interviewed Will Felps, a professor who conducted a sociological experiment demonstrating the &lt;a href="http://www.codinghorror.com/blog/archives/001154.html"&gt;surprisingly powerful effect of bad apples&lt;/a&gt;.
&lt;p&gt;
Groups of four college students were organized into teams and given a task to complete some basic management decisions in 45 minutes. To motivate the teams, they're told that whichever team performs best will be awarded $100 per person. What they don't know, however, is that in some of the groups, the fourth member of their team isn't a student. He's an actor hired to play a bad apple, one of these personality types:
&lt;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;The Depressive Pessimist&lt;/b&gt; will complain that the task that they're doing isn't enjoyable, and make statements doubting the group's ability to succeed.
&lt;li&gt;&lt;b&gt;The Jerk&lt;/b&gt; will say that other people's ideas are not adequate, but will offer no alternatives himself. He'll say "you guys need to listen to the expert: me."
&lt;li&gt;&lt;b&gt;The Slacker&lt;/b&gt; will say "whatever", and "I really don't care."
&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;
&lt;blockquote&gt;
The conventional wisdom in the research on this sort of thing is that none of this should have had much effect on the group at all. Groups are powerful. Group dynamics are powerful. And so groups dominate individuals, not the other way around. There's tons of research, going back decades, demonstrating that people conform to group values and norms. 
&lt;/blockquote&gt;
&lt;p&gt;
But Will found the opposite.
&lt;p&gt;
&lt;b&gt;Invariably, groups that had the bad apple would perform worse.&lt;/b&gt; And this despite the fact that were people in some groups that were very talented, very smart, very likeable. Felps found that the bad apple's behavior had a profound effect -- groups with bad apples performed 30 to 40 percent worse than other groups. On teams with the bad apple, people would argue and fight, they didn't share relevant information, they communicated less.
&lt;p&gt;
Even worse, &lt;b&gt;other team members began to take on the bad apple's characteristics&lt;/b&gt;. When the bad apple was a jerk, other team members would begin acting like a jerk. When he was a slacker, they began to slack, too. And they wouldn't act this way just in response to the bad apple. They'd act this way to each other, in sort of a spillover effect.
&lt;p&gt;
What they found, in short, is that &lt;b&gt;the worst team member is the best predictor of how any team performs&lt;/b&gt;. It doesn't seem to matter how great the best member is, or what the average member of the group is like. It all comes down to what your worst team member is like. The teams with the worst person performed the poorest.
&lt;p&gt;
The actual &lt;a href="http://liberalorder.typepad.com/the_liberal_order/files/bad_apples_rob.pdf"&gt;text of the study&lt;/a&gt; (pdf) is available if you're interested. However, I highly recommend &lt;a href="http://audio.thisamericanlife.org/player/CPRadio_player.php?podcast=http://www.thisamericanlife.org/xmlfeeds/370.xml&amp;amp;proxyloc=http://audio.thisamericanlife.org/player/customproxy.php"&gt;listening to the first 11 minutes of the This American Life show&lt;/a&gt;. It's a fascinating, highly compelling recap of the study results. I've summarized, but I can't really do it justice without transcribing it all here.
&lt;p&gt;
Ira Glass, the host of This American Life, found Felps' results so striking that he began to question his &lt;i&gt;own&lt;/i&gt; teamwork:
&lt;p&gt;
&lt;blockquote&gt;
I've really been struck at how common bad apples are. Truthfully, I've been kind of haunted by my conversation with Will Felps. Hearing about his research, you realize &lt;b&gt;just how easy it is to poison any group&lt;/b&gt; [...] each of us have had moments this week where we wonder if we, unwittingly, have become the bad apples in our group.
&lt;/blockquote&gt;
&lt;p&gt;
As always, self-awareness is the first step. If you can't tell who the bad apple is in your group, &lt;i&gt;it might be you&lt;/i&gt;. Consider your own behavior on your own team -- are you slipping into any of these negative bad apple behavior patterns, even in a small way?
&lt;p&gt;
But there was a solitary glimmer of hope in the study, one particular group that bucked the trend:
&lt;p&gt;
&lt;blockquote&gt;
There was one group that performed really well, despite the bad apple. There was just one guy, who was a particularly good leader. And what he would do is ask questions, he would engage all the team members, and diffuse conflicts. I found out later that he's actually the son of a diplomat. His father is a diplomat from some South American country. He had this amazing diplomatic ability to diffuse the conflict that normally would emerge when our actor, Nick, would display all this jerk behavior.
&lt;/blockquote&gt;
&lt;p&gt;
This apparently led Will to his next research project: can a group leader change the dynamics and performance of a group by &lt;a href="http://www.codinghorror.com/blog/archives/001226.html"&gt;going around and asking questions&lt;/a&gt;, soliciting everyone's opinions, and making sure everyone is heard? 
&lt;p&gt;
While it's depressing to learn that a group can be so powerfully affected by the worst tendencies of a single member, it's heartening to know that a skilled leader, if you're lucky enough to have one, can intervene and potentially control the situation. 
&lt;p&gt;
Still, the obvious solution is to address the problem at its source: &lt;b&gt;get rid of the bad apple&lt;/b&gt;.
&lt;p&gt;
Even if it's you.
&lt;p&gt;
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;
[advertisement] Tired of restoring deleted files?  &lt;a href="http://www.poweradmin.com/file-sight?ref=codinghorror" rel="nofollow"&gt;Get PA File Sight&lt;/a&gt; and track down the culprit.  PA File Sight – file auditing made easy.  &lt;a href="http://www.poweradmin.com/file-sight/download.aspx?ref=codinghorror" rel="nofollow"&gt;Download the Free Trial!&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</description></item><item><title>And this one is Google’s Smart Ad!</title><link>http://www.emresokullu.com/?p=280</link><category>English</category><category>Innovation</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">esokullu</dc:creator><pubDate>Sat, 30 Jun 2007 19:25:27 PDT</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/7cc3d0f01c67b742</guid><description>&lt;p&gt;Saw this by chance while reading &lt;a href="http://googlesystem.blogspot.com/2007/06/novice-vs-expert-google-users.html"&gt;a nice article&lt;/a&gt; on Google Operating System Blog. Reminds me the &lt;a href="http://grou.ps/jobs.do"&gt;PHP job ad of Grou.ps&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://grou.ps/emresokullu.blog/wp-content/uploads/2007/07/scr1.png" title="scr1.png"&gt;&lt;img src="http://grou.ps/emresokullu.blog/wp-content/uploads/2007/07/scr2.png" alt="scr2.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Very smart. Click the image to see how it looked like on the page. Steals my heart &lt;img src="http://grou.ps/emresokullu.blog/wp-includes/images/smilies/icon_smile.gif" alt=":)"&gt;&lt;/p&gt;
&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~f/EmreSokullu?a=vMu2w9Vi"&gt;&lt;img src="http://feeds.feedburner.com/~f/EmreSokullu?i=vMu2w9Vi" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EmreSokullu?a=3QPNJGoT"&gt;&lt;img src="http://feeds.feedburner.com/~f/EmreSokullu?i=3QPNJGoT" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/EmreSokullu?a=7wgkFR68"&gt;&lt;img src="http://feeds.feedburner.com/~f/EmreSokullu?i=7wgkFR68" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>Olgun (ve dolgun) geliştirici...</title><link>http://blogs.portakalteknoloji.com/bora/blog/2008/04/21/124/</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">(author unknown)</dc:creator><pubDate>Mon, 21 Apr 2008 06:01:00 PDT</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/14e0fdeec3b9ff31</guid><description>&lt;p&gt;Bahar ayları geldiği zaman hem üniversite öğrencilerini hem de yazılım şirketlerini bir telaş alıyor. Yeni mezun olacak olan arkadaşlar içinden elbet bir bölümü daha yaz bitmeden bir iş yerinde işe girmiş oluyorlar. Dolayısı ile yaz ayları ve sonbahar aylarında da staj sonrasındaki ilk gerçek iş deneyimi ile yüzleşen genç arkadaşlarımızı görüyoruz. &lt;a href="http://blogs.portakalteknoloji.com/bora/blog/www.metutech.metu.edu.tr/"&gt;ODTÜ Teknokent&lt;/a&gt;'de bu çok daha kolay fark ediliyor. Sabah saat 9:00 sularında mesaiye gelenler arasında yepyeni yüzler görüyorsunuz. &lt;/p&gt;

&lt;p&gt;Bu arkadaşlarımız meslek yaşamlarına ilk başlarken elbette okulda çeşitli nedenlerden öğretilemeyen şeyleri öğrenmek zorunda kalıyorlar. Mesela okulda aynı anda bir çok ders aldıkları için uzun süreli ve kalabalık ekip çalışmalarına giremiyorlar. Belki bir istisna olarak TOBB ETÜ'nün Ortak Eğitim Programı'nı gösterebiliriz. O konuda bu yıl biz de deneyim yaşayacağız, daha sonra aktarırım herhalde. Ama uzun lafın kısası, genç geliştiricilerin olgunlaşması - ve tipik olarak kilo alıp dolgunlaşması - süreci yaz aylarında başlıyor. &lt;/p&gt;

&lt;p&gt;Peki bu süreç içinde genç arkadaşların neler öğrenmeye hazır olması gerekir. Yada 3-4 yıl deneyimli bir uygulama geliştirici ile yeni mezun birini ayıran neler vardır? Belli teknolojilerin (örneğin &lt;a href="http://blogs.portakalteknoloji.com/bora/blog/en.wikipedia.org/wiki/AJAX"&gt;AJAX&lt;/a&gt; yada &lt;a href="http://blogs.portakalteknoloji.com/bora/blog/www.jboss.com/products/seam"&gt;JBOSS Seam&lt;/a&gt;) bilinmesini kenara koyarsak esasında ne bilindiğinden çok o bilginin nasıl kullanıldığı üzerine farklar görüyoruz. Yani olgun geliştirici ne biliyorumdan çok nasıl yaparım (İng. &lt;a href="http://blogs.portakalteknoloji.com/bora/blog/en.wikipedia.org/wiki/Know-how"&gt;know-how&lt;/a&gt;) üzerinde deneyime sahip. Bu deneyim farkının da odaklandığı bazı kritik işler yada süreçler olması kaçınılmaz. Peki bunlar nelerdir? Uzunca süredir aklıma gelenleri bir yazayım diyordum, şu ana denk geldi. &lt;/p&gt;

&lt;p&gt;Şimdi düşünelim. Aklımıza neler gelecek.
&lt;ol&gt;
&lt;li&gt;Olgun uygulama geliştiriciler, projelerin daha uzun sürdüğünü bildikleri için uzun dönemli bir bakış açısı geliştiriyorlar. Bu da onların geçmişte arkalarında bıraktıkları işlerin ileride başlarına bela olmaması için farklı tür çalışmalarına neden oluyor. İşin ilginç yanı, bu yaklaşım daha nitelikli yani daha kaliteli iş çıkmasına neden olduğu gibi bazen işlerin daha çabuk bitmesini de sağlıyor. Bu yaklaşım hemen her şeye yansıyor. &lt;/li&gt;
&lt;li&gt;Olgun geliştiriciler hemen her konuda disiplinli oluyorlar. Bu da tabii ki bir öz disiplin ve genelde kendi kendilerine koydukları kişisel kurallardan oluşuyor. Bu kuralar çalıştıkları iş yerlerinde uygulanan yazılı kurallar olsun olmasın genel anlamda yararlı şeyler. Zaman zaman kendi kurallarının ihlal edilmesi istenince ("aman abi bugünlük uyduruk bir şey teslim edelim" lafı gelince) itiraz etmekten de çekinmiyorlar. Çünkü kendi içlerinde biliyorlar ki, bu kurallar onların kendi iyilikleri için kendi koydukları kurallar. &lt;/li&gt;
&lt;li&gt;Olgun geliştiricilerin yazdıkları kodlarla ilgili disiplinleri onların kodlama stilleri kadar çalışma ortamlarına da yansıyor. Neyin nasıl kurulduğu ve nasıl kullanıldığı çok da iyi anlaşılmayan araçlardan oluşan kümeler yerine temiz görünümlü, aralarındaki ilişki iyi tanımlanmış araçlar kullanıyorlar. Bu ille de belli bir firmanın araçlarına saplanmak demek değil. Hatta bir çok defa özgür yazılım araçlar yada kendi ihtiyaçları için kendi yazıp geliştirdikleri ve çevreleri ile paylaştıkları araçları da içeriyor. &lt;/li&gt;
&lt;li&gt;Olgun geliştiriciler, yazdıkları kodların temiz, kolay anlaşılabilir arayüzlere sahip olmasına özen gösteriyorlar. Gerektiği zaman kendi kodlarını bu amaçla yeniden yapılandırmaktan da kaçınmıyorlar. Aynı şekilde kodun sınanması yani test edilmesi için gerekli yaklaşımları kullanmayı ihmal etmiyorlar. Özellikle testlerin eksiksiz ve hatasız olduğuna dikkat ediyorlar. Test verilerini ilk baştan talep ediyorlar. &lt;/li&gt;
&lt;li&gt;Olgun geliştiriciler kodlarını yönetmek için &lt;a href="http://www.nongnu.org/cvs/"&gt;CVS&lt;/a&gt; yada &lt;a href="http://subversion.tigris.org/"&gt;SVN&lt;/a&gt; gibi bir aracı kullanırken de bazı farklar gösteriyorlar. Özellikle ilk dikkat çeken şey, yaptıkları katkıların (İng. &lt;a href="http://en.wikipedia.org/wiki/Commit_(SQL)"&gt;commit&lt;/a&gt;) açıklama notlarını girmeleri ve bunları da uzun uzun yazmaları. Ayrıca bu notlarda yazım hatalarından kaçınmaları da önemli. Çünkü hata ayıklamaya çalıştığınızda, belli bir değişikliğin ne zaman yapıldığını aramaya kalkarsanız içinde bir kaç bin katkı bulunan bir SVN deposunda arama yapmanız gerekecektir. Katkıların açıklamalarının yazılması bu işi inanılmaz hızlandırabiliyor. &lt;/li&gt;
&lt;li&gt;Olgun geliştiricilerin bir diğer çok önemli özelliği de yaptıkları işi yazmaları. Bu sadece haftalık rapor şeklinde olmak zorunda değil; özellikle kodlama yada bir sistem yapılandırma gibi karmaşık işlerini kesinlikle belgeler ile anlatıyorlar. Bir çok yazılımın kaçınılmaz biçimde çevreden aldıkları parametreler ile çalışacağını (örneğin bir Java uygulaması için dahi çok dil desteği için .properties dosyalarına erişmek yapılandırmaya hasas biçimde bağlı) düşünürsek, bu önemli bir şey. Bu sayede hem kendileri eski projelere geri döndüklerinde, hem yeni kişilere eldeki projeyi anlatırlarken kolaylık yaşıyorlar. &lt;/li&gt;
&lt;li&gt;Olgun geliştiriciler, sürekli olarak bir şey öğrenmek zorunda olduklarının bilincindeler ve çalışmalarını da buna göre yapılandırıyorlar. Hangi projede çalışırlarsa çalışsınlar, hangi aracı kullanırlarsa kullansınlar bu değişmiyor. Hem kendi öğrencikleri şeyleri belgelemeleri, hem de bunu insanlarla tartışarak bilgiyi iyice sinfirme çabaları ile dikkat çekiyorlar. Bir konudaki teknik bir sorunu araştırdığınızda, olgunlaşmış, kıdem kazanmış bir geliştiricinin bloguna denk geldiğiniz zaman aslında onun kendi çalışma defterine de denk gelmiş oluyorsunuz. &lt;/li&gt;
&lt;li&gt;Olgun geliştiriciler, hem geliştirme hem öğrenme süreçlerinde daha sabırlı. Bu sadece yaşla ilgili bir şey de değil. Genel olarak daha yaşlı kişilerin daha sabırlı olduğunu görebilirken, uygulama geliştiricilere baktığımızda resim oldukça farklı olabiliyor. Özellikle olgun geliştiriciler daha sabırlı. Aslında bu bir ikilemi de barındırıyor. Olgun geliştiriciler daha verimli çalıştıkları için daha çabuk sonuç alıyorlar. Ama bu onları gelirgin bir şekilde daha atılgan yada sabırsız yapmıyor. Bununla birlikte belli yaşı görmüş ama çalışma tarzı itibarı ile olgunlaşmamış bir çok kişi de son derece sabırsız biçimde çalışıyor. Belki de sabır ve disiplinli çalışma arasında bir bağlantı vardır. &lt;/li&gt;
&lt;li&gt;Sabrın yanı sıra, olgun geliştiriciler aynı zamanda insan ilişkileri ve iletişim konusunda da belli beceriler geliştirmiş oluyor. &lt;a href="http://blogs.portakalteknoloji.com/bora/blog/sozluk.sourtimes.org/show.asp?t=geyik+muhabbeti"&gt;Geyik muhabbeti&lt;/a&gt; yapacakları zaman yapıyorlar ama konu iş olduğu zaman iletişimi verimli tutacak bir yaklaşım belirliyorlar. Sorun tespit etmek ve çözüme doğru ilerlemek amaçlarından kopmayan, odaklı ve verimli bir iletişim tavırları var. Bu tavrın bazı nitelikleri kişiden kişiye değişse dahi, özü aynı kalıyor. &lt;/li&gt;
&lt;li&gt;Olgun geliştiriciler, yaptıkları işin boyutlarını ve ne kadar sürede yapabileceklerini daha iyi tahmin ediyorlar. Bu elbette ki daha önceden bir çok benzer-benzemez proje yapmaktan ve teslim etmekten kaynaklanıyor. Ama bundan daha önemlisi, olgun geliştiriciler ilk tahminlerini zaman içinde güncelliyorlar. Dolayısı ile aylar önceden yapılmış bir tahmin yerine yakın zamanda güncellenmiş bir tahmin üzerinden hareket ediyorlar. Bu onların kısa dönemli planlarını daha iyi yapmalarını sağlıyor. Henüz olgunlaşmamış geliştiriciler ise ya hiç tahmin ve plan yapmıyor yada çok önceden, henüz eksik bilgi ile yaptıkları tahmin ve planların geçerli olduğunu sanıyorlar. &lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;

&lt;p&gt;Bunların dışında akla gelecek şeyler elbette olacaktır. Ama benim ilk aşamada düşünebildikleirm bunlar. Sadece yeni mezun arkadaşlar değil, istediğimiz kadar deneyimli olalım, bu saydığım noktalarda kendimizi geliştirmek için hepimizin daha çok potansiyele sahip olduğumuzu düşünüyorum. &lt;/p&gt;

&lt;p&gt;Yine önemli bir düşünce geliştirme noktası da özgür yazılım projeleri ile bireysel olgunlaşma arasındaki ilişki olabilir. Bu iki kavram arasında doğrudan yada dolaylı ilişkilerin saptanması ciddi bir konu olur herhalde. &lt;/p&gt;

&lt;p&gt;Şapkayı önümüze koyacak olursak, biz &lt;a href="http://www.portakalteknoloji.com/"&gt;Portakal Teknoloji&lt;/a&gt;'de ne kadar olgunuz yada ne şekilde olgunlaşıyoruz sorusunu da sormalıyız ve kendimizce yanıtlamalıyız. &lt;/p&gt;

&lt;p&gt;Bakalım ileride bu konuya tekrar değinirsem, kesinlikle bir şeyler daha eklerim. &lt;/p&gt;</description></item><item><title>ASCII Pronunciation Rules for Programmers</title><link>http://www.codinghorror.com/blog/archives/001133.html</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jeff Atwood</dc:creator><pubDate>Thu, 12 Jun 2008 05:05:08 PDT</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/1db30371a443b203</guid><description>&lt;p&gt;
As programmers, we deal with a lot of unusual keyboard characters that typical users rarely need to type, much less think about:
&lt;p&gt;
&lt;pre&gt;
$ # % {} * [] ~ &amp;amp; &amp;lt;&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
Even the characters that are fairly regularly used in everyday writing -- such as the humble dash, parens, period, and question mark -- have radically different meaning in programming languages.
&lt;p&gt;
This is all well and good, but you'll eventually have to read code out loud to another developer for some reason. And then you're in an awkward position, indeed.
&lt;p&gt;
&lt;b&gt;How do you &lt;i&gt;pronounce&lt;/i&gt; these unusual ASCII characters?&lt;/b&gt;
&lt;p&gt;
We all do it, but we don't necessarily think much about the words we choose. I certainly hadn't thought much about this until yesterday, when I read the following comment left on &lt;a href="http://www.codinghorror.com/blog/archives/001131.html"&gt;Exploring Wide Finder&lt;/a&gt;:
&lt;p&gt;
&lt;blockquote&gt;
A friend sent me a Java code fragment in which he looped through printing "Thank You!" a million times (it was a response to a professor who had extended the deadline on a paper). I responded with a single line of Ruby to do the same, and a single line of Lisp.
&lt;p&gt;
He wrote back: "&lt;b&gt;Underscores, pipes, octothorpes, curly braces&lt;/b&gt; -- sheesh... I'll take a mild dose of verbosity if means I don't have to code something that looks like it's been zipped already!"
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;
&lt;a href="http://www.worldwidewords.org/weirdwords/ww-oct1.htm"&gt;What the heck is an &lt;i&gt;octothorpe?&lt;/i&gt;&lt;/a&gt; I know this as the &lt;i&gt;pound&lt;/i&gt; key, but that turns out to be a US-centric word; most other cultures know it as the &lt;i&gt;hash&lt;/i&gt; key.
&lt;p&gt;
I'm often surprised to hear what other programmers name their ASCII characters. Not that the words I personally use to identify my ASCII characters are any more correct, but there's far more variability than you'd expect considering the rigid, highly literal mindset of most programmers.
&lt;p&gt;
Perhaps that's why I was so excited to discover the &lt;a href="http://www.elsewhere.org/jargon/jargon.html#ASCII"&gt;ASCII entry in The New Hacker's Dictionary&lt;/a&gt;, which &lt;a href="http://www.scribkin.com/"&gt;Phil Glockner&lt;/a&gt; turned me on to. It's a fairly exhaustive catalog of the common names, rare names, and occasionally downright &lt;i&gt;weird&lt;/i&gt; names that programmers associate with the ASCII characters sprinkled throughout their code.
&lt;p&gt;
How many of these ASCII pronunciations do you recognize? Which ones are the "correct" ones in your shop?
&lt;p&gt;
&lt;table cellpadding="16" cellspacing="0" width="620"&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;
                 &lt;/td&gt;
            &lt;td valign="top"&gt;
                                Common Names&lt;/td&gt;
            &lt;td valign="top"&gt;
                Rare Names&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr bgcolor="Gainsboro" style="border-top:6px dotted red"&gt;
            &lt;td style="font-size:xx-large" valign="top"&gt;
                &lt;b&gt;!&lt;/b&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;b&gt;exclamation mark&lt;/b&gt;&lt;br&gt;
                &lt;a href="http://www.elsewhere.org/jargon/jargon.html#bang"&gt;bang&lt;/a&gt;&lt;br&gt;
                pling&lt;br&gt;
                excl&lt;br&gt;
                not&lt;br&gt;
                shriek&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;table style="width:100%"&gt;
                    &lt;tr&gt;
                        &lt;td valign="top" width="40%"&gt;
                factorial&lt;br&gt;
                exclam&lt;br&gt;
                smash&lt;br&gt;
                cuss&lt;br&gt;
                boing&lt;br&gt;
                yell&lt;br&gt;
                        &lt;/td&gt;
                        &lt;td valign="top"&gt;
                wow&lt;br&gt;
                hey&lt;br&gt;
                wham&lt;br&gt;
                eureka&lt;br&gt;
                spark-spot&lt;br&gt;
                soldier&lt;br&gt;
                control&lt;/td&gt;
                    &lt;/tr&gt;
                &lt;/table&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="font-size:xx-large" valign="top"&gt;
                &lt;b&gt;&amp;quot;&lt;/b&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;b&gt;quotation marks&lt;/b&gt;&lt;br&gt;
                quote&lt;br&gt;
                double quote&lt;br&gt;
                &lt;br&gt;
            &lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;table style="width:100%"&gt;
                    &lt;tr&gt;
                        &lt;td valign="top" width="40%"&gt;
                            literal mark&lt;br&gt;
                            double-glitch&lt;br&gt;
                            dieresis&lt;br&gt;
                            dirk&lt;/td&gt;
                        &lt;td valign="top"&gt;
                            rabbit-ears&lt;br&gt;
                            double prime&lt;/td&gt;&lt;/tr&gt;
                &lt;/table&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr bgcolor="Gainsboro"&gt;
            &lt;td style="font-size:xx-large" valign="top"&gt;
                &lt;b&gt;#&lt;/b&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;table style="width:100%"&gt;
                    &lt;tr&gt;
                        &lt;td valign="top" width="40%"&gt;
                &lt;b&gt;hash&lt;br&gt;
                            &lt;/b&gt;pound sign&lt;b&gt;&lt;br&gt;
                            &lt;/b&gt;number sign&lt;br&gt;
                pound&lt;b&gt;&lt;br&gt;
                &lt;/b&gt;&lt;/td&gt;
                        &lt;td valign="top"&gt;
                sharp&lt;br&gt;
                            &lt;a href="http://www.elsewhere.org/jargon/jargon.html#crunch"&gt;crunch&lt;/a&gt;&lt;br&gt;
                hex&lt;br&gt;
                mesh&lt;/td&gt;&lt;/tr&gt;
                &lt;/table&gt;
            &lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;table style="width:100%"&gt;
                    &lt;tr&gt;
                        &lt;td valign="top" width="40%"&gt;
                            grid&lt;br&gt;
                            crosshatch&lt;br&gt;
                            octothorpe&lt;br&gt;
                            flash&lt;br&gt;
                            square&lt;br&gt;
                            pig-pen&lt;/td&gt;
                        &lt;td valign="top"&gt;
                            tictactoe&lt;br&gt;
                            scratchmark&lt;br&gt;
                            thud&lt;br&gt;
                            thump&lt;br&gt;
                            &lt;a href="http://www.elsewhere.org/jargon/jargon.html#splat"&gt;splat&lt;/a&gt;&lt;/td&gt;
                    &lt;/tr&gt;
                &lt;/table&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="font-size:xx-large" valign="top"&gt;
                $&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;b&gt;dollar sign&lt;br&gt;
                &lt;/b&gt;dollar&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;table style="width:100%"&gt;
                    &lt;tr&gt;
                        &lt;td valign="top" width="40%"&gt;
                            currency symbol&lt;br&gt;
                            buck&lt;br&gt;
                            cash&lt;br&gt;
                            string&lt;/td&gt;
                        &lt;td valign="top"&gt;
                            escape&lt;br&gt;
                            ding&lt;br&gt;
                            cache&lt;br&gt;
                            big money&lt;/td&gt;
                    &lt;/tr&gt;
                &lt;/table&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr bgcolor="Gainsboro"&gt;
            &lt;td style="font-size:xx-large" valign="top"&gt;
                %&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;b&gt;percent sign&lt;br&gt;
                &lt;/b&gt;mod&lt;br&gt;
                grapes&lt;/td&gt;
            &lt;td valign="top"&gt;
                double-oh-seven&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="font-size:xx-large" valign="top"&gt;
                &amp;amp;&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;b&gt;ampersand&lt;/b&gt;&lt;br&gt;
                amp&lt;br&gt;
                amper&lt;br&gt;
                and&lt;br&gt;
                and sign&lt;/td&gt;
            &lt;td valign="top"&gt;
                address&lt;br&gt;
                reference&lt;br&gt;
                andpersand&lt;br&gt;
                bitand&lt;br&gt;
                background&lt;br&gt;
                pretzel&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr bgcolor="Gainsboro"&gt;
            &lt;td style="font-size:xx-large" valign="top"&gt;
                &amp;#39;&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;b&gt;apostrophe&lt;/b&gt;&lt;br&gt;
                single quote&lt;br&gt;
                quote&lt;br&gt;
            &lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;table style="width:100%"&gt;
                    &lt;tr&gt;
                        &lt;td valign="top" width="40%"&gt;
                            prime&lt;br&gt;
                            glitch&lt;br&gt;
                            tick&lt;br&gt;
                            irk&lt;br&gt;
                        &lt;/td&gt;
                        &lt;td valign="top"&gt;
                            pop&lt;br&gt;
                            spark&lt;br&gt;
                            closing single quotation mark&lt;br&gt;
                            acute accent&lt;br&gt;
                        &lt;/td&gt;
                    &lt;/tr&gt;
                &lt;/table&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="font-size:xx-large" valign="top"&gt;
                ( )&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;b&gt;opening / closing parenthesis&lt;br&gt;
                &lt;/b&gt;left / right paren&lt;br&gt;
                left / right parenthesis&lt;br&gt;
                left / right&lt;br&gt;
                open / close&lt;br&gt;
                open / close paren&lt;br&gt;
                paren / thesis&lt;/td&gt;
            &lt;td valign="top"&gt;
                so/already&lt;br&gt;
                lparen/rparen&lt;br&gt;
                opening/closing parenthesis&lt;br&gt;
                opening/closing round bracket&lt;br&gt;
                left/right round bracket&lt;br&gt;
                wax/wane&lt;br&gt;
                parenthisey/unparenthisey&lt;br&gt;
                left/right ear&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr bgcolor="Gainsboro"&gt;
            &lt;td style="font-size:xx-large" valign="top"&gt;
                &lt;b&gt;[ ]&lt;/b&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;b&gt;opening / closing bracket&lt;br&gt;
                &lt;/b&gt;left / right bracket&lt;br&gt;
                left / right square bracket&lt;br&gt;
                bracket / unbracket&lt;/td&gt;
            &lt;td valign="top"&gt;
                square / unsquare&lt;br&gt;
                u turn / u turn back&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="font-size:xx-large" valign="top"&gt;
                &lt;b&gt;{ }&lt;/b&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;b&gt;opening / closing brace&lt;/b&gt;&lt;br&gt;
                open / close brace&lt;br&gt;
                left / right brace&lt;br&gt;
                left / right squiggly&lt;br&gt;
                left / right squiggly bracket/brace&lt;br&gt;
                left / right curly bracket/brace&lt;/td&gt;
            &lt;td valign="top"&gt;
                brace / unbrace&lt;br&gt;
                curly / uncurly&lt;br&gt;
                leftit / rytit&lt;br&gt;
                left / right squirrelly&lt;br&gt;
                embrace / bracelet&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr bgcolor="Gainsboro"&gt;
            &lt;td style="font-size:xx-large" valign="top"&gt;
                &lt;b&gt;&amp;lt; &amp;gt;&lt;/b&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;b&gt;less / greater than&lt;/b&gt;&lt;br&gt;
                bra / ket&lt;br&gt;
                left / right angle&lt;br&gt;
                left / right angle bracket&lt;br&gt;
                left / right broket&lt;/td&gt;
            &lt;td valign="top"&gt;
                from / into (or towards)&lt;br&gt;
                read from / write to&lt;br&gt;
                suck / blow&lt;br&gt;
                comes-from / gozinta&lt;br&gt;
                in / out&lt;br&gt;
                crunch / zap&lt;br&gt;
                tic / tac&lt;br&gt;
                angle / right angle&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="font-size:xx-large" valign="top"&gt;
                &lt;b&gt;*&lt;/b&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;b&gt;asterisk&lt;br&gt;
                &lt;/b&gt;star&lt;br&gt;
                splat&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;table style="width:100%"&gt;
                    &lt;tr&gt;
                        &lt;td valign="top" width="40%"&gt;
                            wildcard&lt;br&gt;
                            gear&lt;br&gt;
                            dingle&lt;br&gt;
                            mult&lt;br&gt;
                            spider&lt;/td&gt;
                        &lt;td valign="top"&gt;
                            aster&lt;br&gt;
                            times&lt;br&gt;
                            twinkle&lt;br&gt;
                            &lt;a href="http://www.elsewhere.org/jargon/jargon.html#glob"&gt;glob&lt;/a&gt;&lt;br&gt;
                            &lt;a href="http://www.elsewhere.org/jargon/jargon.html#Nathan%20Hale"&gt;Nathan Hale&lt;/a&gt;&lt;/td&gt;
                    &lt;/tr&gt;
                &lt;/table&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr bgcolor="Gainsboro"&gt;
            &lt;td style="font-size:xx-large" valign="top"&gt;
                &lt;b&gt;+&lt;/b&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;b&gt;plus&lt;/b&gt;&lt;br&gt;
                add&lt;/td&gt;
            &lt;td valign="top"&gt;
                cross&lt;br&gt;
                intersection&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="font-size:xx-large" valign="top"&gt;
                &lt;b&gt;,&lt;/b&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;b&gt;comma&lt;/b&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;
                cedilla&lt;br&gt;
                tail&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr bgcolor="Gainsboro"&gt;
            &lt;td style="font-size:xx-large" valign="top"&gt;
                -&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;b&gt;dash&lt;/b&gt;&lt;br&gt;
                hyphen&lt;br&gt;
                minus&lt;/td&gt;
            &lt;td valign="top"&gt;
                worm&lt;br&gt;
                option&lt;br&gt;
                dak&lt;br&gt;
                bithorpe&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="font-size:xx-large" valign="top"&gt;
                &lt;b&gt;.&lt;/b&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;b&gt;period&lt;br&gt;
                &lt;/b&gt;dot&lt;br&gt;
                point&lt;br&gt;
                decimal point&lt;/td&gt;
            &lt;td valign="top"&gt;
                radix point&lt;br&gt;
                full stop&lt;br&gt;
                spot&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr bgcolor="Gainsboro"&gt;
            &lt;td style="font-size:xx-large" valign="top"&gt;
                &lt;b&gt;/&lt;/b&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;b&gt;slash&lt;/b&gt;&lt;br&gt;
                stroke&lt;br&gt;
                slant&lt;br&gt;
                forward slash&lt;/td&gt;
            &lt;td valign="top"&gt;
                diagonal&lt;br&gt;
                solidus&lt;br&gt;
                over&lt;br&gt;
                slak&lt;br&gt;
                virgule&lt;br&gt;
                slat&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="font-size:xx-large" valign="top"&gt;
                &lt;b&gt;\&lt;/b&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;table style="width:100%"&gt;
                    &lt;tr&gt;
                        &lt;td valign="top" width="40%"&gt;
                            &lt;b&gt;backslash&lt;br&gt;
                            &lt;/b&gt;hack&lt;br&gt;
                            whack&lt;br&gt;
                            escape&lt;br&gt;
                            reverse slash&lt;/td&gt;
                        &lt;td valign="top"&gt;
                            slosh&lt;br&gt;
                            backslant&lt;br&gt;
                            backwhack&lt;/td&gt;
                    &lt;/tr&gt;
                &lt;/table&gt;
            &lt;/td&gt;
            &lt;td valign="top"&gt;
                bash&lt;br&gt;
                reverse slant&lt;br&gt;
                reversed virgule&lt;br&gt;
                backslat&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr bgcolor="Gainsboro"&gt;
            &lt;td style="font-size:xx-large" valign="top"&gt;
                &lt;b&gt;:&lt;/b&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;b&gt;colon&lt;/b&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;
                dots&lt;br&gt;
                two-spot&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="font-size:xx-large" valign="top"&gt;
                &lt;b&gt;;&lt;/b&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;b&gt;semicolon&lt;/b&gt;&lt;br&gt;
                semi&lt;/td&gt;
            &lt;td valign="top"&gt;
                weenie&lt;br&gt;
                hybrid&lt;br&gt;
                pit-thwong&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr bgcolor="Gainsboro"&gt;
            &lt;td style="font-size:xx-large" valign="top"&gt;
                &lt;b&gt;=&lt;/b&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;b&gt;equals&lt;br&gt;
                &lt;/b&gt;gets&lt;br&gt;
                takes&lt;/td&gt;
            &lt;td valign="top"&gt;
                quadrathorpe&lt;br&gt;
                half-mesh&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="font-size:xx-large" valign="top"&gt;
                &lt;b&gt;?&lt;/b&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;b&gt;question mark&lt;br&gt;
                &lt;/b&gt;query&lt;br&gt;
                &lt;a href="http://www.elsewhere.org/jargon/jargon.html#ques"&gt;ques&lt;/a&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;table style="width:100%"&gt;
                    &lt;tr&gt;
                        &lt;td valign="top" width="40%"&gt;
                            quiz&lt;br&gt;
                            whatmark&lt;br&gt;
                            what&lt;br&gt;
                            wildchar&lt;/td&gt;
                        &lt;td valign="top"&gt;
                            huh&lt;br&gt;
                            hook&lt;br&gt;
                            buttonhook&lt;br&gt;
                            hunchback&lt;/td&gt;
                    &lt;/tr&gt;
                &lt;/table&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr bgcolor="Gainsboro"&gt;
            &lt;td style="font-size:xx-large" valign="top"&gt;
                &lt;b&gt;@&lt;/b&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;b&gt;at sign&lt;br&gt;
                &lt;/b&gt;at&lt;br&gt;
                strudel&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;table style="width:100%"&gt;
                    &lt;tr&gt;
                        &lt;td valign="top" width="40%"&gt;
                            each&lt;br&gt;
                            vortex&lt;br&gt;
                            whorl&lt;br&gt;
                            whirlpool&lt;br&gt;
                            cyclone&lt;/td&gt;
                        &lt;td valign="top"&gt;
                            snail&lt;br&gt;
                            ape&lt;br&gt;
                            cat&lt;br&gt;
                            rose&lt;br&gt;
                            cabbage&lt;br&gt;
                            commercial at&lt;/td&gt;
                    &lt;/tr&gt;
                &lt;/table&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="font-size:xx-large" valign="top"&gt;
                &lt;b&gt;^&lt;/b&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;b&gt;circumflex&lt;br&gt;
                &lt;/b&gt;caret&lt;b&gt;&lt;br&gt;
                &lt;/b&gt;hat&lt;br&gt;
                control&lt;br&gt;
                uparrow&lt;br&gt;
            &lt;/td&gt;
            &lt;td valign="top"&gt;
                xor sign&lt;br&gt;
                chevron&lt;br&gt;
                shark (or shark-fin)&lt;br&gt;
                to the&lt;br&gt;
                fang&lt;br&gt;
                pointer&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr bgcolor="Gainsboro"&gt;
            &lt;td style="font-size:xx-large" valign="top"&gt;
                &lt;b&gt;_&lt;/b&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;b&gt;underline&lt;/b&gt;&lt;br&gt;
                underscore&lt;br&gt;
                underbar&lt;br&gt;
                under&lt;/td&gt;
            &lt;td valign="top"&gt;
                score&lt;br&gt;
                backarrow&lt;br&gt;
                skid&lt;br&gt;
                flatworm&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="font-size:xx-large" valign="top"&gt;
                &lt;b&gt;`&lt;/b&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;b&gt;grave accent&lt;/b&gt;&lt;br&gt;
                backquote&lt;br&gt;
                left quote&lt;br&gt;
                left single quote&lt;br&gt;
                open quote&lt;br&gt;
                grave&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;table style="width:100%"&gt;
                    &lt;tr&gt;
                        &lt;td valign="top" width="40%"&gt;
                            backprime&lt;br&gt;
                            backspark&lt;br&gt;
                            unapostrophe&lt;br&gt;
                            birk&lt;br&gt;
                            blugle&lt;/td&gt;
                        &lt;td valign="top"&gt;
                            back tick&lt;br&gt;
                            back glitch&lt;br&gt;
                            push&lt;br&gt;
                            opening single quote&lt;br&gt;
                            quasiquote&lt;/td&gt;
                    &lt;/tr&gt;
                &lt;/table&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr bgcolor="Gainsboro"&gt;
            &lt;td style="font-size:xx-large" valign="top"&gt;
                &lt;b&gt;|&lt;/b&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;b&gt;bar&lt;/b&gt;&lt;br&gt;
                or&lt;br&gt;
                or-bar&lt;br&gt;
                v-bar&lt;br&gt;
                pipe&lt;br&gt;
                vertical bar&lt;/td&gt;
            &lt;td valign="top"&gt;
                vertical line&lt;br&gt;
                gozinta&lt;br&gt;
                thru&lt;br&gt;
                pipesinta&lt;br&gt;
                spike&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="font-size:xx-large" valign="top"&gt;
                &lt;b&gt;~&lt;/b&gt;&lt;/td&gt;
            &lt;td valign="top"&gt;
                &lt;b&gt;tilde&lt;/b&gt;&lt;br&gt;
                squiggle&lt;br&gt;
                &lt;a href="http://www.elsewhere.org/jargon/jargon.html#twiddle"&gt;twiddle&lt;/a&gt;&lt;br&gt;
                not&lt;/td&gt;
            &lt;td valign="top"&gt;
                approx&lt;br&gt;
                wiggle&lt;br&gt;
                swung dash&lt;br&gt;
                enyay&lt;br&gt;
                sqiggle (sic)&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;
&lt;p&gt;
If you're curious about the derivation of some of the odder names here, there are an extensive set of footnotes (and even &lt;i&gt;more&lt;/i&gt; possible pronunciations) at &lt;a href="http://ascii-table.com/pronunciation-guide.php"&gt;the ascii-table.com pronunciation guide&lt;/a&gt;.
&lt;p&gt;
So the next time a programmer walks up to you and says, "oh, it's easy! Just type wax bang at hash buck grapes circumflex and splat wane", you'll know what they mean.
&lt;p&gt;
Maybe.
&lt;p&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;
[advertisement] Peer code review without meetings, paperwork, or stopwatches?  No wonder &lt;a href="http://smartbear.com/codecollab.php?chblog4" rel="nofollow"&gt;Code Collaborator won the Jolt Award.
&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</description></item><item><title>Investing in a Quality Programming Chair</title><link>http://www.codinghorror.com/blog/archives/001146.html</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jeff Atwood</dc:creator><pubDate>Sat, 05 Jul 2008 00:59:59 PDT</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/163e997b99c18268</guid><description>&lt;p&gt;
In &lt;a href="http://www.codinghorror.com/blog/archives/000240.html"&gt;A Developer's Second Most Important Asset&lt;/a&gt;, I described how buying a quality chair may be one of the &lt;b&gt;smartest investments you can make as a software developer&lt;/b&gt;. 
&lt;p&gt;
&lt;blockquote&gt;
In fact, after browsing chairs for the last few years of my career, I've come to one conclusion: you can't expect to get a decent chair for less than $500. If you are spending less than that on seating -- unless you are getting the deal of the century on dot-bomb bankruptcy auctions -- &lt;i&gt;you're probably making a mistake&lt;/i&gt;.
&lt;/blockquote&gt;
&lt;p&gt;
I still believe this to be true, and I urge any programmers reading this to seriously consider the value of what you're sitting in while you're on the job. In our profession, seating &lt;i&gt;matters&lt;/i&gt;:
&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Chairs are a primary part of the programming experience.&lt;/b&gt; Eight hours a day, every day, for the rest of your working life -- you're sitting in one. Like it or not, whatever you're sitting in has a measurable impact on your work experience.
&lt;p&gt;
&lt;li&gt;&lt;b&gt;Cheap chairs suck&lt;/b&gt;. Maybe I've become spoiled, but I have yet to sit in a single good, cheap chair. In my experience, the difference between the really great chairs and the cheap stuff is enormous. A quality chair is so comfortable and accommodating it effortlessly melts into the background, so you can focus on your work. A cheesy, cheap chair constantly reminds you how many hours of work you have left.
&lt;p&gt;
&lt;li&gt;&lt;b&gt;Chairs last.&lt;/b&gt; As I write this, I'm still sitting my original Aeron chair, which I purchased in 1998. I can't think of any other piece of equipment I use in my job that has lasted me &lt;i&gt;ten full years&lt;/i&gt; and beyond. While the initial sticker shock of a quality chair may turn you off, try to mentally amortize that cost across the next ten years or more.
&lt;/li&gt;&lt;/p&gt;&lt;/li&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;
Choice of seating is as fundamental and constant as it gets in a programming career otherwise marked by relentless change. They are long term investments. Why not take the same care and consideration in selecting a chair as you would with the other strategic directions that you'll carry with you for the rest of your career? Skimping yourself on a chair just doesn't make sense.
&lt;p&gt;
Although I've been quite happy with my &lt;a href="http://www.amazon.com/dp/B0006NUB5U/?tag=codinghorror-20"&gt;Herman Miller Aeron chair&lt;/a&gt; over the last 10 years, I've always been a little disenchanted with the way it became associated with &lt;a href="http://www.slate.com/id/2085064/"&gt;dot-com excess&lt;/a&gt;:
&lt;p&gt;
&lt;blockquote&gt;
In the '90s, the Aeron became an emblem of the dot-com boom; it symbolized mobility, speed, efficiency, and 24/seven work weeks. The Aeron was a must-have for hot startups precisely because it looked the least like office furniture: It was more like a piece of machinery or unadorned engineering. The black Pellide webbing was durable, and hid whatever Jolt or Red Bull stains you might get on it. Held taut by an aluminum frame, the mesh allowed air to circulate and kept your body cool. What's more, the chair came in three sizes, like a personalized tool. Assorted knobs and levers allowed you to adjust the seat height, tilt tension, tilt range, forward tilt, arm height, arm width, arm angle, lumbar depth, and lumbar height. The Aeron was high-tech but sexy -- which was how the dot-commers saw themselves.
&lt;p&gt;
&lt;a href="http://www.amazon.com/dp/B0006NUB5U/?tag=codinghorror-20"&gt;
&lt;img alt="aeron chair" src="http://www.codinghorror.com/blog/images/chair-aeron.jpg" width="240" height="327" border="0"&gt;&lt;/a&gt;
&lt;p&gt;
But baby-faced CEOs weren't drawn to the Aeron only for the way it looked. The Aeron was a visual expression of the anti-corporate zeitgeist, a non-hierarchical philosophy about the workplace. An office full of Aerons implicitly rejected the Fortune 500, coat-and-tie, brick-and-mortar model in which the boss sinks back in an overpriced, oversized, leather dinosaur while his secretary perches on an Office Max toadstool taking notes.
&lt;/p&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;
I recently had the opportunity to sit in a newer &lt;a href="http://www.amazon.com/dp/B0002K11BK/?tag=codinghorror-20"&gt;Herman Miller Mirra chair&lt;/a&gt; on a trip, and I was surprised how much more comfortable it felt than my classic Aeron.
&lt;p&gt;
&lt;a href="http://www.amazon.com/dp/B0002K11BK/?tag=codinghorror-20"&gt;&lt;img alt="chair-mirra" src="http://www.codinghorror.com/blog/images/chair-mirra.jpg" width="300" height="413" border="0"&gt;&lt;/a&gt;
&lt;p&gt;
The Mirra chair was an excellent recliner, too. I've been disappointed by how poorly the Aeron reclines. I actually broke my Aeron's recline pin once and had to replace it myself. So I've retrained myself not to recline, which is awkward, as I'm a natural recliner.
&lt;p&gt;
All this made me wonder if I should retire my Aeron and upgrade to something better. I liked the Mirra, but the comments to &lt;a href="http://www.codinghorror.com/blog/archives/000240.html"&gt;my original chair post&lt;/a&gt; have a lot of other good seating suggestions, too. Here are pictures and links to &lt;b&gt;the chairs that were most frequently mentioned as contenders&lt;/b&gt;, in addition to the Mirra and Aeron pictured above:
&lt;p&gt;
&lt;a href="http://www.amazon.com/dp/B000REGDRS/?tag=codinghorror-20"&gt;Steelcase Think Chair&lt;/a&gt;
&lt;p&gt;
&lt;a href="http://www.amazon.com/dp/B000REGDRS/?tag=codinghorror-20"&gt;&lt;img alt="steelcase think chair" src="http://www.codinghorror.com/blog/images/steelcase_think_chair.jpg" width="263" height="376" border="0"&gt;&lt;/a&gt;
&lt;p&gt;
&lt;a href="http://www.amazon.com/dp/B000RE7MGE/?tag=codinghorror-20"&gt;Steelcase Leap Chair&lt;/a&gt;
&lt;p&gt;
&lt;a href="http://www.amazon.com/dp/B000RE7MGE/?tag=codinghorror-20"&gt;&lt;img alt="steelcase leap chair" src="http://www.codinghorror.com/blog/images/steelcase-leap.jpg" width="287" height="454" border="0"&gt;&lt;/a&gt;
&lt;p&gt;
&lt;a href="http://www.amazon.com/dp/B0014DPL9C/?tag=codinghorror-20"&gt;Ergohuman Mesh Chair&lt;/a&gt;
&lt;p&gt;
&lt;a href="http://www.amazon.com/dp/B0014DPL9C/?tag=codinghorror-20"&gt;&lt;img alt="ergohuman chair" src="http://www.codinghorror.com/blog/images/chair-ergohuman.jpg" width="327" height="489" border="0"&gt;&lt;/a&gt;
&lt;p&gt;
&lt;a href="http://www.amazon.com/dp/B001BPX1E0/?tag=codinghorror-20"&gt;HumanScale Freedom Chair&lt;/a&gt;
&lt;p&gt;
&lt;a href="http://www.amazon.com/dp/B001BPX1E0/?tag=codinghorror-20"&gt;&lt;img alt="humanscale freedom chair" src="http://www.codinghorror.com/blog/images/chair-freedom-1.jpg" width="260" height="436" border="0"&gt;&lt;/a&gt;
&lt;p&gt;
&lt;a href="http://www.amazon.com/dp/B000NTF7OW/?tag=codinghorror-20"&gt;HumanScale Liberty Chair&lt;/a&gt;
&lt;p&gt;
&lt;a href="http://www.amazon.com/dp/B000NTF7OW/?tag=codinghorror-20"&gt;&lt;img alt="humanscale liberty chair" src="http://www.codinghorror.com/blog/images/chair-liberty-1.jpg" width="276" height="447" border="0"&gt;&lt;/a&gt;
&lt;p&gt;
There were also some lesser known recommendations, such as the &lt;a href="http://www.haworth.com/zody"&gt;Haworth Zody chair&lt;/a&gt;, &lt;a href="http://www.nightingalechairs.com/html/cxo/cxo_home.html"&gt;Nightingale CXO chair&lt;/a&gt;, &lt;a href="http://www.ergo4me.com/"&gt;BodyBilt ergo chairs&lt;/a&gt;, &lt;a href="http://www.hag.no/"&gt;Hag kneeling chair&lt;/a&gt;, &lt;a href="http://www.igoergo.com/_site/products.php?cat=02"&gt;NeutralPosture ergo&lt;/a&gt;, the &lt;a href="http://www.dwr.com/product/designers/a-c/don+chadwick/chadwick-chair-w--tilt.do"&gt;Chadwick Chair&lt;/a&gt; from the original designer of the Aeron, and something called &lt;a href="http://www.relaxtheback.com/the-swopper-product-6370282-1894"&gt;the swopper&lt;/a&gt;.
&lt;p&gt;
Chair fit is, of course, a subjective thing. If you're investing $500+ in a chair, you'd understandably want to be sure it's "the one". The thing to do is find a local store that sells all these chairs and try them all out. Well, good luck with that. Don't even bother with your local big-box office supply chain. Your best bet seems to be &lt;b&gt;back stores&lt;/b&gt;, as they tend to stock many of the more exotic chairs. Apparently they have a clientele of people who are willing to spend for comfort.
&lt;p&gt;
Reviews of individual chairs are relatively easy to find, but aren't particularly helpful in isolation. What we need is a multi-chair review roundup. The only notable roundup I know of is Slate's late 2005 &lt;a href="http://www.slate.com/id/2131646/"&gt;Sit Happens: The Search for the Best Desk Chair&lt;/a&gt;. It's not as comprehensive as I would like, but it does have most of the main contenders. Notably, Slate's winner was the &lt;a href="http://www.amazon.com/dp/B000NTF7OW/?tag=codinghorror-20"&gt;HumanScale Liberty&lt;/a&gt;.
&lt;p&gt;
Some other helpful resources I've found, both in the comments to this post, and elsewhere:
&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;a &lt;a href="http://www.crunchgear.com/2006/12/28/workspace-roundup-ergonomic-chairs/"&gt;multiple chair roundup at CrunchGear&lt;/a&gt;
&lt;li&gt;a fantastic &lt;a href="http://www.google.com/notebook/public/02097020037672550236/BDTBmQgoQg8epiZgi"&gt;research page on chairs&lt;/a&gt; someone compiled
&lt;li&gt;a &lt;a href="http://ehs.unc.edu/workplace_safety/ergonomics/chairs/"&gt;multiple-chair roundup at UNC&lt;/a&gt;
&lt;li&gt;another &lt;a href="http://www.consumersearch.com/www/office/office-chairs/"&gt;chair roundup at Consumer Search&lt;/a&gt;, as well as a &lt;a href="http://www.consumersearch.com/www/office/office-chairs/reviews.html"&gt;meta-collection of roundups&lt;/a&gt;.
&lt;li&gt;video demos of &lt;a href="http://www.youtube.com/watch?v=0T7e7UjWv3o"&gt;Leap&lt;/a&gt;, and the &lt;a href="http://www.office-seats.co.uk/tv.htm"&gt;HumanScale Freedom / Liberty&lt;/a&gt;
&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;
If this is all a bit too much &lt;a href="http://furnitureporn.com/"&gt;furniture porn&lt;/a&gt; for your tastes, I understand. As for me, I'm headed off to my local friendly neighborhood back store to figure out which of these chairs will best replace my aging Aeron. By my calculations, the Aeron cost me about $7 per month over its ten year lifetime; I figure my continued health and comfort while programming are worth at least that much.
&lt;p&gt;
&lt;font color="red"&gt;Update:&lt;/font&gt; Since people have been asking, I ultimately decided the best fit and feel for me, personally, was the &lt;a href="http://www.amazon.com/dp/B0002K11BK/?tag=codinghorror-20"&gt;Herman Miller Mirra chair&lt;/a&gt;. It's a huge upgrade from my ten year old Aeron. It feels like three or four revisions better. For example, the front lip of the seat is adjustable, which addresses one of the major concerns I had with my Aeron -- as well as the vastly improved reclining I mentioned above. The only unexpected downside is that the plastic back is a little rough on the skin if you sit, er... shirtless. Although I am very pleased with my new shadow Mirra with citron back (&lt;a href="http://www.codinghorror.com/blog/images/mirra-chair-shadow-citron.jpg"&gt;pic&lt;/a&gt;), I urge you to do the research and try the chairs yourself before deciding.
&lt;p&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;
[advertisement] Read the largest case study ever published about lightweight peer code review in &lt;i&gt;&lt;a href="http://smartbearsoftware.com/codecollab-code-review-book.php?howheard=Coding+Horror+Blog+3"&gt;Best Kept Secrets of Peer Code Review&lt;/a&gt;&lt;/i&gt;.  Free book, free shipping.
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</description><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">14940598242040616558</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">03989074534817728193</gr:likingUser></item><item><title>The One Thing Every Software Engineer Should Know</title><link>http://www.codinghorror.com/blog/archives/001177.html</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jeff Atwood</dc:creator><pubDate>Thu, 23 Oct 2008 00:59:59 PDT</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/4f4267c8b4da2e14</guid><description>&lt;p&gt;
I'm a huge &lt;a href="http://steve-yegge.blogspot.com/"&gt;Steve Yegge&lt;/a&gt; fan, so It was a great honor to have Steve Yegge on a &lt;a href="http://blog.stackoverflow.com/2008/10/podcast-25/"&gt;recent Stack Overflow podcast&lt;/a&gt;. One thing I couldn't have predicted, however, was one particular theme of Steve's experience at Google and Amazon that kept coming up time and time again:
&lt;p&gt;
&lt;blockquote&gt;
If there was one thing I could teach every engineer, it would be &lt;b&gt;how to market&lt;/b&gt;. 
&lt;/blockquote&gt;
&lt;p&gt;
Not &lt;a href="http://steve-yegge.blogspot.com/2008/09/programmings-dirtiest-little-secret.html"&gt;how to type&lt;/a&gt;, not &lt;a href="http://steve.yegge.googlepages.com/you-should-write-blogs"&gt;how to write&lt;/a&gt;, not &lt;a href="http://steve-yegge.blogspot.com/2008/06/rhinos-and-tigers.html"&gt;how to design a programming language&lt;/a&gt;, but &lt;i&gt;marketing&lt;/i&gt;.
&lt;p&gt;
This is painful for developers to hear, because &lt;a href="http://www.codinghorror.com/blog/archives/000878.html"&gt;we love code&lt;/a&gt;. But all that brilliant code is totally irrelevant until:
&lt;p&gt;
&lt;ol&gt;
&lt;li&gt;people &lt;b&gt;understand&lt;/b&gt; what you're doing
&lt;li&gt;people become &lt;b&gt;interested&lt;/b&gt; in what you're doing
&lt;li&gt;people get &lt;b&gt;excited&lt;/b&gt; about what you're doing
&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;
That, in a nutshell, is marketing. Just because you're a marketer doesn't &lt;i&gt;necessarily&lt;/i&gt; mean you're a marketing weasel. Sure, the two things are highly correlated -- but at its core, marketing is little more than an intermediate level course on fundamental human communication. Not something us programmers have &lt;a href="http://www.codinghorror.com/blog/archives/000710.html"&gt;historically been so great at&lt;/a&gt;. 
&lt;p&gt;
That's why even the hardest of hard-core programmers should be paying attention to people like &lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=%2Fgp%2Fsearch%3Fy%3D14%26field-keywords%3Dseth%20godin%26url%3Dsearch-alias%3Dstripbooks%26ref%5F%3Dnb%5Fss%5F%26x%3D14&amp;amp;tag=codinghorror-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=390957"&gt;Seth Godin&lt;/a&gt;. Steve was referring to marketing in the broader, more timeless sense of &lt;b&gt;getting other people interested in your ideas&lt;/b&gt;.
&lt;p&gt;
After hearing Steve mention this several times on our podcast -- and having seen his related talk &lt;a href="http://blip.tv/file/319044/"&gt;How to Ignore Marketing and Become Irrelevant in Two Easy Steps&lt;/a&gt; I suddenly realized why I was so fascinated with two particular books I recently discovered. Books I kept referring to, over and over, during the development of Stack Overflow. 
&lt;p&gt;
&lt;table cellpadding="4" cellspacing="4" width="650"&gt;
&lt;tr&gt;
&lt;td valign="bottom"&gt;
&lt;a href="http://www.amazon.com/dp/1591841216/?tag=codinghorror-20"&gt;Whatever You Think, Think the Opposite&lt;/a&gt;
&lt;/td&gt;
&lt;td valign="bottom"&gt;
&lt;a href="http://www.amazon.com/dp/0714843377/?tag=codinghorror-20"&gt;It's Not How Good You Are,&lt;br&gt;It's How Good You Want to Be&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&lt;a href="http://www.amazon.com/dp/1591841216/?tag=codinghorror-20"&gt;&lt;img alt="Whatever you think, think the opposite" src="http://www.codinghorror.com/blog/images/whatever-you-think-think-the-opposite.png" width="318" height="464" border="0" style="border:1px solid silver"&gt;&lt;/a&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;a href="http://www.amazon.com/dp/0714843377/?tag=codinghorror-20"&gt;&lt;img alt="It&amp;#39;s Not How Good You Are, It&amp;#39;s How Good You Want to Be" src="http://www.codinghorror.com/blog/images/its-not-how-good-you-are-its-how-good-you-want-to-be.png" width="318" height="464" border="0" style="border:1px solid silver"&gt;&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;
I couldn't put down these two small-format books from the late &lt;a href="http://en.wikipedia.org/wiki/Paul_Arden"&gt;Paul Arden&lt;/a&gt;. Guess what Mr. Arden did for a living? That&amp;#39;s right, he was an executive creative director for Saatchi &amp;amp; Saatchi -- an advertising firm. 
&lt;p&gt;
I had been reading dirty books. &lt;i&gt;Marketing&lt;/i&gt; books. By choice, even. I'm a bit embarrassed to admit this, because these are exactly the kinds of pithy little business books I usually make fun of other people for reading. But in reading these books, I realized that so much of what we do on Stack Overflow has nothing to do with how awesome our code is -- and everything to do with &lt;i&gt;marketing&lt;/i&gt;.
&lt;p&gt;
We're all software developers here, so let me put this in terms programmers understand: &lt;a href="http://en.wikipedia.org/wiki/Dungeons_and_Dragons"&gt;Dungeons &amp;amp; Dragons&lt;/a&gt; character statistics. You know, the classics.
&lt;p&gt;
&lt;img alt="RPG character stats: STR DEX CON INT WIS CHA" src="http://www.codinghorror.com/blog/images/character-stats.jpg" width="500" height="330" border="0"&gt;
&lt;p&gt;
If you're a programmer, and you want to &lt;a href="http://www.codinghorror.com/blog/archives/000530.html"&gt;get better at your job every year&lt;/a&gt;, you might think that the most important character stat to build is &lt;i&gt;coding&lt;/i&gt;. Let's call this INT. So at the end of many years of toil, you'll end up something like this:
&lt;p&gt;
&lt;table cellpadding="4" cellspacing="4"&gt;
&lt;tr&gt;&lt;td&gt;str&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;dex&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;con&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;int&lt;/td&gt;&lt;td&gt;&lt;font color="red"&gt;51&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;wis&lt;/td&gt;&lt;td&gt;13&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;chr&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;
OK, you're a genius programmer who can code circles around everyone else. But &lt;a href="http://www.codinghorror.com/blog/archives/000773.html"&gt;you may never ship any of your code&lt;/a&gt; for reasons that you don't control. That's an illusion. You &lt;i&gt;can&lt;/i&gt; control when, how, and where your code ships. You probably spent too much time building your code and &lt;b&gt;not enough time as an &lt;i&gt;advocate&lt;/i&gt; of your code&lt;/b&gt;. Did you explain to people what your code does, why it's cool and important? Did you offer reasons why your code is going to make their lives better, at least in some small way? Did you make it easy for people to find and use your code?
&lt;p&gt;
I believe most programmers will be better served in their professional career if they shoot for character development more along these lines:
&lt;p&gt;
&lt;table cellpadding="4" cellspacing="4"&gt;
&lt;tr&gt;&lt;td&gt;str&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;dex&lt;/td&gt;&lt;td&gt;14&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;con&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;int&lt;/td&gt;&lt;td&gt;18&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;wis&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;chr&lt;/td&gt;&lt;td&gt;17&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;
Sometimes, &lt;a href="http://www.codinghorror.com/blog/archives/000543.html"&gt;you become a better programmer by choosing not to program&lt;/a&gt;. I agree with Steve: if I could teach my fellow software engineers one thing, it would be &lt;b&gt;how to market themselves, their code, and their project.&lt;/b&gt;
&lt;p&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;
[advertisement] Peer code review without meetings, paperwork, or stopwatches?  No wonder &lt;a href="http://smartbear.com/codecollab.php?chblog4"&gt;Code Collaborator&lt;/a&gt; won the Jolt Award.
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</description></item><item><title>Hardware is Cheap, Programmers are Expensive</title><link>http://www.codinghorror.com/blog/archives/001198.html</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jeff Atwood</dc:creator><pubDate>Thu, 18 Dec 2008 23:59:59 PST</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/50f7f614e9abb966</guid><description>&lt;p&gt;
Given the &lt;a href="http://www.codinghorror.com/blog/archives/000741.html"&gt;rapid advance of Moore's Law&lt;/a&gt;, &lt;b&gt;when does it make sense to throw hardware at a programming problem?&lt;/b&gt; As a general rule, I'd say almost &lt;i&gt;always&lt;/i&gt;.
&lt;p&gt;
Consider the &lt;a href="http://www.payscale.com/research/US/Job=Sr._Software_Engineer_%2F_Developer_%2F_Programmer/Salary"&gt;average programmer salary&lt;/a&gt; here in the US:
&lt;p&gt;
&lt;img alt="programmer salary graph, as of late 2008" src="http://www.codinghorror.com/blog/images/programmer-salary-graph.png" width="500" height="300" border="0"&gt;
&lt;p&gt;
You probably have several of these programmer guys or gals on staff. I can't speak to how much your servers may cost, or how many of them you may need. Or, maybe you don't need any -- perhaps all your code executes on your users' hardware, which is an entirely different scenario. Obviously, situations vary. But even the most rudimentary math will tell you that &lt;b&gt;it'd take a &lt;i&gt;massive&lt;/i&gt; hardware outlay to equal the yearly costs of even a modest five person programming team.&lt;/b&gt;
&lt;p&gt;
For example, I just bought &lt;a href="http://blog.stackoverflow.com/2008/12/server-hosting-rent-vs-buy/"&gt;two very powerful servers for Stack Overflow&lt;/a&gt;. Even after accounting for a third backup server and spare hard drives for the RAID arrays, my total outlay is around $5,000. These servers, compared to the ones we're on now, offer:
&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;roughly 50% more CPU speed
&lt;li&gt;2 to 6 times the memory capacity
&lt;li&gt;almost twice the disk space (and it's a faster RAID 10 array)
&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ul&gt;
Under this new hardware regime, we can expect average page response times to improve by about half. All that for &lt;i&gt;less than one month&lt;/i&gt; of an average programmer's salary.
&lt;p&gt;
I'd say that's a great deal. A no-brainer, even.
&lt;p&gt;
Incidentally, this is also why failing to outfit your (relatively) highly paid programmers with decent equipment as per the &lt;a href="http://www.codinghorror.com/blog/archives/000666.html"&gt;Programmer's Bill of Rights&lt;/a&gt; is such a colossal mistake. If a one-time investment of $4,000 on each programmer makes them merely 5% more productive, you'll break even after the first year. Every year after that you've made a profit. Also, having programmers who believe that their employers actually &lt;i&gt;give a damn about them&lt;/i&gt; is probably a good business strategy for companies that actually want to be around five or ten years from now.
&lt;p&gt;
Clearly, &lt;b&gt;hardware is cheap, and programmers are expensive&lt;/b&gt;. Whenever you're provided an opportunity to leverage that imbalance, it would be incredibly foolish not to.
&lt;p&gt;
Despite the enduring wonder of the yearly parade of newer, better hardware, we'd also do well to remember my all time favorite graph from &lt;a href="http://www.amazon.com/exec/obidos/ASIN/0201657880/codinghorror-20"&gt;Programming Pearls&lt;/a&gt;:
&lt;p&gt;
&lt;a href="http://www.amazon.com/exec/obidos/ASIN/0201657880/codinghorror-20"&gt;&lt;img src="http://www.codinghorror.com/images/programming_pearls_pg_83.png" width="600" height="330" border="0" alt="TRS-80 versus DEC Alpha"&gt;&lt;/a&gt;
&lt;p&gt;
&lt;a href="http://www.codinghorror.com/blog/archives/000957.html"&gt;Everything is fast for small n&lt;/a&gt;. When n gets large, that's when things start to go sideways. The above graph of an ancient &lt;a href="http://en.wikipedia.org/wiki/TRS-80"&gt;Trash-80&lt;/a&gt; clobbering a semi-modern &lt;a href="http://en.wikipedia.org/wiki/DEC_Alpha"&gt;DEC Alpha&lt;/a&gt; is a sobering reminder that &lt;b&gt;the fastest hardware in the world can't save you from bad code&lt;/b&gt;. More specifically, poorly chosen data structures or algorithms.
&lt;p&gt;
It won't &lt;i&gt;hurt&lt;/i&gt; to run badly written code on the fastest possible boxes you can throw at it, of course. But if you want tangible performance improvements, you'll often have to buckle down and optimize the code, too. Patrick Smacchia's &lt;a href="http://codebetter.com/blogs/patricksmacchia/archive/2008/12/01/lessons-learned-from-a-real-world-focus-on-performance.aspx"&gt;lessons learned from a real-world focus on performance&lt;/a&gt; is a great case study in optimization.
&lt;p&gt;
&lt;img alt="ndepend optimization graph" src="http://www.codinghorror.com/blog/images/ndepend-optimization-graph.png" width="600" height="240" border="0"&gt;
&lt;p&gt;
Patrick was able to improve &lt;a href="http://www.ndepend.com/"&gt;nDepend&lt;/a&gt; analysis performance fourfold, and cut memory consumption in half. As predicted, most of this improvement was algorithmic in nature, but at least half of the overall improvement came from a variety of different optimization techniques. Patrick likens this to his early days &lt;a href="http://codebetter.com/blogs/patricksmacchia/archive/2008/12/01/lessons-learned-from-a-real-world-focus-on-performance.aspx"&gt;writing demo scene code on the Commodore Amiga&lt;/a&gt;:
&lt;p&gt;
&lt;blockquote&gt;
In the early 90s, I participated in the Amiga demo scene. It's a great illustration of the idea that &lt;b&gt;there is always room for better performance&lt;/b&gt;. Every demo ran on the same hardware. It was the perfect incentive for demo developers to produce more and more optimized code. For several years, every month some record was beaten: the number of 3D polygons, the number of sprites, or the number of dots displayed simultaneously at the rate of 50 frames per second. Over a period of a few years, the performance factor obtained was around 50x! Imagine what it means to perform a computation in one second that originally took an entire minute. This massive gain was the result of both better algorithms (with many pre-computations and delegations to sub-chips) and micro-optimizations at assembly language level (better use of the chip registers, better use of the set of instructions).
&lt;/blockquote&gt;
&lt;p&gt;
Patrick achieved outstanding results, but let's be clear: &lt;b&gt;optimizing your code is hard&lt;/b&gt;. And sometimes, dangerous. It is not something you undertake lightly, and you'd certainly want your most skilled programmers working on it. To put it in perspective, let's dredge up a few classic quotes.
&lt;p&gt;
&lt;blockquote&gt;
Rules of Optimization:&lt;br&gt;
Rule 1: Don't do it.&lt;br&gt;
Rule 2 (for experts only): Don't do it yet.&lt;br&gt;
-- &lt;a href="http://en.wikipedia.org/wiki/Michael_A._Jackson"&gt;M.A. Jackson&lt;/a&gt;
&lt;p&gt;
"More computing sins are committed in the name of efficiency (without necessarily achieving it) than for any other single reason - including blind stupidity."&lt;br&gt;
-- &lt;a href="http://en.wikipedia.org/wiki/William_Wulf"&gt;W.A. Wulf&lt;/a&gt;
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;
Programmers have a tendency to get lost in the details of &lt;b&gt;optimizing for the sake of optimization&lt;/b&gt;, as I've noted before in &lt;a href="http://www.codinghorror.com/blog/archives/000061.html"&gt;Why Aren't My Optimizations Optimizing?&lt;/a&gt; and &lt;a href="http://www.codinghorror.com/blog/archives/000185.html"&gt;Micro-Optimization and Meatballs&lt;/a&gt;. If you're not extremely careful, you could end up spending a &lt;i&gt;lot&lt;/i&gt; of very expensive development time with very little to show for it. Or, worse, you'll find yourself facing a slew of new, even more subtle bugs in your codebase.
&lt;p&gt;
That's why I recommend the following approach:
&lt;p&gt;
&lt;ol&gt;
&lt;li&gt;Throw cheap, faster hardware at the performance problem.
&lt;li&gt;If the application now meets your performance goals, stop.
&lt;li&gt;Benchmark your code to identify specifically where the performance problems are.
&lt;li&gt;Analyze and optimize the areas that you identified in the previous step.
&lt;li&gt;If the application now meets your performance goals, stop.
&lt;li&gt;Go to step 1.
&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;
Always try to &lt;b&gt;spend your way out of a performance problem first&lt;/b&gt; by throwing faster hardware at it. It'll often be a quicker and cheaper way to resolve immediate performance issues than attempting to code your way out of it. Longer term, of course, you'll do both. You'll eventually be forced to revisit those deeper algorithmic concerns and design issues with your code that prevent the application from running faster. And the advantage of doing this on new hardware is that you'll look like an even &lt;i&gt;bigger&lt;/i&gt; hero when you deliver the double whammy of optimized code running on speedier hardware.
&lt;p&gt;
But until the day that Moore's Law completely gives out on us, one thing's for sure: &lt;b&gt;hardware is cheap -- and programmers are expensive&lt;/b&gt;.
&lt;p&gt;
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;
[advertisement] Did your buddy just get his ear chewed off for another server crash? Help him out by recommending &lt;a href="http://www.poweradmin.com/servermonitor?ref=codinghorror" rel="nofollow"&gt;PA Server Monitor&lt;/a&gt;.  He just might buy you lunch. &lt;a href="http://www.poweradmin.com/servermonitor/download.aspx?ref=codinghorror" rel="nofollow"&gt;Download the Free Trial!&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</description></item><item><title>Programming: Love It or Leave It</title><link>http://www.codinghorror.com/blog/archives/001202.html</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jeff Atwood</dc:creator><pubDate>Mon, 29 Dec 2008 01:36:48 PST</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/442d442f091a9ba4</guid><description>&lt;p&gt;
In a recent Joel on Software forum post &lt;a href="http://discuss.joelonsoftware.com/default.asp?joel.3.718003.14"&gt;Thinking of Leaving the Industry&lt;/a&gt;, one programmer wonders if software development is the right career choice in the face of broad economic uncertainty:
&lt;p&gt;
&lt;blockquote&gt;
After reading the disgruntled posts here from long time programmers and hearing so much about ageism and outsourcing, I'm thinking of leaving the industry.  What is a good industry to get into where your programming skills would put you at an advantage? 
&lt;/blockquote&gt;
&lt;p&gt;
Joel Spolsky responded:
&lt;p&gt;
&lt;blockquote&gt;
Although the tech industry is not immune, programming jobs are not really being impacted. Yes, there are fewer openings, but there are still openings (see my job board for evidence). I still haven't met a great programmer who doesn't have a job. I still can't fill all the openings at my company.
&lt;p&gt;
Our pay is great. There's no other career except Wall Street that regularly pays kids $75,000 right out of school, and where so many people make six figures salaries for long careers with just a bachelors degree. There's no other career where you come to work every day and get to invent, design, and engineer the way the future will work.
&lt;p&gt;
Despite the occasional idiot bosses and workplaces that forbid you from putting up Dilbert cartoons on your cubicle walls, there's no other industry where workers are treated so well. Jesus you're spoiled, people. Do you know how many people in America go to jobs where you need permission to go to the bathroom?
&lt;p&gt;
&lt;b&gt;Stop the whining, already. Programming is a fantastic career.&lt;/b&gt; Most programmers would love to do it even if they didn't get paid. How many people get to do what they love and get paid for it? 2%? 5%?
&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;
I tend to agree with Joel's brand of tough love. What he seems to be saying -- after taking my usual poetic license -- is this:
&lt;p&gt;
&lt;b&gt;Programming: love it or leave it.&lt;/b&gt;
&lt;p&gt;
&lt;img alt="America: Love It or Leave It" src="http://www.codinghorror.com/blog/images/america-love-it-or-leave-it.jpg" width="400" height="442" border="0"&gt;
&lt;p&gt;
Unless you're fortunate enough to work for a top tier software development company, like Google, Microsoft, or Apple, you've probably experienced first hand the &lt;a href="http://www.codinghorror.com/blog/archives/000072.html"&gt;huge skill disparities in your fellow programmers&lt;/a&gt;. I'm betting you've also wondered more than once &lt;a href="http://www.codinghorror.com/blog/archives/000781.html"&gt;why some of your coworkers can't, well, &lt;i&gt;program&lt;/i&gt;&lt;/a&gt;. Even if that's what their job description says.
&lt;p&gt;
Over the last twenty years, I've worked with far too many programmers who honestly &lt;b&gt;had no business being paid to be a programmer&lt;/b&gt;. Now, I'm not talking about your average programmer here. We're all human, and we all make mistakes. I'm talking about &lt;a href="http://www.codinghorror.com/blog/archives/000824.html"&gt;the Daily WTF crew&lt;/a&gt;. People that actively give programming a bad name, and you, as their coworker, a constant headache.
&lt;p&gt;
Like Joel, I'm not ready to call the current conditions &lt;a href="http://www.codinghorror.com/blog/archives/000843.html"&gt;a new dot com bubble&lt;/a&gt; yet, because business is still quite good. But one of the (very) few bright spots of the previous bubble was that &lt;b&gt;it weeded out all the people who didn't truly love software development&lt;/b&gt;. Once the incentive to become an overnight dot-com genius programmer millionaire was gone, computer science enrollment suddenly dropped precipitously at colleges across the country. The only people left applying for programming jobs were the true freaks and geeks who, y'know, &lt;a href="http://www.codinghorror.com/blog/archives/000761.html"&gt;&lt;i&gt;loved&lt;/i&gt; this stuff&lt;/a&gt;. The kind of people I had originally enjoyed working with so much. At least until a bunch of careerist gold diggers suddenly showed up and started polluting our workplace.
&lt;p&gt;
As much as the dot com bubble sucked, I was &lt;i&gt;intensely&lt;/i&gt; glad to see these people go. Now I'm wondering if the current economic conditions are an opportunity to clean house again.
&lt;p&gt;
&lt;b&gt;I mean this in the nicest possible way, but not everyone &lt;i&gt;should&lt;/i&gt; be a programmer.&lt;/b&gt; How often have you wished that a certain coworker of yours would suddenly have an epiphany one day and decide that this whole &lt;i&gt;software engineering&lt;/i&gt; thing just isn't working out for them? How do you tell someone that the quality of their work is terrible and &lt;a href="http://www.codinghorror.com/blog/archives/000543.html"&gt;they'll never be good at their job&lt;/a&gt; -- so much so that they should literally &lt;i&gt;quit&lt;/i&gt; and pursue a new career? I've wanted to many times, but I never had the guts. 
&lt;p&gt;
Joel implied that good programmers love programming so much they'd do it for &lt;i&gt;no pay at all&lt;/i&gt;. I won't go quite that far, but I will note that the best programmers I've known have all had a &lt;b&gt;lifelong passion for what they do&lt;/b&gt;. There's no way a minor economic blip would ever convince them they should do anything else. No way. No how.
&lt;p&gt;
So if a programmer &lt;i&gt;ever&lt;/i&gt; hints, even in passing, that they might possibly want to exit the field -- they probably should. I'm not saying you should be a jerk about it, obviously. But if someone has any doubt at all about programming as a career choice, they should be encouraged to explore alternatives -- and make room for another programmer who &lt;a href="http://www.codinghorror.com/blog/archives/000212.html"&gt;unashamedly loves to code&lt;/a&gt;.
&lt;p&gt;
Then again, maybe I'm not the best person to ask. I spent Christmas Eve &lt;a href="http://www.codinghorror.com/blog/archives/001200.html"&gt;setting up servers&lt;/a&gt;. I'm on holiday right now, sitting in a hotel room in Santa Barbara, and you know what I spent the last two nights doing until the wee hours of the morning? Writing code to improve &lt;a href="http://stackoverflow.com/"&gt;Stack Overflow&lt;/a&gt;. Oh yeah, and this blog post.
&lt;p&gt;
So I might be a &lt;i&gt;little&lt;/i&gt; biased.
&lt;p&gt;
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;
[advertisement] Tired of restoring deleted files?  &lt;a href="http://www.poweradmin.com/file-sight?ref=codinghorror" rel="nofollow"&gt;Get PA File Sight&lt;/a&gt; and track down the culprit.  PA File Sight – file auditing made easy.  &lt;a href="http://www.poweradmin.com/file-sight/download.aspx?ref=codinghorror" rel="nofollow"&gt;Download the Free Trial!&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</description><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">17929056866888266091</gr:likingUser></item><item><title>Top 25 Most Dangerous Programming Mistakes</title><link>http://www.codinghorror.com/blog/archives/001210.html</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jeff Atwood</dc:creator><pubDate>Mon, 12 Jan 2009 23:59:59 PST</pubDate><guid isPermaLink="false">tag:google.com,2005:reader/item/0d0aa47015f23ef0</guid><description>&lt;p&gt;
I don't usually do news and current events here, but I'm making an exception for the &lt;a href="http://cwe.mitre.org/top25/#Brief"&gt;CWE/SANS Top 25 Most Dangerous Programming Errors&lt;/a&gt; list. This one is important, and deserves a wide audience, so I'm repeating it here -- along with a brief hand-edited summary of each error.
&lt;p&gt;
&lt;b&gt;If you work on software in any capacity, at least skim this list.&lt;/b&gt; I encourage you to click through for greater detail on anything you're not familiar with, or that piques your interest.
&lt;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://cwe.mitre.org/data/definitions/20.html"&gt;Improper Input Validation&lt;/a&gt;
&lt;blockquote&gt;
Ensure that your input is valid. If you're expecting a number, it shouldn't contain letters. Nor should the price of a new car be allowed to be a dollar. Incorrect input validation can lead to vulnerabilities when attackers can modify their inputs in unexpected ways. Many of today's most common vulnerabilities can be eliminated, or at least reduced, with strict input validation.
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cwe.mitre.org/data/definitions/116.html"&gt;Improper Encoding or Escaping of Output&lt;/a&gt;
&lt;blockquote&gt;
Insufficient output encoding is at the root of most injection-based attacks. An attacker can modify the commands that you intend to send to other components, possibly leading to a complete compromise of your application - not to mention exposing the other components to exploits that the attacker would not be able to launch directly. When your program generates outputs to other components in the form of structured messages such as queries or requests, be sure to separate control information and metadata from the actual data. 
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cwe.mitre.org/data/definitions/89.html"&gt;Failure to Preserve SQL Query Structure&lt;/a&gt; (aka 'SQL Injection')
&lt;blockquote&gt;
If attackers can influence the SQL that you send to your database, they can modify the queries to steal, corrupt, or otherwise change your underlying data. If you use SQL queries in security controls such as authentication, attackers could alter the logic of those queries to bypass security.
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cwe.mitre.org/data/definitions/79.html"&gt;Failure to Preserve Web Page Structure&lt;/a&gt; (aka 'Cross-site Scripting')
&lt;blockquote&gt;
Cross-site scripting (XSS) is a result of combining the stateless nature of HTTP, the mixture of data and script in HTML, lots of data passing between web sites, diverse encoding schemes, and feature-rich web browsers. If you're not careful, attackers can inject Javascript or other browser-executable content into a web page that your application generates. Your web page is then accessed by other users, whose browsers execute that malicious script as if it came from you -- because, after all, it &lt;i&gt;did&lt;/i&gt; come from you! Suddenly, your web site is serving code that you didn't write. The attacker can use a variety of techniques to get the input directly into your server, or use an unwitting victim as the middle man.
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cwe.mitre.org/data/definitions/78.html"&gt;Failure to Preserve OS Command Structure&lt;/a&gt; (aka 'OS Command Injection')
&lt;blockquote&gt;
Your software acts as a bridge between an outsider on the network and the internals of your operating system. When you invoke another program on the operating system, and you allow untrusted inputs to be fed into the command string, you are inviting attackers into your operating system.
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cwe.mitre.org/data/definitions/319.html"&gt;Cleartext Transmission of Sensitive Information&lt;/a&gt;
&lt;blockquote&gt;
Information sent across a network crosses many different nodes in transit to its final destination. If your software sends sensitive, private data or authentication credentials, beware: attackers could sniff them right off the wire. All they need to do is control one node along the path to the final destination, any node within the same networks of those transit nodes, or plug into an available interface. Obfuscating traffic using schemes like Base64 and URL encoding offers no protection.
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cwe.mitre.org/data/definitions/352.html"&gt;Cross-Site Request Forgery (CSRF)&lt;/a&gt;
&lt;blockquote&gt;
Cross-site request forgery is like accepting a package from a stranger -- except the attacker tricks a user into activating a HTTP request "package" that goes to your site. The user might not even be aware that the request is being sent, but once the request gets to your server, it looks as if it came from the user -- not the attacker. The attacker has masqueraded as a legitimate user and gained all the potential access that the user has. This is especially handy when the user has administrator privileges, resulting in a complete compromise of your application's functionality. 
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cwe.mitre.org/data/definitions/362.html"&gt;Race Condition&lt;/a&gt;
&lt;blockquote&gt;
A race condition involves multiple processes in which the attacker has full control over one process; the attacker exploits the process to create chaos, collisions, or errors. Data corruption and denial of service are the norm. The impact can be local or global, depending on what the race condition affects - such as state variables or security logic - and whether it occurs within multiple threads, processes, or systems.
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cwe.mitre.org/data/definitions/209.html"&gt;Error Message Information Leak&lt;/a&gt;
&lt;blockquote&gt;
Chatty error messages can disclose secrets to any attacker who misuses your software. The secrets could cover a wide range of valuable data, including personally identifiable information (PII), authentication credentials, and server configuration. They might seem like harmless secrets useful to your users and admins, such as the full installation path of your software -- but even these little secrets can greatly simplify a more concerted attack.
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cwe.mitre.org/data/definitions/119.html"&gt;Failure to Constrain Operations within the Bounds of a Memory Buffer&lt;/a&gt;
&lt;blockquote&gt;
The scourge of C applications for decades, buffer overflows have been remarkably resistant to elimination. Attack and detection techniques continue to improve, and today's buffer overflow variants aren't always obvious at first or even second glance. You may think that you're completely immune to buffer overflows because you write your code in higher-level languages instead of C. But what is your favorite "safe" language's interpreter written in? What about the native code you call? What languages are the operating system API's written in? How about the software that runs Internet infrastructure?
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cwe.mitre.org/data/definitions/642.html"&gt;External Control of Critical State Data&lt;/a&gt;
&lt;blockquote&gt;
If you store user state data in a place where an attacker can modify it, this reduces the overhead for a successful compromise. Data could be stored in configuration files, profiles, cookies, hidden form fields, environment variables, registry keys, or other locations, all of which can be modified by an attacker. In stateless protocols such as HTTP, some form of user state information must be captured in each request, so it is exposed to an attacker out of necessity. If you perform any security-critical operations based on this data (such as stating that the user is an administrator), then you can bet that somebody will modify the data in order to trick your application.
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cwe.mitre.org/data/definitions/73.html"&gt;External Control of File Name or Path&lt;/a&gt;
&lt;blockquote&gt;
When you use an outsider's input while constructing a filename, the resulting path could point outside of the intended directory. An attacker could combine multiple ".." or similar sequences to cause the operating system to navigate out of the restricted directory. Other file-related attacks are simplified by external control of a filename, such as symbolic link following, which causes your application to read or modify files that the attacker can't access directly. The same applies if your program is running with raised privileges and it accepts filenames as input. Similar rules apply to URLs and allowing an outsider to specify arbitrary URLs. 
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cwe.mitre.org/data/definitions/426.html"&gt;Untrusted Search Path&lt;/a&gt;
&lt;blockquote&gt;
Your software depends on you, or its environment, to provide a search path (or working path) to find critical resources like code libraries or configuration files. If the search path is under attacker control, then the attacker can modify it to point to resources of the attacker's choosing. 
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cwe.mitre.org/data/definitions/94.html"&gt;Failure to Control Generation of Code&lt;/a&gt; (aka 'Code Injection')
&lt;blockquote&gt;
While it's tough to deny the sexiness of dynamically-generated code, attackers find it equally appealing. It becomes a serious vulnerability when your code is directly callable by unauthorized parties, if external inputs can affect which code gets executed, or if those inputs are fed directly into the code itself. 
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cwe.mitre.org/data/definitions/494.html"&gt;Download of Code Without Integrity Check&lt;/a&gt;
&lt;blockquote&gt;
If you download code and execute it, you're trusting that the source of that code isn't malicious. But attackers can modify that code before it reaches you. They can hack the download site, impersonate it with DNS spoofing or cache poisoning, convince the system to redirect to a different site, or even modify the code in transit as it crosses the network. This scenario even applies to cases in which your &lt;i&gt;own&lt;/i&gt; product downloads and installs updates.
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cwe.mitre.org/data/definitions/404.html"&gt;Improper Resource Shutdown or Release&lt;/a&gt;
&lt;blockquote&gt;
When your system resources have reached their end-of-life, you dispose of them: memory, files, cookies, data structures, sessions, communication pipes, and so on. Attackers can exploit improper shutdown to maintain control over those resources well after you thought you got rid of them. Attackers may sift through the disposted items, looking for sensitive data. They could also potentially reuse those resources.
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cwe.mitre.org/data/definitions/665.html"&gt;Improper Initialization&lt;/a&gt;
&lt;blockquote&gt;
If you don't properly initialize your data and variables, an attacker might be able to do the initialization for you, or extract sensitive information that remains from previous sessions. If those variables are used in security-critical operations, such as making an authentication decision, they could be modified to bypass your security. This is most prevalent in obscure errors or conditions that cause your code to inadvertently skip initialization.
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cwe.mitre.org/data/definitions/682.html"&gt;Incorrect Calculation&lt;/a&gt;
&lt;blockquote&gt;
When attackers have control over inputs to numeric calculations, math errors can have security consequences. It might cause you to allocate far more resources than you intended - or far fewer. It could violate business logic (a calculation that produces a negative price), or cause denial of service (a divide-by-zero that triggers a program crash).
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cwe.mitre.org/data/definitions/285.html"&gt;Improper Access Control&lt;/a&gt; (Authorization)
&lt;blockquote&gt;
If you don't ensure that your software's users are only doing what they're allowed to, then attackers will try to exploit your improper authorization and exercise that unauthorized functionality.
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cwe.mitre.org/data/definitions/327.html"&gt;Use of a Broken or Risky Cryptographic Algorithm&lt;/a&gt;
&lt;blockquote&gt;
Grow-your-own cryptography is a welcome sight to attackers. Cryptography is hard. If brilliant mathematicians and computer scientists worldwide can't get it right -- and they're regularly obsoleting their own techniques -- then neither can you. 
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cwe.mitre.org/data/definitions/259.html"&gt;Hard-Coded Password&lt;/a&gt;
&lt;blockquote&gt;
Hard-coding a secret account and password into your software is extremely convenient -- for skilled reverse engineers. If the password is the same across all your software, then every customer becomes vulnerable when that password inevitably becomes known. And because it's hard-coded, it's a huge pain to fix. 
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cwe.mitre.org/data/definitions/732.html"&gt;Insecure Permission Assignment for Critical Resource&lt;/a&gt;
&lt;blockquote&gt;
Beware critical programs, data stores, or configuration files with default world-readable permissions. While this issue might not be considered during implementation or design, it should be. Don't require your customers to secure your software for you! Try to be secure by default, out of the box.
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cwe.mitre.org/data/definitions/330.html"&gt;Use of Insufficiently Random Values&lt;/a&gt;
&lt;blockquote&gt;
You may depend on randomness without even knowing it, such as when generating session IDs or temporary filenames. Pseudo-Random Number Generators (PRNG) are commonly used, but a variety of things can go wrong. Once an attacker can determine which algorithm is being used, he can guess the next random number often enough to launch a successful attack after a relatively small number of tries.
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cwe.mitre.org/data/definitions/250.html"&gt;Execution with Unnecessary Privileges&lt;/a&gt;
&lt;blockquote&gt;
Your software may need special privileges to perform certain operations; wielding those privileges longer than necessary is risky. When running with extra privileges, your application has access to resources that the application's user can't directly reach. Whenever you launch a separate program with elevated privileges, attackers can potentially exploit those privileges.
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cwe.mitre.org/data/definitions/602.html"&gt;Client-Side Enforcement of Server-Side Security&lt;/a&gt;
&lt;blockquote&gt;
Don't trust the client to perform security checks on behalf of your server. Attackers can reverse engineer your client and write their own custom clients. The consequences will vary depending on what your security checks are protecting, but some of the more common targets are authentication, authorization, and input validation. 
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Of course there's nothing truly &lt;i&gt;new&lt;/i&gt; here; I essentially went over the same basic list in &lt;a href="http://www.codinghorror.com/blog/archives/000841.html"&gt;Sins of Software Security&lt;/a&gt; almost two years ago. The only difference is the relative priorities, as web applications start to dominate mainstream computing.
&lt;p&gt;
This list of software security mistakes serves the same purpose as McConnell's &lt;a href="http://www.codinghorror.com/blog/archives/000889.html"&gt;list of classic development mistakes&lt;/a&gt;: to raise awareness. A surprisingly large part of success is recognizing the most common mistakes and failure modes. So you can -- at least in theory -- realize when your project is slipping into one of them. &lt;b&gt;Ignorance is the biggest software project killer of them all.&lt;/b&gt;
&lt;p&gt;
Heck, even if you &lt;i&gt;are&lt;/i&gt; aware of these security mistakes, you might end up committing them anyway. I know &lt;a href="http://www.codinghorror.com/blog/archives/001167.html"&gt;I have&lt;/a&gt;.
&lt;p&gt;
Have you?
&lt;p&gt;
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;
[advertisement] Did your buddy just get his ear chewed off for another server crash? Help him out by recommending &lt;a href="http://www.poweradmin.com/servermonitor?ref=codinghorror" rel="nofollow"&gt;PA Server Monitor&lt;/a&gt;.  He just might buy you lunch. &lt;a href="http://www.poweradmin.com/servermonitor/download.aspx?ref=codinghorror" rel="nofollow"&gt;Download the Free Trial!&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</description><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">01059120888883963369</gr:likingUser><gr:likingUser xmlns:gr="http://www.google.com/schemas/reader/atom/">06724466384690989729</gr:likingUser></item></channel></rss>
