<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-30859452</id><updated>2012-01-16T17:39:44.090-08:00</updated><title type='text'>Blinkymach12: Jude Allred's Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>32</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-30859452.post-2057802682868931737</id><published>2011-12-30T23:31:00.001-08:00</published><updated>2011-12-30T23:31:43.623-08:00</updated><title type='text'>Be creative every day</title><content type='html'>&lt;p&gt;One of the most beautiful things I’ve seen in recent memory was this delightful… thing.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.drawastickman.com/" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-RTvQPaUzSJ8/Tv66XtJn7qI/AAAAAAAAGUk/tTyogVHj2uE/image%25255B4%25255D.png?imgmax=800" width="331" height="233"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.drawastickman.com/"&gt;http://www.drawastickman.com/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;It ended with a fantastic message.&amp;nbsp; It’s something that resonated with me and something that I already totally embrace but fail to fulfill.&lt;/p&gt; &lt;p&gt;Why are you still reading? Go draw a stickman. I’ll wait. Go!&lt;/p&gt; &lt;p&gt;Great, so now we’re on the same page!&lt;/p&gt; &lt;p&gt;So, aside from the message, something I really loved about that website is that everything it did was within my grasp.&amp;nbsp; &lt;em&gt;I could have made that.&lt;/em&gt;&amp;nbsp; My artistic ability, primitive as it is, could have created that. &lt;/p&gt; &lt;p&gt;So why didn’t I?&lt;/p&gt; &lt;p&gt;Hmm.&lt;/p&gt; &lt;p&gt;There was a hacker news link to a &lt;a href="http://stackoverflow.com/questions/811074/what-is-the-coolest-thing-you-can-do-in-10-lines-of-simple-code-help-me-inspir" target="_blank"&gt;interesting Stack Overflow question&lt;/a&gt; earlier today.&amp;nbsp; I read the question and….&amp;nbsp; was appalled.&amp;nbsp;&amp;nbsp; The educators initial thought for how to illustrate programming to students…. involved math!&amp;nbsp; “&lt;strong&gt;&lt;em&gt;&lt;u&gt;NO&lt;/u&gt;&lt;/em&gt;&lt;/strong&gt;, that’s Wrong!™” thought I.&amp;nbsp; &lt;/p&gt; &lt;p&gt;…And then I didn’t answer the question.&amp;nbsp;&amp;nbsp; It entered my mental queue.&amp;nbsp; I can construct a “good™” answer to this, but I didn’t.&amp;nbsp; Or at least, haven’t yet. &lt;/p&gt; &lt;p&gt;Hmm.&lt;/p&gt; &lt;p&gt;Well then.&lt;/p&gt; &lt;p&gt;The Godenites would shout about how it’s due to my lizard brain.&amp;nbsp; Maybe.&amp;nbsp; Maybe the reason I don’t act on every impulse or every thing I think I can contribute is because of a fundamental human fear of failure.&amp;nbsp; But I somewhat aspire to mania…&lt;/p&gt; &lt;p&gt;There’s merit to being a little bit insane.&amp;nbsp; Not legitimately insane, mind you – just a social aberration.&amp;nbsp; Willing to speak when unexpected or not speak when expected.&amp;nbsp; Or perhaps just embedding a song in my stride as I walk down a hall… wondering if anyone notices my slightly off-kilter footsteps.&lt;/p&gt; &lt;p&gt;Or just asking the obvious question.&lt;/p&gt; &lt;p&gt;I lied… I don’t aspire to mania or insanity.&amp;nbsp; I aspire to reason and thoughtfulness… but I enjoy the unexpected. The intrigue of abnormality. Thoroughly.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Sometimes I write under the guise of a cynic.&amp;nbsp; I don’t wish to be negative … actually I’m always quite upset when I catch myself caught in a context of negativity: I wish to drown out my world with positive perspectives whenever possible.&amp;nbsp; It’s better that way.&amp;nbsp;&amp;nbsp; But cynicism is interesting.&amp;nbsp; The devil’s advocate is both a fun and important role to play.&lt;/p&gt; &lt;p&gt;I wrote a haiku today, and I won a refrigerator.&lt;br&gt;I don’t think there was much competition, but it’s perhaps the most monetarily valuable poem I’ve ever composed.&amp;nbsp; There’s a novelty in that, and I suspect that in time the novelty will prove itself to have been more valuable to me than the refrigerator.&amp;nbsp; Though I’m sure it was entirely unintentional and unrealized, the invitation to write a haiku in exchange for a refrigerator was a delightful gift that I received today.&amp;nbsp; I think there’s a great value in giving gifts like that to the world.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Next time you leave a tip with a credit card,&amp;nbsp; write a haiku on the receipt.&amp;nbsp;&amp;nbsp; Have humble trust in your gift of novelty being appreciated. It will be.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;For Christmas this year, I purchased one present.&amp;nbsp; A simple item that would cause a smile.&amp;nbsp; It’s important to have something under the 10” tree.&amp;nbsp; The rest are a stream.&amp;nbsp; I have envelopes, glitter pens, a vest, a girl who loves dancing, and I know how to combine them.&amp;nbsp; &lt;em&gt;Protip: do not combine the glitter pens with the vest. &lt;/em&gt;The true gifts will trickle in, and their objective is simple and clear:&amp;nbsp; maximize the experience.&amp;nbsp; Theatricality is paramount;&amp;nbsp; cost, practicality, and sanity.. less so.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;And so I meander.&amp;nbsp; Most of my writing evolves in this way, and then I edit viciously.&amp;nbsp; Early in my writing development I discovered that the antithesis of creativity is the blank page.&amp;nbsp; There was a time when I had to provide a 5-point essay on the topic of my choice… every day.&amp;nbsp; I learned to write them in 10 minutes. Watch:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;This is literally the first paragraph of the essay.&amp;nbsp; It’s not of consequence that it’s a paragraph talking about how it’s the first paragraph of the essay, all that matters is that the page is no longer blank… instead, it’s a page with a paragraph.&amp;nbsp; I’ve started many a good essay with a paragraph on ewoks, lines from a Cream song, or assorted daydreamy thoughts. &lt;/p&gt; &lt;p&gt;Now we’re on to the second paragraph.&amp;nbsp; Grasp something, anything, from the first paragraph and make a point from it.&amp;nbsp; It doesn’t even matter if the grammar is repetitive.&amp;nbsp; The topics of my daydreams have drifted in time.&amp;nbsp; As a child, I focused primarily on sensational topics – running, climbing, jumping, feeling, tasting….&amp;nbsp; As a teenager, I drifted more toward … err..&amp;nbsp; well..&amp;nbsp; girls.&amp;nbsp; That one who smiled at me, especially.&amp;nbsp; What was her name?&amp;nbsp;&amp;nbsp; Just kidding, I remember perfectly well.&amp;nbsp;&amp;nbsp; But in adulthood… now it’s about change.&amp;nbsp; Be the change you want to see in the world™.&amp;nbsp; Disrupt a flow; optimize an edge; &lt;strike&gt;kill all humans&lt;/strike&gt;; find a new way; channel Feynman. &lt;/p&gt; &lt;p&gt;…&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;The third and fourth paragraphs are easier now.&amp;nbsp;&amp;nbsp; Grasp the topic of the first paragraph – day dreams – and take it in two different directions.&amp;nbsp; The fifth paragraph is a little more of a challenge, but the objective is pretty clear:&amp;nbsp; You need at least three sentences.&amp;nbsp; That’s easy enough…&amp;nbsp; in one sentence each, recap each of your 2nd, 3rd, and 4th paragraphs.&amp;nbsp; Add a leading sentence if it helps the flow.&amp;nbsp; Now in your final sentence, draw a conclusion based on the three sentences you just wrote.&amp;nbsp; Something novel and logically following (however absurdly) from those three simplified sentences.&lt;/p&gt; &lt;p&gt;Now Edit Viciously.&amp;nbsp;&amp;nbsp; The introduction? The paragraph that starts by saying it’s an introduction, and then talks about ewoks?&amp;nbsp; Kill it.&amp;nbsp; It’s crap.&amp;nbsp; …But you’ve got 90% of the rest of the essay done, so it’s easy to actually introduce the thing that you’ve already spent 4 other paragraphs talking about.&amp;nbsp;&amp;nbsp;&amp;nbsp; Repeat this for paragraphs 2 through 5.&amp;nbsp;&amp;nbsp; We want to pull the insanity out… but not quite all of it.&amp;nbsp; That reference to channeling Feynman?&amp;nbsp; That was creative and relevant! Keep that bit.&amp;nbsp; Keep the crazy bits that actually fit™.&lt;/p&gt; &lt;p&gt;And now we have an essay.&lt;/p&gt; &lt;p&gt;Hypothetically, I mean.&lt;/p&gt; &lt;p&gt;This thing you’re reading now? It’s not an essay.&lt;/p&gt; &lt;p&gt;It’s closer to stream of consciousness writing.&lt;/p&gt; &lt;p&gt;Most of my writing starts this way, and then I edit.&amp;nbsp; Viciously.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Editing brings in its own problems… because that’s where I introduce most of my typos and grammatical mismatches.&amp;nbsp; It’s harder to rewrite a flow than to live with what was there in the first place.&amp;nbsp; It’s harder to read code and fix its bugs than to write it fresh.&amp;nbsp; It’s easy to have had things, such as them, and a thing, such as it, and keep their pluralities and tenses proper when you morph their amalgam to what &lt;em&gt;they were&lt;strong&gt; &lt;/strong&gt;&lt;/em&gt;and&lt;em&gt; this is.&amp;nbsp; &lt;/em&gt;Editing that type of absurdity will only get you in trouble,&amp;nbsp; but it came out fine the first time through.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Which is why I’m not going to edit this.&amp;nbsp;&amp;nbsp; I backtrack slightly as I write,&amp;nbsp; but most of what’s here is raw.&amp;nbsp; I’ll probably read through this at some point in the future and fix up a typo or a grammatical idiocy,&amp;nbsp; but until then I’m going to throw this to the wind.&amp;nbsp; Because I’m done writing now.&amp;nbsp; I created something and it was joyous… and picking through it for flaws will not be joyous.&amp;nbsp; I have my MVP and I’m going to ship it. Right now.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-2057802682868931737?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/2057802682868931737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=2057802682868931737' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/2057802682868931737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/2057802682868931737'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2011/12/be-creative-every-day.html' title='Be creative every day'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/-RTvQPaUzSJ8/Tv66XtJn7qI/AAAAAAAAGUk/tTyogVHj2uE/s72-c/image%25255B4%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-4597335902751214927</id><published>2011-04-03T16:07:00.001-07:00</published><updated>2011-04-03T16:26:45.371-07:00</updated><title type='text'>I hate cell phone service companies.</title><content type='html'>&lt;p&gt;Ever since my first Verizon phone back in high school, I’ve always felt somewhat abused by cell phone service providers.&amp;#160; I’ve never paid for any other service which&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Charges me monthly fees completely disproportionate to their operating costs &lt;/li&gt;    &lt;li&gt;Presents their billing agenda in an intentionally convoluted manner &lt;/li&gt;    &lt;li&gt;Bills me based on services that are trivially available for free via the internet &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The only stupider thing I’ve ever paid for was a gym membership.&amp;#160; &lt;/p&gt;  &lt;p&gt;This adventure started as I began investigating MetroPCS.&amp;#160; They promote themselves as a Metropolitan-area-centric, cheap, no-BS company.&amp;#160; Disregarding phone quality, I would say that they appear better than the big boys, but my week trial with them was sufficient enough to show me that they were still pretty lame.&lt;/p&gt;  &lt;p&gt;This made me ask myself a tough and obvious question: why have I been paying over $100 a month to companies I hate for services I’m unsatisfied with?&amp;#160; Because I’m an idiot.&lt;/p&gt;  &lt;p&gt;Moving forward…&lt;/p&gt;  &lt;p&gt;-&amp;#160; Stirling and I have cancelled our cellular plans, and our old numbers are now dead.&amp;#160; We’re now both using our Google Voice accounts as our primary phone numbers.&amp;#160; They can send and receive calls and text messages for free and have much better email integration than anything else.&lt;/p&gt;  &lt;p&gt;- I purchased a &lt;a href="http://www.viewsonic.com/gtablet/"&gt;ViewSonic G-Tablet&lt;/a&gt;, which is a joy.&amp;#160; There’s wireless all over NYC and Brooklyn, so I can use that tablet to stay connected to the internet and send/receive calls.&amp;#160; It has the added perk of being a mobile internet device which isn’t infuriating to use for things like composing email, and there’s no Apple silliness to deal with.&lt;/p&gt;  &lt;p&gt;- We purchased a super-cheap prepaid phone from Virgin Mobile.&amp;#160; Of the cell companies, they seem to be the least sleazy, but it still makes me feel a little dirty.&amp;#160; We’ve realized that while cell phones are unnecessary for the vast majority of our phone and text message usage, there are a few exceptions: Travel; Logistical coordination on the fly; Urgent calls from work.&amp;#160;&amp;#160; A cheapo prepaid phone with tiny amounts of minutes solves all of those issues.&amp;#160; This lives with Stirling, since if we’re not proximate then I’m probably at work and have internet.&lt;/p&gt;  &lt;p&gt;It’s working well so far, and I hope to never subscribe to the cellular overlords again.&amp;#160; &lt;/p&gt;  &lt;p&gt;There are a couple kinks in the new system that we’re still working out…&amp;#160; once done, we’ll propagate our new phone numbers to our contact lists.&lt;/p&gt;  &lt;p&gt;But… you know what feels really good?&amp;#160; No more cell phone bills.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;P.S.:&amp;#160; Just because paying for cellular service made &lt;strong&gt;&lt;em&gt;me&lt;/em&gt;&lt;/strong&gt; an idiot, that doesn’t reflect on anyone else. My stance here is fairly heavily based on my monetary philosophies and the amount of time I spend using my phone (very, very little).&amp;#160; There are lots of valid use cases for phone plans, I just don’t think I have any of them.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-4597335902751214927?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/4597335902751214927/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=4597335902751214927' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/4597335902751214927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/4597335902751214927'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2011/04/i-hate-cell-phone-service-companies.html' title='I hate cell phone service companies.'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-2337236986840431798</id><published>2011-02-06T12:58:00.001-08:00</published><updated>2011-02-06T13:15:38.839-08:00</updated><title type='text'>Autonomy, Mastery, Purpose</title><content type='html'>&lt;p&gt;I just watched an amazing presentation about the economics of incentives in the context of highly creative work.&amp;#160; It’s highly relevant to software development, and yields some interesting insights into the prevalence of free and open-source software.&amp;#160; You should watch it immediately [&lt;a href="http://www.thersa.org/events/vision/animate/rsa-animate-drive"&gt;source&lt;/a&gt;] :&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:7dd169cd-2516-47d7-8597-5ce963741e04" class="wlWriterEditableSmartContent"&gt;&lt;div id="cc9c130d-37e5-42ad-b315-199e37b864ec" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=u6XAPnuFjJc" target="_new"&gt;&lt;img src="http://lh3.ggpht.com/_SEDq2OI8nrk/TU8LhBdzbaI/AAAAAAAAGSg/SwLbb0ir4XE/video8acefa204228%5B134%5D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('cc9c130d-37e5-42ad-b315-199e37b864ec'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;640\&amp;quot; height=\&amp;quot;390\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/u6XAPnuFjJc?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/u6XAPnuFjJc?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;640\&amp;quot; height=\&amp;quot;390\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="width:640px;clear:both;font-size:.8em"&gt;http://www.thersa.org/events/vision/animate/rsa-animate-drive&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;While I enjoy hearing these things explicitly stated in a research-backed manner, I also feel like this video is highlighting what is otherwise common lore in the software development community.&amp;#160; Specifically:&amp;#160; Autonomous developers are more creative; People tend to be happier when they are improving their skills or learning new ones;&amp;#160; understanding the purpose of your job (and being fulfilled by that purpose) is essential if you want to feel like more than a cog.&lt;/p&gt;  &lt;p&gt;After watching this video, my thoughts immediately turned to if I feel my environment is sensitive to these traits.&lt;/p&gt;  &lt;h2&gt;Autonomy&lt;/h2&gt;  &lt;p&gt;At the company and product levels, I’m pretty vocal about my opinions. Although it’s not uncommon for me to be wrong, disagreed with, or emphasizing something of too-low priority to matter, I have never been stifled and I feel that many of the things I’ve said have been acted upon.&amp;#160; That’s satisfying.&lt;/p&gt;  &lt;p&gt;At the development level, I always feel like I’m in control over how I should go about things.&amp;#160; Well.. maybe “control”, is the wrong word: external feedback is very valuable to me, and I will generally not proceed if there’s someone who feels that my path isn’t the best one.&amp;#160; Lack of consensus seems to always indicate a communication failure or a valid opinion which hasn’t yet been considered, so I think consensus is important to achieve. &lt;/p&gt;  &lt;p&gt;Do I feel like I can literally work on whatever I want when I come to work?&amp;#160; Well… “what I want” is tricky.&amp;#160; I feel that I often have a sufficiently complete picture of the product that “what I want” often corresponds with the current development focuses.&amp;#160;&amp;#160; There are some killer features that I very much want to do, but if they’re not already on the top of the queue then there’s something more important in front, and if I agree with the importance, then I want to do the more important thing first.&amp;#160; It’s very uncommon that I disagree with the current priority queue, and I have yet to find myself working on something that I didn’t feel I should be.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Pitfall&lt;/strong&gt;:&amp;#160; It seems like if devs aren’t in touch with the current product vision or the current prioritization methods, it would be easy to create situations in which devs are working on the things that they don’t feel like they should be working on.&amp;#160; This would be bad.&lt;/p&gt;  &lt;p&gt;Hobby projects are important to me, and I feel they greatly aid my feeling of autonomy.&amp;#160; This article is one such example;&amp;#160; I’m in my office right now (Sunday afternoon) because I felt like doing something abnormal, and this is my most favorite environment to be creative in.&amp;#160; &lt;a href="https://fogcreek.com/FogBugz/plugins/plugin.aspx?ixPlugin=38"&gt;Tidy Case Events&lt;/a&gt; is one of my hobby projects created in this manner, and it’s wonderful to work on and exceedingly wonderful whenever I get an email from someone who is happy with my work.&amp;#160; I feel like I have energy for hobby projects because I’m not burned out after work… I like that a lot.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Pitfall: &lt;/strong&gt;It seems like dev burnout (via overtime or otherwise stressful conditions) will damage autonomy, as the devs won’t be as likely to have pet projects outside of work.&lt;/p&gt;  &lt;p&gt;It seems to me like autonomy breeds mastery and purpose.&amp;#160; If mastery/purpose aren’t otherwise provided, but autonomy is, then we can autonomously give ourselves mastery and purpose.&amp;#160; For instance, I was interested in learning about CoffeeScript and the Google App Engine, so I used my Creek Week (like “FedEx Day” except spread out over a week) to create a new product written for GAE using Python and CoffeeScript.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Conclusion:&amp;#160;&amp;#160; &lt;/strong&gt;I feel autonomous.&amp;#160; &lt;em&gt;Win. &lt;/em&gt;&lt;/p&gt;  &lt;h2&gt;Mastery&lt;/h2&gt;  &lt;p&gt;In college, mastery was always related to how much passion I chose to have for a topic.&amp;#160; I mastered data structures because I investigated it on my own, because I asked questions and tried new things, because I pursued advanced topics, and because I started teaching others about how they worked… not because I took a data structures class.&amp;#160;&amp;#160; The class was certainly an enabler, however.&amp;#160;&amp;#160; I feel the same pattern applies toward subject mastery in industry.&amp;#160; I’m gaining mastery in C# and JavaScript because I push myself to try new things when I develop new code.&amp;#160; I know I’m advancing whenever I’m embarrassed by code that I wrote 6 months ago.&lt;/p&gt;  &lt;p&gt;So… I think mastery is mostly a personal thing.&amp;#160; You’ll either strive for mastery, or you’ll be lazy about it.&amp;#160;&amp;#160; I’m certainly lazy about some types – cmd is still my dominant command prompt in Windows, and I well know that PowerShell is vastly superior…&amp;#160; but I’m not fascinated by PowerShell and am happy enough with cmd that my command line skills are stagnating.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Pitfall: &lt;/strong&gt;I think crunch time is damaging to mastery.&amp;#160; If I need something fixed *now*, I’m not necessarily going to learn the best way to fix it, I’m just going to fix it the fastest way I know how.&amp;#160; Creative time, on the other hand, aids mastery-&amp;#160; finding the better way to solve a problem rather than going with the known way.&amp;#160; Good stuff.&lt;/p&gt;  &lt;p&gt;Outside of self-drive, it seems like companies can still provide a great service by providing enablers.&amp;#160; As with my data structures class,&amp;#160; while it may not have pushed me to mastery, it opened the door for me. &lt;/p&gt;  &lt;p&gt;Some enablers I’ve experienced in professional development:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Weekly peer tech talks.&amp;#160; These commonly expose me to new topics or at least new ways to do things.&amp;#160; &lt;/li&gt;    &lt;li&gt;Guest Speakers.&amp;#160; I had a lot of fun siphoning knowledge from Patrick and Brent.&amp;#160; They helped expand the amount of things I know I don’t know, which is always great.&lt;/li&gt;    &lt;li&gt;Conferences.&amp;#160; I’ve been selecting Business of Software… and I dig it.&amp;#160; It’s like an enabler for other enablers.&amp;#160; B.o.S. has introduced me to people like Dharmesh Shah, who is a brilliant person that I’ve since learned many things from via his writings and talks, and Seth Godin, whose daily insights occasionally strike a powerful chord and whose books strike many.&lt;/li&gt;    &lt;li&gt;Code reviews…&amp;#160;&amp;#160; My peers push me to write better code, and I learn to write better code by observing them.&amp;#160; I love code reviews.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;…Yeah, I feel satisfied in terms of moving toward mastery.&amp;#160; I’m commonly learning new things, and that feels good.&amp;#160; I have a long way to go.&lt;/p&gt;  &lt;h2&gt;Purpose&lt;/h2&gt;  &lt;p&gt;I suspect a lot of people invent their own purposes when the overarching purpose of their work is unclear (or disagreeable) to them.&amp;#160; I certainly did that throughout high school and college.&lt;/p&gt;  &lt;p&gt;I’m lucky now, as I don’t need to invent my own.&amp;#160; I work to help other developers around the world make better software, and there are countless more things to do.&amp;#160; I work in a competitive field, but I feel no animosity toward our competitors: they’re all developing tools to help other developers make better software.&amp;#160; I think our competition will help us push each other toward better products, and that’s excellent for developers everywhere.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;“Somewhere today, a project is failing”&lt;/em&gt;&amp;#160; &lt;br /&gt;– Peopleware&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I’m helping to fix that.&amp;#160; &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-2337236986840431798?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/2337236986840431798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=2337236986840431798' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/2337236986840431798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/2337236986840431798'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2011/02/autonomy-mastery-purpose.html' title='Autonomy, Mastery, Purpose'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_SEDq2OI8nrk/TU8LhBdzbaI/AAAAAAAAGSg/SwLbb0ir4XE/s72-c/video8acefa204228%5B134%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-5040068123395048894</id><published>2011-01-13T20:09:00.001-08:00</published><updated>2011-01-13T20:09:22.994-08:00</updated><title type='text'>Redditerations 1</title><content type='html'>&lt;p&gt;Well that was fun…&amp;nbsp; I picked an opinion that seemed generally useful, wrote about it, submitted it to /r/programming, and got some feedback.&lt;/p&gt; &lt;p&gt;Via Reddit, I received 420 page views (quite a bit higher than my normal 5-10), 3 upvotes, 2 downvotes, one blog comment, and 4 reddit comments.&lt;/p&gt; &lt;p&gt;The feedback was mixed.&amp;nbsp; It’s interesting to me that all of the feedback which I would consider “negative” is based on points that I didn’t intend to make, and some of it seemed a bit absurd.&amp;nbsp; That’s ok though, because it’s great feedback none-the-less, and I like feedback. &lt;/p&gt; &lt;p&gt;Some trends I noticed that I’ll experiment with next article:&lt;/p&gt; &lt;p&gt;1. I ended my article with a prompt which nobody responded to.&amp;nbsp; This may just be an issue of sample size, but it seemed pretty pointless.&amp;nbsp;&amp;nbsp; I’ll not do that next time.&lt;/p&gt; &lt;p&gt;2. I attempted to make two core points in my last article. One point was made (relatively) concisely, while the other was extremely verbose and example-driven.&amp;nbsp; All of the criticism I received was related to the verbose component, while the concise component was either unmentioned or praised.&amp;nbsp;&amp;nbsp; I suspect this is caused by two negative traits of the verbose section:&amp;nbsp; Since it was long, more people skimmed it and thus had a higher chance of misinterpreting my intent or falling back on their existing assumptions; Since it was long, there were more opportunities for me to communicate unclearly or accidently broaden the focus of my article.&amp;nbsp;&amp;nbsp; I’ll get more concise.&lt;/p&gt; &lt;p&gt;3. Examples seemed to strictly hurt me.&amp;nbsp; That may just mean my examples were poor or they implied a lot more than I intended. I’ll try omitting examples next time.&lt;/p&gt; &lt;p&gt;4. Referencing my affiliation with Fog Creek seems (at least based on the tiny set of commenters) to be strictly negative in the scope of blogging.&amp;nbsp; I’ll just omit that in the future… it’s not necessary.&amp;nbsp; I think Fog Creek is awesome, so I tend to reference that, but it’s not necessary, and certainly its quality is higher than that of my articles.&lt;/p&gt; &lt;p&gt;I don’t know what my next topic will be, but I’ll write it with these points in mind.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-5040068123395048894?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/5040068123395048894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=5040068123395048894' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/5040068123395048894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/5040068123395048894'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2011/01/redditerations-1.html' title='Redditerations 1'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-1710560736370406526</id><published>2011-01-09T12:45:00.001-08:00</published><updated>2011-01-09T19:48:46.556-08:00</updated><title type='text'>Stylistic defaults and awareness- a neglected college lesson.</title><content type='html'>&lt;p&gt;I am a young &lt;a href="http://en.wikipedia.org/wiki/Software_development_engineer"&gt;SDE&lt;/a&gt;.&amp;nbsp; I’ve worked in “industry” for &lt;a href="http://fogcreek.com/"&gt;Fog Creek Software&lt;/a&gt; for a little under two years now (including my &lt;a href="http://fogcreek.com/Jobs/SummerIntern.html"&gt;internship&lt;/a&gt;), which means that the bulk of my software development career occurred in college.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Although most of my &lt;em&gt;development time&lt;/em&gt; may have occurred in college, the vast majority of my &lt;em&gt;productivity&lt;/em&gt; has occurred while working at Fog Creek.&amp;nbsp; This is interesting to me, and I’ve picked up many practices in industry which were generally outside of my programming repertoire as a student.&lt;/p&gt; &lt;p&gt;Some of these items are simple and obvious: fluency in debuggers, code editor/IDEs, version control systems….&lt;/p&gt; &lt;p&gt;Other items are less obvious, at least they were to me.&amp;nbsp; One such item is programming style.&amp;nbsp; To be specific, I’m talking about what would commonly be documented in a “Coding Style Guide” for a given language.&amp;nbsp; In programming teams of any scale, language-specific style guides are extremely beneficial, so much so that companies like Google will have style tests that must be passed before a programmer is allowed to develop in that language.&amp;nbsp; While I think mandates of that nature can be beneficial, I feel that the more important skill is for a programmer to have a &lt;strong&gt;&lt;em&gt;conscious awareness of their surrounding code&lt;/em&gt;&lt;/strong&gt;, and a &lt;strong&gt;&lt;em&gt;good set of defaults&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;Defaults are more generally applicable, so let’s talk about those first.&lt;/p&gt; &lt;h3&gt;&lt;/h3&gt; &lt;h2&gt;&lt;/h2&gt; &lt;h2&gt;Good Defaults&lt;/h2&gt; &lt;p&gt;Part of my job at Fog Creek involves interviewing potential hires and interns.&amp;nbsp; I don’t generally count coding style as points for or against the candidate unless it’s remarkably good or bad.&amp;nbsp; A common pattern I see in (failing) candidates is an inability to name their variables well, followed by moments of them struggling with their own code and introducing bugs because of confusion caused by their own poorly-named variables.&amp;nbsp; Even in strong candidates who have no trouble following their own code, it’s uncommon for them to not ponder a variable name for at least a few seconds.&lt;/p&gt; &lt;p&gt;These things are happening because they don’t have a strong set of defaults.&amp;nbsp; At Fog Creek, we conform to an in-house programming style which has evolved from the principles outlined in one of &lt;a href="http://www.joelonsoftware.com/articles/Wrong.html"&gt;Joel’s articles&lt;/a&gt;. The basic idea is as follows:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Variables should be prefixed with their intended data type.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;There are many caveats to this, and it means many things.&amp;nbsp; Most superficially, it has driven us to have the prefixes such as:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;f: Flag; Boolean values&lt;/li&gt; &lt;li&gt;n: n-Way Flag;&amp;nbsp; Enums, etc.&lt;/li&gt; &lt;li&gt;s: Strings&lt;/li&gt; &lt;li&gt;ix: numeric indices and GUIDs&lt;/li&gt; &lt;li&gt;c: numeric counts.&lt;/li&gt; &lt;li&gt;rg: Ranges; c-style arrays.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;There are many more which can be extrapolated based on context.&amp;nbsp; E.g., if I have a class “Dog”, then instance of Dog will likely have the “dog” prefix.&lt;/p&gt; &lt;p&gt;More importantly, these prefixes are composable:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;rgs: An array of strings&lt;/li&gt; &lt;li&gt;sRg: A string representation of an array&lt;/li&gt; &lt;li&gt;ixrgs: An index into an array of strings&lt;/li&gt; &lt;li&gt;cRgsIxDog: The size of an array of string representations of indices of dogs.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;These names and this specific style.. are not important.&amp;nbsp; There are tradeoffs in all chosen styles, this just happens to be the one that I use.&amp;nbsp; What’s interesting about a style like this is that you can extract a lot of useful defaults.&lt;/p&gt; &lt;p&gt;If I have a function which accepts an instance of a Dog and returns that dog’s name as a string, then I can thoughtlessly construct the following function prototype:&lt;/p&gt; &lt;p&gt;&lt;font face="Lucida Console"&gt;string GetSName(Dog dog)&lt;/font&gt;&lt;/p&gt; &lt;p&gt;While it could be debated as to whether this is the perfect name for such a function, I could argue that it’s a &lt;strong&gt;&lt;em&gt;pretty good&lt;/em&gt;&lt;/strong&gt; name, and further that every decision about the name was made automatically.&lt;/p&gt; &lt;p&gt;If I felt I needed to augment the prototype with additional information, I could do so:&lt;/p&gt; &lt;p&gt;&lt;font face="Lucida Console"&gt;string GetSNameThatWasGivenByItsOwner(Dog dogWhoseNameWeWillGet)&lt;/font&gt;&lt;/p&gt; &lt;p&gt;In a sufficiently complicated system, elaboration of this type can be useful, however most of the time just using the bare-minimum prefixes gives me a sufficient amount of information.&lt;/p&gt; &lt;p&gt;Let’s hash out the body of this function…&lt;/p&gt; &lt;p&gt;&lt;font face="Lucida Console"&gt;string GetSName(Dog dog)&lt;br&gt;{&lt;br&gt;&amp;nbsp; var tag = dog.collar.tags[TagTypes.Rabies];&lt;br&gt;&amp;nbsp; foreach(var vet in GetVetarinariansByZipcode(11225))&lt;br&gt;&amp;nbsp; {&lt;br&gt;&lt;/font&gt;&lt;font face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var s = vet.GetDogNameByTag(tag);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!String.IsNullOrEmpty(s))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return s;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp; }&lt;br&gt;&amp;nbsp; return “Fido”;&lt;br&gt;&lt;/font&gt;&lt;font face="Lucida Console"&gt;}&lt;/font&gt;&lt;/p&gt; &lt;p&gt;I wrote this in an intentionally verbose and silly manner, but even so all of the variable names were automatic.&amp;nbsp; The rabies tag gets the variable name “tag”, because it’s a Tag.&amp;nbsp; If there I were handling multiple tags within this function, I would have disambiguated by calling it “tagRabies”, but that wasn’t necessary.&amp;nbsp; Ditto for the veterinarian, however I shortened that variable to “vet” since it also wasn’t ambiguous.&amp;nbsp; “s” could be validly called “sName”, but again that’s not necessary within the tiny scope of this function.&lt;/p&gt; &lt;p&gt;This doesn’t sound very special, but here’s the thing:&amp;nbsp; All of my variable names, even in a context where there were not yet any established prefixes, were completely automatic.&amp;nbsp; I could spend my time thinking about other things and I completely avoided all of the small nagging variable naming decisions.&amp;nbsp; Is this function optimally beautiful? No, but for anyone familiar with the coding style, it’s perfectly reasonable and readable.&amp;nbsp; The same cannot be said for:&lt;/p&gt; &lt;p&gt;&lt;font face="Lucida Console"&gt;string Get(Dog gie)&lt;br&gt;{&lt;br&gt;&amp;nbsp; var foo = gie.collar.tags[TagTypes.Rabies];&lt;br&gt;&amp;nbsp; foreach(var my in GetVetarinariansByZipcode(11225))&lt;br&gt;&amp;nbsp; {&lt;br&gt;&lt;/font&gt;&lt;font face="Lucida Console"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var giesname = my.GetDogNameByTag(foo);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!String.IsNullOrEmpty(giesname))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return giesname;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp; }&lt;br&gt;&amp;nbsp; return “Fido”;&lt;br&gt;&lt;/font&gt;&lt;font face="Lucida Console"&gt;}&lt;/font&gt;&lt;/p&gt; &lt;p&gt;In my examples I’m focusing on naming conventions.&amp;nbsp; I don’t mean to imply that “coding style” == “naming conventions”, however I do feel that good names are a big step toward good style.&amp;nbsp; There are countless metrics that can be used to produce “high quality code”, and they all need some level of conscious involvement.&amp;nbsp; The core of my point is that for any stylistic choice, having a reasonable default will improve your speed and quality.&amp;nbsp; This doesn’t mean that you’re exempt from all stylistic decisions, but there’s no reason to deeply ponder every single variable name.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;Improve base programming quality and reduce menial thought overhead by choosing a set of good stylistic defaults.&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;strong&gt;&lt;font face="Lucida Console"&gt;&lt;/font&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt; &lt;h2&gt;Stylistic Awareness&lt;/h2&gt; &lt;p&gt;This comes into play when modifying or augmenting existing code.&amp;nbsp; A simple test for awareness is to examine the fresh code alongside the legacy code and get a feeling for if the code feels like it was written by a different person. Can you even tell which code is legacy?&amp;nbsp; If the change is stylistically identical to the surrounding code, that’s a good indicator that the programmer was stylistically sensitive.&amp;nbsp; If the change is obviously in a different style, then either they are intentionally fixing a broken or damaged style, or they were unaware.&lt;/p&gt; &lt;p&gt;This skill can be very important when working with legacy code.&amp;nbsp; Legacy code tends to be painful to read in the first place, and stylistic consistency is a great way to reduce the burden on fresh programmers trying to handle the legacy codebase.&amp;nbsp; The further the codebase devolves into a series of differently-styled hacks, the smellier it gets.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;The most important coding style is generally the one that’s already in place.&amp;nbsp; As appropriate,&amp;nbsp; adapt your style to conform.&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Note also that I’m not claiming that it’s in any way ideal to live with a legacy codebase, it’s just a common situation.&amp;nbsp; Even outside of legacy code, stylistic awareness can be a wonderful trait.&amp;nbsp; If you were vetting an incoming patch into your open-source project, would you feel better about it if it already looked and felt like your own code?&lt;/p&gt; &lt;h2&gt;The neglected lesson&lt;/h2&gt; &lt;p&gt;I feel like these are things which were mentioned to me in passing during my college career, but I never incorporated them until after I reached industry.&amp;nbsp; I can remember reading a syllabus which outlined the programming style which was to be used in one of my courses, and I also remember that I followed it only so much as to get full “style points” during grading.&lt;/p&gt; &lt;p&gt;How was programming style emphasized during your college career?&amp;nbsp; If you’ve settled on a style, what made you do so?&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-1710560736370406526?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/1710560736370406526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=1710560736370406526' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/1710560736370406526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/1710560736370406526'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2011/01/stylistic-defaults-and-awareness.html' title='Stylistic defaults and awareness- a neglected college lesson.'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-1319014199414389994</id><published>2010-12-29T18:39:00.001-08:00</published><updated>2010-12-31T13:55:04.055-08:00</updated><title type='text'>Removing my hardhat</title><content type='html'>&lt;p&gt;Tactfulness is hard.&amp;nbsp; I’ve always biased myself toward direct communication and tried hard to sniff for and handle fallout.&amp;nbsp; I like to think of that as an engineering-inspired approach to communication.&amp;nbsp; This is one of many strategies, and it doesn’t always mesh well with others.&lt;/p&gt;&lt;p&gt;Let’s start with what I might intend as a pleasant, helpful interaction:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Hey person responsible for a different area of my company, I see a small area of what you’re working on that could be better. Let me help you make that better.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Let’s translate that into the core of the received communication:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Hey person,      &lt;br&gt;You’re doing it wrong.      &lt;br&gt;Let me show you how to do it right.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Not very tactful, is it?&amp;nbsp; I’d say that team-member to team-member, that can work, but’s pretty prickly.&lt;/p&gt;&lt;p&gt;The thing is, there are tons of things which can be evaluated in that manner. Take a moment to critically evaluate every effort put forth by your company.&amp;nbsp; How many of them would you like to tweak? How many of the could be just a little bit better if you could get your hands on it?&amp;nbsp; A lot. There will always be a lot, and you can learn a lot more if you spend time going to &lt;a href="http://businessofsoftware.org"&gt;wonderful conferences filled with brilliant people&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Significant change at the product-scale can be done by an individual. Overhead is low. It’s possible to systematically sand down every rough edge.&amp;nbsp; Nobody will be upset if I fix a typo in their comment.&lt;/p&gt;&lt;p&gt;Change at the company scale is more difficult. Repertoires, cultures, goals, and contexts vary in different teams and at different levels of “management.”&amp;nbsp; These shifts are so extreme that they even vary within a given person when they’re playing their different roles.&lt;/p&gt;&lt;p&gt;The robot inside of me would like to interject for a moment: &lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;This is bullshit.&amp;nbsp; We should all be honest, open, logical, collaborative, highly-efficient machines.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Sorry robot, that’s not possible, nor is it correct.&amp;nbsp; We are emotional, social beings, and we’re more creative that way.&amp;nbsp; Imagine a company of Roombas.&lt;/p&gt;&lt;p&gt;So, here’s the painful piece:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;No matter how right you are(n’t), nobody wants to be told how to do their job. Nobody wants to be told that they could be doing their job better. Nobody wants to be told they are wrong, especially with the corollary that someone else is right. &lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;So hang on to that nugget for a moment and return to your list of things to fix about your company.&amp;nbsp; How &lt;em&gt;the hell&lt;/em&gt; are you going to communicate those ideas without and endless dance around politics and culture?&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;u&gt;List of Idea Injection Strategies for the Aspiring Lynchpin&lt;/u&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;font style="font-size: 11.2pt;"&gt;&lt;strong&gt;Strategy 1&lt;/strong&gt;, order your ideas by importance and clustered by ownership area.&amp;nbsp; Take your cluster of ideas to the person (singular!) who owns that area and can give you an OK to hack in your fix.&amp;nbsp; They may do so, or they may give you an excellent reason why you’re wrong and you now need to go away and let them do their job.&amp;nbsp; Both of these results are relatively ok, as you’ll either improve things or learn something, but neither are good enough.&amp;nbsp; At scale, you cannot be the ‘low-hanging fruit champion’ of your company, nor can you be the guy who understands everything about everyone.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Strategy 2&lt;/strong&gt;, pester your peers/manager(s) about how you feel it’s important to the company to execute Your Vision.&amp;nbsp; Tell them you’re passionate about it. Tell them you think it current operations are inefficient.&amp;nbsp; (Sounds a bit pompous, ya?)    &lt;br&gt;…Honestly, I think this strategy might be appropriate.&amp;nbsp; If you can’t convince anyone about the validity of your ideas… your ideas need some work.&amp;nbsp; This type of communication sounds great for the Rands-style for 1:1 meetings, but there’s no need to repeat yourself.&amp;nbsp; The downside to this is that you’re essentially placing your idea in a little paper boat and sending it into the stream of communication with the hope of it getting picked up in a land far away.&amp;nbsp; Again, this won’t scale and still can hit the dynamics of “The dude from the other team had this message from you: ‘ur a n00b, do eet lik3 dis:…’”&amp;nbsp;&amp;nbsp; Not OK.&amp;nbsp; You don’t want to play telephone with your ideas, nor do you want to be perceived as the whiney one.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Strategy 3&lt;/strong&gt;, beer.&amp;nbsp; Lots of conversations can be had in casual contexts which don’t apply to the structure of work.&amp;nbsp; I haven’t figured this out yet, but I see it all the time.&amp;nbsp; In my case, a beer-like environment is lunchtime.&amp;nbsp; If there’s someone whose brain I want to pick, I just need them to like me and an empty seat beside them.&amp;nbsp; “Have we tried…”, “What if we…”, “Could you tell me about…”, conversations seem to work well here.&amp;nbsp; &lt;/p&gt;&lt;p&gt;This is why it’s important to go to the business lunches.&amp;nbsp; This is why, if the CEO is a golfer, you should take up golf.&amp;nbsp; As companies scale, face-to-face time &lt;em&gt;outside of your team&lt;/em&gt; scales against you, and you need a lot more time than you think.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Unless your focus is narrow, all of this still scales unfavorably.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;This is too complicated. Can I just enter my idea into a machine and have it ranked against all other ideas, prioritized, and implemented by responsible parties?&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;No.&amp;nbsp; (…unless you &lt;em&gt;really &lt;/em&gt;like agile development)&lt;/p&gt;&lt;p&gt;People don’t like their work to be based on someone else’s idea.&amp;nbsp; Even if they do it, the fact that it already hasn’t happened is an indicator of two things:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;1. They have a different mentality.&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;2. It’s not &lt;strong&gt;&lt;em&gt;their&lt;/em&gt;&lt;/strong&gt; plan.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Even with optional efficiency in implementation, having a smattering of idea generators scattered throughout the business will be fragmented and weird.&amp;nbsp; Misaligned vectors.&amp;nbsp; If everyone does this, nothing will progress.&amp;nbsp; It’s sub-optimal, and single-ownership beats this out.&amp;nbsp; &lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;…But,&amp;nbsp; someone doing something important is doing it &lt;em&gt;wrong&lt;/em&gt;!&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Stop right there.&amp;nbsp; Just stop.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Nobody is ever wrong.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Right and wrong are relativistic to a context.&amp;nbsp; Everyone is always right within their own context unless they’re lying to you.&amp;nbsp; Sometimes they lie to themselves and that propagates to you-&amp;nbsp; that just means that their context is shaped by emotion, denial, or some other psychological demon.&lt;/p&gt;&lt;p&gt;This whole debate comes down to something fundamental. What do we do when one of us thinks the other is wrong?&lt;/p&gt;&lt;p&gt;Oh, I know!&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Tell the person they’re wrong.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Or even..&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Tell the person that you’re right.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Yeah… no. These are blunt force weapons. Not usually appropriate.&amp;nbsp; Right and wrong are usually pretty inconsequential relative to being thought of as an ass.&lt;/p&gt;&lt;p&gt;How about if we try…&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Expanding your context until they are right.&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;Expanding their context until you are right.&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;Expanding both of your contexts until you’re both right.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;This is sounding better.&lt;/p&gt;&lt;p&gt;I can always find something which I can say is “wrong” or “bad”, and sometimes I can even say that there is a “right” or “better” thing to do, but providing answers is not a sustainable strategy, it doesn’t scale, and it’s a good way to become hated.&lt;/p&gt;&lt;p&gt;Teach. Share context. It’s necessary.&lt;/p&gt;&lt;p&gt;Let’s start with what’s intended to be a pleasant intention:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Hey person responsible for a different area of my company, I see a small area of what you’re working on that could be better. Let me help you make that better.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Let’s make this better:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Hey person,      &lt;br&gt;You’re doing it.      &lt;br&gt;Have a beer.&lt;/p&gt;&lt;/blockquote&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-1319014199414389994?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/1319014199414389994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=1319014199414389994' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/1319014199414389994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/1319014199414389994'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2010/12/removing-my-hardhat.html' title='Removing my hardhat'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-5420668365437072795</id><published>2010-12-13T20:02:00.001-08:00</published><updated>2010-12-13T20:02:58.216-08:00</updated><title type='text'>Coerced.</title><content type='html'>&lt;p&gt;The !! &amp;quot;operator&amp;quot; in JavaScript can be superficially useful to force type coercion and cast to bool.&lt;/p&gt;  &lt;p&gt;It's generally a neat trick.&amp;#160; Since null == false, then !!null === false; !!0 === false; !!'cat' === true; etc.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;So, if s is one of {null, '', '0', '1'}, will !!s === true only when s === '1'? &lt;/p&gt;  &lt;p&gt;While it's true that '0' == 0 and '0' == false, !'0' is also == false.&amp;#160; That is to say... '0' == !'0', and thus !!'0' === true.&amp;#160;&amp;#160; The type coercing effects of &amp;quot;!&amp;quot; are different from the type coercing effects of &amp;quot;== false&amp;quot;.&amp;#160; &lt;/p&gt;  &lt;p&gt;So.. No.&lt;/p&gt;  &lt;p&gt;Workaround?&amp;#160; Well, !!Number(s) will work as !! was meant to, as will !('0' == false).&amp;#160;&amp;#160; Better workaround?&amp;#160; Don't think you can master type coercion, no matter how much you think you know javascript, Jude, because you are wrong.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-5420668365437072795?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/5420668365437072795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=5420668365437072795' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/5420668365437072795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/5420668365437072795'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2010/12/coerced.html' title='Coerced.'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-4657292402838294341</id><published>2010-10-21T06:54:00.001-07:00</published><updated>2010-10-21T08:07:24.194-07:00</updated><title type='text'>How to discriminate against browsers</title><content type='html'>&lt;p&gt;I’ve been using the IE9 beta.&amp;#160; That’s all I’ll say about that; this isn’t meant to be a post about browser zealotry.&lt;/p&gt;  &lt;p&gt;As a developer, it’s occasionally very nice to not support all browsers.&amp;#160; In doing so, some people are going to experience brokenness, so it also feels nice to say “Hey, it’s not our fault! it’s your browser!”&amp;#160; I have mixed feelings about this, however there are many clear-cut situations where it can make a lot of sense, especially if IE6 is involved.&lt;/p&gt;  &lt;p&gt;Here’s the&lt;strong&gt; right way &lt;/strong&gt;to discriminate:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_SEDq2OI8nrk/TMBGGqIWggI/AAAAAAAAGRQ/NzKksojvL0g/s1600-h/right%5B3%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="right" border="0" alt="right" src="http://lh4.ggpht.com/_SEDq2OI8nrk/TMBGHDFTTGI/AAAAAAAAGRU/R-LyDZu8qck/right_thumb%5B1%5D.png?imgmax=800" width="450" height="411" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;“Your browser isn’t cool enough for how cool you must be…&amp;#160; here’s a way to make it cool enough, and here’s some other things that are cool enough.&amp;#160; All of these options will make you more awesome.&amp;#160; If you’re convinced that you’re sufficiently awesome, &lt;u&gt;go ahead&lt;/u&gt;.”&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Here’s the &lt;strong&gt;wrong way:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_SEDq2OI8nrk/TMBGHZj3DdI/AAAAAAAAGRY/6t5h3Ehyt14/s1600-h/wrong%5B3%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="wrong" border="0" alt="wrong" src="http://lh4.ggpht.com/_SEDq2OI8nrk/TMBGHhg9RqI/AAAAAAAAGRc/5bGFEZsdMTw/wrong_thumb%5B1%5D.png?imgmax=800" width="440" height="402" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;“&lt;em&gt;Your browser sucks. You should be using one of these instead. I will not let you proceed unless you do so.”&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;In response to the &lt;strong&gt;right way&lt;/strong&gt;, I proceed anyway, see that there are problems, then open up Chrome or FF and proceed.&lt;/p&gt;  &lt;p&gt;In response to the &lt;strong&gt;wrong way&lt;/strong&gt;, I change my user agent to Firefox so that I can use the site which is clearly rendering in a functional manner.&amp;#160; …but while doing so, I silently curse them.&amp;#160;&amp;#160; Parts of the experience are broken anyway, but I’m ok with that.&amp;#160; If I block on something, then I’ll switch to Chrome or FF.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Google got it right. If browser discrimination is necessary, do as they do.&amp;#160; In fact, they’ve even open-sourced that notification… so you can do &lt;strong&gt;exactly*&lt;/strong&gt; as they do.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;[* I didn’t link to it because I couldn’t find it within 30 seconds of searching.&amp;#160; Having not found it after 5 minutes, I would add that this statement may no longer be true.&amp;#160; I can swear I’ve seen it….&amp;#160;&amp;#160; Regardless, it &lt;a href="http://www.showzey.com/main/browser_not_supported"&gt;doesn’t stop anyone&lt;/a&gt; from mimicry.&amp;#160; If only they did it perfectly.]&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-4657292402838294341?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/4657292402838294341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=4657292402838294341' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/4657292402838294341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/4657292402838294341'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2010/10/how-to-discriminate-against-browsers.html' title='How to discriminate against browsers'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_SEDq2OI8nrk/TMBGHDFTTGI/AAAAAAAAGRU/R-LyDZu8qck/s72-c/right_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-6958067444901033636</id><published>2010-09-28T23:34:00.001-07:00</published><updated>2010-09-28T23:34:12.978-07:00</updated><title type='text'>An open letter to interns past</title><content type='html'>&lt;p&gt;&lt;em&gt;Or, “Hey Jude, go write about it in your emo livejournal!”&lt;/em&gt;&lt;/p&gt;  &lt;h3&gt;Dear Flying Foxes of the FogBugz Team,&lt;/h3&gt;  &lt;p&gt;We just launched an amazing 8.0, and you are to thank for it.&amp;#160; I’m continually impressed as to the quality of the software that you built.&amp;#160; We were able to spend pre- and post-launch not fixing bugs, but instead addressing our assorted technical debt from ages past. I have never heard of that happening before in a software product.&amp;#160; Believe me when I say that each and every one of you did a fantastic job.&lt;/p&gt;  &lt;p&gt;I learned a lot from all of you.&amp;#160; A lot.&amp;#160; Unfortunately, that meant I learned many things on my feet, and made many mistakes.&amp;#160; It also meant that I spent a fair amount of time internally processing. That is to say, I was a noob mentor and I made several noob mistakes.&lt;/p&gt;  &lt;h2&gt;First apology&lt;/h2&gt;  &lt;p&gt;I generally perceived you as peers, but I didn’t always convey that you should treat me as such. A few times, I let you do what I said to do.&amp;#160; It’s the easy thing to do, and when I wasn’t up on my game I would forget to end my sentences with “…but don’t do what I say, it’s what &lt;strong&gt;you&lt;/strong&gt; think that matters!”&amp;#160; Truly, what I wanted most is for you to do what you think is best.&amp;#160; I will absolutely argue the points with you, and if we disagree on what is best I’ll push on you until we understand each other, but no discussions should have ever ended due to a sense of “do what Jude says”: your product, your call, your consequences; you own what you’re working on.&amp;#160; I feel like this was the successful end result, but I don’t think I was consistent in tapering my opinion.&lt;/p&gt;  &lt;p&gt;I haven’t yet figured out how to balance authority with peer discussion.&amp;#160; My best conclusion so far is that authority is harmful.&amp;#160; It’s regrettable to me that the mentor/peer relationship has an innate authority built in.&amp;#160; In the future, I hope to dissolve that as quickly as possible.&lt;/p&gt;  &lt;p&gt;I’m sorry for the times that I acted authoritative.&lt;/p&gt;  &lt;h2&gt;Second apology&lt;/h2&gt;  &lt;p&gt;I am truthful.&amp;#160; I am very, very very truthful.&amp;#160; I worked for Microsoft for a while, and they encouraged me not to be truthful… so I stopped working for Microsoft.&amp;#160; I’m truthful about things that most people will normally shut up about.&amp;#160; It is extremely rare that there’s something I would say to one person that would differ from what I would say to another person. It can be disadvantageous for me in the short term, but I’ve found it to usually be beneficial in the long term.&lt;/p&gt;  &lt;p&gt;Unfortunately, I’m also a suboptimal communicator.&amp;#160;&amp;#160; One way I’m really talented at giving false impressions is via writing.&amp;#160; Over the summer, I wrote two blog posts which were my personal reflections on things I’d been learning about.&amp;#160; Since my brain was filled with the things you guys had been working on, naturally some of the examples overlapped with your work.&amp;#160; The truth is that I wasn’t picking on you, they were just recent examples.&amp;#160; All of the examples I gave could be credited to every developer I’ve ever met, myself included. I didn’t view my comments as anything I hadn’t (or wouldn’t have) otherwise said to you directly, so I didn’t see any reason to obfuscate.&amp;#160; Sadly, human perception doesn’t work like that, and my intentions matter less than your perceptions.&amp;#160; If you felt like I spoke of you negatively in my writing, then I failed as a communicator.&amp;#160; I apologize.&lt;/p&gt;  &lt;h2&gt;First obvious statement&lt;/h2&gt;  &lt;blockquote&gt;   &lt;p&gt;But Jude, if I’m as awesome as you claim, why didn’t I get a job offer?&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Well, person with a valid question, that answer varies per person. The general answer is sufficiently complicated answer that I have a draft underway which will probably fail to explain it.&lt;/p&gt;  &lt;p&gt;It’s my personal belief that you’re entitled to an understanding of your hiring decision, and I would happily help to provide that understanding.&amp;#160; That said, this is delicate territory, so I’ll stop typing about it now.&amp;#160; If something about your hiring decision troubles you, email me (or anyone here) and I’m sure it can be clarified.&lt;/p&gt;  &lt;h2&gt;Second obvious statement&lt;/h2&gt;  &lt;blockquote&gt;   &lt;p&gt;Jude, I think less than the world of you. Also, that’s an understatement.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I’m sorry. I think you’re cool, but I understand if you don’t want to hang out with me.&amp;#160; Two common states I find myself in are:&lt;/p&gt;  &lt;p&gt;- Engineer mode.&amp;#160; I optimize everything I think about, including you.&lt;/p&gt;  &lt;p&gt;- Person mode.&amp;#160; My empathy chip becomes enabled.&lt;/p&gt;  &lt;p&gt;I think a mentor’s duty lies mostly in Person mode.&amp;#160; Team dynamics are the challenging part about software development, not the software.&amp;#160; I spent most of the summer in Engineer mode, and that probably made things harder for both of us.&amp;#160; My bad.&lt;/p&gt;  &lt;h2&gt;&lt;/h2&gt;  &lt;h2&gt;TL;DR:&lt;/h2&gt;  &lt;p&gt;The internship was a great success.&amp;#160; The goal of the internship was to ship awesome software, and that has happened.&amp;#160; Your hard work is in the hands of users and they are loving it.&lt;/p&gt;  &lt;p&gt;This was the first mentorship experience for many of us, and there were a lot of you, so it was tricky at times.&amp;#160; In the end, I think we all learned a ton of stuff from each other.&lt;/p&gt;  &lt;p&gt;I could’ve done better, and I’m sorry that I didn’t the first time around.&amp;#160; It was a pleasure working with all of you.&lt;/p&gt;  &lt;h2&gt;STL; SDR:&lt;/h2&gt;  &lt;p&gt;GG&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-6958067444901033636?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/6958067444901033636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=6958067444901033636' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/6958067444901033636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/6958067444901033636'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2010/09/open-letter-to-interns-past.html' title='An open letter to interns past'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-2639552033994415214</id><published>2010-09-25T12:12:00.001-07:00</published><updated>2010-09-25T12:51:47.727-07:00</updated><title type='text'>Bribe my permission marketing</title><content type='html'>&lt;p&gt;I have very little interest in cars.&amp;#160; I would not accept a car if it was given to me except to immediately resell.&amp;#160; &lt;/p&gt;  &lt;p&gt;On the Museum Day website, I found:   &lt;br /&gt;&lt;a href="http://microsite.smithsonianmag.com/museumday/admission.html?2010"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="good idea" border="0" alt="good idea" src="http://lh6.ggpht.com/_SEDq2OI8nrk/TJ5JuNt_7tI/AAAAAAAAGQ8/peTUl8LMLXg/good%20idea%5B6%5D.png?imgmax=800" width="429" height="208" /&gt;&lt;/a&gt;    &lt;br /&gt;This is brilliant.&lt;/p&gt;  &lt;p&gt;I sure like museums and educational research, so I’ll be receiving information about Toyota Avalon (maybe even by mail?) and I probably won’t be mad about it.&lt;/p&gt;  &lt;p&gt;I also had a moment of “What the crap is a Toyota Avalon, and what does it have to do with museums and educational research?”&lt;/p&gt;  &lt;p&gt;The answer is:&lt;em&gt; A car that I don’t care about, and that people who go to museums are probably more likely to buy cars than people who don’t. &lt;/em&gt;But that doesn’t matter- they got me to investigate them.&lt;/p&gt;  &lt;p&gt;I’m probably not their intended audience.&amp;#160; I don’t even know if I’ll read what they send me (probably not), but they’ve earned the opportunity.&amp;#160; If their follow-up is amazing, I might just keep paying attention. &lt;/p&gt;  &lt;p&gt;I’ve cost them (at most) a tax-deductible dollar so far, but they’ve engaged me and I think better of them for giving money to museums.&amp;#160; &lt;/p&gt;  &lt;p&gt;I have trouble thinking of any other recent advertisements that have touched me so effectively.&amp;#160; Toyota win.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-2639552033994415214?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/2639552033994415214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=2639552033994415214' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/2639552033994415214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/2639552033994415214'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2010/09/bribe-my-permission-marketing.html' title='Bribe my permission marketing'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_SEDq2OI8nrk/TJ5JuNt_7tI/AAAAAAAAGQ8/peTUl8LMLXg/s72-c/good%20idea%5B6%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-1435882729791604240</id><published>2010-08-03T00:09:00.001-07:00</published><updated>2010-09-25T12:48:40.111-07:00</updated><title type='text'>Mustard in the darkness</title><content type='html'>I recently spent a night huddled against a tree in the woodlands of Vermont.&amp;nbsp; The reason for this was a cascade of small, seeming harmless mistakes which culminated in me, beside a tree, in total darkness, waiting out the dawn.&lt;br /&gt;I survived, and since then I’ve been pondering the chains of small, silly things that can really matter.&lt;br /&gt;&lt;h4&gt;Mustard Mix-Up&lt;/h4&gt;I received an email from a customer earlier today-&amp;nbsp; it went something like this:&lt;br /&gt;&lt;blockquote&gt;Dear my misty insect friend,&lt;br /&gt;I am an unhappy hotdog-stand owner.&amp;nbsp; The “Click to receive delicious mustard” functionality of your product, which worked swimmingly in version 1.3, doesn’t seem to be operational in version 1.4.&lt;br /&gt;When I click “receive delicious mustard”, I am instead presented with a teacup.&lt;br /&gt;Please advise.&lt;/blockquote&gt;I tried to reproduce the problem locally and indeed received a teacup.&amp;nbsp; I’ve never touched the mustard codebase before, but I had a customer in trouble, so I needed to dive in.&lt;br /&gt;I will first tell you what actually happened, because everything went perfectly.&lt;br /&gt;Here were my steps:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;grep for “tpngMustard” –&amp;gt; find related code in condiments.cs&lt;/li&gt;&lt;li&gt;run hgtk log on toppings.cs and filter for checkins between the ‘1.3’ and ‘1.4’ tags &lt;/li&gt;&lt;li&gt;Skim through the checkin names- found “Replaced mustard with teacups in order to conform to our documentation. BugzId:1234”&lt;/li&gt;&lt;li&gt;Reactivated case 1234(“mustard behavior inconsistent with docs”), assigned it to our PM, and requested a documentation update&lt;/li&gt;&lt;li&gt;Updated my repo to the offending checkin; backed it out; tested its behavior; merged to tip; confirmed fix; pushed fix; notified customer of fix.&lt;/li&gt;&lt;li&gt;used Kiln to create a code review of my backout and assigned it to the developer who code-reviewed the original change to see if there was anything I might’ve missed (the developer who actually made the change is on vacation).&amp;nbsp; &lt;/li&gt;&lt;/ol&gt;This entire process of fixing a bug in an unknown codebase took all of about 15 minutes.&amp;nbsp; This may seem like a contrived example, but it’s actually a pretty close approximation of a bug that I fixed earlier today.&amp;nbsp; If the bug was more complicated, all of these steps would have scaled in both their complexity and their relative usefulness.&lt;br /&gt;I was able to do this because of a cascade of small decisions which were all made &lt;strong&gt;correctly&lt;/strong&gt;. They provided a set of tools which I could depend on.&amp;nbsp; Had any one of them been missing, I would’ve been significantly slowed, but I could’ve pushed on.&amp;nbsp; If multiple were missing, well…&lt;br /&gt;&lt;h4&gt;Mustard Remix&lt;/h4&gt;Here’s another path that might’ve happened:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Grepping for tpngMustard yielded nothing meaningful (The developer who implemented the Mustard functionality wasn’t following coding conventions, so their Mustard instances of Topping are named “MsTurd”, “myMusty”, etc.)&amp;nbsp; I had no idea where to start with a debugger, but I had a test case, so I loaded up hg bisect.&amp;nbsp;&amp;nbsp; Unfortunately, about 40% of the commits in between 1.3 and 1.4 &lt;em&gt;wouldn’t compile&lt;/em&gt;, which meant significantly more bisection overhead that should have been necessary.&amp;nbsp; 30 minutes later, I was able to find a group of changes within which the bug must have occurred.&lt;/li&gt;&lt;li&gt;None of the commit messages contained text which seemed pertinent, so I started reading through the diffs.&amp;nbsp; One checkin, “fixes BugzID:148”, contained changes to a dozen files and happened to modify the GetTastyMustard method within condiments.cs.&amp;nbsp; Via updating and recompiling, I was able to verify that this is where the bug was introduced.&amp;nbsp; Well, at least it has a BugzID!&amp;nbsp; Let’s see what additional information is available: &lt;br /&gt;&lt;br /&gt;&lt;img alt="mustard." border="0" class="wlDisabledImage" height="393" src="http://lh6.ggpht.com/_SEDq2OI8nrk/TFfAlHLq-wI/AAAAAAAAGQg/vwOz9Md7VZA/mustard._thumb%5B5%5D.png?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; margin: 0px 0px 5px;" title="mustard." width="365" /&gt;To make things worse, the Hatter doesn’t even work here anymore.&amp;nbsp; Maybe there’s some info in Kiln?&amp;nbsp; I look up the checkin and see if there are any related code review…&amp;nbsp; nada.&lt;/li&gt;&lt;li&gt;Now it’s a crapshoot.&amp;nbsp; I can’t backout his change, since it touches a bunch of other code which appears totally unrelated to Mustard.&amp;nbsp; It appears to be the case that the GetTastyMustard should be reverted to its old behavior of providing mustard instead of teacups, so I guess I’ll do that.&lt;/li&gt;&lt;li&gt;I make the change (manually) and send a code review against a peer of mine (he thinks it looks fine), carefully test it out (seems ok), deploy the fix and notify the customer.&lt;/li&gt;&lt;li&gt;A week later, we start seeing all sorts of crazy behavior in our unix environments.&amp;nbsp; ActiveRecord randomly breaks; IIS resets itself at random intervals; Database caching appears to be disabled.&amp;nbsp; Turns out that TastyMustard is a .Net 3.5 entity that’s only partially supported by Mono (it has the added benefit of corrupting your call stack), but the open-source UnBirthday project provides workaround functionality via its TeaParty.Teacup function (you’re supposed to cast the result to a TastyMustard).&amp;nbsp; I go back in, reinstate the TeaParty, add the cast, and now the bug is fixed.&lt;/li&gt;&lt;/ol&gt;Total time: 12 hours of bug hunting and research for me, plus customer-facing server outages, 15 hours of work from our customer support team, and one angry salesman who lost the deal with SuperDuperMart that he’s been working on for the last year.&amp;nbsp; &lt;em&gt;And I burnt my latte.&lt;/em&gt;&lt;br /&gt;&lt;h5&gt;&lt;/h5&gt;&lt;h4&gt;&lt;/h4&gt;&lt;h4&gt;Cascade&lt;/h4&gt;The differentiating factors between the good scenario and the bad one are all quite small:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Non-discrete checkins&lt;/li&gt;&lt;li&gt;poor commit messages&lt;/li&gt;&lt;li&gt;no bugzid or cases with insufficient detail&lt;/li&gt;&lt;li&gt;checkins containing code that’s unrelated to their commit message / bugzid&lt;/li&gt;&lt;li&gt;deviation from coding conventions&lt;/li&gt;&lt;li&gt;undocumented side effects&lt;/li&gt;&lt;li&gt;less-than crystal-clear code&lt;/li&gt;&lt;li&gt;lack of code review (even if a code review somehow didn’t catch all of the preceding problems or any bugs, a lack of review meant that knowledge of this changeset was isolated to the brain of one crazy, crazy fellow.)&lt;/li&gt;&lt;/ul&gt;It’s easy to slack on any&amp;nbsp;of these points- Every developer I've known (myself included) commonly misses one of these every now and then.&amp;nbsp; I've never known someone to fail to&amp;nbsp;fulfil any of them. &lt;br /&gt;&lt;br /&gt;Every missed opportunity to make your work super-awesome is just another silly, small mistake.&amp;nbsp; If they stay in isolated pockets, you might hit some unpleasantness and inefficiency, but you’ll get by. &lt;br /&gt;My experience so far, both in software development and in woodland navigation, has taught me to avoid less-than-best practices at all costs. They’re more expensive than people tend to realize.&lt;br /&gt;It’s only when silly decisions cascade that you find yourself sleeping in the woods with your backpack over your head.&amp;nbsp; I would advise against it.&lt;br /&gt;&lt;br /&gt;[Edit: The original version of this post quoted a poor&amp;nbsp;changeset message.&amp;nbsp; It was nothing personal, just the most recent example I could think of.&amp;nbsp; I could (and should) have used an equivalent&amp;nbsp;example by quoting one of my own poor commit messages.&amp;nbsp; ;-)&amp;nbsp; ]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-1435882729791604240?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/1435882729791604240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=1435882729791604240' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/1435882729791604240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/1435882729791604240'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2010/08/mustard-in-darkness.html' title='Mustard in the darkness'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_SEDq2OI8nrk/TFfAlHLq-wI/AAAAAAAAGQg/vwOz9Md7VZA/s72-c/mustard._thumb%5B5%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-4816288540416658837</id><published>2010-07-28T19:38:00.001-07:00</published><updated>2010-08-20T11:07:19.694-07:00</updated><title type='text'>Optimizing Meetings</title><content type='html'>&lt;p&gt;I love meetings.&amp;#160; I’m also an efficiency maniac.&amp;#160; As such, documents like this are what happen when I think about meetings.&lt;/p&gt;  &lt;h2&gt;Prelude &lt;/h2&gt;  &lt;p&gt;I recently read Rand’s book&lt;em&gt; Managing Humans&lt;/em&gt;, and he made a distinction which seemed strange to me: “meetings” and “one-on-ones” are different entities.&lt;/p&gt;  &lt;p&gt;And so, I began pondering meeting efficiency dynamics. This has lead me to suspect that, while some meetings may be very inefficient, Stand-Up meetings and One-On-Ones are special:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;One-On-Ones and Stand-Up Meetings can be highly efficient, especially when reinforcing each other.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Meeting efficiency, I’ve realized, is a function of shared context * the number of people in attendance.&amp;#160; For example, N people with 0 shared context require N different pieces of information, whereas N people with 90% shared context require 1 + 10% * N pieces of information.&lt;/p&gt;  &lt;p&gt;Unlike in a normal meeting, which is always going to be somewhat inefficient for the listeners due to differing contexts, one-on-one’s negate the need for information which isn’t relevant to the listener.&amp;#160; As such, a one-on-one is always 100% efficient for the listener.&amp;#160; Note that in any meeting, the roles of ‘speaker’ and ‘listener’ might shuffle back and forth: the key thing is that the person receiving information at any point during the one-on-one is doing so at 100% efficiency.&amp;#160; &lt;/p&gt;  &lt;p&gt;To optimize instead for the speaker, we can combine one-on-ones with standup meetings.&amp;#160; When I say standup meeting, I don’t mean “a short meeting”, I mean it in the maximally scrummy, lithely agile sense of the meeting:&amp;#160; People with shared context gather; Each person states exactly what’s relevant (if anything) to everyone else in the group; The meeting disbands.&amp;#160; Exact relevance, while impossible, becomes approachable as the meeting length decreases.&lt;/p&gt;  &lt;h2&gt;Optimal&lt;/h2&gt;  &lt;p&gt;Here’s one hypothetical method of coupling one-on-ones with standup meetings for a dev team. It requires someone in the role of ‘facilitator’:&lt;/p&gt;  &lt;h5&gt;Phase 1&lt;/h5&gt;  &lt;p&gt;The facilitator has one-on-ones with every team member.&amp;#160; At these one-on-ones, the team members notify the facilitator of whatever they need to communicate.&amp;#160; The “what I’ve done since we last met; what I’ll be doing until we next meet; what problems/concerns I have” template seems fitting here.&amp;#160;&amp;#160; Aside from urgent questions, the facilitator avoids speaking.&lt;/p&gt;  &lt;h5&gt;Phase 2&lt;/h5&gt;  &lt;p&gt;The facilitator recognizes common context and calls standup meetings.&amp;#160; If the scope is small enough, alternative mediums such as chat, wiki articles, email, etc., may be totally sufficient here.&amp;#160; At each meeting, the facilitator brings into attendance the subset of people for whom the content is relevant.&amp;#160; The facilitator then communicates the information they received during Phase 1 which needed to be shared.&amp;#160; In an optimal world, the meeting can end exactly after the facilitator has completed the communication (because they communicated perfectly); realistically, what we’ve instead accomplished is bringing together the exact subset of people who need to discuss whatever the topic is.&lt;/p&gt;  &lt;p&gt;Phase two iterates as necessary.&lt;/p&gt;  &lt;h5&gt;Phase 3&lt;/h5&gt;  &lt;p&gt;The facilitator again has brief one-on-one meetings which each team member and keeps them appraised of the new information.&amp;#160; &lt;/p&gt;  &lt;h5&gt;Loop&lt;/h5&gt;  &lt;p&gt;Since the next phase after 3 is another phase 1, it’s reasonable that 3 and 1 can be combined in a serial manner.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;This hypothetical system achieves:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Minimization of discussers. Discussions, in my experience, tend to get real inefficient, real fast.&amp;#160; If you throw more and more intelligent people into an argument, the diminishing returns are obvious.&amp;#160;&amp;#160; This system allows us to let the discussions take place entirely in phase 2 with the minimal necessary set of relevant people.&amp;#160; Anyone who needs to be appraised of the discussion results can be informed during phase 3. &lt;/li&gt;    &lt;li&gt;Communication overhead for the team members scaling relative to the sets of intersections of relevant information within the team.&amp;#160; That’s Awesome. &lt;/li&gt;    &lt;li&gt;Communication overhead for the facilitator relative to the number of team members scaled by the sets of intersections of relevant information within the time. Also awesome. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Outside of this construct, we can still optimize for meetings- our initial observations about shared context allow us to predict the efficiency (and hence benefits and validity) of all meetings.&lt;/p&gt;  &lt;h2&gt;&amp;#160;&lt;/h2&gt;  &lt;h2&gt;Umm…&lt;/h2&gt;  &lt;p&gt;So… it would appear that I have solved meetings.&amp;#160; That’s a problem- it just means that I’m wrong. If it was that simple, then smarter people than me would have already written about this in such a profound manner that I would have come across it by now. &lt;/p&gt;  &lt;p&gt;This just means that there’s a collection of pitfalls which I’ve missed.&lt;/p&gt;  &lt;p&gt;Well, here’s a few:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;My hypothetical construct optimizes for the Devs.&amp;#160; That’s great, but ‘facilitators’ (lead devs, PM’s, what-have-you) tend to be the busiest people on the team anyway.&amp;#160; While it’d be nice to completely optimize for the devs, resource limitations can make that simply impossible. &lt;/li&gt;    &lt;li&gt;Your facilitator needs to have an excellent understanding of which information is relevant to which dev.&amp;#160; If they underestimate, there’s a communication breakdown; if they overestimate, there’s inefficiency. &lt;/li&gt;    &lt;li&gt;Context is hard to measure, and it’s difficult to predict the consequences of sharing context. &lt;/li&gt;    &lt;li&gt;Tunnels of information negate epiphanies.&amp;#160; Maybe the sales guy has the next big idea relating to software-transactional memory.&amp;#160; Seth Godin talks about this occasionally- the more transparent the system, the more likely it is that the greatest idea will occur.&amp;#160;&amp;#160; I suppose this is a matter of optimizing for great ideas versus optimizing for a chance at the greatest. &lt;/li&gt;    &lt;li&gt;Optimization isn’t really the issue, it’s all a matter of managing people.&amp;#160; Not all challenges can be engineered away.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;What else am I missing? &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-4816288540416658837?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/4816288540416658837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=4816288540416658837' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/4816288540416658837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/4816288540416658837'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2010/07/perspective-shift-on-meetings.html' title='Optimizing Meetings'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-3381475086699576449</id><published>2010-07-26T00:30:00.001-07:00</published><updated>2011-12-15T19:58:36.379-08:00</updated><title type='text'>Why I am picky as hell when I review your code</title><content type='html'>&lt;p&gt;There was once a programmer working on my product who had a very recognizable coding style. Particularly, he had an affinity for global variables, tail-recursion, functions with unintuitive side-effects, and off-by-one errors. It’s now the case that whenever I spot some code which looks like his, I freeze and read it very, very carefully. I’ve come to own an area of the product which was once his, and I suspect I’ve spent more time debugging his work than he spent writing it in the first place. Any developer who carefully read through his code would have quickly spotted many of his bugs. This leads me to suspect that his code was never proofed, perhaps not even by him.&lt;/p&gt; &lt;p&gt;His code was written before we were rockin’ the casbah with Kiln. Now, we have code reviews, and they’re great. When I review code, however, I try my best to become super, super picky. This may not be the most popular thing I could do, but I believe it to be quite rational.&lt;/p&gt; &lt;p&gt;If you’ve made a checkin that has:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;No BugzID (..and it’s nontrivial)  &lt;li&gt;A poor commit message  &lt;li&gt;functionality other than described in the commit message  &lt;li&gt;spacing/indentation glitches  &lt;li&gt;missing or excessive semicolons (javascript)  &lt;li&gt;duplicated code  &lt;li&gt;refactors with hidden functionality changes  &lt;li&gt;a noticeably different style than it’s surrounding code (unless injecting elegant new styles into deprecated code)  &lt;li&gt;any style-guide violations  &lt;li&gt;comment bugs (typos, inaccuracies, nonexistence)  &lt;li&gt;code of sufficient complexity as to allow for non-obvious bugs  &lt;li&gt;anything that makes me say “what the…” without my following it up with “…oh, cool!”  &lt;li&gt;Bugs &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;I’m going to be the picky jerk. Yes, I’m going to be the one who is going to reject your code until you &lt;em&gt;standardize your tabs to 4-spaces, damnit!&lt;/em&gt;&lt;/p&gt; &lt;p&gt;It’s not because I think syntax is the hard part of coding… no. It’s not because my code editor doesn’t place nice with the formatting output by your code editor, because it does. It’s not because I don’t like you or any other personal reason. It’s not even necessarily because I think there’s a quality issue with your code (&lt;em&gt;I’m just as picky when I review the code of our most-senior dev, and he’s even more picky than I am).&lt;/em&gt; &lt;/p&gt; &lt;p&gt;It’s because you have illustrated to me that you did not proofread your code. You did not carefully consider every line. If you did, you would’ve spotted that weird indentation. You would have spotted that you have variables named pxMyWidth and MyPxWidth declared in the same scope, and you wouldn’t have been satisfied with that.&lt;/p&gt; &lt;p&gt;And if you haven’t proofread your code, how am I, your picky, picky reviewer, to know that you’ve really thought about the stuff that matters?&lt;br&gt;Did you properly encode that username before writing it to the page? Is the casing 100% correct on the column names in your SQL queries so that MySql doesn’t crash? Is that column in your covering index &lt;em&gt;really&lt;/em&gt; necessary? Is O(nLog(n)) really the best you can do in that hash lookup? Is that public function &lt;em&gt;really&lt;/em&gt; safe to rename?&lt;/p&gt; &lt;p&gt;You wrote the code. You know it better than I do. If you haven’t caught all of the edge cases, what chance do I have?&lt;/p&gt; &lt;p&gt;It’s not that I’m enforcing my spacing pet-peeves on you. Really, &lt;em&gt;my editor can handle mixed tabs-and-spaces. &lt;/em&gt;But if I can make you so annoyed with my picky, picky code reviews that you carefully comb through your work before submitting it to me, it’s going to be worth it. You’re going to catch the &lt;strong&gt;real bugs&lt;/strong&gt; before they get to my picky eyes. &lt;/p&gt; &lt;p&gt;Code reviews aren’t about your code getting past my pickiness blacklist- they’re about teaching you to be so picky that when I review your code, I can’t do anything but marvel at what a bad-ass developer you are. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-3381475086699576449?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/3381475086699576449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=3381475086699576449' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/3381475086699576449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/3381475086699576449'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2010/07/why-i-am-picky-as-hell-when-i-review.html' title='Why I am picky as hell when I review your code'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-738530066871785695</id><published>2010-05-03T22:10:00.001-07:00</published><updated>2010-05-07T14:13:10.593-07:00</updated><title type='text'>Reconciling Core &amp; the happydance</title><content type='html'>&lt;p&gt;Let's assume for a moment that all software has Context and Core, iterative release cycles (not games), and limited development resources.&amp;#160; If you're already lost, I didn’t write this for you.&lt;/p&gt;  &lt;p&gt;OK, great.&amp;#160; So what should development efforts focus on?    &lt;br /&gt;Context has a dangerous scoping implications.&amp;#160; Fall out of the context bubble and you lose that selling point.&amp;#160; Advance within the context bubble, and you don't gain sales. Advance beyond the bubble, you have a core candidate.&lt;/p&gt;  &lt;p&gt;Core Candidates    &lt;br /&gt;Just because your program has the most advanced X, doesn't make it core.     &lt;br /&gt;&lt;em&gt;A wiki with the best spell checker does not push the boundaries of core.&lt;/em&gt;     &lt;br /&gt;More on this later.&lt;/p&gt;  &lt;p&gt;A false thought pattern:    &lt;br /&gt;For any feature in my product, if I put sufficient effort into it, it can become part of my product's core.     &lt;br /&gt;Reality:&amp;#160; All feature work has diminishing returns, and many features don’t merit Core.&amp;#160; If you’re not going to write about it on your website, it’s not core.     &lt;br /&gt;Correction :     &lt;br /&gt;Given an application with a set of features, there exist some tiers of context:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Features below the context minimums for that type of feature.&amp;#160; These are nonfeatures. They probably exist for legacy reasons. &lt;/li&gt;    &lt;li&gt;Features approaching the context minimums. These are functional, but suck.&amp;#160; However, if they are truly context, then the functioningness of them should be sufficient.&amp;#160; Interacting with these features results in crappy user experiences. &lt;/li&gt;    &lt;li&gt;Features well within the context bubble.&amp;#160; They're nothing special, but fill some need. Neutral user experiences. &lt;/li&gt;    &lt;li&gt;Features about to break favorably out of the context bubble. They're still nothing special, but people think they're slick. Good user experiences. &lt;/li&gt;    &lt;li&gt;Features that go above and beyond all similar implementations of this given context feature.&amp;#160; Your application can convert subtitled cat pictures into PDF's better than any other application in existence.&amp;#160; Good for you; Nobody cares.&amp;#160; This probably took a lot of effort, too, didn't it? Suckaaaaah. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Let's live, for a moment, in a world in which your application is entirely context.&amp;#160; Perhaps your application is the Windows 7 WordPad.&amp;#160; It's a dumbed-down version of Word that come free with Windows 7; Its core, if anything, is that it's free.&amp;#160; It's a lovely little program, but it lives in context.    &lt;br /&gt;When living in context land, choices are easy: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Tier 1-2 features generally shouldn't exist. Cut them or push them to tier 3.&amp;#160; &lt;/p&gt;    &lt;p&gt;Tier 3 features are fine, but noncompetitive.&amp;#160; I'll talk more about competing on context later. &lt;/p&gt;    &lt;p&gt;Tier 4 features are more competitive.&amp;#160; The only tier-4 feature I can identify in WordPad is that it loads extremely quickly. &lt;/p&gt;    &lt;p&gt;Tier 5 features, while arguably more competitive than tier 4, are a void.&amp;#160; Time spent on tier 5 features while you have dangling &amp;lt;= 4's is likely a waste. &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;For those of us who don’t live in contextland, the game is different.&amp;#160; Context quality is a component, but it's only marketable on price.    &lt;br /&gt;My sales pitch for using WordPad instead of Word: It’s free and it’s installed by default.&amp;#160; It’s hard to raise money with a sales pitch like that. WordPad’s biggest profits probably come from the fact that having WordPad as a commodity good strengthens Word as a product, since WordPad can open Word documents.&lt;/p&gt;  &lt;p&gt;Core candidates:    &lt;br /&gt;There are two types of core candidates: &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;A feature which can do something that nobody else can do.&amp;#160; Push a button, it shocks you for 30 seconds, and then teleports you anywhere in the world.&amp;#160; The only context for the feature is price.&amp;#160; If I value not being shocked at $50, and teleportation at $1000, I'll still buy this for $950.&amp;#160; The ROI on reducing the shock to 10 seconds probably isn't worth it. &lt;/li&gt;    &lt;li&gt;An important feature which can do something that others can do, but better. This is a tier-5 contextual feature.&amp;#160; These are hard, since there will always be 4's nipping at your heels. If teleportation is a commodity, but I can provide it to you with only a 1ms shock...&amp;#160; great, my teleporter is worth $999.&amp;#160; That's wonderful, but a competitor can accomplish the same gain by undercutting me.&amp;#160; A bigger competitor than me can squash me by undercutting me severely.&amp;#160; I can't compete on price, since It's so much harder for me to keep running at 5 then for them to run at 4 or 3.&amp;#160; This is where Word is kicking the crap out of Open Office; Open Office’s only prayer is to undercut Word, but it would have to pay people to use it in order to get cheap enough.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Choose your core well.&amp;#160; Your core is the set of reasons for which a customer will evaluate your product. Your context needs only to be filled in enough to not scare your customers away.&lt;/p&gt;  &lt;p&gt;Ok, that was easy.&amp;#160; Now let’s make it more complicated.&lt;/p&gt;  &lt;p&gt;Secret aspect #3,&amp;#160; wherein Core and Context interplay:    &lt;br /&gt;Joel has a very nice article entitled Controlling Your Environment Makes You Happy. I'm going to refer to it as happydance, since that's more pleasant to type than CYEMYH.&lt;/p&gt;  &lt;p&gt;Happydance means that, even if my teleporter is one of a kind, it may still piss you off.    &lt;br /&gt;Happydance means that the context par is actually higher than the bottom line: Your electroshock needs a minty aftertaste.     &lt;br /&gt;Happydance means that running with contextland in 1 or 2 will put a bad taste in your mouth, and running at 3 means that you're at risk.     &lt;br /&gt;Happydance means that context must run at 4, and that 3 is a danger zone.     &lt;br /&gt;Happydance means that type-1 core candidates need to run at 4.&lt;/p&gt;  &lt;p&gt;Happydance, really, is meta-core.&amp;#160; You can set happydance to be part of your product's core functionality:    &lt;br /&gt;&lt;em&gt;My product performs teleportation and happydance.      &lt;br /&gt;&lt;/em&gt;This means that, alongside teleportation, I'm a 4-star restaurant in contextland, baby.&amp;#160; You're not flying Eastern Airways, you're flying Jet-Freaking-Blue. Happy jetting. &lt;/p&gt;  &lt;p&gt;The insight of happydance, I think, is that people are emotional creatures. Assuming that we’re going to behave logically and economically is just wrong.&amp;#160; You have to account for happydance, otherwise your superior product will fall behind.&lt;/p&gt;  &lt;p&gt;Happydance’s annoying property:    &lt;br /&gt;The scope of happydance is your entire product.&amp;#160; Even if you can push on core or context in one area or another independantly, to push on happydance you still have to push on EVERYTHING. &lt;/p&gt;  &lt;p&gt;Thinking internally, I suspect that the cores of my product are:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Happydance &lt;/li&gt;    &lt;li&gt;Best exception handling of any issue tracker &lt;/li&gt;    &lt;li&gt;Best exception handling of any project management tool &lt;/li&gt;    &lt;li&gt;EBS &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;I think there are some budding cores, and there’s also a lot of context.&lt;/p&gt;  &lt;p&gt;There were some items identified missing from our set of context features.&amp;#160; Rather than pulling them to minimum, we're pulling them up to Core.&amp;#160; This seems good.&lt;/p&gt;  &lt;p&gt;I think we have succeeded in maintaining happydance for Core.    &lt;br /&gt;I think we're beginning to fail to maintain happydance for context, especially pertaining to search, the wiki, and the discussion forms.&amp;#160; We know this, and we know the solutions.     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;The current path is pushing core;&amp;#160; beautiful.&amp;#160; I'm scared, though, because:    &lt;br /&gt;We've got happydance in place for our core, but it’s sliding away from our context, and a consistent unhappydance on an ever-growing long-tail of context will strip happydance from our core.&lt;/p&gt;  &lt;p&gt;I don't think we'll let it slip, though.&amp;#160; I also think that are current efforts are worth the investment, and they will themselves embody happydance.&amp;#160; The contextland 2's, someday, will be taught to dance again.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-738530066871785695?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/738530066871785695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=738530066871785695' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/738530066871785695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/738530066871785695'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2010/05/reconciling-core-happydance.html' title='Reconciling Core &amp;amp; the happydance'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-185465614130553445</id><published>2010-01-31T18:15:00.001-08:00</published><updated>2010-01-31T18:57:31.050-08:00</updated><title type='text'>StackExchange has made me addicted to customer service.</title><content type='html'>&lt;p&gt;I &lt;em&gt;could&lt;/em&gt; implement that completely necessary feature, or I could visit the unanswered questions section of FogBugz.StackExchange.com and make some customers happy. Hmmmmm.&lt;/p&gt;  &lt;p&gt;StackExchange is starting to eclipse my devotion to Reddit.&amp;#160; StackOverflow has always been a fun place to visit and &lt;em&gt;learn new things about stuff&lt;/em&gt;, and answering questions there can be fun.&lt;/p&gt;  &lt;p&gt;But now, there’s FogBugz.Stackexchange.com… and I’m a FogBugz developer, one of a small bunch, and I can answer nearly any question there.&amp;#160; And people are happy when I do, and they’re charismatic and graceful, and they teach me new things about the product that I’m developing for them.&lt;/p&gt;  &lt;p&gt;I can ask them questions, too!&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Oh community&lt;/em&gt;, says I, &lt;a href="http://fogbugz.stackexchange.com/questions/1603/dear-fb-plugin-developer-user-community-what-would-you-like"&gt;&lt;em&gt;What would you like?&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And they tell me.&lt;/p&gt;  &lt;p&gt;It’s dangerous. I’ve begun avoiding SE during work hours.&amp;#160; Unless there’s a question which is too specific to me for others to easily handle, I leave it alone until I’m in a state such that I’m positive no code may come forthwith.&lt;/p&gt;  &lt;p&gt;It’s cutting down on my workload, though, so maybe I shouldn’t have that aversion:&amp;#160; If ever I answer a question via email, I then immediately post-and-answer that same question on StackExchange.&amp;#160; If I’ve solved a problem, I put the workaround on StackExchange alongside the deployment estimate for the fix.&amp;#160; People with the same problem find it there, use what’s provided, and the universe becomes more efficient.&lt;/p&gt;  &lt;p&gt;Since we’ve begun using FogBugz.StackExchange.com as our support platform, I’ve never answered the same question twice. We even have an internal SE server which we use for non-public-facing Q&amp;amp;A, and the same principles apply there. &lt;/p&gt;  &lt;p&gt;For all purposes outside of product specs, I think corporate wiki’s and discussion forms have been dealt a fatal blow. &lt;/p&gt;  &lt;p&gt;At the risk of binding memely connotations to this post, and with full respect and awareness of Reddit’s one-epic-per-year ideology… epic win.&amp;#160; &lt;/p&gt;  &lt;p&gt;I’m sorry, what that too lame? Perhaps you’d prefer &lt;a href="http://en.wikipedia.org/wiki/File:718smiley.svg"&gt;awesome face&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;[Edit: Peppering the article with links was bugging me, so I’ve consolidated the non-contextual ones in order to streamline workflow:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://stackexchange.com/"&gt;StackExchange&lt;/a&gt; – The platform &lt;/li&gt;    &lt;li&gt;&lt;a href="http://stackoverflow.com"&gt;Stack Overflow&lt;/a&gt; – The poster child of the platform &lt;/li&gt;    &lt;li&gt;&lt;a href="http://fogbugz.stackexchange.com"&gt;FogBugz.Stackexchange&lt;/a&gt; – &lt;em&gt;Our&lt;/em&gt; instance of the platform &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;]&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-185465614130553445?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/185465614130553445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=185465614130553445' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/185465614130553445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/185465614130553445'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2010/01/stackexchange-has-made-me-addicted-to.html' title='StackExchange has made me addicted to customer service.'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-917701153458722143</id><published>2010-01-02T22:04:00.001-08:00</published><updated>2010-03-13T12:33:03.195-08:00</updated><title type='text'>Getting Ready to let FogBugz host my website</title><content type='html'>&lt;p&gt;[Edit: &lt;a href="http://jude.fogbugz.com" target="_blank"&gt;Done&lt;/a&gt;!]&lt;/p&gt;  &lt;p&gt;I have a website, and it &lt;strong&gt;&lt;em&gt;sucks&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;My hosting contract is about to expire, and though DreamHost has been a wonderful webhost, maintaining a website really isn’t my thing.&amp;#160; I have minimal desire to refresh my contract.&lt;/p&gt;  &lt;h5&gt;I’ve got problems and needs.&lt;/h5&gt;  &lt;p&gt;My need is a place where I can host files and text.&amp;#160; I want to share apps, writing, pictures, etc.&lt;/p&gt;  &lt;p&gt;A hosting contract is not my need, it’s just a very large mallet that happens to slam down on the one little thumbtack I care about.&lt;/p&gt;  &lt;p&gt;My problems all stem from one thing: I am not artistic.&amp;#160; I am not a graphic designer, I do not create pretty things unless they are in some sense algorithmic.&amp;#160; I do not like writing and maintaining HTML. I do not like writing and maintaining CSS. I would not could not create a beautiful website.&amp;#160; I just want a place to put my things.&lt;/p&gt;  &lt;p&gt;I like Wikis.&amp;#160; A free wiki which I could use to host my things… nifty.&lt;/p&gt;  &lt;p&gt;I like FogBugz. I use it for all manner of things.&amp;#160; I’m also a FogBugz developer, so I have a bit of a deeper view on the subject than I suspect many people do, and I’m biased.&lt;/p&gt;  &lt;p&gt;In the past, I’ve opted away from using FogBugz wikis as my method of content hosting for, really, one reason:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;My wiki might live here, &lt;a title="https://myelinated.fogbugz.com/default.asp?W4" href="https://jude.fogbugz.com/?W4"&gt;https://jude.fogbugz.com/?W4&lt;/a&gt;,       &lt;br /&gt;but &lt;a title="https://myelinated.fogbugz.com/" href="https://jude.fogbugz.com/"&gt;https://jude.fogbugz.com/&lt;/a&gt; isn’t personal.&amp;#160; Sure, you can access the wiki, but this really isn’t an acceptable landing page for anyone except for people expecting to interact with FogBugz, and it’s not really ok to use an ugly url (…?W4) as my landing page.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;But this has changed! As of &lt;strong&gt;Now&lt;/strong&gt;, FogBugz supports Custom Landing Pages!&amp;#160; See it in play at &lt;a href="http://developers.fogbugz.com"&gt;Developers.FogBugz.com&lt;/a&gt;!&amp;#160; &lt;strike&gt;&lt;font color="#c0c0c0"&gt;As of FogBugz 7.1.12 (which is awaiting deployment),&amp;#160; FogBugz will support custom landing pages!&amp;#160; The full functionality is still being pondered, and may be expanded, but it’s already the case that you can select a wiki to act as the landing page.&amp;#160;&amp;#160; Once this gets out, I’ll abandon blinkymach12.com and use jude.fogbugz.com as my primary web page.&lt;/font&gt;&lt;/strike&gt;&amp;#160; This gets me:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;1. The ability to use a WYSIWYG wiki to manage all of my website content.&amp;#160; This makes me very, very happy.&lt;/p&gt;    &lt;p&gt;2. Wiki templates.&amp;#160; Though I don’t enjoy managing html, css, javascript, etc., it is needed.&amp;#160; Templates give me that control.&amp;#160; This means that I can grab a style from CSS Zen Garden, apply that to the template, and then eat popcorn.&lt;/p&gt;    &lt;p&gt;3. Tighter integration with FogBugz. This is a bigger deal for management than for the visitors – I can just edit the wiki whenever I need to make changes, I don’t need to fire up my SSH client and move html files back and forth.&amp;#160; Lowering the barriers for me to update my website means more website updates. Plus, I’ll probably follow &lt;a href="http://www.fogcreek.com/FogBugz/blog/post/HTML-for-isolating-and-modifying-your-public-project-new-case-page.aspx"&gt;Dan’s advice&lt;/a&gt; and incorporate some custom case-submission forms.&lt;/p&gt;    &lt;p&gt;4. Freeness, rather than paying DreamHost for my hosting, I just use my existing FogBugz account (which itself is free, given the ‘student and startup edition’)&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I’m happy as a clam. &lt;/p&gt;  &lt;p&gt;The only other thing that I could wish for would be the ability to alias an arbitrary url with my jude.fogbugz.com site. I’m told that this is shockingly easy, and already possible via some hackage, so perhaps it’ll be easy to automate.&amp;#160; &lt;/p&gt;  &lt;p&gt;If that happens, FogBugz will be able to function as a one-stop-shop for small companies- webhosting, issue tracking, project management, documents, customer relations, email, source control… really, everything except for monetization. I don’t say this as a shameless plug for FogBugz, even though it may sound that way, I say this because I’m a programmer who once tried to start a small company.&amp;#160; The programming is the easy part- all the other stuff just… sucks.&amp;#160; I think that FogBugz is becoming a better and better solution for these startups, and I think that it’s pretty close to being complete. &lt;/p&gt;  &lt;p&gt;By the way, this article reflects no opinions but my own.&amp;#160; Anything I’ve lead you to believe about the direction that FogBugz may or may not be going is wrong, so neener neener.&amp;#160; I’m just excited that some of the aspirations I have for FogBugz are coming to pass.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-917701153458722143?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/917701153458722143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=917701153458722143' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/917701153458722143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/917701153458722143'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2010/01/getting-ready-to-let-fogbugz-host-my.html' title='Getting Ready to let FogBugz host my website'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-3486505227246996990</id><published>2009-11-08T16:02:00.001-08:00</published><updated>2010-01-31T18:35:45.585-08:00</updated><title type='text'>Features versus Benefits</title><content type='html'>&lt;p&gt;I’ve heard of featuritus, but never benefititus. &lt;/p&gt;  &lt;p&gt;Again and again, I’ve heard the mentality of “we need more features, because features are what sell.”&amp;#160; This is easy to think of, think about, and dwell on.&amp;#160; It’s qualitative.&amp;#160; It’s also easy to get wrong.&lt;/p&gt;  &lt;p&gt;There exists a market for lattes. Starbucks is currently making money by selling lattes, and so does Latte Man’s Latte Experience down the street.&amp;#160; Starbucks sells a lot more lattes than the Latte Man ever will, but Latte Man is growing. &lt;/p&gt;  &lt;p&gt;There also exists a market for pumpkin spice lattes. They’re creamy, caffeinated, and taste like the best part of Thanksgiving.&amp;#160; The Latte Man doesn’t sell pumpkin spice lattes, but Starbucks does, and Starbucks is making money from pumpkin spice lattes.&lt;/p&gt;  &lt;p&gt;Herein lies the dilemma.&amp;#160; Latte Man, who also happens to be a software engineer and thus thinks like I do, just so happens to follow &lt;a href="http://joelonsoftware.com"&gt;Joel On Software&lt;/a&gt;, and just so happens to have attended &lt;a href="http://stackoverflow.carsonified.com/"&gt;Stack Overflow DevDays&lt;/a&gt;, and Latte Man agrees with Joel’s mantra of ‘Do one thing, and do it really well.’&amp;#160; So, Latte Man’s latte’s are made exclusively using the &lt;a href="http://www.aerobie.com/Products/aeropress_story.htm"&gt;AeroPress&lt;/a&gt;, and the Latte Experience is divine.&amp;#160; Someone seeking the best possible latte, given an informed choice, will choose the Latte Man every single time.&amp;#160; But what of the pumpkin-spice latte seeker?&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Latte Man &lt;strong&gt;Sucks&lt;/strong&gt;, Starbucks is way better because they have pumpkin spice lattes.&lt;/em&gt;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;What’s a latte man to do?&amp;#160; Well, he could start making pumpkin spice lattes.&amp;#160; In fact, let’s go so far as to say that he could dominate the market of pumpkin spice lattes.&amp;#160; For the vast majority of the Latte Man’s customers, however, having pumpkin spice lattes is a &lt;strong&gt;Feature: &lt;/strong&gt;It’s a proposed solution to an unrecognized need.&amp;#160; For the people who will only ever buy lattes of the pumpkin-spice variety, it’s a benefit (because pumpkin spice lattes are like crack).&lt;/p&gt;  &lt;p&gt;For Starbucks customers, pumpkin spice lattes are not a feature, they’re a benefit.&amp;#160; Starbucks doesn’t sell lattes, they sell a culture, and part of that culture identifies with the desire to feel special about an overpriced cup of coffee with too much milk, and part of Starbuck’s reinforcement of that culture is to provide a seasonal menu.&amp;#160; Their seasonal menu provides them with benefit- the items on it hardly matter.&lt;/p&gt;  &lt;p&gt;In a month or so, Starbucks will stop selling Pumpkin Spice Lattes, and start selling Eggnog Lattes.&lt;/p&gt;  &lt;p&gt;Should the Latte Man sell eggnog lattes?&amp;#160; Gingerbread lattes? Peppermint lattes?&amp;#160; No, because these are features.&amp;#160; Give me less choices, latte man, just make me an awesome latte. Give me a benefit like latte expertise: Invent a ‘Latte of the Day’, write it up on a your chalkboard, and make me smile. &lt;/p&gt;  &lt;p&gt;Latte of the Day: White Irishman    &lt;br /&gt;”Latte Man, pray tell, what is a White Irishman?”     &lt;br /&gt;”Oh-Ho-Ho, it’s a tautology”, he says, “but let me give you a sample!”     &lt;br /&gt;”Wow, Latte Man, That IS Good, what’s in this?”     &lt;br /&gt;”Irish cream and white chocolate.”     &lt;br /&gt;”Superb! Also, marry me!”&lt;/p&gt;  &lt;p&gt;Features are things whose need you don’t understand. &lt;em&gt;Excel supports Formula Auditing. I don’t even remotely know what that is, and the fact that I see that &lt;strong&gt;feature&lt;/strong&gt; is actually negative to me. I would prefer Excel if it did not support Formula Auditing. For a Formula Auditor, this is probably a benefit.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Benefits are things whose need you understand. &lt;em&gt;Excel lets me perform page layout prior to printing!&amp;#160; I’ve sure never done that before, but I can see why laying out my page could be useful!&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Let’s talk about features some more.&lt;/p&gt;  &lt;h4&gt;A feature is a hack.&lt;/h4&gt;  &lt;p&gt;Let me tell you about &lt;a href="http://blinkymach12.com"&gt;NoteSlab&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;NoteSlab is a rich-text editor with a fast and easy startup, tabs, and autosave.&lt;/p&gt;  &lt;p&gt;These are benefits, and they’re easy to sell:&lt;/p&gt;  &lt;p&gt;- As easy to start typing in as Notepad    &lt;br /&gt;- Never bother saving stuff, just type.     &lt;br /&gt;- Tabbed browsing for notes keeps them organized. Manage your tabs just like a web browser: Create and destroy tabs with a keystroke, but don’t worry- your destroyed tabs are just hidden, you can bring them back if you ever need to.     &lt;br /&gt;&lt;strike&gt;- Helps you copy your DNA.&lt;/strike&gt;&lt;/p&gt;  &lt;p&gt;And then someone wanted to be able to print something, so I added printing.&amp;#160; And full-text search.&amp;#160; And network synchronization. And more and more &lt;em&gt;&lt;strong&gt;Features&lt;/strong&gt;&lt;/em&gt;, and these did nothing to help sell NoteSlab. &lt;/p&gt;  &lt;p&gt;Having NoteSlab support printing is a hack. &lt;/p&gt;  &lt;p&gt;It’s a customer-service hack: You’ll hate me if I can’t print as well as Microsoft Word? Crap. Well, ok, here, you can print now! &lt;em&gt;They’re happier, but still think you suck relative to Microsoft Word.      &lt;br /&gt;&lt;/em&gt;It’s a programming hack: Nothing about NoteSlab was designed for printing, and patching it in as an afterthought meant that it wasn’t well done.     &lt;br /&gt;It’s a hack because it doesn’t make NoteSlab a better product, it just makes it a little bit better (in a disappointing sort of way) for people who want to print. For everyone else, it’s a feature.&lt;/p&gt;  &lt;p&gt;How could this have been a benefit?    &lt;br /&gt;Printing in NoteSlab could be special, because NoteSlab contains Notes.&amp;#160; In fact, it’s rather like a tabbed notebook, and when people are printing things from a tabbed notebook, they’re probably doing so for the sake of having it &lt;strong&gt;&lt;em&gt;in a tabbed notebook&lt;/em&gt;&lt;/strong&gt;. Here’s a benefit that I don’t mind adding to the list:     &lt;br /&gt;Easily convert from NoteSlab to real notebook hardcopy     &lt;br /&gt;    &lt;br /&gt;Get rid of the general purpose printing, and get special:     &lt;br /&gt;’Print Notebook’     &lt;br /&gt;- Print each tab as a separate page (or series of pages), and print the tab name and a tab graphic on the [top/side] of each page, each tab offset from the last.&amp;#160; &lt;br /&gt;- When printing, provide wide margins and double spacing for additional note-writing abilities.&lt;/p&gt;  &lt;p&gt;This lets you tell NoteSlab to print, and then you can just pick up your notes from the printer, 3-hole-punch them, stick them in a binder, and you have a tabbed binder filled with your notes. &lt;strong&gt;Benefit&lt;/strong&gt;. People would buy NoteSlab because of that.&lt;/p&gt;  &lt;h5&gt;&lt;em&gt;Wait A Freaking Minute…&lt;/em&gt;&lt;/h5&gt;  &lt;p&gt;&lt;em&gt;I can certainly see why I would want to print some notes, and if I print something cool enough, I copy DNA. Ergo, Printing is a Benefit.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Indeed. So something else is going on here. &lt;/p&gt;  &lt;p&gt;I think it’s this:    &lt;br /&gt;A poorly executed benefit becomes a feature.&lt;/p&gt;  &lt;p&gt;And this is scary, because benefits can be poorly executed at every location that your product / brand / company / dna interacts with a user. Benefits must be conveyed and reinforced, and if they’re betrayed, then they become features.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-3486505227246996990?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/3486505227246996990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=3486505227246996990' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/3486505227246996990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/3486505227246996990'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2009/11/features-versus-benefits.html' title='Features versus Benefits'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-1447642271161926113</id><published>2009-09-20T18:13:00.001-07:00</published><updated>2009-09-20T18:13:51.406-07:00</updated><title type='text'>New York City</title><content type='html'>&lt;p&gt;I’m a resident of New York City now- Brooklyn, actually.&amp;#160; Next time you see me, I’ll sound really tough, bench 450 lbs, and be able to tell you all about how the best pizza comes from Brooklyn.&lt;/p&gt;  &lt;p&gt;Just Kidding.&lt;/p&gt;  &lt;p&gt;New York is interesting, though, and the things I’ve come to enjoy about it have been quite different than the things I expected.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_SEDq2OI8nrk/SrbTPhG8zLI/AAAAAAAAGKY/Ftm7vvq04Nk/s1600-h/P1020577%5B6%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="P1020577" border="0" alt="P1020577" src="http://lh6.ggpht.com/_SEDq2OI8nrk/SrbTQvDN8jI/AAAAAAAAGKc/FjmImKwE0VU/P1020577_thumb%5B4%5D.jpg?imgmax=800" width="406" height="315" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Dealing with people everywhere, all the time, isn’t such a big deal.&amp;#160; It takes a little while, but I got used to it.&amp;#160; The fact that subway platforms can be crowded at 2 AM is really quite comforting.&amp;#160; Outside of my apartment, I’m never alone.&amp;#160; That’s an odd thing.&lt;/p&gt;  &lt;p&gt;The subway is a blessing.&amp;#160; Yes, I just said that.&amp;#160; I have a 30-minute commute to my office from my house, and 25 minutes of that is spent in the subway system.&amp;#160; It’s fantastic.&amp;#160; At first, it really wasn’t fantastic, but now it is.&amp;#160; It’s fantastic because I have 2 25-minute chunks of my day where I am forced to stand and wait.&amp;#160; This gives me reading time.&amp;#160; I could easily piss this time away- daydream, listen to music, whatever… but I’ve been able to use this sunk time to reintroduce books into my life.&amp;#160; Every weekday, I read for 50 minutes.&amp;#160; This means that I generally finish a book a week.&amp;#160; I haven’t been at that pace since before high-school.&amp;#160; Seth Godin’s books have been getting my attention most recently, but next up is likely to be Kite Runner.&lt;/p&gt;  &lt;p&gt;Theatre, art, and music overflow out onto the streets.&amp;#160; It’s easy to walk by it, to save a dollar (…or 30) and go about my own ways, but it’s so much more interesting to dive into the random-indie-film-festival that we happen to walk by.&amp;#160; For a person desiring adventure, this is a good place to be.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_SEDq2OI8nrk/SrbTSMvSfWI/AAAAAAAAGKg/r3xcCzi_ta0/s1600-h/P1020520%5B4%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="P1020520" border="0" alt="P1020520" src="http://lh3.ggpht.com/_SEDq2OI8nrk/SrbTTcDXheI/AAAAAAAAGKk/Elvf6Teir8M/P1020520_thumb%5B2%5D.jpg?imgmax=800" width="411" height="314" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-1447642271161926113?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/1447642271161926113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=1447642271161926113' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/1447642271161926113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/1447642271161926113'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2009/09/new-york-city.html' title='New York City'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_SEDq2OI8nrk/SrbTQvDN8jI/AAAAAAAAGKc/FjmImKwE0VU/s72-c/P1020577_thumb%5B4%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-5488070665723180390</id><published>2009-04-14T10:35:00.001-07:00</published><updated>2009-04-14T10:35:10.089-07:00</updated><title type='text'>Unlinked Referents</title><content type='html'>&lt;p&gt;The tires need to be replaced.   &lt;br /&gt;They're no longer acceptable for the purpose of the duck.    &lt;br /&gt;He can't fathom why they can't buy the coffee with them.    &lt;br /&gt;They won't enjoy it unless it has lots of whipped cream.    &lt;br /&gt;It's funny that the coffee have such a strong preference, and he finds that unfortunate.    &lt;br /&gt;He prefers them when they float.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-5488070665723180390?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/5488070665723180390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=5488070665723180390' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/5488070665723180390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/5488070665723180390'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2009/04/unlinked-referents.html' title='Unlinked Referents'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-402261096692264976</id><published>2009-03-31T12:54:00.001-07:00</published><updated>2010-01-31T18:37:55.498-08:00</updated><title type='text'>The Business Plam</title><content type='html'>&lt;p&gt;(Yes, that’s an m. You’'ll understand soon.)&lt;/p&gt;  &lt;p&gt;You’re approaching the podium, and your palms are a little sweaty. The lights are bright. It’s funny how you’re not confident anymore.&amp;#160; You decided against queue cards because it’s so much cooler to have memorized your presentation.&amp;#160; There’s some manner of slide deck being displayed behind you.&amp;#160; You start talking.&amp;#160; Things are going according to plan. You’re in control. Awesome.&amp;#160; Slide 2. You elegantly convey all you desire. Slide 3-5. People are interested.&amp;#160; The time comes to sell your product, your business plan. A couple people giggle- that subtle joke must have worked!&amp;#160; You catch a glance at your slide, its concise and critical title: Business Plam.&lt;/p&gt;  &lt;p&gt;Feeling a little silly, your train of thought is jarred.&amp;#160; What was that point you were going to make? Crap, this isn’t going according to plan… you’re not in control any more. And now you’re uncomfortable. And your voice just cracked. And you stuttered. Crap.&lt;/p&gt;  &lt;p&gt;There are two perspectives during a crappy presentation, the audience and the presenter. In a good presentation, there should only be one.&amp;#160; Let’s talk about control.&lt;/p&gt;  &lt;p&gt;Of my hundreds of occasions speaking to a crowd, I have had perhaps 4 instances of everything going according to plan.&amp;#160; More frequently, things went according to plam.&amp;#160; For me, planning to be in control is a fallacy. There are people who excel at controlling a crowd, people who move with measured step and speak with graceful tongue, and these people I highly respect.&amp;#160; These people, to me, are actors. They are thespians.&amp;#160; Despite my occasional aspirations, I am not a thespian, and neither are the vast majority of presenters who I have witnessed.&amp;#160; Thespians can stay in control. I, and most likely, you, cannot.&lt;/p&gt;  &lt;p&gt;During a good presentation, there is one perspective.&lt;/p&gt;  &lt;p&gt;In the theatre, the perspective is that of the presenter.&amp;#160; You’re drawn into their world, their mind, and you and them become one.&amp;#160; Your thoughts are slave to the speaker, and you are in their control.&amp;#160; This works beautifully, but is hard to pull off.&amp;#160; Theatricality is a wonderful aspect of any presentation, but so is not sucking.&lt;/p&gt;  &lt;p&gt;Another perspective can be that of the audience.&amp;#160; That person behind the podium? They’re just a marionette, and you’ve got a front-row seat with popcorn, a noisy neighbor, a fat guy pressed against you, and a set of strings.&amp;#160; Be your own audience, and make yourself laugh. Make yourself smile.&amp;#160; You don’t need to sell other people your ideas, you just need to sell them to yourself.&amp;#160; Hey look, the marionette misspelled ‘plan’'- what dance can we make it do to most please the audience? Pull the strings and reenact Barack- he could make it work, so your puppet can too.&amp;#160; This is easier.&lt;/p&gt;  &lt;p&gt;I had a high school friend named Asael, or ‘Ace’.&amp;#160; He was in most of my presentation-heavy classes, and our approaches contrasted heavily.&lt;/p&gt;  &lt;p&gt;I always had a plan. I had many plans. I knew how I wanted my presentations to work, and I knew that they could work beautifully. And every time I was in less than complete control, they didn’t.&amp;#160; I wanted to be a thespian, but I wasn’t good enough.&lt;/p&gt;  &lt;p&gt;Ace was less formal.&amp;#160; His speeches were given with great comedic enthusiasm, and he was quick to laugh at whatever blunders might occur.&amp;#160; All things came in stride, and all things remained fluid.&lt;/p&gt;  &lt;p&gt;My best presentations were better than his, but not by much. My presentation quality, however, varied wildly, and my worst presentations were useless.&amp;#160; His presentations didn’t vary much- If my presentations varied from 0’s to 10’s, he was pretty consistently hitting 8’s.&lt;/p&gt;  &lt;p&gt;He taught me that, while control can be powerful, it’s most important to merely be able to laugh at yourself.&amp;#160; If you can do that, then your plams will come to fruition.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-402261096692264976?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/402261096692264976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=402261096692264976' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/402261096692264976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/402261096692264976'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2009/03/business-plam.html' title='The Business Plam'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-2106091299727345529</id><published>2009-03-30T15:02:00.001-07:00</published><updated>2010-01-31T18:37:02.222-08:00</updated><title type='text'>I’m a Deserter of the Holy Wars</title><content type='html'>&lt;span xmlns="xmlns"&gt;   &lt;p&gt;No, not the Crusades. &lt;/p&gt;    &lt;h2&gt;Part 1: Suspicion and Allegiances&lt;/h2&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;blockquote&gt;     &lt;p&gt;&amp;quot;You know computers, right?&amp;quot; &lt;/p&gt;      &lt;p&gt;&amp;quot;Yeah?&amp;quot; &lt;/p&gt;      &lt;p&gt;&amp;quot;Tell me something: What's &lt;strong&gt;&lt;em&gt;wrong&lt;/em&gt;&lt;/strong&gt; with Windows Vista?&amp;quot; &lt;/p&gt;      &lt;p&gt;“uh… Well, when it was released it didn't have sufficient driver support, and this caused many unhappy compatibility issues. But really, that was to be expected- the same thing happened with XP when it was first released. Otherwise, I'd argue that Vista is better than XP in just about every way.&amp;quot; &lt;/p&gt;      &lt;p&gt;&amp;quot;I have Vista on my computer, and I hate it. I took a class about computers and the guy kept talking about all this advanced stuff and I couldn't understand him. He kept talking about folders! &lt;em&gt;&lt;strong&gt;What's a Folder?!&lt;/strong&gt;&amp;quot; &lt;/em&gt;&lt;/p&gt;   &lt;/blockquote&gt;    &lt;p&gt;At this point I came to realize that her complaints really had nothing to do with Vista, it was just the name that she came to associate with everything that embodied her computer. Google is Vista, for her. She couldn't care less what a driver is, and in fact she'd probably be much happier not knowing. &lt;/p&gt;    &lt;p&gt;Microsoft has fought a long and bloody battle to get people to associate computers with Windows, and Windows unlocking all of the great things that a computer can do. Apple is fighting a similar battle. I suspect that many of the people most affected by these campaigns are the people least capable of understanding the consequences of their brand choices. &lt;/p&gt;    &lt;h4&gt;I hypothesize that branding is a particularly convincing draft officer in the recruiting office for the operating system holy wars.&lt;/h4&gt;    &lt;p&gt;Consider the newb, eager and experimental. They are easily frustrated when software products fail to meet their mental models, and are frequently frustrated because their mental models of computer software are largely incorrect. They generate statements such as &amp;quot;I love/hate _____ because it sucks/rocks.&amp;quot; Seeking affirmation, they google these phrases and find a community of users who have similar sentiments. They also find in this community the tech-savvy members who state more reasons why their opinion is correct. They find their appropriate cult, and their biases are formed. They even preach the gospel which they don't quite understand, &amp;quot;I hate Windows because it doesn't support virtual desktops!&amp;quot;, and gradually gain the approval of their cult's luminaries. &lt;/p&gt;    &lt;p&gt;A power user is merely a newb matured. Some are agnostic, some are atheist, but many are devout. They have reasons for their choices, but many fall victim to their religious doctrines. &lt;/p&gt;    &lt;p&gt;Branding is powerful, any marketing person will agree. I have many brand preferences, and I have many brand insistences. It's easy to keep me completely satisfied with Dial Soap, but software products… not so much.&lt;span style="font-family: arial; font-size: 10pt"&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&amp;#160;&lt;/p&gt;    &lt;h2&gt;Part 2: Fear and Loathing      &lt;br /&gt;&lt;/h2&gt;    &lt;p&gt;Visual Studio and Eclipse are both awesome, as are Vim and Emacs.      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;Every programming language sucks, including yours, but the essence is becoming ever more approachable.      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;Every operating system sucks, but they're getting damn cool.      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;I would be afraid to work directly for Microsoft, and more afraid to work directly for Google.      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;Microsoft is interesting to me because of how big, old, and stereotyped it has become.&amp;#160; I view Microsoft kind of like I view the United States of America: &lt;/p&gt;    &lt;p&gt;Overall, it has drastically improved my life, and there are many aspects of it which are absolutely fantastic. Many excellent people are associated with it, and it does many remarkable things which I would love to be involved in. It's also very, very big. It's so big, in fact, that bad people have snuck in. It's so big that it occasionally has to make decisions to which there is no answer which won't heartily displease many masses of people. It has its own culture, its own history, and its own unique way of existing in the world. &lt;/p&gt;    &lt;p&gt;I would be afraid to work for Microsoft because I would be unable to defend it. I could not proudly state that I work for them without fear of rebuke, even though I would personally be delighted by the fact. I'm an engineer, and dreadfully afraid of attack dogs.&lt;span style="font-family: comic sans ms; color: white"&gt; &lt;/span&gt;&lt;/p&gt;    &lt;p&gt; I would be afraid to work for Google because of its culture. Google: You are brilliant, and I like you, but I don't want to hang out with you because you pick on the big smelly kid, Mic. I agree that Mic is smelly, but I don't think it's very nice of you to pick on him. I've attended at least a half-dozen of your technical talks / recruiting sessions, and you always bring up the fact that he is smelly. There is a yak growing in your eye. &lt;/p&gt; &lt;/span&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-2106091299727345529?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/2106091299727345529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=2106091299727345529' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/2106091299727345529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/2106091299727345529'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2009/03/im-deserter-of-holy-wars.html' title='I’m a Deserter of the Holy Wars'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-5497074879680389808</id><published>2009-03-10T00:03:00.001-07:00</published><updated>2009-03-10T00:03:13.494-07:00</updated><title type='text'>iGoogle:   What The Hell?</title><content type='html'>&lt;p&gt; Today, I find this in my iGoogle page:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_SEDq2OI8nrk/SbYQnlYRmQI/AAAAAAAAFKU/qojc7GU-grA/s1600-h/Capture1%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Capture1" border="0" alt="Capture1" src="http://lh6.ggpht.com/_SEDq2OI8nrk/SbYQqObjnnI/AAAAAAAAFKY/x8id_W4bUJY/Capture1_thumb%5B1%5D.png?imgmax=800" width="403" height="615" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;A brand new chat interface which proudly announces to me that it doesn’t work.&amp;#160;&amp;#160; The minimize button by it?&amp;#160; No, that doesn’t minimize the text.&amp;#160;&amp;#160; Maybe I can turn it off in settings…&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_SEDq2OI8nrk/SbYQq00tVjI/AAAAAAAAFKc/5AMhbRPxZgs/s1600-h/Capture%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Capture" border="0" alt="Capture" src="http://lh4.ggpht.com/_SEDq2OI8nrk/SbYQsLX9_9I/AAAAAAAAFKg/5aaIY8W5KBk/Capture_thumb%5B1%5D.png?imgmax=800" width="418" height="375" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;There.&amp;#160; There is the toggle.&amp;#160; Holy Crap Google, that is the most disgusting toggle UI that I have ever seen. Please tell me, is it standard convention for the bottom item to correspond with the left button, or the right button?&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Google… WHAT?!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-5497074879680389808?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/5497074879680389808/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=5497074879680389808' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/5497074879680389808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/5497074879680389808'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2009/03/igoogle-what-hell.html' title='iGoogle:   What The Hell?'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_SEDq2OI8nrk/SbYQqObjnnI/AAAAAAAAFKY/x8id_W4bUJY/s72-c/Capture1_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-17763270606328806</id><published>2009-01-24T13:40:00.001-08:00</published><updated>2009-01-24T14:07:35.494-08:00</updated><title type='text'>Windows 7 Beta</title><content type='html'>&lt;p&gt;I’ve been using W7 as my core OS for about a week now.&lt;/p&gt;  &lt;p&gt;Some highlights:&lt;/p&gt;  &lt;h4&gt;1. Redesigned Core Applications:&lt;/h4&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#cceedd"&gt;Wordpad, Calculator, Paint, Minesweeper, etc., have all been updated.&amp;#160; I find this delightful, especially the Programmer’s Calculator:&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_SEDq2OI8nrk/SXuKljs389I/AAAAAAAAFJA/v-4Bmdu2YMQ/s1600-h/image%5B5%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_SEDq2OI8nrk/SXuKmvyO6TI/AAAAAAAAFJE/tpKuOQuRdcg/image_thumb%5B1%5D.png?imgmax=800" width="244" height="222" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;h4&gt;2. New core applications: &lt;/h4&gt;  &lt;p&gt;(some of these require downloads, others are already available in vista.) &lt;/p&gt;  &lt;p&gt;These include sticky notes, DVD Creator (which is quite wonderful), and (my favorite) the math input panel.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Step 1:&lt;/p&gt;    &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_SEDq2OI8nrk/SXuKn0WwcfI/AAAAAAAAFJI/ghOX4NUNN-4/s1600-h/image%5B8%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_SEDq2OI8nrk/SXuKoYN2wLI/AAAAAAAAFJM/y4vgsAjaIrw/image_thumb%5B2%5D.png?imgmax=800" width="244" height="107" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;Step 2:&lt;/p&gt;    &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_SEDq2OI8nrk/SXuKp3KENRI/AAAAAAAAFJQ/JGnWw9YLJHo/s1600-h/image%5B14%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_SEDq2OI8nrk/SXuKqawL3QI/AAAAAAAAFJU/bqIQXg5CFcA/image_thumb%5B4%5D.png?imgmax=800" width="244" height="105" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;Step 3:&lt;/p&gt;    &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_SEDq2OI8nrk/SXuKruOE2GI/AAAAAAAAFJY/Zr8VvvYZf9A/s1600-h/image%5B20%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_SEDq2OI8nrk/SXuKtQBAdxI/AAAAAAAAFJg/DRuSY_tPDjY/image_thumb%5B6%5D.png?imgmax=800" width="244" height="166" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h4&gt;3. Gui and navigation enhancements:&lt;/h4&gt;  &lt;p&gt;&lt;a href="http://www.teknobites.com/2009/01/16/windows-7-keyboard-shortcuts/"&gt;Keyboard shortcuts&lt;/a&gt; are a big deal, as are the lack of security notifications.&amp;#160; There’s too much for me to tackle writing about, but there’s still no virtual desktops.&amp;#160; The new taskbar interface keeps things clean, and the library system makes indexing work better.&amp;#160; Full screen previews of minimized items- very good.&amp;#160; Here’s a substantial statement:&lt;/p&gt;  &lt;p&gt;It’s snappy, clean, and FAST.&amp;#160; &lt;/p&gt;  &lt;h4&gt;4. Compatibility wizard&lt;/h4&gt;  &lt;p&gt;&lt;font color="#cceedd"&gt;Remember the compatibility settings which could be set for programs that didn’t quite work right?&amp;#160; It’s a wizard now, and it has a decent success rate.&amp;#160; This means a lot to me, as I frequently install antiquated games.&lt;/font&gt;&lt;/p&gt;  &lt;h4&gt;5. Bootup time:&lt;/h4&gt;  &lt;p&gt;&lt;font color="#cceedd"&gt;Fastest yet, relative to hardware trends.&lt;/font&gt;&lt;/p&gt;  &lt;h4&gt;6. Performance:&lt;/h4&gt;  &lt;p&gt;Completely owns Vista.&lt;/p&gt;  &lt;h4&gt;Beta Issues:&lt;/h4&gt;  &lt;p&gt;Sleep, though overhauled and seeming to work better, doesn’t always properly awaken my SATA hard drive.&amp;#160; A cold boot is necessary to recover from this.&amp;#160; Also, MSN/Live Messenger spams me when I remove cd’s from my cd drive, but messenger has always had some amount of stupidity attached to it, so this isn’t really new.&amp;#160; Aside from those issues, the beta is wonderfully stable. All my drivers and software work just fine.&lt;/p&gt;  &lt;p&gt;The only bluescreens I've encountered have resulted from trying experimental WDM drivers.&lt;/p&gt;  &lt;h4&gt;&lt;strong&gt;I encourage all Vista users to upgrade to W7Beta before they stop offering new keys. &lt;/strong&gt;&lt;/h4&gt;  &lt;p&gt;&lt;strong&gt;&lt;a title="http://www.microsoft.com/windows/windows-7/beta-download.aspx" href="http://www.microsoft.com/windows/windows-7/beta-download.aspx"&gt;http://www.microsoft.com/windows/windows-7/beta-download.aspx&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;P.S.&amp;#160; Do read the release notes.&amp;#160; There’s a trivially correctable bug related to playing music with WMP which can damage your files.&amp;#160; Fix that.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-17763270606328806?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/17763270606328806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=17763270606328806' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/17763270606328806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/17763270606328806'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2009/01/windows-7-beta.html' title='Windows 7 Beta'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_SEDq2OI8nrk/SXuKmvyO6TI/AAAAAAAAFJE/tpKuOQuRdcg/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-2871721208486948113</id><published>2008-10-22T23:51:00.001-07:00</published><updated>2008-11-04T11:02:32.467-08:00</updated><title type='text'>FogBugz + iGoogle = Win</title><content type='html'>&lt;span xmlns=""&gt; &lt;p&gt;I use the free student edition of FogBugz to manage my relatively busy schedule. It's pretty damn useful.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;If you want one, just go to FogBugz.com and create a trial account. Once you're in the trial, go here:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img style="WIDTH: 391px; HEIGHT: 405px" alt="" src="http://i424.photobucket.com/albums/pp324/blinkymach12/102308_0651_FogBugziGoo1.png" width="468" height="419" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I also use the iGoogle homepage to keep track of the assorted events that are of interest to me.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://i424.photobucket.com/albums/pp324/blinkymach12/102308_0651_FogBugziGoo2.png" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Until today, my 'homepage' has been set to a two-tab collection: iGoogle, and FogBugz.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;But wait! iGoogle has tabs, and can embed RSS feeds! &lt;strong&gt;&lt;em&gt;Saved filters in FogBugz can be viewed as RSS Feeds!&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;This enables the following:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;1. My most important filters can live on my homepage!&lt;br /&gt;&lt;img alt="" src="http://i424.photobucket.com/albums/pp324/blinkymach12/102308_0651_FogBugziGoo3.png" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;2. I can have a FogBugz tab which can show me samples of the 9 top items from every filter that I care about(and also provide me with a quick link to FogBugz):&lt;br /&gt;&lt;img alt="" src="http://i424.photobucket.com/albums/pp324/blinkymach12/102308_0651_FogBugziGoo4.png" /&gt;&lt;br /&gt;3. I can enter a detailed view of a given filter, thus gaining a complete view:&lt;br /&gt;(…And I can click on the listed items in order to directly open them in FogBugz!)&lt;br /&gt;&lt;img alt="" src="http://i424.photobucket.com/albums/pp324/blinkymach12/102308_0651_FogBugziGoo5.png" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Sweet.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-2871721208486948113?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/2871721208486948113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=2871721208486948113' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/2871721208486948113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/2871721208486948113'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2008/10/fogbugz-igoogle-win.html' title='FogBugz + iGoogle = Win'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-1928089813871853800</id><published>2008-08-13T17:45:00.001-07:00</published><updated>2008-08-13T17:48:13.278-07:00</updated><title type='text'>Wasting Humanity’s Time</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;I commute to and from the Fog Creek office via the New York City Subway.  It has all of the perks and quirks that you might expect of a massive underground train system.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;On my way home today, a women outside of the train blocked the almost-closed doors with her foot and pried her way into the car.  This is not normally a remarkable thing- It's abnormal for such happenings to not occur during a subway excursion.  What is remarkable, at least from my perspective, is that I had a stopwatch in my hand as this happened, and I now know that she is personally responsible for stalling the train by 22 seconds.  Of course, it's possible that there were other people simultaneously blocking other doors, so it's feasible that not all of the time was lost due to her, but for sake of calculation let's make that assumption anyway.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I did a headcount of the people in my car.  About 90.  There were 7 cars, and it's fair to assume that the population was evenly distributed.  About 630 people.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;630 people * 22 seconds =  13860 peopleseconds = 231 peopleminutes = 3.85 peoplehours.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;If she were to miss the train, presuming the door was not otherwise blocked, the next train would have arrived in &amp;lt; 10 minutes, and she could have entered the train at no additional peopletime cost except for her own.  Missing the train would have been over 23 times more efficient for humanity.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;As it turns out, every second of subway stall (at 630 people / train), costs humanity 10.5 peopleminutes.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Call it 10.  Rush hour is worse by a factor of 4 or so, late night is better. Etc.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;In terms of humanity's efficiency, stalling a subway train for 1 second is worse than letting it proceed.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;I share the guilt of stalling trains.  I've had a door try to close on me before.  I've stood in the doorway while a crowd has passed through.&lt;br/&gt;I resolve to do those things no more.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;[Television campaign against stalling:]&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;When you stall public transportation, you stall America.&lt;br/&gt;You know who else stalls America? Terrorists.&lt;br/&gt;Why do you hate freedom?&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-1928089813871853800?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/1928089813871853800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=1928089813871853800' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/1928089813871853800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/1928089813871853800'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2008/08/wasting-humanitys-time.html' title='Wasting Humanity’s Time'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-4692335577559455877</id><published>2008-07-15T09:06:00.000-07:00</published><updated>2008-11-04T11:08:28.302-08:00</updated><title type='text'>C# String versus StringBuilder</title><content type='html'>&lt;span xmlns=""&gt; &lt;p&gt;When constructing strings in C#, I'd been in the habit of just appending data willy-nilly. I've known this was a bad habit, but I didn't think it mattered much.&lt;br /&gt;&lt;br /&gt;For instance, I might write code like:&lt;br /&gt;&lt;br /&gt;string s = "";&lt;br /&gt;for (var ix = 0; ix &amp;lt; 100000; ix++)&lt;br /&gt;{&lt;br /&gt;s += ix.ToString();&lt;br /&gt;}&lt;br /&gt;out(s);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This is rather stupid code, but for the sake of argument, that is the way I would normally go about that. The problem with this? C# strings are immutable: every time this happens, a new string object is created based on the combination of 's' and 'ix'.&lt;br /&gt;&lt;br /&gt;C# also has a StringBuilder class. I don't know exactly how it works, but I imagine it's some sort of linked list. It is better. I've known that it is better. It involves more typing, so I have not been using it. That same code with a StringBuilder might look like this:&lt;br /&gt;&lt;br /&gt;StringBuilder sb = new StringBuilder();&lt;br /&gt;for (var ix = 0; ix &amp;lt; 100000; ix++)&lt;br /&gt;{&lt;br /&gt;sb.Append(ix.ToString());&lt;br /&gt;}&lt;br /&gt;out(sb.ToString());&lt;br /&gt;&lt;br /&gt;More typing, Right? Thus, I don't want to use that.&lt;br /&gt;&lt;br /&gt;Well.. let's actually run this code, with with a cap varying from 100 to 10,000,000&lt;br /&gt;(at 100,000,000, I run out of ram.)&lt;br /&gt;&lt;br /&gt;First the StringBuilder.&lt;br /&gt;cap: 100&lt;br /&gt;done sb: 0s&lt;br /&gt;cap: 1,000&lt;br /&gt;done sb: 0s&lt;br /&gt;cap: 10,000&lt;br /&gt;done sb: 0s&lt;br /&gt;cap: 100,000&lt;br /&gt;done sb: 0.0159243s&lt;br /&gt;cap: 1,000,000&lt;br /&gt;done sb: 0.1910916s&lt;br /&gt;cap: 10,000,000&lt;br /&gt;done sb: 2.0064618s&lt;br /&gt;&lt;br /&gt;cool.&lt;br /&gt;now the string:&lt;br /&gt;&lt;br /&gt;cap: 100&lt;br /&gt;done s: 0s&lt;br /&gt;cap: 1,000&lt;br /&gt;done s: 0.0159243s&lt;br /&gt;cap: 10,000&lt;br /&gt;done s: 0.1114701s&lt;br /&gt;cap: 100,000&lt;br /&gt;- 2+ minutes, unfinished. terminating.-&lt;br /&gt;&lt;br /&gt;Hey look, the StringBuilder is drastically faster for large operations. Who would have thought? (that was sarcasm)&lt;br /&gt;&lt;br /&gt;So:&lt;br /&gt;In all honesty, for operations under 100 appends, I'm likely to continue just using strings. It is less code, and won't matter. Period.&lt;br /&gt;Better practice: Always use the StringBuilder.&lt;br /&gt;Why I don't? Because "sb += s" is not valid.&lt;br /&gt;&lt;span style="TEXT-DECORATION: line-through"&gt;Solution? If using .Net 3.5, just append the += method to the StringBuilder class, and have it call Append(value).&lt;/span&gt; (It turns out this solution isn't possible: C# extension methods do not permit operator overloading.)&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-4692335577559455877?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/4692335577559455877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=4692335577559455877' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/4692335577559455877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/4692335577559455877'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2008/07/c-string-versus-stringbuilder.html' title='C# String versus StringBuilder'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-6910298810752122651</id><published>2008-06-18T12:58:00.000-07:00</published><updated>2008-06-18T13:05:21.614-07:00</updated><title type='text'>Game Development and Polish</title><content type='html'>First, read: http://www.joelonsoftware.com/articles/fog0000000356.html&lt;br /&gt;&lt;br /&gt;Reflecting on this, I'm fairly certain that these dynamics account for the entirety of game development culture up until the moment that the game is being played.  If you're watching someone playing the game, I suspect that these elements are still what dominate- you have to play yourself before you can get past them.&lt;br /&gt;&lt;br /&gt;I've been considering the assorted games that have been produced by the CU Game Developer's Club, and I realize that the games which have most followed these rules have also received the most praise from our club.&lt;br /&gt;&lt;br /&gt;I've considered the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;ImagineCup&lt;/span&gt; entries, both in game development and software design, for 2008, and the winning entries are those which obeyed this.&lt;br /&gt;&lt;br /&gt;CU Senior Projects obey this.&lt;br /&gt;&lt;br /&gt;Grants submitted to the Engineering Excellence Fund obey this.&lt;br /&gt;&lt;br /&gt;Presentation is everything, and I generally hate it.  It means that if i were a graphic designer, I could make people like my software more than I can as a computer scientist.  So what if it doesn't work- it'll be pretty.  So what if mine works- it's not pretty.  &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Hmm&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;An excellent partial solution to this is outlined in this short &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;ebook&lt;/span&gt;:&lt;br /&gt;http://www.joelonsoftware.com/uibook/chapters/fog0000000057.html&lt;br /&gt;(yes, also Joel on Software...)&lt;br /&gt;&lt;br /&gt;Read this, and ponder.  I believe that the production value of any independent programmer would more than double if they can adhere to these principles.&lt;br /&gt;&lt;br /&gt;- Jude&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-6910298810752122651?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/6910298810752122651/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=6910298810752122651' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/6910298810752122651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/6910298810752122651'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2008/06/game-development-and-polish.html' title='Game Development and Polish'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-3829193116431340798</id><published>2008-03-13T17:39:00.001-07:00</published><updated>2008-08-13T17:56:20.917-07:00</updated><title type='text'>Sugar</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;For the last week or so, I've been passively pondering sugar content.  Actually, it started when Stirling ate a heaping tablespoon of brown sugar.  My initial reaction was to think that she was insane, but after a few seconds of reflection, I realized that I had no idea how much sugar that was.  I still didn't want any, but it hit me that, in commercial goods, I know about sugar quantities in terms of grams.  In cooking, I know about sugar quantities in terms of volume.  And so, I've sought to resolve this mental disparity...&lt;br /&gt;&lt;/p&gt;&lt;p&gt;As it turns out, based on internet research,&lt;br /&gt;a cup of sugar weighs about 200 grams.  (generalizing here... we're probably talking about sucrose.  Think refined white sugar.  Cane sugar, unrefined sugar, etc., would naturally weigh a little bit more.)&lt;br /&gt;I visualize volume easiest in tablespoons, and there are 16 tablespoons in a cup, so that means that a tablespoon of sugar weighs approximately 12.5 grams.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Wait a minute... 12.5 grams?&lt;br /&gt;There must be something wrong here- I mean, sugar is so sweet, there can't be more than like a half-tablespoon of sugar in a soda.&lt;br /&gt;Checking math...&lt;br /&gt;Checking sources...&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Indeed, it seems that a tablespoon of sugar weighs only 12.5 grams.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;...&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Holy shit.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I had thought Stirling unwise to eat a tablespoon of sugar, but that was only ~12.5 grams of sugar.&lt;br /&gt;The average canned soft drink contains between 30 and 50 grams of sugar...&lt;br /&gt;Her spoonful of sugar is only as sugary as about 1/3 of a can of Coca Cola.&lt;br /&gt;Her sugary snack now seems remarkably acceptable, as much so as, conversely, soft drinks have become remarkably un-.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;For the past few years, I've sought to limit my (non-fructose) sugar intake, as it generally serves no beneficial purpose and is largely unnecessary except for as a "treat."  It hits me hard, now, that I'm quite a hypocrite-- I'd assumed there'd be no more than perhaps a half-tablespoon of sugar in a common soft drink, and further that that was a lot of sugar.  In actuality, nearly a fourth of the volume in most commercial beverages is sugar (often in the form of HFCS). &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Stirling, it would appear that you are wiser than I had imagined.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Mentality shift:&lt;br /&gt;- 1. Soda, soft drinks, etc., suck far more than I had previously imagined.&lt;br /&gt;- 2. I can use more sugar in cooking.  If I were to increase my cooking-sugar usage by 10-fold, and stop consuming soft-drinks and sugary juices, my sugar intake would still drop by more than half.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Iced herbal teas, FTW.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;p.s.,&lt;br /&gt;A handy web-based visualization is located here:&lt;br /&gt;&lt;a href="http://education.wichita.edu/caduceus/examples/soda/soda_index.html"&gt;http://education.wichita.edu/caduceus/examples/soda/soda_index.html&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-3829193116431340798?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/3829193116431340798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=3829193116431340798' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/3829193116431340798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/3829193116431340798'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2008/03/sugar.html' title='Sugar'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-2361752459426243311</id><published>2008-01-27T12:46:00.001-08:00</published><updated>2008-01-27T12:48:00.755-08:00</updated><title type='text'>Vegan Thoughts</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Via &lt;a href='http://www.xanga.com/the_failing_light/638547200/vegan-for-a-week.html'&gt;http://www.xanga.com/the_failing_light/638547200/vegan-for-a-week.html&lt;/a&gt;, I spent a week attempting a vegan diet + seafood.  The purpose of the experiment was to see if I could live as a vegan without significantly altering my lifestyle.  My reflections follow.&lt;br/&gt;&lt;br/&gt;As for staying true to veganism, I was unsuccessful:  I ate a little cheddar cheese on 1/25, and the milk tea I drank on 1/23 might have had milk in it.  &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Anecdotally speaking, I feel great.  Excess energy, waking up earlier, strong…  None of this is reliable, as it's feasible to be a placebo effect.  Regardless, avoiding meat and dairy seems to be, imho, quite beneficial.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I found that I could indeed become vegan without much of a lifestyle change.  The core to it was simply being mindful of what I eat, which is something I should be doing anyway.  By choosing vegan alternatives, I found that my lifestyle was largely unchanged.  Simple vegan cooking is extremely easy: use soy milk as a milk substitute where necessary, and otherwise don't cook with animal products.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;College restaurants are actually pretty easy to find vegan food at.  This is because most of their foods are extremely simple.  Pick and choose the ones without animal products, and you're in the clear.  It's very easy to be vegetarian at these restaurants, and jumping to veganism just requires a mild awareness of dairy.  I was able to have this awareness relatively easily, as I habitually analyze foods for their ingredients so that I can later cook them myself if I so desire.  Non-cooks might find this a tad bit more challenging.  Beware breads- many contain dairy.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Traditional restaurants are a bit harder.  As most menu items are significantly more complex, and many recipes vary due to the chef's preference, it can be quite hard to pick out the vegan dishes.  In many cases, I'm unsure that such dishes exist.  During my week, I scoped out many restaurants, and I decided against most of them because I would've had to ask questions and probably make special requests in order to receive a vegan dish.  This is problematic, as restaurant dining is a very social activity, and I don't wish to be barred from that.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Another problem is that, should I eat at someone else's house, they would have to make special preparations for me.  I find that unacceptable, and it lead to 1/25 cheese.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;I've decided that I'm no longer going to adhere to veganism.  My desire for clear boundaries won't work in this case, as I'll have to either behave in a way I deem inappropriate or void said boundaries on various occasions.  This experiment has strengthened my food-conscious brain, and I realize that I would be extremely happy to prepare only vegan dishes via my own cooking.  I intend to loosely adhere to that, purely for the reason that I find it immensely enjoyable.  Further, though I will not be a strict vegan, I will consciously minimize non-vegan dietary intakes.  I seem to have lost most of my appetite for beef, pork, and milk.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;This was a fun experiment.  I encourage you to try it if you are at all interested in feeling awesome.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-2361752459426243311?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/2361752459426243311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=2361752459426243311' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/2361752459426243311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/2361752459426243311'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2008/01/vegan-thoughts.html' title='Vegan Thoughts'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-1401720416890822513</id><published>2008-01-23T17:23:00.001-08:00</published><updated>2008-01-23T17:23:01.558-08:00</updated><title type='text'>Epiphany</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Use Machine Learning algorithms to create Boom Boom Rocket style (aka guitar hero/ddr, but better) music and rhythm games from arbitrary songs!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;How:&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Create a program which plays songs.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Create a program which timestamps keypresses on 360 controller as the song is played&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Modify 2 to be additive, such that we can create complex songs.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Enjoy said song, and then feed the keypress style along with the wave form to a ML Algorithm. Repeat.&lt;br /&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Alternatively, gain access to Guitar Hero database and use their songs for algorithm training.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Reinforce the algorithm by giving it positive/negative feedback when it produces output&lt;br /&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Quantize the feedback to sections of the song – (this was great, but that sucked.)&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Result:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The Best Music and Rhythm Game, of that style, EVER.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This post copyright 1/23/2008 6:21pm MST Jude Allred of Boulder, Colorado.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;*excited*&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-1401720416890822513?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/1401720416890822513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=1401720416890822513' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/1401720416890822513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/1401720416890822513'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2008/01/epiphany.html' title='Epiphany'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-7618731046859472784</id><published>2007-12-21T00:51:00.001-08:00</published><updated>2007-12-21T01:00:51.573-08:00</updated><title type='text'>Leadership Speculations for CU Game Developer’s Club</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;I've been the president of CU GameDev for about a year, and administratively involved in the club for much longer. Running GameDev well is a tricky thing- it seems that we've always had some sort of negative factor to overcome. What follows are my reflections on club leadership and direction.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Past Leaders, strengths, and difficulties:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Under Eric Faller, the club was very production-driven. Meeting content consisted of demos and tutorials, with assorted incentives offered to attempt to drive participation. I've heard little positive things about this style of meeting, but I think that there was some merit to them. Specifically, anyone who was already sufficiently interested in the game development process was heavily supported. From what I've heard, there were perhaps four people in that category.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Under Cami, the club embraced socialization, game design, discussions, and content. I felt that the club was quite strong under her leadership… for about 6 months. All of her ideas required one key thing: content. Someone had to be working behind the scenes to be creating specific content for the club. Even if the content falls to sources such as guest speakers, team activities, etc., it still falls to someone to function administratively. One person can do that with relative effectiveness for short periods of time, but they burn out quickly. Cami noticed that, and recruited officers. The officers functioned as content providers, but at a slower pace than Cami previously was, since the workload could be distributed. But then the officers started getting burned out. And then the club passed to me…&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Final officer burnout occurred under my leadership. I'm certain that I hastened the process, for I don't have as eloquent of a leadership touch as Cami. As matters stand, the officers are no longer active participants in the workings of the club. This was not an intention of mine, but I'm certain that it is a result of my guidance: As their enthusiasm faded, I found that I could depend on them less. Realizing that, I found that meetings were becoming less and less useful, and so I stopped holding them regularly. Planned content, then, is now squarely on my shoulders, with occasional (and invaluable) help from my vice president Namaste. There is other content—members still step forward desiring to present things. Luke is an occasional source of excellent content, as is Ben. One change under my leadership, - a positive thing! – is that the club now has ample funding. Any funded event we'd like to do… we can do.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Where this leaves us:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I see lots of positive things that can be done. Officers can be re-involved. Solicitations can be made. More speakers can be brought in. However, there's a fundamental problem with all of the solutions and improvements that we've tried and considered: Someone has to put in time to make them happen. It's reasonable to demand time of the President and VP, but only to an extent – demand too much, and the quality plummets, and then nobody is happy. Is it reasonable to demand time of the officers? Given their present formulation, I don't believe so, but I'd like for it to be the case.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;One thought I'd pondered for a while was that "we're a game developer's club- we don't need to cater to the non-game developers among us." This is in stark contrast to Cami's method of running the club. This was originally a thought of Namaste's, and it had grown on me because it implicitly solves a lot of GameDev's problems: "We're game developers, so lets cater to us. They're not, screw them." This philosophy is bad, and is wrong. This philosophy, without tons of content to support it, would destroy GameDev, and has already caused great damage.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;To illustrate why, consider this: What is the greatest potential strength of CU GameDev?&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I would argue that its greatest potential lies in having&lt;br/&gt;1. A large member base&lt;br/&gt;2. Support for aspiring game-makers&lt;br/&gt;3. Feedback and user-base for student game developers&lt;br /&gt;&lt;/p&gt;&lt;p&gt;All three are heavily interconnected, and I deem them high-priority because:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;A large member base / meeting attendance is necessary to provide our game creators with an audience. Bigger audience means more people to evaluate the games that we make, more suggestions, and more resources. Further, the more people that think your game kicks ass, the better you're going to feel about it.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Supporting aspiring game developers will cause there to be more game developers in our club. We have the support part down, but not the aspiring game maker part. I'm fairly certain that all of our current members who are interested in developing games are already familiar with the necessary tools. The people who aren't able to develop games probably don't want to in the first place- otherwise they'd have taken advantage of our tutorial sessions. For us to spawn new game developers, we need to reach them. Therefore, we need to grow our member base.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;For the game developers among us, the thing that most of us want is an audience. We want play testers. We want help improving our games, and we want warm fuzzy feelings when we show off our games.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I don't believe that any of this(2 or 3, I mean) will happen if our member base is small. We, as game developers, are not and cannot function well as lone gunmen. Those of us who feel otherwise probably wouldn't be attending GameDev anyway, no matter how game-developer-centered GameDev became.&lt;br /&gt;&lt;/p&gt;&lt;p&gt; &lt;br /&gt; &lt;/p&gt;&lt;p&gt;And so, how do we increase attendance without heavy time commitment and while maintaining strength in game development?&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Well… Have more social events. We grow a community; we'll grow a member base. But we already know that a socially-centered club is not what we want. Therefore, I propose incorporating social events into general meetings. Meetings begin with serious game-dev stuff. Demos, presentations when available, discussions, etc. Keep this as brief as possible. No superfluous content- and never content for the sake of content.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Additionally, have more events to appeal to the college. Host poker tournaments and advertise to engineering. Host massive werewolf games. When we do tutorials, advertise them heavily- fliers, etc. visibility is key. We can't expect membership to improve if we only advertise to our current members.&lt;br /&gt;&lt;/p&gt;&lt;p&gt; &lt;br /&gt; &lt;/p&gt;&lt;p&gt;In conclusion,&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The things I feel to be key to GameDev's success are:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Low maintenance meetings&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Large member-base&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Steady influx of new members&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Heavy support for and encouragement of game developers and game development&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Not alienating anyone&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;And methods of attaining this are:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Strong socialization-base in meetings, with structure (as opposed to "ok, go play games now.")&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Improved visibility&lt;br /&gt;&lt;/li&gt;&lt;li&gt;More dedicated social events&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Some things I'd like to try are:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Engineering Werewolf Night, more Assassin games, etc.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Meeting structure: Introduce a game and spend the night playing it, instructing people to reflect on it as they play. Next meeting content, discuss the game.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Bring back consoles. Offer incentives to console-bringers?&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;br /&gt; &lt;/p&gt;&lt;p&gt;Please let me know if you have any ideas on further improvements we could make, or fun things we could host.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;- Jude&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-7618731046859472784?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/7618731046859472784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=7618731046859472784' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/7618731046859472784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/7618731046859472784'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2007/12/leadership-speculations-for-cu-game.html' title='Leadership Speculations for CU Game Developer’s Club'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30859452.post-2643873982545274971</id><published>2007-12-05T04:04:00.001-08:00</published><updated>2009-02-03T15:24:18.348-08:00</updated><title type='text'>Introduction</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;What is this blog?&lt;br /&gt;&lt;/p&gt;&lt;p&gt;My original intention in creating this blog was to have it be my technical blog.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Simply put, I occasionally have technical thoughts and post them to my social blog, but anyone who might be interested in them would also be severely disinterested in the bulk of content that they would reside with. I don't like that.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I realize, though, that I want this blog to be more than a "Technical Blog" by definition. More to the point, I want this to be an "Intellectual Blog." Everything I post here will be related to a learning, an analysis, a divination, revelation, cranial combustication, etc. They will be things that interest me in an intellectual sort of way. My hope is that by limiting myself to those topics, this blog will maintain a sparse but well suited collection of posts that are interesting to people whose intellectual pursuits, fascinations, and quandaries are similar to my own.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;That being said, my other resources are: &lt;/p&gt;&lt;p&gt;Webpage: &lt;a href="http://blinkymach12.com/"&gt;http://blinkymach12.com/&lt;/a&gt; &lt;/p&gt;&lt;p&gt;This is where I store files, my resume, and other blog-free content.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Social blog: &lt;a href="http://www.xanga.com/the_failing_light/"&gt;http://www.xanga.com/the_failing_light/&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;This is a weblog that I've maintained since high school. It has lived through 3+ girlfriends, a half dozen living situations, and many assorted absurdities of the most absolutely atrocious and occasionally well-articulated audacities. It's also where I post all of my creative writing and photography, but without any organizational structure what-so-ever.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;- Jude&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30859452-2643873982545274971?l=blinkymach12.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blinkymach12.blogspot.com/feeds/2643873982545274971/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30859452&amp;postID=2643873982545274971' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/2643873982545274971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30859452/posts/default/2643873982545274971'/><link rel='alternate' type='text/html' href='http://blinkymach12.blogspot.com/2007/12/introduction_05.html' title='Introduction'/><author><name>Jude Allred</name><uri>http://www.blogger.com/profile/10721595707096211657</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://3.bp.blogspot.com/_SEDq2OI8nrk/S0Gd39LYgFI/AAAAAAAAGNc/cVG6osSs0Qk/S220/top+of+Mt.+Baldy.jpg'/></author><thr:total>0</thr:total></entry></feed>
