<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>

<channel>
	<title>The Glass is Too Big</title>
	<atom:link href="http://www.wynia.org/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.wynia.org/wordpress</link>
	<description>J Wynia - Web Consultant, Writer and Geek</description>
	<pubDate>Sat, 06 Jun 2009 21:43:34 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Comments In Code Aren&#039;t Evil. Bad Comments Are.</title>
		<link>http://www.wynia.org/wordpress/2009/06/06/comments-in-code-arent-evil-bad-comments-are/</link>
		<comments>http://www.wynia.org/wordpress/2009/06/06/comments-in-code-arent-evil-bad-comments-are/#comments</comments>
		<pubDate>Sat, 06 Jun 2009 21:43:34 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[General]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/?p=1282</guid>
		<description><![CDATA[I&#039;ve been watching an exchange of articles over the last couple of days stemming from 10 Commandments for Creating Good Code. It&#039;s a pretty good list, but several people (including me) think he may have missed the mark with his take on code comments. 
I posted a comment on the followup, but thought I&#039;d take [...]]]></description>
			<content:encoded><![CDATA[<p>I&#039;ve been watching an exchange of articles over the last couple of days stemming from <a href="http://makinggoodsoftware.com/2009/06/04/10-commandments-for-creating-good-code/">10 Commandments for Creating Good Code</a>. It&#039;s a pretty good list, but several people (including me) think he may have missed the mark with his take on code comments. </p>
<p>I posted a <a href="http://makinggoodsoftware.com/2009/06/06/comments-are-evil/#comment-208">comment on the followup</a>, but thought I&#039;d take a few minutes to tinker with doing some video as a response as well. <a href="http://twitter.com/sborsch">Steve Borsch</a> suggested that I should start video blogging and I figured I&#039;d give it a shot. So, here&#039;s the video version.</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/SJN3qU_58WE&#038;hl=en&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/SJN3qU_58WE&#038;hl=en&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2009/06/06/comments-in-code-arent-evil-bad-comments-are/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mexican Burrito Bowl Recipe</title>
		<link>http://www.wynia.org/wordpress/2009/05/25/mexican-burrito-bowl-recipe/</link>
		<comments>http://www.wynia.org/wordpress/2009/05/25/mexican-burrito-bowl-recipe/#comments</comments>
		<pubDate>Tue, 26 May 2009 00:54:19 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[Cooking]]></category>

		<category><![CDATA[General]]></category>

		<category><![CDATA[chipotle]]></category>

		<category><![CDATA[qdoba]]></category>

		<category><![CDATA[recipe]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/?p=1269</guid>
		<description><![CDATA[
I spent a good portion of the Memorial Day Weekend cooking. Lots of BBQ outside and a fair bit of time in the kitchen too. Quite a bit of what I made was actually experimental. Among those experiments was an attempt to do something about our Chipotle addiction (and the &#034;methadone&#034; of said addiction: QDoba) [...]]]></description>
			<content:encoded><![CDATA[<div style="float:right;margin: 5px;padding: 10px;border: solid black 1px;"><a href="http://www.flickr.com/photos/jwynia/3565035954/" title="Mexican Burrito Bowl by J Wynia, on Flickr"><img src="http://farm4.static.flickr.com/3664/3565035954_051039e690_m.jpg" width="240" height="180" alt="Mexican Burrito Bowl" /></a></div>
<p>I spent a good portion of the Memorial Day Weekend cooking. Lots of BBQ outside and a fair bit of time in the kitchen too. Quite a bit of what I made was actually experimental. Among those experiments was an attempt to do something about our <a href="http://www.chipotle.com/">Chipotle</a> addiction (and the &#034;<a href="http://friendfeed.com/jwynia/94df837b/was-warned-that-i-wouldn-t-like-qdoba-because">methadone</a>&#034; of said addiction: <a href="http://www.qdoba.com/">QDoba</a>) by coming up with a reasonable facsimile out of our own kitchen.</p>
<p>While not all of the experiments turned out like I wanted (the meatloaf had WAY too much Italian seasoning), the Chipotle analog turned out really good. So, I figured I&#039;d share it with all of you.</p>
<p>We generally get the bowls (sans tortilla) when we go to either place. So, we started with the lime rice (the cilantro is optional and subject to whatever side of the <a href="http://johnrobe.com/blog/?p=252">cilantro wars</a> your loyalties lie). Basic Basmati rice with lime juice worked out great.</p>
<p>On top of that, I threw together a black bean concoction with black beans, onions, garlic, tomatoes with chiles, and a splash of white wine.</p>
<p>Since I BBQ&#039;ed a pork shoulder (see video below), we went with that for the meat, but clearly this recipe works just fine without it, making it a really decent thing to make if there&#039;s a mix of vegetarians and carnivores at a party or social dinner, without having to make 2 separate meals for the different groups.</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/GtoD2t18AGI&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/GtoD2t18AGI&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>Top with salsa, sour cream, cheese, cilantro (again, skip it if appropriate), etc. and we ate it using chips as utensils (like we usually do with Chipotle). I won&#039;t pretend that it&#039;s a clone (because it&#039;s not), but it definitely fits that same niche and might work out if you&#039;ve got a Chipotle craving.</p>
<p><a href="http://www.wynia.org/wordpress/wp-content/uploads/2009/05/mexican-burrito-bowl-recipe.pdf">Download the recipe as PDF</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2009/05/25/mexican-burrito-bowl-recipe/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Pondering the Polymath Podcast and Pedanticism</title>
		<link>http://www.wynia.org/wordpress/2009/05/14/pondering-the-polymath-podcast-and-pedanticism/</link>
		<comments>http://www.wynia.org/wordpress/2009/05/14/pondering-the-polymath-podcast-and-pedanticism/#comments</comments>
		<pubDate>Thu, 14 May 2009 13:35:00 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[Essays and Rants]]></category>

		<category><![CDATA[Podcasting]]></category>

		<category><![CDATA[Podcasts]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/2009/05/14/pondering-the-polymath-podcast-and-pedanticism/</guid>
		<description><![CDATA[I’ve been working on clarifying the approach and idea for the Polymath Podcast, which has caused reflection on a repeating set of topics. As I’ve been processing those topics in an attempt to distill them into an “overview” episode to kick things off, I’ve refined my thoughts on a few of them.
First is that I [...]]]></description>
			<content:encoded><![CDATA[<p>I’ve been working on clarifying the approach and idea for the <a href="http://www.polymathpodcast.com">Polymath Podcast</a>, which has caused reflection on a repeating set of topics. As I’ve been processing those topics in an attempt to distill them into an “overview” episode to kick things off, I’ve refined my thoughts on a few of them.</p>
<p>First is that I take a slightly broader view of the definition of “polymath” than many people seem to. It’s telling that many of the online discussions about being a polymath seem to center around a definition in the vicinity of “someone who knows everything”.</p>
<p><a href="http://www.gapingvoid.com/Moveable_Type/archives/003319.html"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="pedantic446-thumb" border="0" alt="pedantic446-thumb" src="http://www.wynia.org/wordpress/wp-content/uploads/2009/05/pedantic446thumb.jpg" width="260" height="157" /></a> </p>
<p>This shows up nearly immediately in the conversation, along with mentions of “Renaissance Man”, followed shortly by “Leonardo Da Vinci” and one of several people nominated as having been the “last person who could know everything”. Unfortunately, that series of predictable topical shifts is almost inevitably followed by either a declaration that being a polymath is impossible or a resignation to such a fate, depending on whether one considers oneself to be a polymath prior to the conversation.</p>
<p>The thing is, that the word comes from the Greek polymath?s, ?????????, meaning &quot;having learned much&quot;. It doesn’t mean having learned everything. It’s actually a pretty ambiguous term, leaving it open to interpretation rather than some list of specific bodies of knowledge.</p>
<p>Beyond even that, these conversations always seem to put Da Vinci’s entire life into the “polymath” category. However, he clearly pursued a path of learning and exploration for his entire life. So, as a youth, he couldn’t have known even the definition of “everything” used in this context.</p>
<p>Further, he obviously didn’t know all of the stuff we’ve come to learn since his death. That makes the derivation’s definition make more sense to me than the colloquial one used in such arguments. It’s more about infinite curiosity and a lifelong quest to learn more and improve oneself.</p>
<p>By that definition, every one of the people usually brought up still qualifies. But, so do countless others. I consider myself a polymath in the same way I consider myself a software journeyman. It’s not a destination, it’s a path. There’s a huge difference between spending the day looking for a needle in a haystack and spending the day exploring a haystack and happening to find a needle.</p>
<p>The second of the topics is basically another branch of the “what is a polymath” conversation. When it doesn’t center on Renaissance gentlemen, literary canon and the extent to which the body of scientific knowledge exceeds the human memory capacity, it tends to find a topical home in an argument about “generalization” vs “specialization”.</p>
<p>It’s an argument I’ve been dragged into more than a few times myself. One of the problems with it is that I don’t think they’re actually antonyms.&#160; They’re both relative terms. One person may consider my professional niche as “specializing” because I do work in information technology, building web applications on the x86/x64 PC platform while others would veto my membership in the “specialist” camp because I’ve done that work in PHP, Java, and C# on MySQL, Oracle and SQL Server, insisting that to *actually* specialize, I’d have to further refine my focus.</p>
<p>The other big problem with this oppositional thinking is that it presumes that one is better than the other, not that having both is often the recipe for greatest success. The “box” we often ask people to think outside of pretty much IS specialization and most generalists don’t need trite advice to see connections between disparate things.</p>
<div style="border-bottom: black 1px solid; border-left: black 1px solid; margin: 10px; float: left; border-top: black 1px solid; border-right: black 1px solid"><a href="http://www.flickr.com/photos/spentrails/2775226901/"><img src="http://farm4.static.flickr.com/3252/2775226901_8f1ed8786c_m.jpg" /></a></div>
<p>Third and finally is the frequent citation of both Adam Smith and Charles Darwin. Both are trotted out, pointing out how both economics and evolution describe the march toward specialization. That’s followed with the “inevitable” conclusion that we must specialize or die.</p>
<p>Too bad that both of those disciplines also describe the benefits of “just enough” specialization and the pitfalls of going too far. The most obvious example to me is the human species itself. It’s clear that our widespread population distribution and our insistence on living in EVERY ecosystem on this planet makes it clear that if we’d been hyper-specialized to one ecosystem, things would be very different.</p>
<p>If we’d specialized to only be able to live in the Fertile Crescent, we’d have died off when much of that area turned to desert. The Inuit wouldn’t be hunting reindeer and surviving bitter cold. The people of the Himalayas wouldn’t be perfectly happy living in much thinner air than the rest of us.</p>
<p>Simply put, the capacity TO specialize requires generalization. They’re symbiotic. There’s a balance between them that’s necessary (though that balance can be societal and not made real in each and every person) in order to both survive and thrive.</p>
<p>If a mechanic in 1970 were to specialize in working on AMC cars, further working to become the #1 authority on performance tuning the Gremlin, he’d probably be well paid in 1978, but the 1980’s would have been fairly unpleasant.</p>
<p>That’s because while specialization makes the thriving work when the environment and conditions match the specialization, shifts in the ecosystem can result in disaster for that specialist. Imagine what happens to the giant panda if bamboo were to stop growing or the koala if eucalyptus were to die off because of a pesticide of some sort.</p>
<p>Compare that with the rabbit, the rat and tilapia (take a look at a film called <a href="http://www.darwinsnightmare.com/">Darwin’s Nightmare</a>) for how survival and specialization/generalization relate.</p>
<p>OK, now that I’ve been enough of a downer to bring up the extinction of pandas and koalas, I want to finish on a lighter note.</p>
</p>
<div style="border-bottom: black 1px solid; border-left: black 1px solid; margin: 10px; float: right; border-top: black 1px solid; border-right: black 1px solid"><a href="http://www.wynia.org/wordpress/wp-content/uploads/2009/05/doctorwhotardis.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="doctor-who-tardis" border="0" alt="doctor-who-tardis" src="http://www.wynia.org/wordpress/wp-content/uploads/2009/05/doctorwhotardis-thumb.jpg" width="164" height="244" /></a></div>
<p> For the tone of the podcast, rather than trying to decide whether one needs to be Da Vinci in order to be a polymath, I’d like to shift away from him and the rest of the canonical examples and toward the one that always comes to mind for me: <a href="http://en.wikipedia.org/wiki/Doctor_(Doctor_Who)">The Doctor</a>. From the TV show<em> <a href="http://en.wikipedia.org/wiki/Doctor_Who">Doctor Who</a></em>.
</p>
<p>If you aren’t a fan, The Doctor is a 900+ year old Time Lord who travels with a companion in a space-and-time ship called the TARDIS. The Doctor has traveled the depth and breadth of the Universe and the vastness of time. He has staggering knowledge of alien cultures, technology, literature, etc. </p>
<p>But, seeing the entirety of space and time in front of him, he, better than we, knows that it’s not even remotely possible to know everything.</p>
<p>Despite that, The Doctor has that spark of infinite curiosity, constantly saying things like, “Huh, that’s never happened before.”&#160; and “Don’t know what we’re going to do, but we’ll figure it out” with a joy and zest that’s infectious. </p>
<p>He doesn’t seek out knowledge and experience as though there’s some cosmic scoreboard out there where someone’s keeping track of whether he knows it “all” yet or not. He learns and seeks out new experiences simply for the joy inherent in the process. Most importantly, he doesn’t take himself nearly as seriously as most of the participants of the conversations I’ve read on these topics.</p>
<p>It’s that approach to life that I want the podcast to be about and is how I try to approach life and learning. I am far more likely to say, “Ooh. Now THAT’s interesting” than “Will this be on the test?”. More likely to say, “Did you ever wonder?” than “Why do you know that?”.</p>
<p>If this sounds like paradise to you, the show’s likely to work for you. That’s both as a listener and I’m still looking for a co-host or 2. Now, I’m going to go because I’ve got 28 tabs open in Firefox full of interesting stuff to be read.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2009/05/14/pondering-the-polymath-podcast-and-pedanticism/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Breaking the Rules: James Joyce Did It All The Time</title>
		<link>http://www.wynia.org/wordpress/2009/05/13/breaking-the-rules-james-joyce-did-it-all-the-time/</link>
		<comments>http://www.wynia.org/wordpress/2009/05/13/breaking-the-rules-james-joyce-did-it-all-the-time/#comments</comments>
		<pubDate>Wed, 13 May 2009 12:34:25 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[Essays and Rants]]></category>

		<category><![CDATA[Personal]]></category>

		<category><![CDATA[Personal Development]]></category>

		<category><![CDATA[Writing]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/2009/05/13/breaking-the-rules-james-joyce-did-it-all-the-time/</guid>
		<description><![CDATA[
On the campus where I spent most of my college career, the English department was housed in one of the oldest buildings there. It featured stone-surfaced stairs with grooves worn into them from thousands of students trudging up them with the grit of salt and sand of a Minnesota winter on their shoes.
Because I majored [...]]]></description>
			<content:encoded><![CDATA[<div style="border-bottom: black 1px solid; border-left: black 1px solid; padding-bottom: 3px; margin: 10px; padding-left: 3px; padding-right: 3px; float: right; border-top: black 1px solid; border-right: black 1px solid; padding-top: 3px"><a title="JamesJoyce 004 by J Wynia, on Flickr" href="http://www.flickr.com/photos/jwynia/3514431230/"><img alt="JamesJoyce 004" src="http://farm4.static.flickr.com/3593/3514431230_df13f5a115_m.jpg" width="180" height="240" /></a></div>
<p>On the campus where I spent most of my college career, the English department was housed in one of the oldest buildings there. It featured stone-surfaced stairs with grooves worn into them from thousands of students trudging up them with the grit of salt and sand of a Minnesota winter on their shoes.</p>
<p>Because I majored in English, I practically lived in Riverview and grew to love it in its neglected charm. I still associate that musty smell and the clunking of radiators with 19th century British literature and it’s drafty windows distorting the sun with forcing the angst-ridden poetry that only a 19 year old can write into sonnets and pantoums.</p>
<p>And, in nearly every one of those memories is one of my favorite professors and my advisor: Steve Klepetar. Wildy gesturing, his curly dark hair flopping about onto his dark-rimmed glasses which slid down his nose as he explained for the 1000th time how the English ballad’s meter combines iambic tetrameter together with iambic trimeter. </p>
<p>He’d climb on the desk in the front of the room and sit, cross-legged as he’d expound on the deep significance of early 20th century poetry, clearly as excited to be talking about it as he had been the previous semester and the semesters before that.</p>
<p>Dr. Klepetar is the kind of professor I can only hope for other college students to have somewhere along their journey. I was blessed to benefit by spending 3 years taking classes from him regularly.</p>
<p>While lots of things from those classes have stuck with me, one thing has come up over and over on the job and elsewhere in my life. </p>
<p>See, Dr. Klepetar had a novel way of approaching written assignments. While the assignment itself was typed, students could add the kinds of notes that he would be adding later himself to the margins before handing it in. </p>
<p>One of the things that was to go in those margins, if you felt it was appropriate, was a series of capital letters: JJDIATT. It stood for “James Joyce Did It All The Time”.</p>
<p>If the last time you saw an English class was in the rear view mirror after your freshman year as you ran away, that may make absolutely no sense. </p>
<p><a href="http://en.wikipedia.org/wiki/James_Joyce">James Joyce</a> is an Irish author who’s most famous book, Ulysses, is a shining example of someone breaking the rules. Grammar, punctuation, and literary convention were all open to some breakage when Joyce put pen to paper. </p>
<p>The most obvious example is that Joyce has run-on sentences that go on for PAGES (including the ending, which is a sentence that goes on for 40 pages). Yet, despite (and some would say because of) that rule-breaking, it’s considered one of the greatest literary works of the 20th century.</p>
<p>Thus, Dr. Klepetar advised us that we were free to break the rules. Start a sentence with “And” or “But”. Slap Grammar across the face. Make up our own spelling of a word. But, you had to put JJDIATT in the margin to indicate that you did it on purpose. </p>
<p>If you started a sentence with “But” or “And” (one of my favorite things to do, by the way) out of ignorance, you weren’t some rebel out to make an artistic statement. Rebellion isn’t something you do accidentally. You need to actually know what rule you’re breaking and have some goal in mind for it to “count”.</p>
<p>To do that, you need to actually have an understanding of the rules in the first place.</p>
<p>When students were bristling at the rigid structure of the sonnet, and would ask to be allowed to write free verse instead, he’d point out that your free verse gets considerably better when you have mastered writing within the confines of the rules. The confinement of 140 characters on Twitter has spurred some of the biggest growth in my ability to write since those English classes in college.</p>
<p>Beginners always seem to want to leap right past the rules without learning them. Yet the <a href="http://en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisition">Dreyfus Model</a> makes it clear that rigid following of rules is exactly what you need to do when you are new to something. Only when you move into competency and into proficiency does the rule breaking become a viable strategy.</p>
<p>Many people who haven’t studied art look at one of the cubist paintings of Picasso and comment something along the lines of how it’s too bad he couldn’t paint things the way they actually look. However, if you go and look at Picasso’s earliest work, it’s clear that he actually learned the techniques in drawing and painting representationally. He then <a href="http://www.artyfactory.com/art_appreciation/animals_in_art/pablo_picasso/pablo_picasso.htm">spent the rest of his life breaking those rules</a> in an effort to discover the essence of how images work and are recognized.</p>
<p>If JJDIATT ended there, it would be a worthwhile technique. However, Dr. Klepetar took it one step further and here’s where I think his technique was genius. Putting JJDIATT in the margin wasn’t a “get out of jail free” card you could use to write a sloppy paper. If you wrote a bad paper, had your friend proofread it and just slapped JJDIATT next to all of the mistakes, that wouldn’t fly.</p>
<p>That’s because JJDIATT was actually an invitation to Dr. Klepetar to have a conversation. It was waving the cape at him to examine what you were trying to accomplish in that instance of breaking the rules. And, he wasn’t one to hold back when he thought that the result didn’t accomplish the goals that launched the rebellion.</p>
<p>In this whole process, he taught me the importance of understanding the rules, recognizing when they are in the way of my vision, breaking them and evaluating whether the result was actually better than if I’d followed the rules in the first place.</p>
<p>For that, Dr. Klepetar, I am deeply grateful.</p>
<p>PS: It looks like I’m not the only one of his students who has a high opinion of Dr. Klepetar. His <a href="http://www.ratemyprofessors.com/ShowRatings.jsp?tid=141112">ratings</a> on one of those &quot;rate your professor” sites is nearly 100% positive, despite his “easiness” indicating he isn’t handing out A’s like candy.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2009/05/13/breaking-the-rules-james-joyce-did-it-all-the-time/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Problem With Video Distribution</title>
		<link>http://www.wynia.org/wordpress/2009/05/11/the-problem-with-video-distribution/</link>
		<comments>http://www.wynia.org/wordpress/2009/05/11/the-problem-with-video-distribution/#comments</comments>
		<pubDate>Tue, 12 May 2009 02:26:26 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/2009/05/11/the-problem-with-video-distribution/</guid>
		<description><![CDATA[Every TV in my house (and there are too many, by nearly any standard) is connected to at least one of the following:

A DirectTV Tivo 
A Roku box 
A Vudu box 
A computer running Boxee. 

Independent of each other, I would recommend each and every one of those devices to anyone interested in buying one. [...]]]></description>
			<content:encoded><![CDATA[<p>Every TV in my house (and there are too many, by nearly any standard) is connected to at least one of the following:</p>
<ul>
<li>A DirectTV Tivo </li>
<li>A <a href="http://www.roku.com/netflixplayer/">Roku</a> box </li>
<li>A <a href="http://www.vudu.com">Vudu</a> box </li>
<li>A computer running <a href="http://www.boxee.tv/">Boxee</a>. </li>
</ul>
<p>Independent of each other, I would recommend each and every one of those devices to anyone interested in buying one. The problem is that no one of those is likely to actually give me or anyone else the actual mix of video entertainment that they’re after.</p>
<p>That’s because we’re in the middle of one of those nasty transitional phases of media. It’s nasty because it’s a much bigger shift than the last several in video distribution (broadcast to cable, VHS to DVD, etc). It’s nasty because </p>
<p>The things I want to watch are produced by a variety of entities. From independent movie producers to TV companies to online podcast producers to subsidized gov’t projects (BBC &amp; CBC). And, where they’ve decided to distribute video outside of the existing cable/satellite/broadcast TV setup (not all of them have), they have chosen a seriously fractured approach.</p>
<p>If the content I watch is a serial video series produced by a traditional TV company, here’s the current situation. </p>
<p>If I use the Vudu box, I can watch a few old seasons of shows, a few that are a full season behind and that’s about it and each episode is $2. </p>
<p>The Roku box has a bunch of CBS stuff and lots of old shows (without extra charges on top of my <a href="http://www.netflix.com">Netflix</a> subscription), but nothing to speak of from ABC, NBC, FX, FOX, HBO or AMC in that bundle. Lots of that stuff is available via the Amazon partnership, again at $2 an episode.</p>
<p>The Boxee is making valiant efforts, including working hard to get <a href="http://www.hulu.com">Hulu</a> support. However, most of the TV on Boxee is actually coming in via web streaming and looks far better on a 9” netbook than in a 52” HDTV. Of course, the Boxee will also play anything that is downloaded via Bittorrent, in full HD, but NONE of the producers of this content will provide it that way, even *with* commercials embedded. </p>
<p>As an aside, if TV producers put up full-resolution video downloads (including a reasonable number of ads) via Bittorrent, I would be first in line and would ensure that the torrent was seeded for a good long while.</p>
<p>Anyway, the Boxee will also handle anything iTunes sells, for, again, $2 an episode. I detect a trend.</p>
<p>And, if these were the only options for TV, it’d be no big deal. However, for about $90 a month, I have 250+ channels (including HBO/SHO) and the Tivo capacity to record 6 channels simultaneously. While much of that content would be recorded with commercials, some (the aforementioned HBO/SHO shows), that content is delivered MUCH cheaper than $2 an episode.</p>
<p>Unfortunately, that lower price means I have to know that I will want to watch that content in advance of a specific “airing time” (a distinct legacy of the synchronous nature of over-the-air television). Imagine if, in order to get a copy of a musical album required setting your audio Tivo so it gets recorded on Thursday, when it’s “on”.</p>
<p>The problem with that is that nearly half of the shows I really enjoy are shows I discovered long after they originally aired, making the Tivo an inadequate solution. </p>
<p>Movies are a bit better, with most of the rentals at about the cost of what a DVD new release rental would be. I also have done my fair share of buying DVD’s on Amazon, watching them and selling them back on Amazon, which puts TV seasons WAY below $2 an episode and movies pretty cheap too.</p>
<p>As far as podcast/videocast/etc. content, there isn’t much of an edge to any of them. All but the Tivo have <a href="http://www.ted.com">TED</a> videos, for instance, and most have some form of “The Best of YouTube”. Of course, they all act like this is a major accomplishment, but whatever.</p>
<p>The real problem, as I see it, is that nearly all of the options for video delivery are distributor-focused. Boxee is the one exception (which is probably why it’s the one I’m most optimistic of) in that if you can give it an RSS feed with video files or torrents and I don’t have to care about who’s distributing it.</p>
<p>I wish this was a technical problem. I wish that this was about bandwidth or codecs. Instead, it’s about whether Viacom’s lawyers have worked out a deal with Amazon or Disney’s lawyers have worked out a deal with Vudu. And, in the mean time, my ideal scenario seems lifetimes away.</p>
<p>I’d absolutely love to be able to take the $200+ a month (between everything) I pay for video entertainment and just get access to watch stuff: old or new, TV or movie, but there’s no sign of it happening. I’m really getting sick of cobbling together a legal solution. </p>
<p>That’s because the illegal solution for exactly this desire is really easy. An installation of <a href="http://www.utorrent.com/">uTorrent</a> and a list of TV shows you want gets you automatic delivery of shows to the directory of your choice, ready for Boxee to display in beautifully-encoded video on the big screen TV, complete with subtitles in the language of your choice, even if the original producer didn’t include them.</p>
<p>Please, content producers, quickly figure out how to solve this problem, because the grass is looking pretty lush and green on the other side. I’m not a broke college student and am willing to pay a fair price. However, $52 per season ($2 x 26 episodes without a seasonal discount) isn’t fair.</p>
<p>I’m far happier with my eMusic subscription (more like $0.30/track instead of $1+ for iTunes) and many of the $6.99 albums I buy on Amazon than I am with $15 for a CD. Note that I’m not a freeloader looking for a free buffet. I’d just like better options. </p>
<p>In the mean time, if you’re looking for a demo of any one of the half-solutions currently available, let me know.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2009/05/11/the-problem-with-video-distribution/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Smoking Some Pig With New Ceramic Cooker</title>
		<link>http://www.wynia.org/wordpress/2009/05/02/smoking-some-pig-with-new-ceramic-cooker/</link>
		<comments>http://www.wynia.org/wordpress/2009/05/02/smoking-some-pig-with-new-ceramic-cooker/#comments</comments>
		<pubDate>Sat, 02 May 2009 20:58:06 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[Cooking]]></category>

		<category><![CDATA[bbq]]></category>

		<category><![CDATA[biggreenegg]]></category>

		<category><![CDATA[kamado]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/2009/05/02/smoking-some-pig-with-new-ceramic-cooker/</guid>
		<description><![CDATA[
 I&#039;ve owned far too many different grills and smokers over the years. Big and small, gas and electric and charcoal, I&#039;ve owned most kinds at some point. Except for one: the ceramic cooker often called a Kamado.
The most famous of these is the Big Green Egg, which bills itself as the “World’s Best Smoker [...]]]></description>
			<content:encoded><![CDATA[<div style="margin: 10px; float: right"><a href="http://www.grilldome.com"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="GrillDomeCooker" border="0" alt="GrillDomeCooker" src="http://www.wynia.org/wordpress/wp-content/uploads/2009/05/grilldomecooker.jpg" width="188" height="260" /></a></div>
<p> I&#039;ve owned far too many different grills and smokers over the years. Big and small, gas and electric and charcoal, I&#039;ve owned most kinds at some point. Except for one: the ceramic cooker often called a Kamado.
<p>The most famous of these is the <a href="http://www.biggreenegg.com/">Big Green Egg</a>, which bills itself as the “World’s Best Smoker and Grill”. The basic idea is a thick ceramic container to contain and control the fire, smoothing out the temperature and moisture, resulting in amazing food.</p>
<p>The thing about them is that, no matter the brand, they’re expensive. Sure, all of the information points to how great they are, that they last a long time, that they’re versatile, give you charcoal/wood flavor in the same kind of time as gas, etc. </p>
<p>I just couldn’t bring myself to pay for one. Until a few weeks ago.</p>
<p>I went out to the big, 3 burner gas grill on the deck to give it a quick once-over, clean it up and fire it up for the spring. I opened it up, pulled out the grates, and looked at the burners. Apparently, in the 4 years we’ve owned it, it’s completely fallen apart.</p>
<p>The burners were corroded to the point I wouldn’t feel safe lighting them, the grates themselves are falling apart, etc. Sure, the exterior is still shiny stainless steel, but if the insides rot out from within, what good is it?</p>
<p>This isn’t the first grill I’ve had to dump. Plus, unless it’s augmented, gas grilling doesn’t really make me as happy as real BBQ and charcoal grilling. That’s when I started thinking about the Kamado cookers and everything lined up: long-lasting, convenient, amazing food, etc.</p>
<p>Combine that with tons of overtime pay from the last few months and I decided it was time to give them a shot. I bought one from <a href="http://www.grilldome.com/InfinityS.html">GrillDome</a>. So far, we’ve had chicken and brats on it, and it’s living up to expectations. And, today, I’ve got 12 pounds of pork shoulder that’s been in there since 8 this morning, meaning my favorite food is on its way to my plate.</p>
<p>Pulled pork sandwiches are as good as it gets as far as I’m concerned.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2009/05/02/smoking-some-pig-with-new-ceramic-cooker/feed/</wfw:commentRss>
		</item>
		<item>
		<title>My Roadtrip: 3200 Miles and 15 States in 7 Days</title>
		<link>http://www.wynia.org/wordpress/2009/04/29/my-roadtrip-3200-miles-and-15-states-in-7-days/</link>
		<comments>http://www.wynia.org/wordpress/2009/04/29/my-roadtrip-3200-miles-and-15-states-in-7-days/#comments</comments>
		<pubDate>Thu, 30 Apr 2009 03:09:49 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[Cognitive Psychology]]></category>

		<category><![CDATA[Personal Development]]></category>

		<category><![CDATA[Software Development]]></category>

		<category><![CDATA[Writing]]></category>

		<category><![CDATA[travel]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/2009/04/29/my-roadtrip-3200-miles-and-15-states-in-7-days/</guid>
		<description><![CDATA[A week ago Tuesday at noon, an over-worked, stressed out software developer (OK it was me) climbed into his car, and embarked on a solo journey wandering across a wide swath of America, to a new media conference and back the following Monday at 9:00am.
 
That journey covered 3200 miles through 15 of these United [...]]]></description>
			<content:encoded><![CDATA[<p>A week ago Tuesday at noon, an over-worked, stressed out software developer (OK it was me) climbed into his car, and embarked on a solo journey wandering across a wide swath of America, to <a href="http://createsouth.org">a new media conference</a> and back the following Monday at 9:00am.</p>
<div style="margin: 10px; float: right"><a title="CreateSouthRoadTrip2009 052" href="http://www.flickr.com/photos/73451168@N00/3468491874/"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="CreateSouthRoadTrip2009 052" src="http://static.flickr.com/3631/3468491874_d25d15b098_m.jpg" /></a> </div>
<p>That journey covered 3200 miles through 15 of these United States over the course of those 7 days. I saw a wide variety of terrain, a fairly complete survey of changing regional cuisine, a sampling of how the economy is doing in 1/3 of the country, had interesting conversations, met people I’d previously only met online (great to see all of those people in person), drove along winding country roads, left outrageous tips at restaurants across the country, bought hot dogs for a shared meal with a homeless guy in St. Louis and ate fried creamed corn just outside the World’s Largest Truckstop.</p>
<div style="margin: 10px; float: left"><a title="CreateSouthRoadTrip2009 060" href="http://www.flickr.com/photos/73451168@N00/3467690187/"><img border="0" alt="CreateSouthRoadTrip2009 060" src="http://static.flickr.com/3586/3467690187_251f87c844.jpg" width="180" height="240" /></a>.</div>
<p>I listened to a lot of podcasts, a few audiobooks, lots of music and some contemplative silence. I spent time reading, reflecting, talking through ideas, and generally getting away from the stress that the last 6 months has piled on to me.</p>
<p>I returned refreshed (which will hopefully last more than a few days), with a renewed desire to take on the challenges in front of me.</p>
<p>One of the things I’ve learned about myself over the past few years is my natural tendency toward imbalance and how that can end up doing a lot of harm to the attributes of my skills portfolio and personality that people enjoy and sometimes pay for.</p>
<p>I’m good at what I do because I combine various disciplines and perspectives and apply them to situations in unique ways. That comes from being deeply interested in the world around me and curious about nearly every topic I can think of. However, when I let myself, I skew toward a single endeavor, like the big project I’m working on now.</p>
<p>In doing so, I actually injure my ability to do that project to the best of my ability. That became clear again as I was traveling. As I thought about working on other projects, podcasts, and just let my mind wander on whatever topic was in front of me, I found myself coming up with good ideas for the billable project along the way.</p>
<p>That goes right along with everything I’ve read in book after book about how the mind works for lateral thinking and strategic intuition. The conference itself challenged me to do something about it and carve out the necessary variety I need to be at my best.</p>
<p>So, I’m setting out on a deliberate process to make sure that I engage in several areas on a regular basis to keep that equilibrium. I’ll keep charging ahead on my billable project and probably keep above 40 hours a week. But, I’ll also be making sure I put in time working on my writing, working on my non-billable software projects, some art, music, reading books, doing something with the 3 hours of video I captured on the trip and getting back into podcasting. </p>
<p>On that last item, I’ve got 2 main ideas that I’m moving forward on, one more solid than the other. That “more solid” idea is a podcast that embraces the multi-disciplinary lifestyle, called the <a href="http://www.polymathpodcast.com">Polymath Podcast</a>. I’m <a href="http://www.polymathpodcast.com/wordpress/2009/04/pre-launch/">looking for a couple of co-hosts</a> to get this thing off the ground, so if you’re interested, let me know.</p>
<p>I know that for many of those endeavors I won’t be getting very far in a given week.&#160; However, a slow and steady investment is what I’m aiming for: one that’s sustainable. I want to leverage the benefits I’ve seen come from that cross-cutting approach and feel challenged to kick it up a notch.</p>
<p>We’ll see where things go from here. Regardless of the destination, the journey is its own reward.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2009/04/29/my-roadtrip-3200-miles-and-15-states-in-7-days/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CREATE South Roadtrip is Imminent</title>
		<link>http://www.wynia.org/wordpress/2009/04/19/create-south-roadtrip-is-imminent/</link>
		<comments>http://www.wynia.org/wordpress/2009/04/19/create-south-roadtrip-is-imminent/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 00:52:34 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[Community]]></category>

		<category><![CDATA[DIY]]></category>

		<category><![CDATA[travel]]></category>

		<category><![CDATA[createsouth]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/2009/04/19/create-south-roadtrip-is-imminent/</guid>
		<description><![CDATA[About a month ago, I mentioned that I’m taking a road trip to CREATE South. At the time, it seemed like forever away and something to look forward to.
The weeks fell away remarkably fast, and, on Tuesday, I’m off. I’ve got a few things to tie off (gotta get an oil change) and hand off [...]]]></description>
			<content:encoded><![CDATA[<p>About a month ago, I <a href="http://www.wynia.org/wordpress/2009/03/17/1600-miles-to-myrtle-beach-full-tank-of-gas-half-a-pack-of-gum-its-dark-and-i-own-sunglasses/">mentioned</a> that I’m taking a road trip to <a href="http://createsouth.org">CREATE South</a>. At the time, it seemed like forever away and something to look forward to.</p>
<p>The weeks fell away remarkably fast, and, on Tuesday, I’m off. I’ve got a few things to tie off (gotta get an oil change) and hand off before falling off the grid and onto America’s highways and byways.</p>
<p>In the spirit of the conference, I’m not going to be entirely off the grid (just off the billable one). I’ll be posting my progress, anything interesting I see, photos, my location on a map (Indiana Jones style) etc. and will be keeping a video camera in the car with me as my companion.</p>
<p>You can keep up on my trip on my <a href="http://www.wynia.org/wordpress/roadtrip-to-create-south-2009/">CREATE South 2009 Road Trip Page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2009/04/19/create-south-roadtrip-is-imminent/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A Month With Windows 7: My Review</title>
		<link>http://www.wynia.org/wordpress/2009/04/11/a-month-with-windows-7-my-review/</link>
		<comments>http://www.wynia.org/wordpress/2009/04/11/a-month-with-windows-7-my-review/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 02:43:48 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[Review]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[Technology]]></category>

		<category><![CDATA[Microsoft]]></category>

		<category><![CDATA[Microsoft Vista]]></category>

		<category><![CDATA[Microsoft Windows]]></category>

		<category><![CDATA[Windows 7]]></category>

		<category><![CDATA[Windows Live Writer]]></category>

		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/?p=1236</guid>
		<description><![CDATA[I’ve got a theory about most reviews of products online. Actually, it’s mostly a theory about electronics, technology and software, though it definitely holds in other areas as well. My theory points to the following scenario being behind something like 80% of the reviews you read about this stuff.

A person does a bunch of reading, [...]]]></description>
			<content:encoded><![CDATA[<p>I’ve got a theory about most reviews of products online. Actually, it’s mostly a theory about electronics, technology and software, though it definitely holds in other areas as well. My theory points to the following scenario being behind something like 80% of the reviews you read about this stuff.</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px" id="scid:8747F07C-CDE8-481f-B0DF-C6CFD074BF67:c6090428-6672-40e2-a440-b85896d4aa46" class="wlWriterEditableSmartContent"><img border="0" src="http://www.wynia.org/wordpress/wp-content/uploads/2009/04/windows7desktop.png" width="332" height="284" /></div>
<p>A person does a bunch of reading, often of pre-release information, about the product. They place an order and anxiously hit F5 on UPS.com for 2-3 days watching their package bounce around the country until the doorbell rings and they scrawl their unrecognizable John Hancock on with that plastic pen. </p>
<p>As they take the package into the house, they reach for the digital camera and a box cutter and tear open the brown shell to document the technological goo within. They push the buttons, flip the switches, glance through the menus and, about 10 minutes later, they start writing their review, which often consists of them going over the marketing materials and checking features off as they find them on the device. </p>
<p>I think that’s a problem.</p>
<p>I’ve got more gadgets than the average bear and have had my fair share of “normal” stuff like cars, houses, lawn mowers, etc. And, without exception, those products were VERY different a few weeks, few months and few years after I first got them.</p>
<p>Some gadgets that I wasn’t entirely sure about turned out to be some of my absolute favorite. Worse however, were the gadgets, devices, luggage, and other stuff that I was thrilled to have bought only to discover the problems later. When I read a review or someone’s summary of getting the item, I want to know what those downsides are, because EVERYTHING has them.</p>
<p>So, I’m not really a fan of the whole genre of “<a href="http://unboxing.gearlive.com/">unboxing</a>” articles/videos/etc. They’re fine for what they are, but they focus exclusively on the first impression, which is, by definition, a small part of your total experience with a product or service.</p>
<p>That’s why, a while back, I promised myself I wouldn’t jump in with my assessment of any particular technology until I’d lived with it for a while. And, after installing the Windows 7 beta a month ago on my laptop, Windows 7 is something I’ve lived with for a while, so here are my impressions.</p>
<p>I’ve been running “Windows 7 Ultimate 64 bit Build 7000” on my Thinkpad R61 laptop with 4GB of RAM, a 200GB 7200RPM primary hard drive, and a 320GB 5400RPM secondary hard drive. </p>
<p>For the most part, it contains my normal daily stack of software: Visual Studio 2008, <a href="http://www.xmind.net">XMind</a>, <a href="http://www.e-texteditor.com/">E Text Editor</a>, the developer browser cluster (IE/Firefox/Chrome/Safari/Opera), <a href="http://windowslivewriter.spaces.live.com/default.aspx?wa=wsignin1.0&amp;sa=884864574">Windows Live Writer</a>, <a href="http://www.openoffice.org">OpenOffice.org</a> (instead of MSOffice 2007, due to not wanting to deal with activation on what’s a temporary setup), my giant pile of utilities, etc. The only “big” thing missing from what I’d consider a normal workstation is a regular install of SQL Server 2008.</p>
<p>Overall, my impression is that this release will fit into Microsoft’s existing pattern of Windows versions.</p>
<ol>
<li>A version that makes some major changes. People generally end up disliking or hating these versions. Windows 3.0, Windows 95, Windows 2000 (as a workstation) and Vista. </li>
<li>A matching version that smooths out the kinks and ends up being the version that people hold on to for several years. Windows 3.1, 98, XP and, now, Windows 7. </li>
</ol>
<p><b>Some of the refinements are pretty handy:</b></p>
<ul>
<li>The thing that I am genuinely most impressed with is its handling of hardware. This is particularly noteable given that this is a pre-release version of a 64-bit edition of Windows. It picked up and installed, without me having to search for drivers the following:</li>
<ul>
<li>The internal bluetooth adapter, WiFi card, webcam, sound card, SD card reader, etc. If you take retail versions of XP or Vista and install them on your HP, Dell, Toshiba or Thinkpad, without those vendor’s install discs, you’ll note how big of a shift this is.</li>
<li>The WiFi Epson inkjet printer on my network, including remote scanning.</li>
<li>My bluetooth mouse.</li>
<li>My projector. It’s now just as easy to use a Windows laptop with a projector as it is to use a Mac, if not easier. Given the number of times I’ve suffered through Fn-F5 button smashing myself and watching others as 10 people watch on, if you use a Windows laptop to give presentations, this alone is worth the upgrade price when it’s released.</li>
</ul>
<li>The task bar “pinning” of applications and the context menu, clustering and “recent items” that are all part of the retooling of the task bar are a distinct shift in the right direction. Lots of this stuff is reminiscent of the Mac dock, but without grafting a Mac metaphor where it wouldn’t fit.</li>
<li>The searching of the “Start” menu (which is now just a circular Windows® logo, so it’s not really a “Start” menu anymore) that showed up in Vista (and was one of my favorite Vista features) is spread through much more of the OS. This is particularly handy since they have re-organized the Control Panel YET AGAIN.
<p>I discovered that feature when I looked to the search area in exasperation after not being able to find something like “Administrative Tools”. Subsequently, I heard on a podcast about how much work went into “regular” language search for things like “How do I change my wallpaper?” which gives you the right Control Panel entry.</li>
<li>Speed. A lot of work supposedly went into making Windows 7 run leaner on the same hardware. Given the hardware that this laptop contains and the hardware in my day-to-day Vista64 machines, Windows 7 is noticeably faster.
<p>My Vista64 boxes, with 8GB of RAM, typically idle at about 5.5GB used when I’ve got everything open. The laptop is more like 2.2GB. That’s not apples to apples, due in large part to not running SQL Server on the laptop. However, given that the number one negative against Vista when it came out was that none of the PC’s in the stores could supply enough horsepower, this is a great improvement.</li>
<li>Networking has gotten a bit smoother. The VPN connection is now in the system tray by the wireless. It also has fewer problems with going to sleep on one network and waking up on another, something Vista wasn’t ever really very good at.</li>
<li>The Remote Desktop Client has a few nice tweaks. My favorite is in full-screen mode. That little menu that pops down when you hover at the top can now be dragged to a position other than centered. Given how often I’m 2-3 levels deep in Remote Desktop sessions, this has proven very useful.</li>
<li>I haven’t run into anything that I can recall where the install complained about not having the right version of Windows. This happened to me CONSTANTLY when I switched from XP to Vista, so this is a welcome pattern.</li>
<li>Also in Remote Desktop (though this was in Server 2008 and downloadable independently as well) is font-smoothing, which makes remote-work much more pleasant.</li>
</ul>
<p><b>What’s not so great</b></p>
<ul>
<li>There are some bugs in that improved Remote Desktop. It doesn’t seem to want to close down well, whether because the connection died or because you’re trying to kill it yourself. I’ve had to kill the process WAY too many times.</li>
<li>Shutting down Windows itself is horrible. 75% of the time when I try to physically shut it off, I end up killing power because I can’t wait for it anymore. Fortunately, I put it to sleep most of the time, but this must be fixed before the final release.</li>
<li>After logging in, it can sometimes take up to 2 minutes before I get anything other than a black screen with the build number in the bottom-right corner.</li>
<li>Google’s Chrome, which runs fine in 64 bit Vista, needs to be set to run in backward-compatibility mode in order to run under Windows 7 64. No idea why.</li>
</ul>
<p><strong>I Don’t Care</strong></p>
<p>You’re going to see reviews all over the place about things like the Aero glass, desktop gadgets, wallpaper that shuffles,improved Paint, rebuilt calculator, how “slick” and “smooth” it is, heck, even the improvements to security. I, personally don’t care about most of that. It’s all stuff I never use, turn off, etc.</p>
<p>Like I’ve told 1000 salespeople over the years. If it’s not a feature I use, it’s not actually a benefit you can convince me is worth paying for. All of that stuff fits there for me.</p>
<p><b>Overall</b></p>
<p>I know that lots of people either love or hate Windows. The same is true of Mac and Linux. I *like* them all. I still like Linux and I still like Mac. And, this release makes me like Windows a little morstronge than I did before.</p>
<p>While I’ll keep Vista around for testing purposes, as soon as Windows 7 goes gold, I’ll be upgrading any machine I can.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2009/04/11/a-month-with-windows-7-my-review/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Moving a Project From Subversion to Git</title>
		<link>http://www.wynia.org/wordpress/2009/04/07/moving-a-project-from-subversion-to-git/</link>
		<comments>http://www.wynia.org/wordpress/2009/04/07/moving-a-project-from-subversion-to-git/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 01:36:27 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[Other Programming]]></category>

		<category><![CDATA[Scripting]]></category>

		<category><![CDATA[Software Development]]></category>

		<category><![CDATA[Software Hacking]]></category>

		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/2009/04/07/moving-a-project-from-subversion-to-git/</guid>
		<description><![CDATA[I’ve been interested in the stuff that I’ve heard about git since hearing that Linus Torvalds was ditching BitKeeper and writing his own replacement to handle version control for the Linux kernel. I’ve taken a look at it a few different times as it’s profile grew in the Rails/Perl/etc communities.
Every time, there was something that [...]]]></description>
			<content:encoded><![CDATA[<p>I’ve been interested in the stuff that I’ve heard about <a href="http://git-scm.com/">git</a> since hearing that <a href="http://en.wikipedia.org/wiki/Linus_Torvalds">Linus Torvalds</a> was ditching <a href="http://en.wikipedia.org/wiki/Bitkeeper">BitKeeper</a> and writing his own replacement to handle version control for the Linux kernel. I’ve taken a look at it a few different times as it’s profile grew in the Rails/Perl/etc communities.</p>
<p>Every time, there was something that kept me from adopting it: the state of Windows support. And, after this past week, I think that my focus on the <a href="http://code.google.com/p/msysgit/">msysGit</a> version was part of the problem. I have been reluctant to use the <a href="http://www.cygwin.com/">Cygwin</a> version. That is mostly because I didn’t want to *have* to install all of cygwin on any workstation where I want git support and the pile of files that adds.</p>
<p>The thing is, though, that when I took a good look last week, I already had cygwin running on every single Windows machine I’ve got, INCLUDING virtual machines. Never one to cling to a supposition after evidence invalidates it, I gave git on cygwin a shot.</p>
<p>Because I still have lots of Subversion repositories and am likely to continue using it on lots of projects, I insisted on getting the git/Subversion integration working. Also, I use a Dreamhost account to host my repositories and any project-related forums, project tracking, etc., as a sort of private Sourceforge/Codeplex/Google Code without any licensing issues to deal with. I wanted to add git support to that existing project space. </p>
<p>It turned out like most projects of this sort. The stuff I thought would be a pain (like <a href="http://wiki.dreamhost.com/Git">getting git running on the Dreamhost account</a>) turned out to be documented and straightforward, while stuff like getting the “<a href="http://www.kernel.org/pub/software/scm/git/docs/git-svn.html">git svn</a>” command to work (which should just work off the cygwin install) thwarted me for far too long.</p>
<div style="border-bottom: #333333 2px solid; padding-bottom: 10px; margin: 20px; padding-left: 10px; width: 200px; padding-right: 10px; float: right; border-top: #333333 2px solid; font-weight: bold; padding-top: 10px">Set up your own private project server with git, Subversion, etc. at <a href="http://www.dreamhost.com">Dreamhost</a> and use the code GLASSTOOBIG to skip the setup fee. </div>
<p>However, after I worked out the kinks, I was able to get it working and pointed at some of my Subversion repositories on several of my workstations. After cloning those repositories, what I&#039;m most suprised by (even though I was told to expect it) is how git manages to copy ALL of the version history for the entire repository into a single .git directory (instead of hundreds or thousands of .svn directories) and end up with something SMALLER than the single version checkout of Subversion for the same source tree. </p>
<p>As an example, one of my repositories had 440 revisions across 10 branches. A checked out copy from Subversion of the current release branch is 2.51GB in 43,655 files across 23,361 folders.</p>
<p>After moving it to git, the checked out copy, which now includes the ENTIRE 440 revision archive of project history is 1.51GB in 15,356 files and 2,233 folders.</p>
<p>As far as the hiccups, it boiled down to a couple of things:</p>
<ol>
<li>Make sure to install all of the “git” related packages in cygwin.</li>
<li>Install the subversion libraries for perl (they’re not anywhere near the “git” packages in the cygwin installer). This took care of it complaining about the SVN CPAN Perl library.</li>
<li>Be prepared to have to run “<a href="http://inamidst.com/eph/cygwin">rebaseall</a>” on the cygwin installation.&#160; This took care of a LOT of cygwin complaints about various DLL’s.</li>
<li>Running “git svn clone http://example.com/repos/” can be agonizingly slow on large repositories. It’s not an issue if you’re working off of a tiny project, but that 1.5GB project took all night and then some. Ongoing work is quite fast, so I’m hoping they work the kinks out of this going forward or that they’ll ditch the tagline “The fast version control system”.</li>
</ol>
<p>Given how efficient it is with storage, I’m interested in experimenting with running it in the background on my development directories and having a FileSystemWatcher commit whenever things change. I’d like to see how long it takes before things get out of control. </p>
<p>I’m also hoping that the GUI tools catch up. That’s not so much because I want them for myself (I prefer commandline for SVN as well), but because <a href="http://tortoisesvn.tigris.org/">TortoiseSVN</a> has been key in getting SVN adopted on projects and flushing SourceSafe on several of my projects.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2009/04/07/moving-a-project-from-subversion-to-git/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Simplify Requirements by Rejecting Boolean Questions</title>
		<link>http://www.wynia.org/wordpress/2009/03/29/simplify-requirements-by-rejecting-boolean-questions/</link>
		<comments>http://www.wynia.org/wordpress/2009/03/29/simplify-requirements-by-rejecting-boolean-questions/#comments</comments>
		<pubDate>Mon, 30 Mar 2009 02:22:37 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[Business]]></category>

		<category><![CDATA[Programming]]></category>

		<category><![CDATA[Software Development]]></category>

		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/2009/03/29/simplify-requirements-by-rejecting-boolean-questions/</guid>
		<description><![CDATA[My current big project is a rewrite of a platform that has 3 predecessors, all of which are still running, with implementations on them. The original gig was to dig into 2 of those platforms to get them back to running because all of the existing developers had left. Back in December, we were asked [...]]]></description>
			<content:encoded><![CDATA[<p>My current big project is a rewrite of a platform that has 3 predecessors, all of which are still running, with implementations on them. The original gig was to dig into 2 of those platforms to get them back to running because all of the existing developers had left. Back in December, we were asked to tackle writing platform number 4.</p>
<p>One of my “rules” of software development on any project where I have a say in such matters is “You don’t get to rewrite it unless you understand it.”</p>
<p>That one made it on my list because of how common it is to watch software developers take a look at code some other developer write for 15 minutes only to declare it “crap” and in need of a complete rewrite. When challenged to explain what the offending library/package/application does, most can’t. That leads to a near 100% certainty that the rewrite will miss some large requirement or miss something subtle but important in how the original works.</p>
<p>So, as we set out to rewrite this mess, we wanted to make sure we understood what those older platforms do. We read all of the original requirements, dug through data structures and code, talked to the people who helped define the requirements on the original, etc.</p>
<p>One of the common threads that went through everything related to all of the implementations was the overly complicated ways that things were done in an obvious attempt to accommodate a wide variety of permutations. However, the complexity actually got in the way of accommodating those same permutations.</p>
<p>As we worked through the features that would be in the initial version of version 4, we pushed back on every assumption we could, hard. It’s something I’ve always done to one degree or another. On this project it’s been with more discipline than in the past.</p>
<p>Now, 4 months later, that has proven to be a critical strategy. That’s because optimizing your thinking about the problem and how you’ll solve it leads to orders of magnitude more productivity than most software tools.</p>
<p>If you add up the time spent actually typing code into an editor or IDE, compared with time spent trying to figure stuff out and otherwise spent thinking, <a href="http://stackoverflow.com/questions/58640/great-programming-quotes/58858#58858">it’s probably 30/70</a>. That means that even if you had tools that could read your mind and instantly do exactly what you wanted, you’d only speed things up by 30%.</p>
<p>In trying to get other people to push back the same way, I’ve struggled to describe it in the kinds of rules that people un-used to doing this kind of thing (<a href="http://pragmaticstudio.com/dreyfus">beginners in the Dreyfus Model</a>). This week, one common factor in many of these situations popped out at me (<a href="http://www.amazon.com/gp/product/0231142684?ie=UTF8&amp;tag=phpgeek-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0231142684">Strategic Intuition at work</a>). When subject matter experts asked us questions that would have led to complicated messes, they were almost always expecting a boolean answer.</p>
<p>They were questions like:</p>
<ul>
<li>Can this new platform do X?</li>
<li>Will it have feature Y?</li>
<li>As a user of this system will I be able to do this specific task?</li>
<li>Can you guys make it do Z?</li>
</ul>
<p>While those questions can be answered, often easily, doing so almost universally is the wrong thing to do.&#160; Under those kinds of questions are giant piles of assumptions. When you answer these questions without probing deeper, you validate ALL of those assumptions without ever knowing what they are.</p>
<p>If, instead, you play the 3-year-old and ask “Why”, you can drill down into those assumptions. You can discover that many of them can be set aside or rendered moot by a much simpler design. And those that stand up to the incessant “Why” are worth keeping and now you have a much deeper understanding of what’s driving the feature request.</p>
<p>Of course, it’s an added perk that rejecting a black/white view of an issue fits in well with the Glass Too Big philosophy too. <img src='http://www.wynia.org/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2009/03/29/simplify-requirements-by-rejecting-boolean-questions/feed/</wfw:commentRss>
		</item>
		<item>
		<title>My Toolkit for Powerpoint and Keynote Presentations</title>
		<link>http://www.wynia.org/wordpress/2009/03/23/my-toolkit-for-powerpoint-and-keynote-presentations/</link>
		<comments>http://www.wynia.org/wordpress/2009/03/23/my-toolkit-for-powerpoint-and-keynote-presentations/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 01:41:31 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[Books and Reading]]></category>

		<category><![CDATA[Design]]></category>

		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/?p=1228</guid>
		<description><![CDATA[Between technical brown bag sessions, project status meetings, and just plain putting together something to explain an approach or solution to a problem, I find myself in Powerpoint/Keynote more lately than in the past. I’ve been asked a variety of questions about those presentations where the answers are something I thought might be interesting to [...]]]></description>
			<content:encoded><![CDATA[<p>Between technical brown bag sessions, project status meetings, and just plain putting together something to explain an approach or solution to a problem, I find myself in Powerpoint/Keynote more lately than in the past. I’ve been asked a variety of questions about those presentations where the answers are something I thought might be interesting to share.</p>
<p><a href="http://en.wikipedia.org/wiki/Zeroth">Zeroth</a>, I’m fully aware of the irony of an article like this not “practicing what it preaches”. Note that creating an engaging presentation full of lively slides is more work than quickly writing up a few points. This article is the latter because of the effort involved in the former when faced with my current work queue.</p>
<p>First, is that I do use both Powerpoint and Keynote and go back and forth, even on the same presentation. That’s due in large part to the fact that I don’t actually use either one when it comes time to fire up the projector. Rather, I use both (and quite a few other tools) as mechanisms for creating slides/graphs/infographics, etc. </p>
<p>The final result of the computer side of a presentation for me is actually a PDF. PDF turns out to be a great format for actually delivering the presentation. You can throw the PDF on a memory stick and it’s almost a universal certainty that you’ll be able to open it using whatever machine you’re expected to use.</p>
<p>Given the number of people I’ve seen show up with Keynote only to discover a PC, hard-wired to the projector, I think this is a sound strategy. Acrobat Reader handles full-screen just fine and also includes the only transition I ever use: fade. You don’t get the fancy “builds” where text comes flying in from the back of the room, does a little dance around your pie chart and then settles into your bullet point ranks. And, I’ll go on record that that’s a good thing.</p>
<p>So, basically, I use whatever makes sense to get a series of PNG slides that I turn into the final PDF presentation. However, before diving into how I build those slides…</p>
<h3>Before Creating Slides</h3>
<p>I think the most important presentation habit I picked up was to start working on the presentation somewhere other than *in* Powerpoint or Keynote. Both of those tools encourage a pattern that I think is the number one cause of the bullet-point onslaught.</p>
<p>What I see people do is File-&gt;New Presentation and they start by filling in the title and adding a new slide. That slide is always the Title/Bullet Points layout and they start filling in those boxes and just keep right on going.</p>
<p>If you start away from the presentation editor and organize your thoughts and ideas into the points you want to make, the things you want to convince your audience of, the things you want to be sure you communicate, etc.</p>
<p>This is where good old fashioned note-taking, outlining, and <a href="http://www.xmind.net">mind-mapping</a> come in. Capture the ideas so you can cut out the crap that doesn’t belong. Even if you take a bunch of notes, throw them all away and go to Powerpoint “fresh”, your thinking will be clearer and the presentation better for it. </p>
<h3>Slide Design</h3>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; float: right; padding-top: 0px"><a title="Presentation Zen: Simple Ideas on Presentation Design and Delivery (Voices That Matter): Garr Reynolds: Books" href="http://www.amazon.com/exec/obidos/ASIN/0321525655/phpgeek-20"><img style="float: left" border="0" align="left" src="http://images.amazon.com/images/P/0321525655.01.MZZZZZZZ.jpg" /></a></div>
<p>As I’ve been working on improving my own presentation techniques, reading books like <a title="Presentation Zen Book - Make Powerpoint Suck Less" href="http://www.amazon.com/exec/obidos/ASIN/0321525655/phpgeek-20">Presentation Zen</a> and <a title="The Art and Science of Creating Great Presentations" href="http://www.amazon.com/gp/product/0596522347?ie=UTF8&amp;tag=phpgeek-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0596522347">slideology</a> looking at <a href="http://www.slideshare.net/most-favorited/all-time">the best of Slideshare</a>, I’ve seen lots of “named” styles and varying sets of rules. Rather than getting hung up on the details of whether one of those sets of rules is “better” than another, I have boiled it down to my own guidelines/principles that are common to most such recommendations: </p>
</p>
<ol>
<li>The fewer words on a slide the better. </li>
<li>The words on the slide shouldn’t be the same as the words you say.
<ul>
<li>While Larry Lessig <a href="http://presentationzen.blogs.com/presentationzen/2005/10/the_lessig_meth.html">seems to be able to pull off a really sophisticated style</a> where he phases in and out of sync with the text on his slides, I am not Larry Lessig. I just find my presentations working better when I don’t say the words on the slide. </li>
</ul>
</li>
<li>The slides are a side dish, not the entree.
<ul>
<li>The things I’ve actually got to say are what I’m there for, otherwise, why bother doing it in person? </li>
</ul>
</li>
<li>Let the slides deliver the joke.
<ul>
<li>When you’re nervous, the timing of humor can be difficult. If, however, you insert little jokes into the slides, as though your “assistant” was messing with you, etc. you can still use humor, without the stress of having to hit the punchline. </li>
</ul>
</li>
<li>A picture is worth a cup of coffee.
<ul>
<li>Whether it’s a graph or a photo of a screaming monkey, a picture will keep people awake and engaged more than text. </li>
</ul>
</li>
</ol>
<p>To those ends, I basically have a handful of slide layouts that I use, none of which are in the default layouts from EITHER Powerpoint or Keynote.</p>
<ul>
<li>Basic Text – this is the headline font, smack in the middle of the page. More than about 5-6 words and this layout stops working. </li>
<li>Quote – this is the subheading font smack in the middle for quotes of 1-2 sentences. I avoid using this for anything but a quote. </li>
<li>Fullscreen image – this is usually just the default “blank” with the image dropped in. </li>
<li>Graph/Chart – again based on blank with just the graph itself and maybe a small caption. The graphs/diagrams <a href="http://www.slideshare.net/garr/sample-slides-by-garr-reynolds">need to be simple</a>, but then they can be really useful. </li>
</ul>
<p>That’s it. If I am concerned about people “catching up” later, I publish a different document or record the presentation. For URL’s and links to resources, etc. I’ve been leaning more and more on a handout that I give out at the end rather than trying to include that stuff directly in the slides and hoping people will note down the info.</p>
<h3>Finding Images</h3>
<p>So, where do I find images and how do I keep track of them? This tends to be one of the most common questions I get.</p>
<p>First is that I always save a copy of the page where I find an image online as a way of taking a snapshot of the permissions it was marked with when I downloaded it. To that end, I use the MHT format to save the entire page, including the photo itself, into one file, which I name according to a description of the photo.</p>
<p>All MHT is as a format is MIME-encoded HTML. That’s what is used for email attachments. So, don’t let anyone tell you that it’s a “Microsoft proprietary” format. It’s not. Internet Explorer, does, however, support it out of the box, while Firefox requires the <a href="https://addons.mozilla.org/en-US/firefox/addon/8051">UnMHT</a> extension to be able to save or open the format.</p>
<p>Then, where to get the images. I get 90%+ of them from Flickr’s Creative Commons section. My site used to have an app that helped search through those, but it’s been down for a while and I’m not sure when/if I’ll put it back up. In the mean time, I actually use a simple bookmarklet that prompts for a term and then searches for photos based on that. </p>
<p><b>Flickr Search Bookmarklet</b> </p>
<p>Put the following into a new bookmark as the URL, putting it all on one line.</p>
<pre class="brush: javascript;">javascript:Qr=prompt('Tag...','');if(Qr)location.href='http://www.flickr.com/search/?q='+escape(Qr)+'&amp;l=commderiv&amp;ss=0&amp;ct=0&amp;s=int&amp;m=tags'</pre>
<p><b></b></p>
<p><b>Thesaurus Search Bookmarklet</b> </p>
<p>And, since it can be a trick to figure out which term to actually search for in order to get something you want on a slide, I’ve got a similar bookmarklet for a Thesaurus search. </p>
<pre class="brush: javascript;">javascript:Qr=document.getSelection();if(!Qr){void(Qr=prompt('Enter%20word%20to%20find%20in%20Merriam-Webster%20Thesaurus:',''))}if(Qr)location.href='http://www.merriam-webster.com/thesaurus/'+escape(Qr)+'%20'</pre>
<p>I tend to cycle through those, fairly quickly coming up with stuff I can use. It generally works well to search for abstract terms like “fast”, “angry”, “calm”, etc. to get good slide material and tends to cut down on the tendency to have slides made up of images of the exact words you’re using, which feels weird to the audience.</p>
<p>Overall, this set of tools lets me work on multiple presentations at once, throw one together fairly quickly and has generally gotten me quite a few compliments when given in places where the bullet-point brigade is the norm. Hopefully, they can help you too.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2009/03/23/my-toolkit-for-powerpoint-and-keynote-presentations/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Inappropriate Followup Marketing</title>
		<link>http://www.wynia.org/wordpress/2009/03/19/inappropriate-followup-marketing/</link>
		<comments>http://www.wynia.org/wordpress/2009/03/19/inappropriate-followup-marketing/#comments</comments>
		<pubDate>Thu, 19 Mar 2009 22:20:00 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/2009/03/19/inappropriate-followup-marketing/</guid>
		<description><![CDATA[Today, I got 3 separate marketing emails that both completely wasted the opportunity that I offer them as a customer. In both cases, a different message would have almost certainly resulted in me spending money instead of just deleting them.
The first one was from Lenovo (formerly IBM), from whom I bought the ThinkPad laptop I’m [...]]]></description>
			<content:encoded><![CDATA[<p>Today, I got 3 separate marketing emails that both completely wasted the opportunity that I offer them as a customer. In both cases, a different message would have almost certainly resulted in me spending money instead of just deleting them.</p>
<p>The first one was from Lenovo (formerly IBM), from whom I bought the ThinkPad laptop I’m using to write this post. What the email contained was a list of laptops from the mid-level to high end. Given that the existing laptop is 9 months into my normal 24 month replacement cycle, I’m a solid 15 months from buying a new laptop.</p>
<p>I <strong>am, </strong>however, ripe for some new accessories. I’ve been thinking about getting a docking station, just had my thumb drive die and would like a larger travel mouse. Given that they know EXACTLY which laptop I have, mentioning any one of those items would have had a pretty good chance of getting me to spend a little.</p>
<p>The second was from MacMall. I bought a Mac mini from them a couple of months ago for web testing and iPhone development. Guess what they’re ad was selling? The great deal they’re running on Mac mini’s. Exactly how many Mac mini’s does the average customer buy in a 2 month period? I have, however, contemplated whether I want to upgrade iLife from ‘08 (which I had from last year) to ‘09.</p>
<p>And, finally was the one from the car dealership. Back in December, I bought a 2006 Chrysler 300. The ad went on and on about their new promotion for people to lower their payments by trading their used car in on a new one (aside: these kinds of deals are usually done by getting you a loan where you owe more than the car is worth and not exactly the deals they sound like). They specifically mentioned trading in my “2006 Chrysler 300”, clearly an attempt at customizing the marketing message. But, I don’t WANT to trade this car in. </p>
<p>What approach would I have taken if I worked for the car dealer? Any of the following:</p>
<ul>
<li>It’s been about 3 months since you bought that Chrysler 300. Keep it running smoothly by having our guys handle your scheduled maintenance. Because of the harsh MN winter, Chrysler’s recommendations mean you are probably due for an oil change. Schedule one today.</li>
<li>We hope you’re enjoying the car you bought from us a while back. We also know that a lot of households have more than one car and you may have been thinking of trading in your other car. Now’s a great time to do that because…</li>
<li>Now that the snow has melted, is that Chrysler 300 you bought back in December covered in salt and looking a little less shiny than it used to? Have the guys in our detailing shop clean it up and make it look just like it did when you bought it.</li>
</ul>
<p>When you’ve got data available like exactly what I bought and when, combined with things like cars needing oil changes every 3000-5000 miles and knowing where I live, etc., you ought to be able to do some really specific targeting of your message, especially when we’re talking about email. However, given how nearly everything that gets sent out these days is embedding at the very least my name, you might as well make the entire message tailored to my situation. </p>
<p>Of course, if your marketing team doesn’t have access to that kind of data, I *ahem* know of some good people who can help with reporting, business intelligence and building web applications to help do a better job.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2009/03/19/inappropriate-followup-marketing/feed/</wfw:commentRss>
		</item>
		<item>
		<title>1600 Miles to Myrtle Beach. Full tank of gas, half a pack of gum, it&#8217;s dark and I own sunglasses.</title>
		<link>http://www.wynia.org/wordpress/2009/03/17/1600-miles-to-myrtle-beach-full-tank-of-gas-half-a-pack-of-gum-its-dark-and-i-own-sunglasses/</link>
		<comments>http://www.wynia.org/wordpress/2009/03/17/1600-miles-to-myrtle-beach-full-tank-of-gas-half-a-pack-of-gum-its-dark-and-i-own-sunglasses/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 02:44:00 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[travel]]></category>

		<category><![CDATA[conference]]></category>

		<category><![CDATA[createsouth]]></category>

		<category><![CDATA[roadtrip]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/2009/03/17/1600-miles-to-myrtle-beach-full-tank-of-gas-half-a-pack-of-gum-its-dark-and-i-own-sunglasses/</guid>
		<description><![CDATA[Last year, as I watched Dave Slusher and his compatriots put together the CREATE South conference, I saw something special about the approach and started planning to go. Unfortunately, the realities of life got in the way and I wasn’t able to make it. I still wanted to see it pulled off, so I ended [...]]]></description>
			<content:encoded><![CDATA[<p>Last year, as I watched Dave Slusher and his compatriots put together the <a href="http://www.createsouth.org">CREATE South</a> conference, I saw something special about the approach and started planning to go. Unfortunately, the realities of life got in the way and I wasn’t able to make it. I still wanted to see it pulled off, so I ended up financially contributing as a sponsor.</p>
<p>When I heard how well the day went, I really hoped for things to work out this year. When they announced a date (April 25), I pretty much just announced to those who had a stake that I *was* going. I both want to re-invigorate my creative pursuits AND I desperately need a break.</p>
<p>In thinking about my options for getting there, a quick look at a map raised the thought of driving it and seeing some areas of the country that I’ve never been through. After a few discussions and some other people’s conflicts, the end result is that I’m going to be taking a 3200 mile round road trip. I’m really excited, both for the drive and meeting up in person with some of the people I’ve been hanging out with online for a while now.</p>
<p>I bought a car in December and it’s comfortable and nicely equipped to cover ~15 states in a week. Many of my best ideas come to me when I’m driving and being behind the wheel offers a good opportunity for thinking and reflection. Because I’m going by myself, I can eat when I’m hungry, sleep when I’m tired, stop and look at whatever I feel like and generally take the break I’ve been needing.</p>
<p>If either my route there (kind of winding and meandering) or the route back (just the fastest Google maps route back to Minneapolis) takes me near where you live, let me know and I’ll maybe drop in for a cup of coffee (gotta keep my eyes open).</p>
<h3>My Route to CREATE South 2009</h3>
<p><iframe height="350" marginheight="0" src="http://maps.google.com/maps?f=d&amp;source=embed&amp;saddr=Minneapolis,+MN&amp;daddr=Cedar+Rapids,+IA+to:St.+Louis,+MO+to:Nashville,+TN+to:Birmingham,+AL+to:Atlanta,+GA+to:Myrtle+Beach,+SC&amp;hl=en&amp;geocode=&amp;mra=ls&amp;dirflg=h&amp;sll=39.232253,-86.132812&amp;sspn=14.246686,37.573242&amp;ie=UTF8&amp;s=AARTsJrQuBtbsvhqgooANtiHkF2R-LgN-g&amp;ll=39.232253,-86.132812&amp;spn=11.906609,18.676758&amp;z=5&amp;output=embed" frameborder="0" width="425" marginwidth="0" scrolling="no"></iframe><br /><small><a style="text-align: left; color: #0000ff" href="http://maps.google.com/maps?f=d&amp;source=embed&amp;saddr=Minneapolis,+MN&amp;daddr=Cedar+Rapids,+IA+to:St.+Louis,+MO+to:Nashville,+TN+to:Birmingham,+AL+to:Atlanta,+GA+to:Myrtle+Beach,+SC&amp;hl=en&amp;geocode=&amp;mra=ls&amp;dirflg=h&amp;sll=39.232253,-86.132812&amp;sspn=14.246686,37.573242&amp;ie=UTF8&amp;ll=39.232253,-86.132812&amp;spn=11.906609,18.676758&amp;z=5">View Larger Map</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2009/03/17/1600-miles-to-myrtle-beach-full-tank-of-gas-half-a-pack-of-gum-its-dark-and-i-own-sunglasses/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Arise, Zombie Site!</title>
		<link>http://www.wynia.org/wordpress/2009/03/16/arise-zombie-site/</link>
		<comments>http://www.wynia.org/wordpress/2009/03/16/arise-zombie-site/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 01:57:48 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/2009/03/16/arise-zombie-site/</guid>
		<description><![CDATA[While my writing on this site has definitely gone through boom and bust cycles, the last 6 months’ worth has been the biggest bust since I started regular writing online. If I were super-paranoid, the thought might occur that when I stop writing, the economy hiccups as well. Fortunately, I know the difference between correlation [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Photo by Eric Ingrum" href="http://www.flickr.com/photos/ericingrum/2600431878/"><img style="border-right-width: 0px; margin: 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="zombie photo by Eric Ingrum" border="0" alt="zombie photo by Eric Ingrum" align="right" src="http://www.wynia.org/wordpress/wp-content/uploads/2009/03/zombie.jpg" width="346" height="248"></a>While my writing on this site has definitely gone through boom and bust cycles, the last 6 months’ worth has been the biggest bust since I started regular writing online. If I were super-paranoid, the thought might occur that when I stop writing, the economy hiccups as well. Fortunately, I know the difference between correlation and causation and can’t take the blame for global financial disaster (which is good because I’m not up for being a worldwide scapegoat).</p>
<p>I’ve spent this entire dry spell working like a mad man (along with some personal and family issues). The work’s been on a project for what’s become my only client during that time. I’m loving the work, but putting in some insane hours to try to get it out the door by April and that’s left little time for ANYTHING else. While the pressure is stressful, the work itself is a blast and confirms how great it can be to do what you love for a living. The fact that I’m raking in the ducats in the process doesn’t hurt either. </p>
<p>This morning, the president of the company where I’ve been doing this work mentioned that he took a look at this site as a result of taking a look at my LinkedIn profile. At that moment, I felt a pang of knowing how seldom it’s been updated lately. Given how I have “Software Consultant, Writer and Geek” as my email signature, shining a light on my patterns prompted a bit of reflection on my inclusion of “Writer” in that signature. </p>
<p>Writing has always helped me clarify my thinking, work through my own questions and issues, helped relax me and lots of other benefits that I’m not willing to give up permanently by abandoning my “writer” identity. So, on the drive home tonight, I did some thinking about what exactly keeps me from posting. I was somewhat surprised to find my own standards for what constitutes a proper “post” has drifted upward to longer articles and tutorials, which sets a much higher threshold to clear before posting something.</p>
<p>SO, I decided that it’s time to resurrect this sorta dead zombie site into something resembling life. Part of that is to reset my own ideas of what kind of thing I post here, which likely means more short posts and probably more frivolity.</p>
<p>As always, though, the point of this site is a place for me to talk about whatever I’m interested in. If you happen to be interested in the same kinds of things, it’ll probably be a good change. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2009/03/16/arise-zombie-site/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Secret of Success: Bad Economy or No</title>
		<link>http://www.wynia.org/wordpress/2009/02/17/the-secret-of-success-bad-economy-or-no/</link>
		<comments>http://www.wynia.org/wordpress/2009/02/17/the-secret-of-success-bad-economy-or-no/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 05:15:02 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[Business]]></category>

		<category><![CDATA[Career]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/?p=1220</guid>
		<description><![CDATA[There are a few things that are pretty much certain whenever economic clouds form on the horizon. One is that people enroll in community colleges/vocational programs and that every newspaper, magazine, TV show (and in the last 15 years, web site) starts cranking out articles on how to keep your job, get more business, etc. [...]]]></description>
			<content:encoded><![CDATA[<p>There are a few things that are pretty much certain whenever economic clouds form on the horizon. One is that people enroll in community colleges/vocational programs and that every newspaper, magazine, TV show (and in the last 15 years, web site) starts cranking out articles on how to keep your job, get more business, etc. in &#034;these troubled times&#034;. Many of those articles make it sound like they&#039;re sharing some deeply held secret that&#039;s been locked away in the vault since the last downturn.</p>
<p>However, the thing is that the stuff that garners success is the same<sup>1</sup>: Adding Visible Value. In the business/career areas of life, if you focus on that for 80% of your effort, you&#039;ll be surprised how well things turn out.</p>
<p>What exactly do I mean by Adding Visible Value?</p>
<p>Lets start with how every economic exchange works. First, there must be something which is, to one degree or another, scarce. That scarcity can be obvious and straightforward, like rare elements: gold, silver, platinum. Less obvious at first glance are the instances of scarcity like 1-on-1 access to arithmetic instruction or getting to see a sporting event not on free-to-air TV.</p>
<p>However, in all cases, there is something which is limited and someone who is the gatekeeper of that scarce resource. If you want what&#039;s on the other side of the gate, you&#039;ve got to pay the gatekeeper. And, depending on how many people are standing at the gate with you (demand), the gatekeeper&#039;s price changes.</p>
<p>Of course, as people pay to get access to the scarce resource, they may not be paying a whole lot of attention to what they just got. So, as they&#039;re walking away, they may start to question why they&#039;re paying that gatekeeper at all. They may start asking other patrons or just themselves whether they&#039;re getting their money&#039;s worth. And, if the answer is &#034;no&#034;, they&#039;re likely to quit paying the gatekeeper.</p>
<p>Now most employees and many businesses (that means you and I) are the gatekeepers of a scarce resource: our time. As we build a career/business, we fence off a portion of our time and offer access to it, for the purposes of applying it to specific tasks, in exchange for money and some non-tangible stuff as well.</p>
<p>There are only so many hours in a day and a certain number of other people attempting to sell blocks of time working on the same tasks. Thus, the marketplace where we earn our salary, hourly wage, billable rate, etc.</p>
<p>The key is that when that exchange happens, we have to actually add something worth buying to the equation. If you put in 8 hours and earn whatever 8 hours of your work is worth, is the person who paid for it actually getting something for that money?</p>
<p>In some jobs, that can mean that you were present. In some, that you attached a certain number of doors to cars. In others, that you served meals to customers. For me, it&#039;s that I solved problems for my client using software.</p>
<p>Now, I know that some of you are saying that you DO deliver that value, day in and day out and still find things not working out. I used to say the same thing, until someone pointed out that no one KNEW that I put in that effort. No one knew that I rewrote the entire malfunctioning module myself overnight to get it done on time.</p>
<p>My efforts were real, but invisible. The person paying for my efforts wasn&#039;t seeing them. When I started focusing on both delivering value and making sure that the person holding the checkbook was aware of that delivered value, my working life started clicking MUCH better.</p>
<p>Yes, you can still get laid off or lose a client when doing this (in the United States, you&#039;re more likely to lose your job because of something outside of your actual performance than for actually not doing your job). However, among those people I watch who lose their job, but work hard to deliver visible value, they seem to land on their feet more soundly. They tend to find a new gig more quickly and otherwise just have more success, even in bad times, even with periodic failures than those who focus on making sure they are getting their &#034;fair share&#034; out of the equation.</p>
<p>Since taking on this attitude, I find that I am always busy with work. Currently, I&#039;m actually so overbooked (on track for 300 billable hours this month instead of my normally budgeted 167) that this site and nearly all of my online activity has dropped to a standstill. That, despite some of the people holding the checkbook laying other people off, doing paycuts, etc. Why? Because it&#039;s clear to them that I am providing clear-cut value for every dollar they&#039;re paying. They get functioning software solutions to the problem at hand.</p>
<p><sup>1</sup>Sure, at the edges there are opportunities that change a little bit, but on the whole, it IS the same.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2009/02/17/the-secret-of-success-bad-economy-or-no/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Criticizing the Work Rather Than the Person</title>
		<link>http://www.wynia.org/wordpress/2008/12/18/criticizing-the-work-rather-than-the-person/</link>
		<comments>http://www.wynia.org/wordpress/2008/12/18/criticizing-the-work-rather-than-the-person/#comments</comments>
		<pubDate>Thu, 18 Dec 2008 12:17:05 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[Career]]></category>

		<category><![CDATA[Essays and Rants]]></category>

		<category><![CDATA[General]]></category>

		<category><![CDATA[Personal Development]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/?p=1204</guid>
		<description><![CDATA[Yesterday, I overheard a conversation about the recent remake of The Day the Earth Stood Still. One of the participants was commenting on Keanu Reeves&#039; performance in the movie. Given my attendance of several Keanufest film festivals 10 or so years ago (think more take-a-drink-for-every-WHOA instead of taking-Keanu-seriously-as-an-actor), I chuckled to myself as I listened [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday, I overheard a conversation about the recent remake of <a href="http://www.imdb.com/title/tt0970416/">The Day the Earth Stood Still</a>. One of the participants was commenting on Keanu Reeves&#039; performance in the movie. Given my attendance of several Keanufest film festivals 10 or so years ago (think more take-a-drink-for-every-WHOA instead of taking-Keanu-seriously-as-an-actor), I chuckled to myself as I listened to what turned out to be a rather lengthy rant on his wooden acting style and stilted delivery of lines.</p>
<p>Then his conversational partner responded. She launched into her own rant about how it was unfair to pick on him and how celebrities are dragged through the mud because of their drinking/personal problems/relationships/etc. As I walked out of earshot, I was struck by how many people, like her, seem to completely miss the difference between the type of criticism that is warranted and justified and the kind that isn&#039;t.</p>
<p>The original evisceration was a criticism of Keanu&#039;s performance in a specific movie (or at least the trailers of it) and his body of work. Given that Keanu has chosen the profession of film actor, and viewers of the films that he has starred in are customers of that work, that is the very kind of criticism that is 100% legitimate.</p>
<p>Granted, the credibility of a given critic of that work should be taken into consideration. A well-respected critic or actor, or a director of movies probably has more insight into the quality of the work than that dude at the end of the bar with pretzel salt stuck on his lip, but it&#039;s at least directly related to the actual work.</p>
<p>If you start talking about how the movie will likely suck because you didn&#039;t like Dogstar, that band he played bass for in the 90&#039;s or because you heard some unsubstantiated rumor about how he once stared down a llama in the mountains of Peru for 16 hours straight and that seriously creeps you out, it&#039;s got nothing to do with the work itself.</p>
<p>Now, in a celebrity context, some of the non-work criticism has some legitimacy due to the high salaries often being paid so that people will fill the role of &#034;movie star&#034; as much or more than &#034;film actor&#034;.</p>
<p>However, I see this same thing in the workplace on a daily basis. I believe that, to as large a degree as can be achieved, the workplace should be a <a href="http://en.wikipedia.org/wiki/Meritocracy">meritocracy</a>. The best idea/solution/approach should win and should compete on its actual merits.</p>
<p>Sadly, most workplaces are filled with <a href="http://en.wikipedia.org/wiki/Ad_hominem">ad hominem</a> attacks on ideas and solutions that people don&#039;t agree with and <a href="http://en.wikipedia.org/wiki/Ipse-dixitism">ipse-dixitism</a>-based support for those they do agree with.</p>
<p>&#034;This approach to solving the problem won&#039;t work because Bill is an idiot.&#034;<br />
&#034;No, I didn&#039;t actually read the design document, but I&#039;m sure it&#039;s great because Susan is really bright.&#034;</p>
<p>Both sides of this coin bother me. That&#039;s because &#034;idiots&#034; often have brilliant ideas and &#034;geniuses&#034; can come up with some of the stupidest solutions you&#039;ll ever see. When you focus on the person instead of on the work itself, you can often completely miss that reality.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2008/12/18/criticizing-the-work-rather-than-the-person/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ASP.NET MVC Plugins</title>
		<link>http://www.wynia.org/wordpress/2008/12/05/aspnet-mvc-plugins/</link>
		<comments>http://www.wynia.org/wordpress/2008/12/05/aspnet-mvc-plugins/#comments</comments>
		<pubDate>Sat, 06 Dec 2008 00:19:35 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[General]]></category>

		<category><![CDATA[Half-baked Ideas]]></category>

		<category><![CDATA[Other Programming]]></category>

		<category><![CDATA[Programming]]></category>

		<category><![CDATA[Technology]]></category>

		<category><![CDATA[Web Development]]></category>

		<category><![CDATA[plug in]]></category>

		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/?p=1197</guid>
		<description><![CDATA[
One of the last things I posted here was how I was toying with flexible content and template solutions in ASP.NET MVC. For that project, we&#039;re going forward with the solution that emerged from that experimentation and I&#039;m excited to see how it turns out. 
Along the way, an interesting question about how to create what [...]]]></description>
			<content:encoded><![CDATA[<div class="flickr-illustrate"><a href="http://flickr.com/photos/98274023@N00/2309760782" title="unplugged"><img src="http://farm3.static.flickr.com/2117/2309760782_f35cf639e8_m.jpg" /></a></div>
<p>One of the last things I posted here was how I was toying with flexible content and template solutions in ASP.NET MVC. For that project, we&#039;re going forward with the solution that emerged from that experimentation and I&#039;m excited to see how it turns out. </p>
<p>Along the way, an interesting question about how to create what are essentially plugins for the MVC framework. Basically, if what you&#039;re building is an MVC app that will be deployed in dozens, hundreds or thousands of independent implementations, it becomes obvious pretty quickly that you need most of the pieces of the application to be modular so they can added/removed/overridden at least to a minimal level.</p>
<p>I&#039;ve come up with what I think is a workable solution, which is pretty much just gathering up some of the other ideas already out there into a quick-n-dirty working prototype. The basic idea is this:</p>
<p>Put an encapsulated set of model classes (or none if you depend on central model classes), controller classes and a set of views into its own DLL. The views (using the default WebForms view engine, they&#039;re aspx files) go in as resources.</p>
<p>Pull that DLL into your MVC application and the MVC stack inside your &#034;plugin&#034; will work just like if those bits had been a &#034;natural&#034; part of the base MVC application. In fact actually creating the pieces from inside the main app and then moving them over to their own project is the quickest way I found to actually create the bits for the plugins.</p>
<p>When the question came up, I vaguely remembered seeing a question on StackOverflow about how to put views into an assembly/DLL. That <a href="http://stackoverflow.com/questions/19746/views-in-seperate-assemblies-in-aspnet-mvc">question</a> along with <a href="http://stackoverflow.com/questions/236972/using-virtualpathprovider-to-load-aspnet-mvc-views-from-dlls">one on VirtualPathProviders</a> provided most of the kernel of what I needed.</p>
<p>So, on to how to actually do this. </p>
<p>Start with a standard ASP.NET MVC project (in beta as of the time of this writing). Add whatever model, controller and view elements you would if this bit of functionality wasn&#039;t a plugin (this also makes this approach far easier to work if you decide later to pull something out of the core and into a plugin).</p>
<p>Add a Class Library project that&#039;s compatible with MVC (adding System.Web.MVC, etc) for your plugin and cut/paste the components into your new project. The views need to be changed to be embedded resources via the properties pane.</p>
<p>Next, you&#039;ll need to tweak your controller methods just a bit if you&#039;re using the standard &#034;return View();&#034; return approach. Change that return line to:</p>
<pre class="brush: csharp;">
ViewResult RenderedView = View(&quot;~/Plugin/YOURDLL.dll/FULLNAME_YOUR_VIEW.aspx&quot;);
return RenderedView;
</pre>
<p>Getting that path right can be a bit tricky at first. The &#034;~/Plugin/&#034; part is pretty much like a route. It&#039;s probably possible/better to actually make that a route, but I haven&#039;t looked into it. Then you&#039;ve got the filename of your DLL. It&#039;s the actual view name that isn&#039;t straightforward. It&#039;s not the file name as you saw it in Visual Studio. Instead, it&#039;s the fully-qualified name of the view class, followed by .aspx.</p>
<p>I finally figured that out by loading my DLL in Reflector and looking at the resources folder that way. If you have trouble getting the name right, that&#039;s a good thing to try.</p>
<p>Once that&#039;s done, make sure the class library builds and add a reference in your MVC app to either the project or the output DLL. Either way, the DLL will end up in the &#034;bin&#034; directory of your MVC app.</p>
<p>Now you&#039;ve got to modify your MVC app to actually look at the plugin(s) for the views at that long path. The models and controller classes are handled by setting the right namespaces and imports.</p>
<p>This is where the VirtualPathProvider comes in. I created a &#034;Lib&#034; directory in the MVC app and added a class called AssemblyResourceProvider. In there, you set that &#034;~/Plugin&#034; path and handle the digging into the assembly for the view. If you&#039;re OK with that path, you can just use my class wholesale.</p>
<p>Lastly, you need to register that path provider in the global.asax:</p>
<pre class="brush: csharp;">
System.Web.Hosting.HostingEnvironment.RegisterVirtualPathProvider(new AssemblyResourceProvider());
</pre>
<p>The most straightforward way to &#034;get&#034; it is just to take a look at my project. You can <a href="http://www.wynia.org/download/aspnetmvc-plugin-poc/POC.MVCPluginDemo.zip">download the solution (VStudio2008)</a> and dig through it. The included plugin is available at this URL:</p>
<pre class="brush: javascript;">
http://server:PORT/BasicExample/Display/Whatever
</pre>
<h3>Where To Go From Here</h3>
<p>One of the bits that this doesn&#039;t address, but that will be necessary at least in my implementation of this concept is the registering/unregistering of these plugins with the application. The way it is right now, it&#039;s entirely held together by convention. You make links to the plugin controller actions and if the plugin is there, it works. Otherwise, it breaks.</p>
<p>The most obvious solutions to this to me are to add to the Assembly information or other meta-data/manifest in it explaining what&#039;s in the plugin, which controllers and methods, etc. The hosting app would then watch the &#034;plugin&#034; path (as defined in the VirtualPathProvider) and take over from there as to whether they&#039;re automatically available or need additional &#034;activation&#034;, etc.</p>
<p>I&#039;d love to see/hear improvements or if there&#039;s an entirely better way to do it that means I should scratch this one. Let me know.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2008/12/05/aspnet-mvc-plugins/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Archiving My Twitter History</title>
		<link>http://www.wynia.org/wordpress/2008/11/05/archiving-my-twitter-history/</link>
		<comments>http://www.wynia.org/wordpress/2008/11/05/archiving-my-twitter-history/#comments</comments>
		<pubDate>Thu, 06 Nov 2008 03:59:28 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[Web Development]]></category>

		<category><![CDATA[Web Services]]></category>

		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/?p=1189</guid>
		<description><![CDATA[
I&#039;ve been using Twitter off and on since late 2006 and have racked up almost 2000 entries in that time. Earlier this year, when Twitter hit stretches where the service was out for entire days at a time, I started using Friendfeed to do the actual posting and pushed those posts over to Twitter.
Part of [...]]]></description>
			<content:encoded><![CDATA[<div style="float:right;margin:20px;border:solid black 1px;"><a href="http://flickr.com/photos/37996586683@N01/2619213845" title="3D Fail Whale"><img src="http://farm4.static.flickr.com/3082/2619213845_7a5f2fdccf_m.jpg" /></a></div>
<p>I&#039;ve been using <a href="http://twitter.com">Twitter</a> off and on since late 2006 and have racked up <a href="http://twitter.com/jwynia">almost 2000 entries</a> in that time. Earlier this year, when Twitter hit stretches where the service was out for entire days at a time, I started using <a href="http://friendfeed.com/jwynia">Friendfeed</a> to do the actual posting and pushed those posts over to Twitter.</p>
<p>Part of what sent me over to Friendfeed was a sinking feeling that most of those early posts would go down with the ship and I wanted to get some redundancy in where that ephemera was showing up online. Most of those posts were throwaway (see <a href="http://en.wikipedia.org/wiki/Sturgeon's_law">Sturgeon&#039;s Law</a>) but I also know how much I enjoy going through slices of complete ordinariness after my memory of the events has faded. So, I want to keep a copy of all of this stuff and figure out later what&#039;s interesting.</p>
<p>At any rate, given Twitter&#039;s problems, I tried to get those old posts out whenever things would work for a patch. Unfortunately, even when things were working, if you went back through the pages of the archive, you&#039;d get about 10 pages in and hit a wall. Given that my Twitter history is about 100 pages long, that left the vast majority of my posts behind that wall, possibly never to be seen again.</p>
<p>However, not wanting to resign myself to just having an archive going forward, I put an entry on my calendar to keep trying every few weeks, just in case they eventually fixed things. So, tonight, the reminder popped up and, what do you know? I could go through all 99 pages of my archive.</p>
<p>Not wanting to lose what very well may be a 1-time window of opportunity (they&#039;ve pretty much said that the instant messaging isn&#039;t coming back), I banged out a quick console app to grab all of my posts into files for later processing.</p>
<p>It&#039;s mostly copy-n-paste stuff (don&#039;t judge, it was written while I was eating curly fries and a roast beef sandwich), but I did include bits to hold off for an hour and wait if it gets throttled by the 100 requests per hour limit from Twitter. If you&#039;ve got a lot of stuff on Twitter, running this may best be done overnight.</p>
<p>At any rate, it grabs the posts 20 at a time and saves them to a directory as .atom files. You set the Twitter username and password in the app.config file like this:</p>
<pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;
&lt;configuration&gt;
  &lt;appSettings&gt;
    &lt;add key=&quot;TwitterUsername&quot; value=&quot;jwynia&quot;/&gt;
    &lt;add key=&quot;TwitterPassword&quot; value=&quot;IM_NOT_THAT_DUMB&quot;/&gt;
  &lt;/appSettings&gt;
&lt;/configuration&gt;
</pre>
<p>And then a basic console app (with some extra namespaces from stuff I threw away still in there), looks like this. I didn&#039;t bother with any of the API wrappers, just using basic .NET code to do it.</p>
<pre class="brush: csharp;">
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Collections.Specialized;
using System.Security;
using System.Net;
using System.IO;
using System.Xml;
using System.Xml.XPath;

namespace TwitterArchiver
{
    class Program
    {
        public static String Username {get;set;}
        public static String Password { get; set; }
        public static NetworkCredential TwitterCredential { get; set; }
        static void Main(string[] args)
        {
            NameValueCollection appSettings = ConfigurationManager.AppSettings;
            Username = appSettings.Get(&quot;TwitterUsername&quot;);
            Password = appSettings.Get(&quot;TwitterPassword&quot;);
            TwitterCredential = new NetworkCredential(Username, Password);
            String OutputDir = Username + &quot;-export&quot;;
            Directory.CreateDirectory(OutputDir);

            int NumberOfPages = GetUserPageCount();
            for (int i = 1; i &lt;= NumberOfPages; i++)
            {
                String ArchivePage = GetArchivePage(i);
                WriteStringToFile(ArchivePage, OutputDir + &quot;/&quot; + Username + &quot;-page-&quot; + i.ToString() + &quot;.atom&quot;);
                System.Threading.Thread.Sleep(1000);
            }

            Console.WriteLine(&quot;=====Press any key to continue=====&quot;);
            Console.ReadLine();

        }
        public static void WriteStringToFile(String InputString, String Filename)
        {
            StreamWriter sw = new StreamWriter(Filename);
            sw.WriteLine(InputString);
            sw.Close();
        }
        public static String GetArchivePage(int PageNumber)
        {
            Uri TwitterBaseUri = new Uri(&quot;http://twitter.com/statuses/user_timeline/&quot; + Username + &quot;.atom?page=&quot; + PageNumber.ToString());
            CredentialCache myCache = new CredentialCache();
            myCache.Add(TwitterBaseUri, &quot;Basic&quot;, TwitterCredential);

            WebRequest request = WebRequest.Create(TwitterBaseUri);
            request.Credentials = myCache;
            string responseFromServer;
            try
            {
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Console.WriteLine(response.StatusDescription);
                Stream dataStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(dataStream);
                responseFromServer = reader.ReadToEnd();
                reader.Close();

                dataStream.Close();
                response.Close();
            }
            catch
            {
                System.Threading.Thread.Sleep(1000 * 3600);
                responseFromServer = GetArchivePage(PageNumber);
            }
            return responseFromServer;
        }
        public static int GetUserPageCount(){
            Uri TwitterBaseUri = new Uri(&quot; http://twitter.com/users/show/&quot; + Username + &quot;.xml&quot;);
            CredentialCache myCache = new CredentialCache();
            myCache.Add(TwitterBaseUri, &quot;Basic&quot;, TwitterCredential);

            WebRequest request = WebRequest.Create(TwitterBaseUri);
            request.Credentials = myCache;
            int NumberOfPages = 0;
            try
            {
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Console.WriteLine(response.StatusDescription);
                Stream dataStream = response.GetResponseStream();
                XPathDocument ResponseDoc = new XPathDocument(dataStream);
                XPathNavigator ResponseNavigator = ResponseDoc.CreateNavigator();
                XPathNodeIterator ResponseIterator = ResponseNavigator.Select(&quot;//user/statuses_count&quot;);
                ResponseIterator.MoveNext();
                int PostCount = int.Parse(ResponseIterator.Current.Value);
                dataStream.Close();
                response.Close();
                NumberOfPages = PostCount / 20;
                if ((PostCount % 20) &gt; 0)
                {
                    NumberOfPages++;
                }
            }
            catch
            {
                System.Threading.Thread.Sleep(1000 * 3600);
                NumberOfPages = GetUserPageCount();
            }
            return NumberOfPages;
        }

    }
}
</pre>
<p>Build and run that and you, too, can see what you ate for dinner 2 years ago. I think I might put together a highlight post of my personal favorites from my archive to make this worthwhile.</p>
<p>At any rate, I need to get back to more pressing matters (the economy might be slow, but I&#039;m busier than ever right now and what looks like into 2009, so I shouldn&#039;t complain). Later.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2008/11/05/archiving-my-twitter-history/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ORDER BY BiggestProblem DESC</title>
		<link>http://www.wynia.org/wordpress/2008/10/21/order-by-biggestproblem-desc/</link>
		<comments>http://www.wynia.org/wordpress/2008/10/21/order-by-biggestproblem-desc/#comments</comments>
		<pubDate>Wed, 22 Oct 2008 01:29:30 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[Business]]></category>

		<category><![CDATA[Essays and Rants]]></category>

		<category><![CDATA[Lifehack]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/?p=1186</guid>
		<description><![CDATA[I caught a little snippet on NPR this weekend that fits in well with what I&#039;ve been hearing a lot of on the radio, TV, newspapers and the like. They were interviewing someone who was making drastic changes to their life and spending due to a loss of one of the family incomes.
I had a [...]]]></description>
			<content:encoded><![CDATA[<p>I caught a little snippet on NPR this weekend that fits in well with what I&#039;ve been hearing a lot of on the radio, TV, newspapers and the like. They were interviewing someone who was making drastic changes to their life and spending due to a loss of one of the family incomes.</p>
<p>I had a lot of reactions that made me wonder how they afforded their previous lifestyle if the loss of a part-time job led to things like moving into the cellar to avoid heating the rest of the house. Lots of these stories on TV and radio and in magazines make me wonder how many of these are stories that happen every day, bad economy or not, but we now have crowds of journalists digging to find them because it makes for a good story now.</p>
<p>Digressions aside, one of their cost-cutting measures stuck out at me: dramatically altering what they wear to get down to only one load of laundry a week. What I heard sounded like there was a lot of effort for this and hit me funny because we got a new washer and dryer a couple of weeks ago and an image of those yellow EnergyGuide cards from both popped into my head.</p>
<p>The washing machine&#039;s card estimated that our ANNUAL energy cost for both electricity and gas (for our hot water) was . . . $11. That&#039;s right. Less than a buck a month to wash all of our clothes. </p>
<p>I&#039;m not going to pretend that I understand their situation, but, if we needed to find an extra $1000 or even $2000 a month to scrape by in tough times, it&#039;s pretty clear that OUR laundry isn&#039;t a gold mine of wasted cash, just waiting to be tapped into.</p>
<p>Whenever I see huge effort going into places where it isn&#039;t going to pay off proportional to that effort, I start thinking in SQL. To me, given the amount of data I work with on a daily basis, it&#039;s entirely natural to take all of the expenses and ORDER BY the biggest expense when it&#039;s time to start cutting.</p>
<p>And, if a quick look at the top of that list doesn&#039;t reveal much, a quick ORDER BY &#034;least important&#034; works as well to reveal the easiest cuts.</p>
<p>This approach is something that&#039;s impressed me with how the <a href="http://www.gatesfoundation.org/Pages/home.aspx">Bill and Melinda Gates Foundation</a> went about choosing the areas to attack first. Everything I&#039;ve seen about that process says that they were pre-occupied with choosing problems that affect the lives of the highest number of people. They did an ORDER BY &#034;number of people who die from ???&#034; on the giant spreadsheet of problems in this world.</p>
<p>When I go out of my way to consider a problem or situation through this lens, I often end up with a much more obvious place to start my solution. I think this pattern is really powerful. Imagine going through your typical cubicle farm and following this simple process:</p>
<ol>
<li>Ask everyone the following questions:
<ol>
<li>What is the most tedious computer-related task you do daily/weekly/monthly?
<li>How much time do you spend on it?
<li>If that task wasn&#039;t yours to do any more, what project that isn&#039;t being done now would you be able to do instead?
</ol>
<li>Compile those results, along with salary-type information and start doing ORDER BY&#039;s to see what the most tedious, time-wasting tasks are actually costing.
<li>Start tackling the top of the list with a portion of your IT budget.
<li>Act on that list of projects that aren&#039;t being done by enabling people to get moving.
</ol>
<p>Imagine how many thousands of hours, tens of thousands of dollars are being wasted on things like manually comparing 2 reports, line by line for discrepancies because there isn&#039;t a reconciliation report that SHOWS the differences. </p>
<p>Imagine how many good ideas for projects, ideas for improving your business, for making a better product or offering a better service are stagnating in your cubicle farm. And, imagine that, after eliminating or reducing these tedious tasks, instead of laying people off, you reinvest that previously wasted time into those ideas and project.</p>
<p>I have to wonder how this little exercise might affect an organization&#039;s position in a tough market.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2008/10/21/order-by-biggestproblem-desc/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ideas for Content Management in ASP.NET MVC</title>
		<link>http://www.wynia.org/wordpress/2008/10/05/ideas-for-content-management-in-aspnet-mvc/</link>
		<comments>http://www.wynia.org/wordpress/2008/10/05/ideas-for-content-management-in-aspnet-mvc/#comments</comments>
		<pubDate>Mon, 06 Oct 2008 02:11:47 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[General]]></category>

		<category><![CDATA[idea]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/?p=1169</guid>
		<description><![CDATA[
I&#039;ve been working on quite a few projects where I&#039;m either already directly developing within the ASP.NET MVC Framework or where the framework is prominently featured in my design/architecture documents. 
Because the framework is so new, there are still a few kinks and the patterns for how to do some common things haven&#039;t yet sorted [...]]]></description>
			<content:encoded><![CDATA[<div class="flickr-illustrate"><a href="http://flickr.com/photos/17731548@N00/981372736" title="Just Full Of Ideas"><img src="http://farm2.static.flickr.com/1288/981372736_74e2d99d8f_m.jpg" /></a></div>
<p>I&#039;ve been working on quite a few projects where I&#039;m either already directly developing within the ASP.NET MVC Framework or where the framework is prominently featured in my design/architecture documents. </p>
<p>Because the framework is so new, there are still a few kinks and the patterns for how to do some common things haven&#039;t yet sorted themselves out. One of those areas is how to handle content in web applications. </p>
<p>All of these projects are web applications that *do* stuff. Most of these apps are filled with pages to edit things, retrieve data, manage queues, etc. In other words, the custom business logic that&#039;s unique to my clients&#039; and my businesses. However, every single one also needs a batch of &#034;pages&#034; that *are* just basic content, with a few variables (like who&#039;s logged in) sprinkled through them.</p>
<p>The pattern that appears to be recommended by the ASP.NET team (via what is in the project template for the &#034;home&#034; and &#034;about us&#034; pages) basically requires a new view and a new action in a controller for each page, which, for those playing along at home, also requires rebuilding the app and redeploying.</p>
<p>Experience has taught me that solutions like that inevitably lead to pain. Once deployed, people always want to add pages, change them and otherwise mess with things more often than anyone wants to go through the build/deploy cycle. That leaves me looking for something that has the content more separated from the aspx setup than the default pattern seems to suggest.</p>
<p>It&#039;s at this point in the conversations I&#039;ve had about this topic that a variety of ASP.NET content management systems are brought up. The problem with all of them that I&#039;ve checked out from this angle boils down to what you consider the &#034;center&#034; of the app. </p>
<p>If your app is mostly content, with some custom functionality, these CMS solutions can work well. That&#039;s because all of them push you to do your custom functionality as a plugin to their framework. Beyond that, most of them don&#039;t handle or do well with things like variables being embedded in random paragraphs, extreme personalization, switching out paragraphs based on roles, etc.</p>
<p>OK, so that leads to using a CMS *library*. I looked at a few of those too. Several didn&#039;t do variables at all, another few were basically just wiki article storage, another few made everything &#034;news&#034; or &#034;blog posts&#034; and shoehorned it into that. The choices left me a little cold.</p>
<p>After looking at all of these possibilities, I wanted to take a stab at exploring a solution in a &#034;hands-on&#034; way as that approach tends to let me really get inside the problem. Often after working through a proof of concept, even if I end up going with one of the pre-packaged solutions, I can do a much better job of picking the right one and understanding the pro&#039;s and con&#039;s of each.</p>
<p>So, I took a bit of time to run through this problem and work it out in POC code. </p>
<p>The first place I looked was at the alternate view engines for MVC. Several of them look interesting, but I&#039;m planning on sticking with the default WebForms engine for all of the non-content functionality. That actually means not using the alternative view engine that actually implements the technology that I ended up using in my POC.</p>
<p>There are reasons for sticking to the WebForms view engine for at least the short term. One of them is that the default path inside the MVC ecosystem is going to get the most attention to work through patterns that work. Another is to leverage familiarity in the area where the hardest work has to be done in these apps (the custom business logic and rules). Several of the projects involve other devs, so going to MVC is already going to be an adaptation for them (though one I think is worth it).</p>
<p>OK. On to what I did in my POC. I knew that I wanted to leverage a templating system in some way. One that came up over and over when doing research was <a href="http://jakarta.apache.org/velocity">Jakarta Velocity</a>, a Java solution from the Apache Foundation (a group that usually thinks things through pretty carefully).</p>
<p><a href="http://nvelocity.sourceforge.net/">NVelocity</a> brings that engine to .NET, but hasn&#039;t been updated since 2003. Fortunately, the folks over at the Castle Project <a href="http://www.castleproject.org/others/nvelocity/index.html">picked NVelocity up</a> and have been maintaining it <a href="http://www.castleproject.org/others/nvelocity/improvements.html">improving</a> it as well. As I mentioned earlier, NVelocity is also one of the alternate view engines. Though I have reasons for not using it in that way, it is an additional vote of confidence for it.</p>
<p>NVelocity templates are written in the <a href="http://velocity.apache.org/engine/releases/velocity-1.5/vtl-reference-guide.html">Velocity Templating Language</a>, which gives all of the elements I need for the problems I&#039;m looking at right now.</p>
<p>The first problem I did run into when using NVelocity inside of my POC MVC app was that the basic Castle implementation wants the NVelocity templates on the disk as files. That defeats most of my purpose here as I want the templated content to come out of the database and be editable there as well.</p>
<p>Fortunately, <a href="http://www.codeproject.com/KB/aspnet/nvelocityaspnet.aspx">this CodeProject code</a> adds the ability to use NVelocity with a template that comes from<br />
a string instead of having to have them in individual files on disk by creating a memory-based engine implementation.</p>
<p>I basically aimed to have pages made up of snippets for this POC. A PageController action of Details() takes a string I called &#034;Slug&#034; which is the URL-based name of the requested page. That base page is loaded and is parsed for tokens that point to template snippets. Those snippets are then integrated into the composite template before feeding it to the NVelocity engine.</p>
<p>I chose a token for handling includes (double braces on each side of the named key). My initial proof of concept only did one level of inclusion: a page and snippets of content, but this method could handle whatever level of recursion that&#039;s necessary.</p>
<p>So, a page named &#034;home&#034; could have a token:</p>
<pre class="brush: php;">
{{user-details}}
</pre>
<p>which would be replaced by the snippet of template code that has the unique key &#034;user-details&#034; from the content repository. The recursion would be handled by tracing through the tree of those included tokens for a given page until the nested tree is built.</p>
<p>The controller needs to build up objects that fulfill all of the variables in the templates. A production implementation of this would need to provide a way to report on the dependencies that a given composite template requires to avoid empty slots.</p>
<p>However, since NVelocity handles doing things like passing objects more complex than basic strings, this can be much easier than it might be otherwise. So, you can do something like pass (User)CurrentUser to the template, which can have properties pulled into the template from there. By passing that one object, you can have a template like:</p>
<pre class="brush: javascript;">
The account for $CurrentUser.FirstName $CurrentUser.LastName is currently $CurrentUser.AccountStatus with a balance of $CurrentUser.AccountBalance
</pre>
<p>That ability also handles one of the peripheral problems I hadn&#039;t included as part of the scope of this POC, but became an obvious fit along the way: internationalization. If you provided an object with all of the label text, button text, menu names, etc. as UTF-8 text in the properties, you could fill all of those bits in as:</p>
<pre class="brush: javascript;">
$Labels.Home | $Labels.AboutUs | $Labels.MyAccount
</pre>
<p>Overall, I like the flexibility and don&#039;t see anything really standing out as a roadblock to this solving the CMS needs I have in this range of projects. There will definitely have to be some work on the back-end administration of this content to catch missing objects and judicious use of caching of both objects and composite templates to keep it from slowing things down, but I think those are definitely solvable.</p>
<p>NVelocity handles the kind of dictionary objects I&#039;d like to hand off to CMS pages, conditional rules, basic looping, etc. At the same time, it lets you manage most of this stuff outside of code (provided that you provide some decent structure to the objects available to the PageController for all of the pages (things like CurrentUser, SiteSettings, ThemeInformation, etc.). </p>
<p>That ThemeInformation object actually hits on one other requirement of one of the projects in particular where I need user-defined theming for things like fonts and colors, thus lining up the birds nicely for a stone to be thrown.</p>
<p>The template language is pretty much just basic HTML with simple variables and loops, making it pretty easy for people outside of the dev team to work with as well, without a WYSIWYG editor (which would make the back end a much bigger pain to develop). It also can be re-used for template-based emails from these same systems pretty much wholesale.</p>
<p>At this point, I&#039;d really like input on the approach and opportunities to improve it. Solving this problem well is something that will make all of my MVC projects much easier and be really re-usable.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2008/10/05/ideas-for-content-management-in-aspnet-mvc/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sit on Your Butt and Watch Movies Day</title>
		<link>http://www.wynia.org/wordpress/2008/10/01/sit-on-your-butt-and-watch-movies-day/</link>
		<comments>http://www.wynia.org/wordpress/2008/10/01/sit-on-your-butt-and-watch-movies-day/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 01:23:00 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[Entertainment]]></category>

		<category><![CDATA[General]]></category>

		<category><![CDATA[Half-baked Ideas]]></category>

		<category><![CDATA[Humor]]></category>

		<category><![CDATA[Movies]]></category>

		<category><![CDATA[Personal]]></category>

		<category><![CDATA[birthday]]></category>

		<category><![CDATA[couch]]></category>

		<category><![CDATA[dvd]]></category>

		<category><![CDATA[hometheater]]></category>

		<category><![CDATA[movie]]></category>

		<category><![CDATA[recliner]]></category>

		<category><![CDATA[sofa]]></category>

		<category><![CDATA[TV]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/?p=1163</guid>
		<description><![CDATA[photo credit: Usonian
A few years back (I can&#039;t really remember exactly when), my lovely wife looked at the calendar, and, seeing my birthday a week ahead, asked me what I wanted to do for the day. That wasn&#039;t the first year she&#039;d asked that question. However, it was the first where I came up with [...]]]></description>
			<content:encoded><![CDATA[<div class=flickr-illustrate><a href="http://flickr.com/photos/51035825322@N01/98295096" title="Greyhounds are Very Elergant"><img src="http://farm1.static.flickr.com/33/98295096_298405738b_m.jpg" /></a><br /><img src="http://www.wynia.org/wordpress/wp-content/plugins/photo-dropper/images/cc.png" alt="Creative Commons License" border="0" width="16" height="16" align="absmiddle" /></a>photo credit: <a href="http://flickr.com/photos/usonian/" title="Usonian" target="_blank">Usonian</a></small></div>
<p>A few years back (I can&#039;t really remember exactly when), my lovely wife looked at the calendar, and, seeing my birthday a week ahead, asked me what I wanted to do for the day. That wasn&#039;t the first year she&#039;d asked that question. However, it was the first where I came up with anything other than a shrug an &#034;I don&#039;t know&#034;.</p>
<p>When she asked that time, I stopped and gave it some thought. A few moments later, an answer tumbled out of my mouth, &#034;What I really want to do is spend the day sitting on my butt and watching movies, with the laptop in front of me&#034;.</p>
<p>Once said, I realized that it was really exactly what I did want to spend my birthday doing. Holidays all celebrate something. Birthdays are celebrations of specific individuals and the things they enjoy. For lots of people, that celebration involves large groups of people, noise, loud music and a great deal more activity than I have ever really enjoyed.</p>
<p>I do, however, really enjoy chilling out and watching movies in my home theater, while messing around online and writing code for my own purposes. Thus was born the first Sit On Your Butt and Watch Movies Day.</p>
<p>The first one turned out to be an amazingly great day, humble though the activities may be. I chose movies entirely based on what *I* felt like watching, had a couple of tasty meals, and thoroughly enjoyed myself. </p>
<p>After that, when people asked me how I spent my birthday or how I was going to spend an upcoming one, I would relay my new tradition. What surprised me is just how many people seemed to stop for a second, think about it and say, &#034;You know, that&#039;s a really good idea.&#034;. </p>
<p>Clearly,  this day has an appeal for lots of people and every year, more and more people join in. However, I have been asked for what the &#034;rules&#034; are. Given how I didn&#039;t exactly start this as some sort of grand vision, I have pretty much just made on-the-spot rulings on people&#039;s questions.</p>
<p>My birthday is coming up this coming Sunday, and I figure I might as well share a more &#034;structured&#034; version of the holiday for those who want to join in on the laid back fun. Since the main day is on the weekend this year, things are wide open if you&#039;d like to join in.</p>
<p>Suggestions on this list are welcome and those that strike my fancy will be included in next year&#039;s revised definition.</p>
<p><b>Your Guide to Sit On Your Butt and Watch Movies Day</b></p>
<ol>
<li>Sit On Your Butt and Watch Movies Day is a laid back holiday. Where any rule would cause you stress or discomfort, the rule should be deleted.
<li>Sit On Your Butt and Watch Movies Day is celebrated on October 5th (J Wynia&#039;s birthday), your birthday or the birthday of someone nearby.
<li>If those days are inconvenient, choose the nearest weekend day.
<li>There is no limit to the number of celebrations in a calendar year.
<li>Whenever possible, the day should be without work, either employment or house-related.
<li>The number of movies to be watched must be at least 2, ideally 5-8 and limited only by your definition of &#034;day&#034;.
<li>The primary celebrant shall be the holder of the remote control and, should an all-in-one universal remote not be available, the holder of all of the remotes for the duration of the celebration.
<li>The movies to be watched must be either personal favorites or movies you haven&#039;t seen before. Any movie which might inspire a &#034;meh&#034; should be left in the DVD stack until later. There are to be no compromises or sacrificial choices for the sake of others in the room.
<li>Any movie which causes the celebrant to think to him/herself, &#034;Why am I still watching this?&#034; should be ejected immediately and the next movie on deck begun. Letters to the producer/director/lead actors about how they ruined your own personal holiday are entirely optional, but should wait until the next day.
<li>Because the movies can&#039;t be paused while you visit the bathroom or get snacks at a theater, Sit On Your Butt and Watch Movies Day is best celebrated in a home theater.
<li>There should be a comfortable seating arrangement, temperature adjustment and lighting levels. Suggested configurations tend toward dimmed lights, slightly cool temperatures and an overstuffed recliner or sofa. Seating choices which allow the feet and heart to be on the same level are optimal.
<li>There shall be no talking during the movies. Or, if the celebrant is one who is prone to talking during movies, there shall be little silence. Whatever. Either way, recitation of catch phrases and favorite lines along with the actors are welcome, but should only begin when the celebrant starts it.
<li>The snacks must be many and diverse, covering all of the snack groups: salty, sweet and savory.
<li>The meals should be delivered or otherwise easily obtained during short intermissions.
<li>The celebrant&#039;s beverage of choice must flow freely. While the official beverage of Sit On Your Butt and Watch Movies Day is Coke Zero, that should in no way influence the beverage choice.
<li>In case the snacks and meals may prove to exceed the digestion capacity of the celebrant, antacids and/or Pepto Bismol must be readily accessible.
<li>To provide the best movie roster, the movies should be planned in advance, saving particularly desired movies just for the day.
<li>Showering or communicating anything more sophisticated than grunting is entirely optional.
<li>Finally, should the nearest celebration be too far away to be bearable, emergency celebrations can be declared at any time. It&#039;s *somebody&#039;s* birthday.
</ol>
<p>This year&#039;s stack of DVD&#039;s looks like this, with a couple of slots still open:</p>
<ul>
<li>Iron Man
<li>Run Fatboy Run
<li>Leatherheads
<li>The Forbidden Kingdom
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2008/10/01/sit-on-your-butt-and-watch-movies-day/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Web Application Design and Prototyping Tools</title>
		<link>http://www.wynia.org/wordpress/2008/09/20/web-application-design-and-prototyping-tools/</link>
		<comments>http://www.wynia.org/wordpress/2008/09/20/web-application-design-and-prototyping-tools/#comments</comments>
		<pubDate>Sat, 20 Sep 2008 18:30:55 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[Art]]></category>

		<category><![CDATA[Design]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[Web Development]]></category>

		<category><![CDATA[draw]]></category>

		<category><![CDATA[drawing]]></category>

		<category><![CDATA[prototype]]></category>

		<category><![CDATA[sketch]]></category>

		<category><![CDATA[web application project]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/?p=1154</guid>
		<description><![CDATA[
photo credit: j wynia
I carry a variety of notetaking devices. They all have their benefits and I tend to oscillate between pen/paper and electronic devices. However, the notebook nearly always tends to hang out around me and I dump ideas onto the pages as the day goes on.
Those notebooks have been filling up with ideas [...]]]></description>
			<content:encoded><![CDATA[<div class=flickr-illustrate><a href="http://www.flickr.com/photos/jwynia/2872225971/" title="FormElementScreenshot by J Wynia, on Flickr"><img src="http://farm4.static.flickr.com/3102/2872225971_0a682cb9ca_m.jpg" width="228" height="240" alt="FormElementScreenshot" /></a><br />
<br /><small><a href="http://creativecommons.org/licenses/by/2.0/" title="Attribution License" target="_blank"><img src="http://www.wynia.org/wordpress/wp-content/plugins/photo-dropper/images/cc.png" alt="Creative Commons License" border="0" width="16" height="16" align="absmiddle" /></a>photo credit: <a href="http://www.wynia.org" title="jwynia" target="_blank">j wynia</a></small></div>
<p>I carry a variety of notetaking devices. They all have their benefits and I tend to oscillate between pen/paper and electronic devices. However, the notebook nearly always tends to hang out around me and I dump ideas onto the pages as the day goes on.</p>
<p>Those notebooks have been filling up with ideas for projects. Combine that with some client projects and my shift in schedule (which hasn&#039;t freed up as much time as I&#039;d hoped), and I find myself at the beginning of several projects at once.</p>
<p>This raises a few needs that have been hanging out there. Designing and starting a web application project involves a few things for which I&#039;ve never been happy using the existing tools. </p>
<p>First, there&#039;s actual layout design. While Photoshop works fine for doing the &#034;sketches&#034;, the people who are in a role to review those design ideas tend to get overly focused on things like font choice when you&#039;re trying to figure out whether you should use one screen or a wizard for registration only to suddenly notice that the wizard was chosen just as the app goes to production.</p>
<p>That&#039;s why my interest was piqued when <a href="http://www.balsamiq.com/">Balsamiq</a> came out a while back. It provided a way to do mockups of screens and keep people focused on the functional design instead of colors and fonts, just like I want. However, there are quite a few apps that I&#039;d use more that also are in the $100 range (Balsamiq is $79) and I haven&#039;t bought those yet, so it&#039;s unlikely that I&#039;ll be buying it any time soon. Plus, I&#039;m not exactly <a href="http://www.wynia.org/wordpress/2005/09/12/fonts-flash-and-freaking-comic-sans/">a fan of the Comic Sans font</a>.</p>
<div style="float:right;margin:20px;"><a href="http://www.flickr.com/photos/jwynia/2872284167/" title="SketchyToolkit2 by J Wynia, on Flickr"><img src="http://farm4.static.flickr.com/3008/2872284167_ff50bd1b9e_m.jpg" width="174" height="240" alt="SketchyToolkit2" /></a></div>
<p>However, the other night, I was relaxing in front of the TV before bed and I figured I&#039;d doodle a few sketches like the widgets in Balsamiq. As I was drawing, I also was thinking about Antonio Lupetti&#039;s <a href="http://woork.blogspot.com/2008/07/design-nice-pencil-and-handwritten.html">technique for sketching on screenshots</a>, which I&#039;ve been wanting to use more in articles and presentations/screencasts, so I included some of those elements as well.</p>
<p>It didn&#039;t take long and I had 4 sheets of paper pretty well covered. Because I started by just sort of doodling, the elements didn&#039;t end up to scale, but I like the way some of the icons, etc. turned out. I&#039;m thinking of fixing the tablet PC (battery won&#039;t hold even a slight charge and the stylus disappeared) and re-do them on a grid that will make them the right comparative size.</p>
<p>However, I did scan the pages to PNG&#039;s for sharing.</p>
<p>One of the other difficulties is that I&#039;ve seen too many projects, particularly inside the firewall, receive horribly ugly and unusable web templates. At the same time, for my own projects, I&#039;m not ready to pay a designer yet to do the final design (though I may be soon if you&#039;re a designer and interested), and need to get on with building things in the mean time. </p>
<p>So, I&#039;ve been wanting a decent &#034;generic&#034; web application template that lets me focus on building functionality and, once that&#039;s nailed down, do the final design as more of a &#034;redesign&#034; from the generic template.</p>
<p>The thing is that, while there are thousands of web &#034;site&#034; templates and blog templates, there are very few that are oriented to web applications.  There are so few, that something like 2/3 of the Google links for my searches led back to <a href="http://www.webresourcesdepot.com/free-admin-template-for-web-applications/">this 1 template</a>. That theme is nice, but not the look I&#039;m aiming at for my temporary template.</p>
<p>Among other requirements, like the sketchy mockups, I want the the ability to actually have a completely grayscale look to the initial prototypes to hammer home the temporary nature of the design. So, last night, after I tossed <a href="http://www.imdb.com/title/tt0365686/">Revolver</a> into the DVD player to finally watch it (incidentally, not the kind of movie to be working during as I&#039;m going to have to re-watch it to entirely &#034;get&#034; it), I decided to take a shot at building such a template myself.</p>
<p>I grabbed a copy of the <a href="http://960.gs/">960 CSS Framework</a> (something else I&#039;ve been wanting to mess with) and whipped up a batch of pages that covered the basic HTML elements, a bunch of form elements and a start on stuff for data display, like tables. I threw in a bit of jQuery for things like drop shadows and by the end of the movie, had some decent results. There are still plenty of little bugs (like the jQuery tabs didn&#039;t cooperate, so I threw some other ones in instead until I can figure that out), but I&#039;m pretty happy with it so far.</p>
<p>It&#039;s grayscale by default, but all of the color definitions are in a single CSS file, so changing the colors is easy. All in all, it&#039;s pretty modular and I think it will turn into an ASP.NET master page quite easily as well as allow a complete swap-out for a different design later as nearly everything is pretty vanilla HTML tags.</p>
<p>I zipped up both the sketchy PNGs and the web application template together so you can download them if you&#039;d like to take a look.</p>
<p><a href="http://www.wynia.org/download/designandprototypetools/DesignAndProtoTypeTools.zip">Download the Prototype/Design Toolset Package</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2008/09/20/web-application-design-and-prototyping-tools/feed/</wfw:commentRss>
		</item>
		<item>
		<title>An Open Plea to Creators of Login Pages</title>
		<link>http://www.wynia.org/wordpress/2008/09/15/an-open-plea-to-creators-of-login-pages/</link>
		<comments>http://www.wynia.org/wordpress/2008/09/15/an-open-plea-to-creators-of-login-pages/#comments</comments>
		<pubDate>Mon, 15 Sep 2008 18:01:11 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[Essays and Rants]]></category>

		<category><![CDATA[General Internet]]></category>

		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/?p=1152</guid>
		<description><![CDATA[I just reset my password on the ASP.NET forums for the 6th time. I know that it&#039;s been 6 times because I can see archived emails proving that point. However, none of those emails gave me a clue to either what my changed password was or why I keep needing to change it.
So, I reset [...]]]></description>
			<content:encoded><![CDATA[<p>I just reset my password on the <a href="http://forums.asp.net/">ASP.NET forums</a> for the 6th time. I know that it&#039;s been 6 times because I can see archived emails proving that point. However, none of those emails gave me a clue to either what my changed password was or why I keep needing to change it.</p>
<p>So, I reset the password yet again and went to my email to click reset link #7. When I went to choose a new one, I was immediately reminded of why I forgot my password and why I will likely continue this cycle of resetting the reminder finally sticks.</p>
<p>I put in one of my &#034;normal&#034; passwords that I use for things like forums and was greeted to what jogged my memory:</p>
<blockquote><p>
Invalid password. All passwords must be at least 6 characters long and contain at least 1 uppercase character, at least 1 lowercase character, and at least 1 numeric character (digit).
</p></blockquote>
<p>I&#039;ve since gone back to create a new account as a test and this message is nowhere on any of the following:</p>
<ul>
<li>The registration page.
<li>The &#034;Lost your password?&#034; page.
<li>The reset password page.
<li>etc.
</ul>
<p>Of course, if this was a singular instance of this problem, I&#039;d probably just move on, irritated. However, this kind of thing is nearing universality as web sites and web applications start pushing for password policies. This is just one of the best examples of how to do it wrong.</p>
<p>I&#039;m not going to get into whether the policies themselves make sense. Heck, in some places in the world, password policies are making it into banking legislation, removing the option from doing it any other way.</p>
<p>However, if you&#039;re going to enforce a password policy that is anything other than &#034;whatever you feel like entering&#034;, it is your job to help the people who are interacting with your site remember the conditions when they created that password.</p>
<p>So, PLEASE, if you are building such a site, with such a password policy, display that policy whenever my login fails, whenever I might be about to reset or request that you send me a new password, when I register and, quite frankly, whenever the username and password boxes appear on your site. It would make the world a better place.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2008/09/15/an-open-plea-to-creators-of-login-pages/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Standardized ASP.NET MVC Controller Actions with Visual Studio Item Templates</title>
		<link>http://www.wynia.org/wordpress/2008/09/07/standardized-aspnet-mvc-controller-actions-with-visual-studio-item-templates/</link>
		<comments>http://www.wynia.org/wordpress/2008/09/07/standardized-aspnet-mvc-controller-actions-with-visual-studio-item-templates/#comments</comments>
		<pubDate>Mon, 08 Sep 2008 02:24:55 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[General]]></category>

		<category><![CDATA[Programming]]></category>

		<category><![CDATA[Screencasts]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[Software Hacking]]></category>

		<category><![CDATA[ASP.NET]]></category>

		<category><![CDATA[aspnetmvc]]></category>

		<category><![CDATA[C#]]></category>

		<category><![CDATA[screencast]]></category>

		<category><![CDATA[Stephen Walther]]></category>

		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/?p=1134</guid>
		<description><![CDATA[First, I think that this may be the longest title for any post on this site. I ditched 2-3 other variations for the only one that accurately describes this post.
Anyway, over the last couple of months, I&#039;ve been working on getting better with screencasting tools. I learned a lot doing the last one and took [...]]]></description>
			<content:encoded><![CDATA[<p>First, I think that this may be the longest title for any post on this site. I ditched 2-3 other variations for the only one that accurately describes this post.</p>
<p>Anyway, over the last couple of months, I&#039;ve been working on getting better with screencasting tools. I learned a lot <a href="http://www.wynia.org/wordpress/2008/08/05/aspnet-mvc-web-application-as-a-standalone-desktop-application/">doing the last one</a> and took that into the tinkering I&#039;ve done with another one over the past week or so. </p>
<p>It stretched out over that timeframe because of a bunch of other stuff going on as well as some time spent on one-time tasks, like creating a <a href="http://www.apple.com/iwork/keynote/">Keynote</a> theme to use for future screencasts that&#039;s a bit better thought out than the one I used on the last screencast. This look is something I&#039;m much happier with and gives me a basis for more consistent look and feel going forward.</p>
<p>There&#039;s none of my shining face because I lent my webcam to a friend. I do see the value in adding that to the recording, but am not sure the best way to do it.</p>
<p>Anyway, on to the topic I actually covered in this video. </p>
<p>In ASP.NET MVC, the Controllers often end up with an Action method for all of the really common bits of functionality: Create, Insert, Update, Delete, etc. Stephen Walther put together a list of suggested standardized naming and usage for these Actions and I&#039;ve been using them in the couple of ASP.NET MVC projects I&#039;m working on.</p>
<p>In the process, I created a Visual Studio Item Template to make creating a new Controller that follows that convention easy. When I showed it to a co-worker, he expressed interest in how I did it and I saw an opportunity to explain something that&#039;s actually useful.</p>
<p>So, if you&#039;ve ever wondered how to get your own templates into that Visual Studio &#034;Add New Item&#034; dialog box next to &#034;Class Library&#034;, &#034;Application Config File&#034;, etc. This is the screencast for you.</p>
<p>Anyway, give it a watch and let me know what you think. </p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="300" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=1686676&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="400" height="300" src="http://vimeo.com/moogaloop.swf?clip_id=1686676&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
<a href="http://vimeo.com/1686676?pg=embed&amp;sec=1686676">Creating Visual Studio Item Templates</a> from <a href="http://vimeo.com/user649695?pg=embed&amp;sec=1686676">J Wynia</a> on <a href="http://vimeo.com?pg=embed&amp;sec=1686676">Vimeo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2008/09/07/standardized-aspnet-mvc-controller-actions-with-visual-studio-item-templates/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Handling Pro Bono and Discounted Projects</title>
		<link>http://www.wynia.org/wordpress/2008/09/01/handling-pro-bono-and-discounted-projects/</link>
		<comments>http://www.wynia.org/wordpress/2008/09/01/handling-pro-bono-and-discounted-projects/#comments</comments>
		<pubDate>Tue, 02 Sep 2008 02:46:53 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[Business]]></category>

		<category><![CDATA[Personal Development]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/?p=1077</guid>
		<description><![CDATA[ photo credit: kevindooley
A few weeks ago, I was reading this article on 30 Ways to Create an Incredible Client Experience and I thought about something I started doing a while back. It actually seems counter-intuitive at first, but turns out to actually improve the experience on projects where you&#039;re charging less than your full [...]]]></description>
			<content:encoded><![CDATA[<div class=flickr-illustrate><a href="http://www.flickr.com/photos/12836528@N00/1765930200/" title="Free hugs" target="_blank"><img src="http://farm3.static.flickr.com/2386/1765930200_1fdbfeaf5d_m.jpg" alt="Free hugs" border="0" /></a><br /><small><a href="http://creativecommons.org/licenses/by/2.0/" title="Attribution License" target="_blank"><img src="http://www.wynia.org/wordpress/wp-content/plugins/photo-dropper/images/cc.png" alt="Creative Commons License" border="0" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" target="_blank">photo</a> credit: <a href="http://www.flickr.com/photos/12836528@N00/1765930200/" title="kevindooley" target="_blank">kevindooley</a></small></div>
<p>A few weeks ago, I was reading this article on <a href="http://freelanceswitch.com/clients/30-ways-to-create-an-incredible-client-experience/">30 Ways to Create an Incredible Client Experience</a> and I thought about something I started doing a while back. It actually seems counter-intuitive at first, but turns out to actually improve the experience on projects where you&#039;re charging less than your full rate.</p>
<p>From time to time, I do a project or a portion of a project for free. Some are for friends or family, some for charity and sometimes I have some hours that I don&#039;t bill for because I screwed up.</p>
<p>When I first started out, I would do that free or discounted work and it would never be mentioned again. Then on more than one of these projects, things were just sort of sour. </p>
<p>On one, someone was upset that the project was late (I was too), and I&#039;d actually put in a ton of unpaid work over a couple of months to get it done and we still didn&#039;t make it in time. The client made a comment that hit me hard. He was looking at my bill, which only included the first 40 hours of each of those weeks and said, &#034;Maybe if you&#039;d been willing to put in more than just the minimum effort, we&#039;d have launched on time.&#034;</p>
<p>Right there and then, I realized how important perception and visibility are to a project. Later on, as I read more about marketing, human psychology, etc. I learned a bunch of things about the way people view &#034;free&#034;. Further experience taught me that if the value wasn&#039;t visible, people will invent a number in their head. And, if the number they come up with on their own is closer to what you pay the neighbor kid to mow the lawn than to what they pay their mechanic, you&#039;re in trouble as a tech professional.</p>
<p>A few years ago, I was having a conversation with another consultant and was complaining about how a pro bono client I was helping seemed decidedly ungrateful. He told me that he billed even the free stuff and just discounted it. He went on to tell me to ask this particular client how much they thought they were getting for free.</p>
<p>I followed up on that suggestion and discovered that the non-profit in question thought that the web work I was doing would cost about $300 on the open market. Problem was that I&#039;d given them the same amount of time that my paying clients pay well over $5000 for. Clearly there was a mismatch.</p>
<p>So, what I do now is to shine a light on that free and discounted time. If I&#039;m doing some geeky work for someone that goes beyond a quick phone call or a chat over a meal, I write up the time spent at my normal market rate. I then apply the appropriate discount. That means that if the whole project is free, there&#039;s a completely normal project invoice, with a 100% discount applied.</p>
<p>That&#039;s something to think about for those who are starting out doing web or design or other work where the common advice to break in is to do a project for cheap or free to build your portfolio. That advice is frequently criticized because it can lead to either that first client or everyone they refer to you expecting the same cheap deal. If, however, you bill that portfolio building project and just discount it, the point that it was a one-time deal is much clearer. You can even name your discount to nail the point home.</p>
<p>I also do this for the kinds of things where I either screw up (I&#039;m the first to admit that it happens) or need to a bunch of research and don&#039;t feel ethically right billing for it. I did it a couple of months ago, where the actual bill for the month was something like 22 or 24 hours and I included another 8 that I discounted 100% because I spent an entire day rebuilding the staging server after I messed it up by trying to take a shortcut. </p>
<p>Given that we had had conversations about the delay, putting it on the bill made it clear that I had really made an effort to rectify things. It also showed that I had skin in the game for the problem. </p>
<p>It&#039;s really all of those various reasons that have reinforced this technique. All kinds of assumptions and underlying miscommunication gets cleared up when this stuff shows up on a bill. I&#039;m really still quite amazed at how well it diffuses bad blood on both sides.</p>
<p>If you&#039;ve got frustrations with or have held back from doing discounted work because you aren&#039;t sure how to handle it, this approach is worth thinking about. It works great for me.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2008/09/01/handling-pro-bono-and-discounted-projects/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Old Photos and Family Trees and Scanner Software from The Island that Time Forgot</title>
		<link>http://www.wynia.org/wordpress/2008/08/25/old-photos-family-trees-and-scanner-software/</link>
		<comments>http://www.wynia.org/wordpress/2008/08/25/old-photos-family-trees-and-scanner-software/#comments</comments>
		<pubDate>Tue, 26 Aug 2008 02:59:21 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[Autohotkey]]></category>

		<category><![CDATA[Family]]></category>

		<category><![CDATA[General]]></category>

		<category><![CDATA[Personal]]></category>

		<category><![CDATA[Relationships]]></category>

		<category><![CDATA[family tree]]></category>

		<category><![CDATA[geneaology]]></category>

		<category><![CDATA[scanner]]></category>

		<category><![CDATA[scanning]]></category>

		<category><![CDATA[The Netherlands]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/?p=1088</guid>
		<description><![CDATA[
photo credit: j wynia
When my grandparents on the Wynia side moved out of the farmhouse and into senior/assisted/nursing homes, a lot of their things were spread to various family members. We all went to the house and the question was posed whether we wanted any of their stuff (yes, those kinds of moments are weird).
Many [...]]]></description>
			<content:encoded><![CDATA[<div class="flickr-illustrate"><a title="2 Ancestors in the Field by J Wynia, on Flickr" href="http://www.flickr.com/photos/jwynia/2793328781/"><img src="http://farm4.static.flickr.com/3130/2793328781_ee9430d788_m.jpg" alt="2 Ancestors in the Field" width="240" height="141" /></a></p>
<p><small><a title="Attribution-ShareAlike License" href="http://creativecommons.org/licenses/by-sa/2.0/" target="_blank"><img src="http://www.wynia.org/wordpress/wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absmiddle" /></a>photo credit: <a title="jwynia" href="http://www.wynia.org" target="_blank">j wynia</a></small></div>
<p>When my grandparents on the Wynia side moved out of the farmhouse and into senior/assisted/nursing homes, a lot of their things were spread to various family members. We all went to the house and the question was posed whether we wanted any of their stuff (yes, those kinds of moments are weird).</p>
<p>Many members of the family had always wanted the china or the old baby buggy, etc. When I was asked, I thought back to Grandpa&#039;s slideshows, in the dark, those old images up on the screen. I asked if I could have the slides. There was a strange look and I remember someone asking if that was really all I wanted. I said &#034;Yes&#034; and have had those big boxes for several years.</p>
<p>I started scanning them a couple of different times, but life got in the way. However a month or 2 ago, I decided I needed to get back on it and committed to getting them all scanned. I&#039;ve been slowly and steadily working my through the boxes in my evenings and weekends for the past couple of weeks as well as figuring out and improving the workflow for scanning them.</p>
<p>At first, I had hoped to use my Mac to do the scanning, in large part because I do like Applescript for chaining things like Photoshop together with other apps in a workflow as well as easily attaching actions to folders. Alas, my slide scanner (the one with 7200dpi optical resolution) does NOT work with anything but Windows.</p>
<p>So, I set things up on Windows, with a Photoshop macro to do the triggering of the TWAIN driver and capturing the image and an <a href="http://www.autohotkey.com/docs/Tutorial.htm">Autohotkey</a> text snippet to uniquely name the output files with a timestamp. Autohotkey does a pretty good job of that sort of thing. You can either have a keystroke like CTRL+ALT+T that spits out a chunk of text or an abbreviation that always gets replaced when you type it, no matter where. If it wasn&#039;t obvious, you want to be careful you don&#039;t name your abbreviations into something that might get triggered by accident.</p>
<p>For this one, I just used this one line in an .ahk for CTRL+ALT+T inserting the current timestamp. I hit that key chord when Photoshop prompts for a name. </p>
<pre class="brush: javascript;">
^!t::Send, %A_Now%
</pre>
<p>Makes the whole process a series of quick actions, punctuated by waiting for the scanner to do its thing. Click. Wait. Punch the naming chord and Enter. Wait. Repeat.</p>
<p>Now, I can&#039;t move on from the scanning without mentioning something that I find puzzling. From all appearances, scanning software and drivers appear to be written on The Island that Time Forgot. </p>
<p>I bought my first scanner in 1994 for something like $300. It was a little handheld gizmo that did all of 256 shades of gray. The software that came with it for Windows 3.1 looked like nearly everything else that year. It had that look of &#034;multimedia CD-ROM&#034; that was all the rage.</p>
<p>What&#039;s strange is that with 4 scanners in my office right now, all of the software that came with it looks almost exactly the same and has the same kind of crappy problems. These apps (it should be noted that this is on the Windows side of things. It&#039;s better on Mac and even Linux) do things like lock the mouse during the nearly 1 minute the scan actually takes, put progress windows on top of everything else and ensure that you can&#039;t minimize it, etc. All of this TWAIN stuff has the same big buttons with crude bevels and horrible usability.</p>
<p>It really seems like they keep TWAIN driver developers isolated from the rest of the world on some island. Every year, they ship a new batch of scanners and requirements to the island and get back a bunch of drivers on CD. They&#039;re somehow given copies of Windows stripped of all modern interfaces and keep using the same tools. </p>
<p>I&#039;ll grant you that Windows Image Acquisition (WIA) makes that much simpler. Unfortunately, a 3000 dpi scan of 35mm slide film isn&#039;t one of the handy presets and WIA doesn&#039;t provide a box to enter the DPI, even if the scanner supports more than the maximum in the drop down.</p>
<p>Digressions aside, scanning these images at nice, high resolution and staring into the past prompted further questions about family&#039;s history. After being tempted several times before, I finally registered for the 14 day trial at <a href="http://www.ancestry.com/">Ancestry.com</a>.</p>
<p>The site has a couple of nice features, even if the workflow is a bit stilted. As you add people to your family tree, it marks people where they have information that might be attached to that person. You click, examine that information and decide to attach the info or ignore it.</p>
<p>The stilted workflow comes in that it always seems like the thing I&#039;m trying to do next isn&#039;t on the screen anywhere or in the place I last used it.</p>
<p>However, the evidence from the few hours I&#039;ve put into it over the past week or 2 speaks to its effectiveness in spite of those glitches. I&#039;ve got 577 people added to my family tree and one chain of ancestors that goes back 13 generations to someone born in 1360 in &#034;Warga, Boarnsterhim, Friesland, Netherlands&#034;. (Nearly 100% of my tree so far leads straight back to the Netherlands).</p>
<ol>
<li>J Wynia</li>
<li>Louis Wynia Jr.</li>
<li>Louis S Wynia</li>
<li>Sam Wynia</li>
<li>Suster DeVries</li>
<li>Johanna Wynia</li>
<li>Eeltje S Wynia</li>
<li>S Jans or Wijnia</li>
<li>Foekes or Wijnia</li>
<li>Sijtses or Nijda</li>
<li>S Sijes or Nijdam</li>
<li>Willems or Nijda</li>
<li>Willem W Nijdam</li>
<li>Willem W Nijdam</li>
<li>Sijts Ids</li>
<li>S Van Idsinga</li>
<li>Ferckje G Aytta</li>
<li>Gerbeth Aytta - b1360</li>
</ol>
<p>I can definitely see how sites like Ancestry.com have consumed all of the hobby time for a lot of folks. This is definitely some interesting stuff to dig through. If you&#039;ve ever been curious yourself, it&#039;s worth checking out.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2008/08/25/old-photos-family-trees-and-scanner-software/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Dynamic Font Replacement: sIFR, FLIR and More</title>
		<link>http://www.wynia.org/wordpress/2008/08/22/dynamic-font-replacement-sifr-flir-and-more/</link>
		<comments>http://www.wynia.org/wordpress/2008/08/22/dynamic-font-replacement-sifr-flir-and-more/#comments</comments>
		<pubDate>Fri, 22 Aug 2008 11:41:26 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[Design]]></category>

		<category><![CDATA[General]]></category>

		<category><![CDATA[Half-baked Ideas]]></category>

		<category><![CDATA[Javascript]]></category>

		<category><![CDATA[Other Programming]]></category>

		<category><![CDATA[Programming]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[Software Hacking]]></category>

		<category><![CDATA[Web Development]]></category>

		<category><![CDATA[Antonio Lupetti]]></category>

		<category><![CDATA[ASP.NET]]></category>

		<category><![CDATA[flir]]></category>

		<category><![CDATA[font]]></category>

		<category><![CDATA[Font Bros]]></category>

		<category><![CDATA[HTML]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[sifr]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/?p=1106</guid>
		<description><![CDATA[
 photo credit: threedots
A couple of weeks ago, Antonio Lupetti shared a list of 10 &#034;handwritten&#034; fonts that he uses in his design projects. He also does a brilliant job of integrating that stuff into the diagrams in his posts, which is why I paid attention when he put out a list (just take a [...]]]></description>
			<content:encoded><![CDATA[<div class="flickr-illustrate"><a title="numeral types" href="http://www.flickr.com/photos/44668468@N00/115805043/" target="_blank"><img src="http://farm1.static.flickr.com/52/115805043_c5dac1db3c_m.jpg" border="0" alt="numeral types" /></a><br />
<small><a title="Attribution-ShareAlike License" href="http://creativecommons.org/licenses/by-sa/2.0/" target="_blank"><img src="http://www.wynia.org/wordpress/wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" target="_blank">photo</a> credit: <a title="threedots" href="http://www.flickr.com/photos/44668468@N00/115805043/" target="_blank">threedots</a></small></div>
<p>A couple of weeks ago, <a href="http://woork.blogspot.com/">Antonio Lupetti</a> shared a <a href="http://woork.blogspot.com/2008/08/10-handwritten-fonts-you-cant-miss.html">list of 10 &#034;handwritten&#034; fonts</a> that he uses in his design projects. He also does a brilliant job of integrating that stuff into the diagrams in his posts, which is why I paid attention when he put out a list (just take a look at his archives and you&#039;ll see what I mean).</p>
<p>As I was looking at those fonts and downloading them, I was thinking about <a href="http://wiki.novemberborn.net/sifr3">sIFR</a>, which I&#039;ve mentioned before. It&#039;s a way to replace text in web pages with Flash on the fly, using fonts that aren&#039;t on a user&#039;s computer. I&#039;ve wanted to include that on this site and on several others for quite a while.</p>
<p>The problem with sIFR is one that has kept me from using it. See, you have to have a copy of the Flash development tools in order to turn a TrueType font into a sIFR font. You open the little Flash project, change the font and export the SWF. Since I don&#039;t do any other Flash development, that seems like very little activity to justify spending $600+ on the tool.</p>
<p>Thus it has remained on the back burner. However, as I was thinking about sIFR, I remembered a site that I had bookmarked recently that used server-side code to generate an image and then did a similar replacement using Javascript, called <a href="http://facelift.mawhorter.net/examples/">FaceLift Image Replacement (FLIR)</a>.</p>
<p>So, last night, I installed it and wrote a quick test script to see how well it might work with the handwritten fonts and a couple of others. There&#039;s a config file in FLIR (config-flir.php) that has a list of the &#034;installed&#034; fonts that FLIR knows about. That $fonts array is what the while loop in the sample below is going through.</p>
<pre class="brush: php;">
&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot;&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;title&gt;Headline Font Test&lt;/title&gt;
&lt;script language=&quot;javascript&quot; src=&quot;flir.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;?php
include(&quot;config-flir.php&quot;);
while (list($font, $value) = each($fonts)) {
?&gt;
&lt;div style=&quot;width: 770px;&quot;&gt;
&lt;h1 style=&quot;font-family: &lt;?php echo $font; ?&gt;, sans-serif;font-size: 40px;&quot;&gt;J Wynia - www.wynia.org - The Glass is Too Big&lt;/h1&gt;
&lt;i&gt;Font for the above: &lt;?php echo $font; ?&gt;&lt;/i&gt;
&lt;/div&gt;
&lt;?php
}
?&gt;

&lt;script type=&quot;text/javascript&quot;&gt;
FLIR.init( new FLIRStyle( { mode:'wrap' } ) );
FLIR.auto([ 'h1' ]);

&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>So, I ran that script and the results weren&#039;t what I had hoped, but were what I expected. You can see for yourself in a <a href="http://www.wynia.org/wordpress/wp-content/uploads/2008/08/flir_font_replacement_font_test.pdf">PDF copy of the results</a>.</p>
<p>Basically, what appears to happen is that each letter is rendered individually with a background around the actual text. That works fine for fonts where each character stays neatly separated and is part of why I wanted to try this with handwritten fonts, which are more likely to intermingle.</p>
<p>In most of the handwritten fonts, you can see that where they overlap, letters that follow others and would normally overlap them cover the preceding character with a white rectangle. That rectangle eventually gets turned into transparency in the resulting PNG, but is still there, cutting a notch into the preceding character.  [P.S. If you like the "imitation" font, but wonder why it's got "m"s all over the place, it's a demo. The real one is from <a href="http://www.haroldsfonts.com/frontpage.html">Harold's Fonts</a>, and can be <a href="http://www.fontbros.com/cgi-bin/commerce.cgi?key=HAFO-IMIT&amp;preadd=action">purchased from Font Bros for $20</a>]</p>
<p>OK. That means that FLIR is still usable for nice, blocky fonts in titles. But, I wondered if .NET&#039;s text rendering suffered from the same problem as GD2 in PHP (and the problem is mostly in GD2 and not PHP itself).</p>
<p>So, I hit Google, found <a href="http://chiragrdarji.wordpress.com/2008/05/09/generate-image-from-text-using-c-or-convert-text-in-to-image-using-c/">this guy&#039;s sample method</a> and whipped up a console app that spit out the &#034;same&#034; PNG as the FLIR code.</p>
<div class="flickr-illustrate"><a title="Compare PHP/GD2 generated images to C# by J Wynia, on Flickr" href="http://www.flickr.com/photos/jwynia/2784530891/"><img src="http://farm4.static.flickr.com/3056/2784530891_60b7e5945d_m.jpg" alt="Compare PHP/GD2 generated images to C#" width="224" height="240" /></a><br />
<small><a title="Attribution-ShareAlike License" href="http://creativecommons.org/licenses/by-sa/2.0/" target="_blank"><img src="http://www.wynia.org/wordpress/wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" target="_blank">photo</a> credit: <a title="jwynia" href="http://www.wynia.org" target="_blank">j wynia</a></small></div>
<p>I put both images into a test HTML page to compare. I put them over both a white-ish background and the pattern from this site to see how the transparency compared. Both were the same. It was on the intermingling, however, that I was pleasantly surprised.</p>
<p>The C#/.NET image clearly shows the letters &#034;interacting&#034; and overlapping the way that the font designer intended, not stepping all over each other. Encouraged by that, I wondered how feasible it might be to do a back-end swap from the PHP/GD2 powered solution.</p>
<p>What the Javascript is doing in FLIR is doing a bunch of calculations, including how much space is available, what font should be used, what size, etc. Most of that is serialized to a JSON object and passed to a script called generate.php.</p>
<p>So, I set up an ASP.NET website to do a proof of concept/prototype. As always, a disclaimer about POC code. This is a bare bones proof of concept to test out the feasibility of doing this. It is in no way a completed implementation. The PHP backend for FLIR is quite extensive and does a lot of detail work based on that JSON object. This one just takes the text string from the URL and renders it on one line.</p>
<p>That said, I included 2 ASPX pages. The first actually was needed because the eventual bits that choose the font use the font family &#034;name&#034; as the lookup. However, it wasn&#039;t entirely clear for a couple of my fonts what that name was.</p>
<p>So, FontList.aspx is a barebones page, with a GridView control dropped on it and the following code in the codebehind.</p>
<p><strong>Get the list of current font names</strong></p>
<pre class="brush: csharp;">
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
using System.Drawing.Text;
using System.Drawing;

public partial class FontList : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
System.Drawing.Text.InstalledFontCollection RawFontList = new System.Drawing.Text.InstalledFontCollection();
ArrayList FontList = new ArrayList();
foreach (FontFamily family in RawFontList.Families)
{
FontList.Add(family.Name);
}
GridView1.DataSource = FontList;
GridView1.DataBind();

}
}
</pre>
<p>Hitting that page will give you a list of all of the fonts available on your system for use in generating images.</p>
<p>The second page I called generate.aspx, mostly for eventual compatibility with the FLIR front end, to change as little as possible. Now that this prototype is done, I think I&#039;d actually implement an HTTPHandler to just handle requests to generate.php, so NO changes would be necessary in the Javascript.</p>
<p>At any rate, that page needs the ASPX side stripped of all of the HTML, leaving only the top line as a pointer to the codebehind. In the CS file, I borrowed from the earlier C# code, tweaking it to get better quality on the smoothing and hinting as well as hard-coding the color to black.</p>
<p>I tried to comment fairly heavily to make the code clear.</p>
<pre class="brush: csharp;">
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Text;
using System.IO;
using System.Web.Security;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//This is a quick prototype to test the font rendering of
//C#/.NET against the PHP/GD2 rendering for a possible
//replacement of the PHP backend of FLIR*.
//*http://facelift.mawhorter.net/examples/

//Grab the text for the image
String InputText = Request.QueryString[&quot;text&quot;];
//See snippet in the article to get the list of names for fonts on your machine
String FontName = &quot;Gregs Other Hand&quot;;
int FontSize = 45;
String SavePath = HttpContext.Current.Server.MapPath(&quot;~/App_Data/&quot;);
//Get an md5 hash of our input (just text in this case).
//That provides a nice way to know that a given cached image
//was generated from the same inputs and is safe to return
//instead of creating from scratch.
//No such caching implementation exists in this prototype.
String BaseFilename = FormsAuthentication.HashPasswordForStoringInConfigFile(InputText,&quot;MD5&quot;);
//Actually do the image creation
Bitmap HeadlineImage = CreateBitmapImage(InputText,FontName,FontSize);
//Save to the hard drive. A real implementation would check here
//before creating the image, delivering the cached one instead.
HeadlineImage.Save(SavePath + BaseFilename + &quot;.png&quot;,System.Drawing.Imaging.ImageFormat.Png);
//Save to a MemoryStream so we can output the raw image to the browser.
MemoryStream stream = new MemoryStream();
HeadlineImage.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
//Because we're not outputting HTML, we do some modification of Response
Response.AppendHeader(&quot;Content-Type&quot;, &quot;image/png&quot;);
Response.OutputStream.Write(stream.ToArray(), 0, (int)stream.Length);
Response.End();
}

private static Bitmap CreateBitmapImage(String sImageText, String FontName, int FontSize)
{
//Images all start as &quot;bitmaps&quot; in .NET. This one starts at the top corner.
Bitmap objBmpImage = new Bitmap(1, 1);
int intWidth = 0;
int intHeight = 0;

// Create the Font object for the image text drawing.
Font objFont = new Font(FontName, FontSize);
// Create a graphics object to measure the text's width and height.
Graphics objGraphics = Graphics.FromImage(objBmpImage);
// This is where the bitmap size is determined.
intWidth = (int)objGraphics.MeasureString(sImageText, objFont).Width;
intHeight = (int)objGraphics.MeasureString(sImageText, objFont).Height;

// Create the bmpImage again with the correct size for the text and font.
objBmpImage = new Bitmap(objBmpImage, new Size(intWidth, intHeight));
// Add the colors to the new bitmap.
objGraphics = Graphics.FromImage(objBmpImage);
// Set Background color to transparent for the PNG
objGraphics.Clear(Color.Transparent);
//Set the smoothing and hinting to high quality
objGraphics.SmoothingMode = SmoothingMode.HighQuality;
objGraphics.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
//Actually put the string onto the image
objGraphics.DrawString(sImageText, objFont, new SolidBrush(Color.Black), 0, 0);
objGraphics.Flush();
//We have our image and can return it to the calling scope.
return (objBmpImage);
}
}
</pre>
<p>The results are quite nice. Obviously, it doesn&#039;t do the nice FLIR things like line wrapping, handling colors, handling mixed fonts, etc. However, it does render a nice, clean image of the text, using whatever TTF I throw at it, without overlapping.</p>
<div id="attachment_1111" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.wynia.org/wordpress/wp-content/uploads/2008/08/jwynia_glasstoobig_sample.png"><img class="size-medium wp-image-1111" title="jwynia_glasstoobig_sample" src="http://www.wynia.org/wordpress/wp-content/uploads/2008/08/jwynia_glasstoobig_sample-300x27.png" alt="J Wynia - The Glass is Too Big" width="300" height="27" /></a><p class="wp-caption-text">Sample ASP.NET Generated Headline</p></div>
<p>If you wan the entire project, you can download <a href="http://www.wynia.org/wordpress/wp-content/uploads/2008/08/csharpflirbackend.zip">the ZIP file</a>. I&#039;d love to see someone run with this.</p>
<p>[edited by J: Oh, and one last FYI. If you decide to install fonts during this process, IIS needs to be restarted to pick the new fonts up. Strange, but it happened to me so, heads up!]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2008/08/22/dynamic-font-replacement-sifr-flir-and-more/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Site Migration to Mosso Part 2: Why and How</title>
		<link>http://www.wynia.org/wordpress/2008/08/21/site-migration-to-mosso-part-2-why-and-how/</link>
		<comments>http://www.wynia.org/wordpress/2008/08/21/site-migration-to-mosso-part-2-why-and-how/#comments</comments>
		<pubDate>Thu, 21 Aug 2008 14:06:13 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[General]]></category>

		<category><![CDATA[Meta]]></category>

		<category><![CDATA[Technology]]></category>

		<category><![CDATA[Web Development]]></category>

		<category><![CDATA[ASP.NET]]></category>

		<category><![CDATA[C#]]></category>

		<category><![CDATA[dedicated server]]></category>

		<category><![CDATA[DNS]]></category>

		<category><![CDATA[email]]></category>

		<category><![CDATA[Google]]></category>

		<category><![CDATA[hosting]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[LAMP]]></category>

		<category><![CDATA[Linux]]></category>

		<category><![CDATA[migration]]></category>

		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/?p=1093</guid>
		<description><![CDATA[
 photo credit: izarbeltza
There were a few questions on yesterday&#039;s post about migrating this site to Mosso&#039;s hosting. I thought I&#039;d write up a quick explanation of what led to this migration and how it went as well as my take on Mosso as a service.
For several years now, Wynia.org has been hosted alongside a [...]]]></description>
			<content:encoded><![CDATA[<div class="flickr-illustrate"><a title="migration" href="http://www.flickr.com/photos/84424657@N00/411729344/" target="_blank"><img src="http://farm1.static.flickr.com/167/411729344_b0fbba65e6_m.jpg" border="0" alt="migration" /></a><br />
<small><a title="Attribution-ShareAlike License" href="http://creativecommons.org/licenses/by-sa/2.0/" target="_blank"><img src="http://www.wynia.org/wordpress/wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" target="_blank">photo</a> credit: <a title="izarbeltza" href="http://www.flickr.com/photos/84424657@N00/411729344/" target="_blank">izarbeltza</a></small></div>
<p>There were a few questions on yesterday&#039;s post about <a href="http://www.wynia.org/wordpress/2008/08/19/site-migration-to-mosso/">migrating this site to Mosso&#039;s hosting</a>. I thought I&#039;d write up a quick explanation of what led to this migration and how it went as well as my take on <a href="http://www.mosso.com/">Mosso</a> as a service.</p>
<p>For several years now, Wynia.org has been hosted alongside a batch of other sites that I own or was co-owner of on a series of dedicated servers. At first, I took care of the administration myself. Unfortunately, busy life got in the way and an unpatched vulnerability led to one of the servers getting hacked.</p>
<p>When it was done getting completely scrubbed and we went to set back up, we hired a company that provided both the dedicated server and the administrator to keep things patched and do things like compile new PHP modules for us. That combined service was something that we thought well worth the $229 it cost.</p>
<p>Over the last year or so, that arrangement has lost much of its luster. The server&#039;s stability has been horrible, with services like email and MySQL going down regularly and requiring restarting and frequent reboots to resolve the collapsing. Beyond that, the customer service and support has crumbled as well.</p>
<p>Then, early this year, my business partner and I split and he took the largest of the sites running on that server and I kept the server contract itself. That shift made me review the whole setup and consider my alternatives.</p>
<p>First was the fact that I still have multiple sites, some with some decent traffic (5000+ page views a day). While some of the cheap managed hosting companies allow multiple sites, most are horribly oversold for things like bandwidth and I&#039;ve heard way too many stories of people getting shut off for &#034;abusing&#034; the service when they reach only half of the bandwidth advertised in a month.</p>
<p>I also know that I don&#039;t want to be the one managing the patches and upgrades. I don&#039;t have the time for it and don&#039;t particularly enjoy it. However, just getting another dedicated server with someone managing it didn&#039;t sound all that appealing either.</p>
<p>That&#039;s because, as your sites grow and consume more resources, you outgrow the server you&#039;re on. That has happened to me several times. Things start slowing down as you start hitting the ceiling of the server&#039;s capacity. All of the dedicated server companies I&#039;ve dealt with take this opportunity to move you to another server.</p>
<p>Granted, they often will do so without any major cost, but having moved WAY too many sites from one server to another, that&#039;s something I don&#039;t want to do more often than necessary. I&#039;d rather have a reasonably priced approach that lets the arrangement just grow over time.</p>
<p>That led me to look at the emerging clustered/cloud hosts. There are several of these companies that offer the &#034;equivalent&#034; of a dedicated server (i.e. real storage and bandwidth numbers) and a reasonable path for growth while taking care of the security and management of the servers by putting the whole works into a giant cluster.</p>
<p>I looked at <a href="http://joyent.com/">Joyent</a> and <a href="http://www.mediatemple.com/">MediaTemple</a> first, because of the amount of buzz around them. Neither one was a good fit for what I was looking for. While this site is powered by Wordpress (and thus PHP), I haven&#039;t been doing much of my new development in PHP for the last year or 2. I have been doing a lot more of my experimental code in C#.</p>
<p>Since my existing dedicated server was a Linux box (without Mono), I haven&#039;t had a good place to deploy much of my new code out on the web. However, I&#039;ve been wanting to do just that. Unfortunately, neither Joyent nor MediaTemple supports .NET. Joyent specifically says &#034;Ideal for PHP, Rails, Python &amp; Java&#034; and MediaTemple is really heavily targeted at PHP. I think if you&#039;re doing either Rails or PHP development, those are really good choices, but not if you&#039;re doing predominantly C# and PHP.</p>
<p>However, at the time I started looking, there was a newcomer called <a href="http://www.mosso.com">Mosso</a> (though a subsidiary of an old timer, Rackspace). What was intriguing about their service was that their cluster was simultaneously a LAMP (Linux, Apache, MySQL, PHP) stack and a Windows .NET on IIS7 environment. A single domain can host both types of code.</p>
<p>Beyond that, the pricing makes a lot of sense. Storage, bandwidth and CPU cycles are what you are charged for, getting reasonable amounts of each for $99/month and one of the most straightforward &#034;overage&#034; pricing schemes I&#039;ve ever seen. That kind of pricing means I can run all of the stuff on the existing server while lowering my initial costs and still be able to handle the future growth without going over my original budget for quite a while.</p>
<p>So, I set things up with Mosso.</p>
<p>Right about then, life got really hectic and getting the sites migrated kept getting put off. One of the biggest reasons is people&#039;s email accounts. It turns out that when you migrate a site from one server to another, the biggest problem isn&#039;t the site code or the databases, it&#039;s people&#039;s email. Moving those accounts over, keeping all of their email, dealing with the DNS propagation and where the emails end up, etc. is a HUGE pain.</p>
<p>Which is why I ended up bringing Google into the mix. With <a href="http://www.google.com/a/help/intl/en/index.html">Google Apps for Domain</a>, you point your MX records for your DNS at Google and they handle everything email.</p>
<p>I tested it on a small domain and, when everything worked out swimmingly, I made a decision. All of the sites are to move and if you want to use email on that domain, it gets moved over to Google. I&#039;m not going to even mess with trying to keep email hosting working.</p>
<p>This makes migration far easier. You set up Google mail on the old server&#039;s DNS records and the new one, get it all working with the old one and then move the site over.</p>
<p>That said, it&#039;s still taken me most of the first half of this year to tackle this site&#039;s migration. The email&#039;s been moved over for months, but the database and code migration wasn&#039;t something I was willing to take on in the midst of the chaos.</p>
<p>I wish it wasn&#039;t so, but that delay has both cost me quite a bit of money in doubled-up hosting fees and has stunted my list of improvements and fixes to this site. See, when you have a big task you &#034;should&#034; be doing and you sit down to do a &#034;less important&#034; task in the same area, that work ethic guilt kicks in. However, since you still aren&#039;t ready to tackle the bigger task, you instead abandon all of them and go and do something else.</p>
<p>Thus, things like hiding the advertisements if you&#039;ve posted a comment here have lingered on my TODO list for a long time.</p>
<p>Actually migrating went as smoothly as can be expected. Given that my Wordpress install had 4+ years of incremental upgrades from the original install, I took the opportunity to do a fresh, clean install. The data was a bit trickier because of how Mosso does their MySQL setup. Depending on when you create a database, it might sit on a different server, so every database gets it&#039;s own user and needs a different connection string.</p>
<p>At this point, I&#039;ve been running a couple of smaller sites on Mosso for a few months and this site for a couple of days. Overall, my impressions are quite positive. Nearly everything I have wanted to be able to do I could. For the other stuff (like SVN-driven deployments), it&#039;s not like anything other than a completely dedicated server would either.</p>
<p>I haven&#039;t seen any MySQL issues, which stands in stark contrast to the number of issues I had with it on my dedicated server. However, I&#039;ll still be aggressively using things like the Wordpress plugin <a href="http://ocaoimh.ie/wp-super-cache/">WP Super Cache</a> to minimize needless hits against the database. Wordpress without that plugin is really WAY too hard on the database compared with what it needs to be.</p>
<p>The support has been top notch. Some of that is probably due to it being in startup mode, where the first few people who get in get extra attention. I know that when I complained on Twitter about not being able to figure out how to get ASP.NET MVC apps to run, one of the founders replied. That was great, but I would be VERY surprised if that continues over the next couple of years for new customers.</p>
<p>Regardless, the tickets I&#039;ve had to put in were fairly technical (like setting a particular directory to integrated pipeline mode for IIS7), and were handled professionally and I wasn&#039;t treated like somebody fumbling around with their first PHP script.</p>
<p>I have, indeed, been able to run both PHP and C# on the same domain and both worked well. The control panel is a little spartan if you&#039;re coming from dedicated hosting with either Ensim or Cpanel, but definitely capable. They&#039;re steadily improving it and have told me that things like the integrated pipeline change (which is what you need to do to get ASP.NET MVC apps to do the nice routing without the .mvc extension on paths) are coming.</p>
<p>I keep monitors running against all of my sites and haven&#039;t seen any outages. Granted, I&#039;m only checking every half hour or so, so it&#039;s possible I just missed one, but that still beats waking up to find out that the server crashed at 12:30 last night.</p>
<p>To sum up (and if ever something needed summing up, this article does), I think Mosso is a great solution to the outgrown-shared-hosting-but-don&#039;t-want-the-hassle-of-dedicated problem. With extra bandwidth at $0.25/GB and extra storage at $0.50/GB, expansion is much more straightforward than having to go from the &#034;basic&#034; server to the &#034;deluxe&#034; server and migrate all of your sites.</p>
<p>It&#039;s stable in my experience, well-supported and runs the code I want it to. Now I just have to get the rest of the sites moved over.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2008/08/21/site-migration-to-mosso-part-2-why-and-how/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Site Migration to Mosso</title>
		<link>http://www.wynia.org/wordpress/2008/08/19/site-migration-to-mosso/</link>
		<comments>http://www.wynia.org/wordpress/2008/08/19/site-migration-to-mosso/#comments</comments>
		<pubDate>Tue, 19 Aug 2008 16:02:25 +0000</pubDate>
		<dc:creator>J Wynia</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[Meta]]></category>

		<guid isPermaLink="false">http://www.wynia.org/wordpress/?p=1083</guid>
		<description><![CDATA[
 photo credit: jurvetson
If you&#039;re seeing this, your DNS has propagated and you&#039;re using the new Wynia.org, hosted by Mosso.com. There are lots of reasons for the move and it&#039;s been sitting on my TODO list for more months than I feel like admitting in public.
At any rate, I also took this opportunity to prune [...]]]></description>
			<content:encoded><![CDATA[<div class="flickr-illustrate"><a title="empty nest" href="http://www.flickr.com/photos/44124348109@N01/317452226/" target="_blank"><img src="http://farm1.static.flickr.com/128/317452226_cee3c1ed73_m.jpg" border="0" alt="empty nest" /></a><br />
<small><a title="Attribution License" href="http://creativecommons.org/licenses/by/2.0/" target="_blank"><img src="http://www.wynia.org/wordpress/wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" target="_blank">photo</a> credit: <a title="jurvetson" href="http://www.flickr.com/photos/44124348109@N01/317452226/" target="_blank">jurvetson</a></small></div>
<p>If you&#039;re seeing this, your DNS has propagated and you&#039;re using the new Wynia.org, hosted by <a href="http://www.mosso.com">Mosso.com</a>. There are lots of reasons for the move and it&#039;s been sitting on my TODO list for more months than I feel like admitting in public.</p>
<p>At any rate, I also took this opportunity to prune the site a little bit, starting with a cleaner Wordpress install and holding back a bunch of cruft from being set up on the new account. I&#039;ll be watching the 404 logs and restoring or replacing functionality that actually gets used. However, there was a bunch of stuff that didn&#039;t need to be on the site and that stuff is gone.</p>
<p>If my deletion removed your favorite feature or you find something broken, let me know. I won&#039;t necessarily restore it, but at least I can tell you so directly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wynia.org/wordpress/2008/08/19/site-migration-to-mosso/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 2.332 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2009-07-05 14:35:36 -->
<!-- Compression = gzip -->