<?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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>a regular expression</title>
	<atom:link href="http://johnnywey.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://johnnywey.wordpress.com</link>
	<description>the intersection of life and engineering as told by Johnny Wey</description>
	<lastBuildDate>Fri, 13 Jan 2012 11:09:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='johnnywey.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>a regular expression</title>
		<link>http://johnnywey.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://johnnywey.wordpress.com/osd.xml" title="a regular expression" />
	<atom:link rel='hub' href='http://johnnywey.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Cycling Season 2011 Event Recap</title>
		<link>http://johnnywey.wordpress.com/2012/01/01/cycling-season-2011-event-recap/</link>
		<comments>http://johnnywey.wordpress.com/2012/01/01/cycling-season-2011-event-recap/#comments</comments>
		<pubDate>Sun, 01 Jan 2012 22:52:01 +0000</pubDate>
		<dc:creator>johnnywey</dc:creator>
				<category><![CDATA[Cycling]]></category>
		<category><![CDATA[Family]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://johnnywey.wordpress.com/?p=613</guid>
		<description><![CDATA[Last year, I wrote about the cycling season and the events a group of friends and I participated in. This year, we got together at the beginning of the year (again) and mapped out the rides we wanted to do. This time around, however, we were happy to have our wives along for the ride. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=johnnywey.wordpress.com&amp;blog=1415338&amp;post=613&amp;subd=johnnywey&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Last year, I <a href="http://johnnywey.wordpress.com/2010/12/12/cycling-season-2010-organized-event-recap/">wrote about</a> the cycling season and the events a group of friends and I participated in. This year, we got together at the beginning of the year (again) and mapped out the rides we wanted to do. This time around, however, we were happy to have our wives along for the ride. Thus began yet another epic year!</p>
<p>(Click on the links below to see the associated Garmin data if you&#8217;re interested in that type of thing.)</p>
<ul>
<li><a href="http://connect.garmin.com/activity/90508850">Elephant Rock</a> <strong>(06/05/2011)</strong>: This was the first big event of the year. I said last year that I wasn&#8217;t planning on doing it two years in a row, but it&#8217;s a great training goal and a nice &#8220;big ride&#8221; experience for the girls. <div id="attachment_607" class="wp-caption aligncenter" style="width: 310px"><a href="http://johnnywey.files.wordpress.com/2012/01/e-rock-1.jpg"><img src="http://johnnywey.files.wordpress.com/2012/01/e-rock-1.jpg?w=300&#038;h=210" alt="" title="E-Rock-1.JPG" width="300" height="210" class="size-medium wp-image-607" /></a><p class="wp-caption-text">The group at Elephant Rock</p></div>The girls rode the metric century version of the ride, and we took a nice even pace with them until the course split. After that, we raced to try and catch them at the last aid station. We didn&#8217;t quite make it there in time (they had been waiting for about an hour when we showed up), but we had a great, albeit hot, ride in to the finish together.<div id="attachment_629" class="wp-caption aligncenter" style="width: 310px"><a href="http://johnnywey.files.wordpress.com/2012/01/img_2077.jpg"><img src="http://johnnywey.files.wordpress.com/2012/01/img_2077.jpg?w=300&#038;h=224" alt="" title="IMG_2077" width="300" height="224" class="size-medium wp-image-629" /></a><p class="wp-caption-text">Posing at E-Rock</p></div></li>
<li><a href="http://connect.garmin.com/activity/92017474">Denver Century Ride</a> <strong>(06/12/2011)</strong>: This ride began at Invesco Field (now Sports Authority Stadium) right by my house in downtown Denver. We again rode a century taking it easy until the course split away from the metric option. It was a nice ride, but we had some criticisms. <div id="attachment_627" class="wp-caption aligncenter" style="width: 310px"><a href="http://johnnywey.files.wordpress.com/2012/01/img_2353.jpg"><img src="http://johnnywey.files.wordpress.com/2012/01/img_2353.jpg?w=300&#038;h=224" alt="" title="IMG_2353" width="300" height="224" class="size-medium wp-image-627" /></a><p class="wp-caption-text">Kevin and Leslie climbing Lookout Mountain</p></div>The route was a bit rough with traffic and the jersey and T-shirt weren&#8217;t very attractive (I joked that I was even embarrassed to wear it to bed!) However, they took our feedback seriously and showed up this year with a brand new jersey (one that looks pretty darn good) and a completely re-designed route. I&#8217;m already registered for the 2012 version and I can&#8217;t wait!</li>
<li><a href="http://connect.garmin.com/activity/98342345">Mount Evans</a> <strong>(07/10/2011)</strong>: This wasn&#8217;t an organized ride, but it was likely the most difficult ride I&#8217;ve ever done. The final ride was almost 130 miles and well over 12,000ft. of elevation gain. Mt. Evans is the highest paved road in the US; so high, in fact, that my Garmin stopped being accurate up above around 12,000ft. (it shows our max elevation as around 13,000ft. when it was easily a thousand feet more). <div id="attachment_619" class="wp-caption aligncenter" style="width: 310px"><a href="http://johnnywey.files.wordpress.com/2012/01/img_0937.jpg"><img src="http://johnnywey.files.wordpress.com/2012/01/img_0937.jpg?w=300&#038;h=224" alt="" title="Mt Evans" width="300" height="224" class="size-medium wp-image-619" /></a><p class="wp-caption-text">The climb to Mt. Evans beings</p></div>We were hailed on and blown all over the place on the climb up, and one of the guys in our group even snapped his rear derailleur right off his bike! (Luckily, we found a car driving down from the mountain with a bike rack that was gracious enough to drive him back into Denver) When we finally finished the ride, I wasn&#8217;t sure exactly what to think or say. It was simultaneously the most physically painful and wonderful thing I&#8217;ve tried and I can&#8217;t wait to do it again!</li>
<li><a href="http://connect.garmin.com/activity/104766953">Copper Triangle</a> <strong>(08/06/2011)</strong>: This was year two of the outstanding Copper Triangle Ride. <div id="attachment_606" class="wp-caption aligncenter" style="width: 235px"><a href="http://johnnywey.files.wordpress.com/2012/01/copper-1.png"><img src="http://johnnywey.files.wordpress.com/2012/01/copper-1.png?w=914" alt="" title="Copper-1.png"   class="size-full wp-image-606" /></a><p class="wp-caption-text">Finishing at Copper</p></div>This time around, both the fellas I typically ride with got to participate (last year it was just two of us) and we all had a great time! Our three families got a cabin right in the middle of the Copper Mountain Village and we all had a blast just enjoying each other&#8217;s company and relaxing before and after the ride. I don&#8217;t think we&#8217;ll do it again next year (three years in a row is pushing it just a bit), but we&#8217;ll definitely be back soon.<div id="attachment_610" class="wp-caption aligncenter" style="width: 235px"><a href="http://johnnywey.files.wordpress.com/2012/01/copper-3.jpg"><img src="http://johnnywey.files.wordpress.com/2012/01/copper-3.jpg?w=914" alt="" title="Copper-3.jpg"   class="size-full wp-image-610" /></a><p class="wp-caption-text">The Crew</p></div></li>
<li><a href="http://connect.garmin.com/activity/108461810">Dear Creek Century</a> <strong>(08/21/2011)</strong>: This event labels itself as the &#8220;hardest century ride in the US&#8221; Considering how difficult Evans was, I went into this ride thinking I&#8217;d be able to skate through it. I was very wrong. My first mistake was riding a fair amount during the week leading up to the event. I put in around 60 miles before even starting the ride. Beyond that, I didn&#8217;t hydrate properly and ate very poorly during the week. In short, I didn&#8217;t take it seriously at all and it definitely cost me. After about 50 miles, I started feeling sluggish. After the finish, I got pretty sick and got home to see I had dropped about 10 pounds of water weight during the ride. Not good. <div id="attachment_605" class="wp-caption aligncenter" style="width: 234px"><a href="http://johnnywey.files.wordpress.com/2012/01/deer-creek.jpg"><img src="http://johnnywey.files.wordpress.com/2012/01/deer-creek.jpg?w=224&#038;h=300" alt="" title="Deer-Creek.jpg" width="224" height="300" class="size-medium wp-image-605" /></a><p class="wp-caption-text">Feeling bad at Deer Creek finish</p></div>I&#8217;m not sure if I&#8217;m going to do this ride again, but if I do I will definitely take it seriously.</li>
<li>Tour de Fat <strong>(09/10/2011)</strong>: This year, I rode a <a href="http://denver.bcycle.com/">B-Cycle</a> while Amber pulled Ryker in the Chariot. <div id="attachment_612" class="wp-caption aligncenter" style="width: 234px"><a href="http://johnnywey.files.wordpress.com/2012/01/tourdefat-1.jpg"><img src="http://johnnywey.files.wordpress.com/2012/01/tourdefat-1.jpg?w=224&#038;h=300" alt="" title="TourDeFat-1.jpg" width="224" height="300" class="size-medium wp-image-612" /></a><p class="wp-caption-text">Killing it at the Tour de Fat</p></div>It was just the three of us this year, but we had a great time and enjoyed ourselves (as usual). <div id="attachment_633" class="wp-caption aligncenter" style="width: 234px"><a href="http://johnnywey.files.wordpress.com/2012/01/img_3283.jpg"><img src="http://johnnywey.files.wordpress.com/2012/01/img_3283.jpg?w=224&#038;h=300" alt="" title="IMG_3283" width="224" height="300" class="size-medium wp-image-633" /></a><p class="wp-caption-text">Ryker and I at the Tour de Fat</p></div>The tradition of cycling with at least 1000 other folks in a giant parade topped off with a beer or two after the ride is something I look forward to every year.<div id="attachment_635" class="wp-caption aligncenter" style="width: 235px"><a href="http://johnnywey.files.wordpress.com/2012/01/img_3259.jpg"><img src="http://johnnywey.files.wordpress.com/2012/01/img_3259.jpg?w=225&#038;h=300" alt="" title="IMG_3259" width="225" height="300" class="size-medium wp-image-635" /></a><p class="wp-caption-text">Amber and Ryker at Tour de Fat</p></div></li>
<li>Other Rides: Alongside the rides here, the girls did the <a href="http://www.venusdemiles.com/">Venus de Miles</a> ride while the boys volunteered.<div id="attachment_611" class="wp-caption aligncenter" style="width: 235px"><a href="http://johnnywey.files.wordpress.com/2012/01/thegirls.jpg"><img src="http://johnnywey.files.wordpress.com/2012/01/thegirls.jpg?w=914" alt="" title="TheGirls.JPG"   class="size-full wp-image-611" /></a><p class="wp-caption-text">The girls at Venus de Miles</p></div> Beyond that, there were numerous rides in Golden, Boulder (<a href="http://connect.garmin.com/activity/118401236">Jamestown</a>, <a href="http://connect.garmin.com/activity/74190998">Sugarloaf</a>, <a href="http://connect.garmin.com/activity/79907706">Flagstaff</a>, <a href="http://connect.garmin.com/activity/84117032">Nederland</a>), <a href="http://connect.garmin.com/activity/94850726">Colorado Springs</a>, <a href="http://connect.garmin.com/activity/86047101">Castle Rock</a>, Monument, <a href="http://connect.garmin.com/activity/72946764">Lyons</a> (Oscar Blues is a fantastic destination), and the list goes on. I also had a great time riding with my beautiful wife multiple times during the year including climbing Lookout Mountain, riding to Golden and just getting coffee in the early spring. Often, riding is about enjoying the scenery and talking with interesting people and she&#8217;s definitely the most interesting person I know.<div id="attachment_604" class="wp-caption aligncenter" style="width: 235px"><a href="http://johnnywey.files.wordpress.com/2012/01/img_1030.jpg"><img src="http://johnnywey.files.wordpress.com/2012/01/img_1030.jpg?w=914" alt="" title="IMG_1030.JPG"   class="size-full wp-image-604" /></a><p class="wp-caption-text">Getting coffee on a ride</p></div></li>
</ul>
<p>I&#8217;m not sure we can seriously top 2011 and I&#8217;m not looking to try, really. So, here&#8217;s to 2011 and having fun, doing hard stuff, drinking good beer and making worthwhile relationships even more so. 2012, you have some big shoes to fill!</p>
<ul>
</ul>
<p> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/johnnywey.wordpress.com/613/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/johnnywey.wordpress.com/613/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/johnnywey.wordpress.com/613/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/johnnywey.wordpress.com/613/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/johnnywey.wordpress.com/613/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/johnnywey.wordpress.com/613/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/johnnywey.wordpress.com/613/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/johnnywey.wordpress.com/613/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/johnnywey.wordpress.com/613/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/johnnywey.wordpress.com/613/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/johnnywey.wordpress.com/613/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/johnnywey.wordpress.com/613/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/johnnywey.wordpress.com/613/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/johnnywey.wordpress.com/613/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=johnnywey.wordpress.com&amp;blog=1415338&amp;post=613&amp;subd=johnnywey&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://johnnywey.wordpress.com/2012/01/01/cycling-season-2011-event-recap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4a06c3df15297e9c39c4eb483a415460?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">johnnywey</media:title>
		</media:content>

		<media:content url="http://johnnywey.files.wordpress.com/2012/01/e-rock-1.jpg?w=300" medium="image">
			<media:title type="html">E-Rock-1.JPG</media:title>
		</media:content>

		<media:content url="http://johnnywey.files.wordpress.com/2012/01/img_2077.jpg?w=300" medium="image">
			<media:title type="html">IMG_2077</media:title>
		</media:content>

		<media:content url="http://johnnywey.files.wordpress.com/2012/01/img_2353.jpg?w=300" medium="image">
			<media:title type="html">IMG_2353</media:title>
		</media:content>

		<media:content url="http://johnnywey.files.wordpress.com/2012/01/img_0937.jpg?w=300" medium="image">
			<media:title type="html">Mt Evans</media:title>
		</media:content>

		<media:content url="http://johnnywey.files.wordpress.com/2012/01/copper-1.png" medium="image">
			<media:title type="html">Copper-1.png</media:title>
		</media:content>

		<media:content url="http://johnnywey.files.wordpress.com/2012/01/copper-3.jpg" medium="image">
			<media:title type="html">Copper-3.jpg</media:title>
		</media:content>

		<media:content url="http://johnnywey.files.wordpress.com/2012/01/deer-creek.jpg?w=224" medium="image">
			<media:title type="html">Deer-Creek.jpg</media:title>
		</media:content>

		<media:content url="http://johnnywey.files.wordpress.com/2012/01/tourdefat-1.jpg?w=224" medium="image">
			<media:title type="html">TourDeFat-1.jpg</media:title>
		</media:content>

		<media:content url="http://johnnywey.files.wordpress.com/2012/01/img_3283.jpg?w=224" medium="image">
			<media:title type="html">IMG_3283</media:title>
		</media:content>

		<media:content url="http://johnnywey.files.wordpress.com/2012/01/img_3259.jpg?w=225" medium="image">
			<media:title type="html">IMG_3259</media:title>
		</media:content>

		<media:content url="http://johnnywey.files.wordpress.com/2012/01/thegirls.jpg" medium="image">
			<media:title type="html">TheGirls.JPG</media:title>
		</media:content>

		<media:content url="http://johnnywey.files.wordpress.com/2012/01/img_1030.jpg" medium="image">
			<media:title type="html">IMG_1030.JPG</media:title>
		</media:content>
	</item>
		<item>
		<title>Software is Harder than it Looks</title>
		<link>http://johnnywey.wordpress.com/2011/10/17/software-is-harder-than-it-looks/</link>
		<comments>http://johnnywey.wordpress.com/2011/10/17/software-is-harder-than-it-looks/#comments</comments>
		<pubDate>Tue, 18 Oct 2011 03:50:47 +0000</pubDate>
		<dc:creator>johnnywey</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://johnnywey.wordpress.com/?p=591</guid>
		<description><![CDATA[Last night, I was thinking about the game Words with Friends for the iPhone. I haven&#8217;t played, but I know a lot of people who love it. It&#8217;s basically an online version of Scrabble with a twist. I think the maximum time a player can take to finish a turn is a whole week. Games [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=johnnywey.wordpress.com&amp;blog=1415338&amp;post=591&amp;subd=johnnywey&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Last night, I was thinking about the game <a href="http://www.wordswithfriends.com/">Words with Friends</a> for the iPhone. I haven&#8217;t played, but I know a lot of people who love it. It&#8217;s basically an online version of Scrabble with a twist. I think the maximum time a player can take to finish a turn is a <em>whole week</em>. Games take a while to finish. Most of the people I know who play are participating in a handful of games at once. The genius of this game, and what makes it perfect for mobile devices like the iPhone, is that you can play it on your own time. On the bus and have a few minutes? No problem … that&#8217;s the perfect time to play your turn.</p>
<p>On the surface, this game seems super simple. &#8220;It&#8217;s basically Scrabble but online.&#8221; The concept sounds so easy and obvious that the implementation is taken for granted. People don&#8217;t understand how complex it is because it just <em>works</em>.</p>
<p>I don&#8217;t have any first hand knowledge of the game, but as simple and obvious as it seems, the implementation is likely a lot more difficult than that. Aside from the actual app that you download from the App Store, there is a whole infrastructure running to make sure games and players are kept in sync. Again, I don&#8217;t know the folks who built it but I&#8217;ll bet they spent a lot of time and effort making it work as well as it does. And I&#8217;ll bet they are constantly working on it, making it better and keeping it running smoothly.</p>
<p>Another example is an application I did work on: The <a href="http://itunes.apple.com/us/app/twcable-tv/id420455839">TWCableTV</a> application for the iPad. This application also seems simple. The first version just streams live video. That&#8217;s it. Since the first release, we&#8217;ve added <a href="http://www.twcableuntangled.com/2010/10/were-pleased-to-announce-remote-dvr-services/">Remote DVR</a> and other features, but the vast majority of the time it&#8217;s used to simply watch TV.</p>
<p>What might be surprising is only a small handful (3-4) of people actually worked on the app that gets installed on the iPad. At least 7-10 people worked on the services that talk directly to the iPad, a bunch more to test the app, yet another 2-3 on making sure the television streams were setup and continue to function properly, a whole host of people working in our data centers to keep the lights on, and lots and lots of previous work by other teams across the company creating ways to programmatically retrieve things like a billing data and validate usernames / passwords. Add a few lawyers in the mix to keep us from violating our contractual agreements and the number of folks who had a hand in the application, directly or indirectly, is at least 50 and likely more in the realm of a hundred.</p>
<p>That&#8217;s a lot of people for an application that just plays TV.</p>
<p>My point is that ideas for software are comparatively easy to come up with. The <em>implementation</em> of ideas is the hard part. We definitely weren&#8217;t the first to think &#8220;it would be cool to let people watch live TV on an iPad&#8221;. However, we were the first to implement it. And it was hard.</p>
<p>Software is usually like that.</p>
<p>Often, when a person I just met learns I worked on an iPad application, they&#8217;ll say something like &#8220;I have a great idea for an iPad application that [insert great idea here]&#8221; That&#8217;s similar to saying &#8220;I have a great idea for a skateboard that hovers or a device that converts matter to energy, transports it, and then converts it back to matter&#8221;.</p>
<p>The amazing thing about the titans of the computer industry is not that they had great ideas but that they actually implemented the ideas. Steve Jobs didn&#8217;t just think of the iPhone. He built it. He hired the talented team of engineers, designers, testers, and even lawyers to make it all work.</p>
<p>It takes work. It takes tenacity. It&#8217;s, well … just like everything else great in life I suppose.</p>
<p>It&#8217;s <em>hard</em>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/johnnywey.wordpress.com/591/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/johnnywey.wordpress.com/591/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/johnnywey.wordpress.com/591/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/johnnywey.wordpress.com/591/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/johnnywey.wordpress.com/591/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/johnnywey.wordpress.com/591/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/johnnywey.wordpress.com/591/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/johnnywey.wordpress.com/591/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/johnnywey.wordpress.com/591/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/johnnywey.wordpress.com/591/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/johnnywey.wordpress.com/591/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/johnnywey.wordpress.com/591/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/johnnywey.wordpress.com/591/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/johnnywey.wordpress.com/591/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=johnnywey.wordpress.com&amp;blog=1415338&amp;post=591&amp;subd=johnnywey&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://johnnywey.wordpress.com/2011/10/17/software-is-harder-than-it-looks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4a06c3df15297e9c39c4eb483a415460?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">johnnywey</media:title>
		</media:content>
	</item>
		<item>
		<title>See Dart … Java?</title>
		<link>http://johnnywey.wordpress.com/2011/10/12/see-dart-%e2%80%a6-java/</link>
		<comments>http://johnnywey.wordpress.com/2011/10/12/see-dart-%e2%80%a6-java/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 14:00:59 +0000</pubDate>
		<dc:creator>johnnywey</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://johnnywey.wordpress.com/?p=566</guid>
		<description><![CDATA[About a month ago, Google made headlines when an email describing ambitious plans to re-create JavaScript was leaked to the web. This email created quite a stir and spawned numerous debates ranging from the hubris of Google in trying to single-handedly replace such a ubiquitous staple of the web to the possible merits of Google&#8217;s [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=johnnywey.wordpress.com&amp;blog=1415338&amp;post=566&amp;subd=johnnywey&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>About a month ago, Google made headlines when an email describing ambitious plans to re-create JavaScript was <a href="https://gist.github.com/1208618">leaked to the web</a>. This email created quite a stir and spawned numerous debates ranging from the hubris of Google in trying to single-handedly replace such a ubiquitous staple of the web to the possible merits of Google&#8217;s decision on a technical level and the kinds of exciting innovations that could occur.</p>
<p>While I personally didn&#8217;t feel great about Google&#8217;s actions, I decided to reserve my public judgement for the time when Google actually released the language. Two days ago, <a href="http://www.dartlang.org/">that finally happened</a>. So, let&#8217;s take a look:</p>
<p><pre class="brush: java;">
main() {
  print('Hello, Dart!');
}
</pre></p>
<p>Ummm … ok. This chunk of code looks similar to JavaScript, so that&#8217;s not all bad. However, I was really expecting something <a href="http://jashkenas.github.com/coffee-script/">more groundbreaking</a> in terms of syntax. While I don&#8217;t loath semi-colons as line endings (you have to have something, right?) the new trend these days is to exclude them. Specifically coming from a JVM perspective Scala, Groovy and Clojure, three of the most popular Java alternatives, are happily semi-colonless. Also, as Google has deep Python roots, I expected they&#8217;d create something with a more &#8220;modern&#8221; syntax. But that&#8217;s ok … I can live with semi-colons. Let&#8217;s dig a bit through the Dart sample source code (can currently be found on Dart&#8217;s <a href="https://code.google.com/p/dart/source/browse/branches/bleeding_edge/#bleeding_edge%2Fdart%2Fclient%2Fsamples">Google code page</a>).</p>
<p>Check out <a href="https://code.google.com/p/dart/source/browse/branches/bleeding_edge/dart/client/samples/swarm/BiIterator.dart">https://code.google.com/p/dart/source/browse/branches/bleeding_edge/dart/client/samples/swarm/BiIterator.dart</a> (I&#8217;ve removed the comments for brevity):</p>
<p><pre class="brush: java;">
class BiIterator&lt;E&gt; {
  ObservableValue&lt;int&gt; currentIndex;

  List&lt;E&gt; list;

  BiIterator(this.list, [List&lt;ChangeListener&gt; oldListeners = null]): currentIndex = new ObservableValue&lt;int&gt;(0) {
    if (oldListeners != null) {
      currentIndex.listeners = oldListeners;
    }
  }
  E next() {
    if (currentIndex.value &lt; list.length - 1) {
      currentIndex.value += 1;
    }
    return list[currentIndex.value];
  }

  E get current() {
    return list[currentIndex.value];
  }

  E previous() {
    if (currentIndex.value &gt; 0) {
      currentIndex.value -= 1;
    }
    return list[currentIndex.value];
  }

  void jumpToValue(E val) {
    for (int i = 0; i &lt; list.length; i++) {
      if (list[i] === val) {
        currentIndex.value = i;
        break;
      }
    }
  }
}
</pre></p>
<p>When I first saw this code, I instantly recognized a very similar syntax to <a href="http://download.oracle.com/javase/1,5.0/docs/guide/language/generics.html">Java 5 generics</a>. Eerily similar, in fact. As powerful as Java generics are, not too many people like the syntax. To port what many consider to be kruft to a brand new language is an odd choice.</p>
<p>Another interesting thing about this code is the inclusion of <a href="https://developer.mozilla.org/en/JavaScript/Reference/Operators/Comparison_Operators">strict comparison operators</a> (i.e. &#8216;===&#8217; and &#8216;!==&#8217;, see line 31 for an example). While the use of these operators is instantly recognizable to those of us who regularly use JavaScript, I think it a very odd decision to include these operators in a brand new language. They are, essentially, a JavaScript oddity that often confuses people when they first learn the language.</p>
<p>So far, things aren&#8217;t looking great for Dart.</p>
<p>There is hope, however: Dart has great support for concurrency. It implements a version of the Actor model (see <a href="http://www.replicator.org/content/a-first-look-at-dart-the-programming-language">http://www.replicator.org/content/a-first-look-at-dart-the-programming-language</a> for details) placing code into <a href="http://en.wikipedia.org/wiki/Web_Workers">Web Workers</a> behind the abstraction. Concurrency is rarely easy and the Actor model is a great way to abstract that kind of complexity away from the developer.</p>
<p>So, let&#8217;s take a look at a basic Actor (Dart&#8217;s interface is called an Isolate):<br />
<pre class="brush: java;">
class Printer extends Isolate {
  main() {
    port.receive((message, replyTo) {
      if (message == null) port.close();
      else print(message);
    });
  }
}

main() {
  new Printer().spawn().then((port) {
    for (var message in ['Hello', 'from', 'other', 'isolate']) {
      port.send(message);  
    }
    port.send(null);
  });
</pre></p>
<p>Huh. It doesn&#8217;t look terrible, but I&#8217;ve been doing a lot of <a href="http://www.scala-lang.org">Scala</a> development recently and Scala also happens to have actors. Let&#8217;s take a quick look at how Scala might implement the above code:</p>
<p><pre class="brush: scala;">
import scala.actors.Actor._ 
val portActor = actor {
    while (true) {
        receive {
            case msg =&gt; println(msg)
        }
    }
}
List(&quot;Hello&quot;, &quot;from&quot;, &quot;other&quot;, &quot;actor&quot;).foreach( word =&gt; portActor ! word)
</pre></p>
<p>Granted: these are both contrived examples. However, look at the Scala version. It&#8217;s doing some tricks like importing a static Actor but it is still, at least to my eyes, much more readable and elegant than the Dart version. While it&#8217;s nice to have an actor-based model for client development, I feel like Dart&#8217;s falls short in comparison to Scala&#8217;s state of the art implementation. Again, considering this is a brand new language, this is puzzling.</p>
<p>Finally, Dart itself can either be executed in a virtual machine or transpiled to JavaScript for execution in a browser. Since most browsers outside of Chrome won&#8217;t have much support for a native Dart VM in the near future, let&#8217;s take a look at Dart&#8217;s transpiling overhead. This is probably all you need: <a href="https://gist.github.com/1277224">https://gist.github.com/1277224</a>. Dart&#8217;s &#8216;Hello World&#8217; application transpiled to over <strong>17,000</strong> lines of JavaScript. Wow. To be fair, this overhead has to do with setting up Dart&#8217;s optional typing system and other niceties of the language which is more akin to including a library. As such, this isn&#8217;t an apples-to-apples comparison with JavaScript itself or something like CoffeeScript which transpiles in a more one-to-one fashion.</p>
<p>But still. Wow.</p>
<p>So, at least for now, it seems like Dart is a bit of a snooze. As much as I was disappointed in Google with not being more open about the development of Dart, I was also excited in seeing something that would simply blow away JavaScript and set the stage for something ground-breaking (maybe something like &#8220;ScalaScript&#8221;). Dart is not that. Core Java developers will likely feel right at home with Dart, but I can&#8217;t see the huge community of client-side JavaScript engineers being very excited about this.</p>
<p><em>Dart, I am disappoint.</em></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/johnnywey.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/johnnywey.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/johnnywey.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/johnnywey.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/johnnywey.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/johnnywey.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/johnnywey.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/johnnywey.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/johnnywey.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/johnnywey.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/johnnywey.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/johnnywey.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/johnnywey.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/johnnywey.wordpress.com/566/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=johnnywey.wordpress.com&amp;blog=1415338&amp;post=566&amp;subd=johnnywey&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://johnnywey.wordpress.com/2011/10/12/see-dart-%e2%80%a6-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4a06c3df15297e9c39c4eb483a415460?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">johnnywey</media:title>
		</media:content>
	</item>
		<item>
		<title>Early Impressions of Some New Choices</title>
		<link>http://johnnywey.wordpress.com/2011/09/22/early-impressions-of-some-new-choices/</link>
		<comments>http://johnnywey.wordpress.com/2011/09/22/early-impressions-of-some-new-choices/#comments</comments>
		<pubDate>Fri, 23 Sep 2011 05:34:34 +0000</pubDate>
		<dc:creator>johnnywey</dc:creator>
				<category><![CDATA[Git]]></category>
		<category><![CDATA[Gradle]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Scala]]></category>

		<guid isPermaLink="false">http://johnnywey.wordpress.com/?p=546</guid>
		<description><![CDATA[My team and I were recently tasked with a pretty monumental project. We are basically building the services that will power a whole host of extremely high traffic websites that can do everything from paying a bill to streaming video content to an iPad. The complexity of this type of project is very appealing and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=johnnywey.wordpress.com&amp;blog=1415338&amp;post=546&amp;subd=johnnywey&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>My team and I were recently tasked with a pretty monumental project. We are basically building the services that will power a whole host of extremely high traffic websites that can do everything from paying a bill to streaming video content to an iPad. The complexity of this type of project is very appealing and I&#8217;m really happy be a part of something this ambitions.</p>
<p>As part of this endeavor we were given the freedom to choose just about whatever tools and technologies we wanted to build the most scalable, maintainable and bullet-proof system we could. After about a week spikes on different languages, frameworks and tooling we came to the initial conclusion that we would adopt:</p>
<ul>
<li>Git for version control</li>
<li>Spring for DI and other stuff (which we since removed, see below)</li>
<li>Scala as our primary development language</li>
<li>Gradle for our builds</li>
<li>MongoDB for persistance</li>
</ul>
<p>This blog is one of many to report on my impressions of these choices and the tradeoffs they are (or aren&#8217;t) causing us to make versus a standard J2EE/Spring Java project that just about everyone on my team has done in the past successfully.</p>
<p><strong>First, <a href="http://www.git-scm.com">Git</a>.</strong></p>
<p>Git. Is. Awesome. Seriously, it is amazing. I&#8217;ve been using Git for about two years but, before now, only in very small projects. I thought it was good before, but I&#8217;ve really grown to love just how much flexibility and speed it buys me personally not counting how much it buys our team in terms of ease of branching and an easy (now) to understand code history. If you haven&#8217;t yet adopted Git as your SCM system, you absolutely should.</p>
<p><strong>Secondly, <a href="http://www.springsource.com">Spring</a>.</strong><br />
We&#8217;ve all used Spring pretty heavily in the past and have a good track record of success with it. However, as we began coding our DI, we came to a very startling conclusion: <em>we probably don&#8217;t need it anymore</em>.</p>
<p>Relying on our experience with DI in general and our understanding of what Spring does &#8220;under the covers&#8221; as it wires objects together, we were able to create a native Scala DI solution that is statically typed, easy to understand (read: no XML or annotations) and, given that it&#8217;s simply part of the language, extremely quick to bootstrap. There is no ApplicationContext to wait for or mock for testing. It does its work when the classes are executed (and slightly later if we&#8217;re using the <code>lazy</code> modifier which we usually do) and that&#8217;s that. While I&#8217;m sure we&#8217;ll be refining this solution over time, the fact that we own it and it works as well as it does for us makes me suspect that we, as a team, have grown &#8220;beyond&#8221; the need for Spring. Spring helped us (and me in particular) understand the need for things like DI and AOP and caused me to think of my code in a very decoupled manner. Thanks Spring, but we&#8217;ve grown up!</p>
<p><strong>Next, <a href="http://www.scala-lang.org">Scala</a>.</strong><br />
I&#8217;m not sure what I think of Scala yet. It&#8217;s a daily thing. Coming from a lot of Groovy and JavaScript work, I have grown to like the free love devil-may-care type system. Some of the recent code I&#8217;ve written in those two languages is the best work I think I&#8217;ve ever done. However, I do see the value in a stricter type system and there are many things about Scala I love.</p>
<p>The biggest concern I have is how ridiculously complex Scala can be if you let it. The community has yet to (as far as I can tell) establish a concise set of patterns (something like <em><a href="http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683/ref=sr_1_1?ie=UTF8&amp;qid=1316756564&amp;sr=8-1">Effective Java</a></em>) and many teams (including ours) spend a lot of time trying to figure out what esoteric features to take advantage of and which to ignore. The exciting thing about this is that we are building our own Scala &#8220;way&#8221; of doing things internally in our team. That&#8217;s also the scary part. However, so far, it&#8217;s been relatively smooth aside from those times when I think &#8220;my god this was so much better in [Groovy|Java]&#8221; which are becoming less frequent as I continue to learn the language.</p>
<p><strong><a href="http://www.gradle.org">Gradle</a>.</strong><br />
I had high hopes for Gradle when we started the project. We moved from a combination of Gant and Maven and, at first, we were loving the combination of convention and extendability. It really allowed us to customize our build and do some pretty neat stuff with very little effort.</p>
<p>My biggest complaint, which is starting to sour my whole opinion of the tool, is how slow it is. Running <code>gradle tasks</code> in our project on a quad-core Xeon takes <em>17 seconds</em>! Running a build from scratch takes almost 30 minutes. And, since there isn&#8217;t yet great IntelliJ support for it, running a <code>gradle idea</code> (which I do several times a day to refresh the .iml dependencies) takes 4 minutes.</p>
<p>These are all unacceptable timeframes in my opinion. Granted: much of the 30 minutes I mentioned above is spent downloading dependencies (perhaps the majority of it), but the other tasks download nothing and still take far too long.</p>
<p>As gross as it sounds, I&#8217;m actually missing Maven. Not necessarily for configuration and dependency management (which were and still are a pain in many cases) or its contrived complexity and &#8220;xml hell&#8221; but more because it was faster and had first-class IDE support. These things are all missing right now with Gradle and I feel like it might be causing us to lose velocity rather than gain it as the time saved setting up the project does not match the time we all spend waiting for tasks to complete on a daily basis.</p>
<p>We may be doing something wrong and I&#8217;m open to doing what it takes to modify our setup, but I feel like what we&#8217;ve done is extremely reasonable and a relatively &#8220;common&#8221; case in terms of project structure and dependencies. To verify that assumption, I ran the same types of commands using another complex project: Gradle itself. I had similar results to those I see in our project. I&#8217;m hoping things improve in this regard after <a href="http://eriwen.com">a smart colleague</a> of mine attends Gradle training next week.</p>
<p><strong>Finally, <a href="http://www.mongodb.org">MongoDB</a>.</strong><br />
I don&#8217;t have much of an opinion on this one as we haven&#8217;t integrated to it just yet. I&#8217;m interested to see how it compares to CouchDB as that&#8217;s where my previous NoSQL experience lies.</p>
<hr />
<p>Again, I&#8217;ll be writing more as we get farther into the project. I feel (mostly) pretty good about the decisions we&#8217;ve made and the team I&#8217;m on. It&#8217;s been, and will continue to be, an awesome ride!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/johnnywey.wordpress.com/546/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/johnnywey.wordpress.com/546/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/johnnywey.wordpress.com/546/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/johnnywey.wordpress.com/546/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/johnnywey.wordpress.com/546/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/johnnywey.wordpress.com/546/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/johnnywey.wordpress.com/546/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/johnnywey.wordpress.com/546/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/johnnywey.wordpress.com/546/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/johnnywey.wordpress.com/546/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/johnnywey.wordpress.com/546/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/johnnywey.wordpress.com/546/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/johnnywey.wordpress.com/546/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/johnnywey.wordpress.com/546/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=johnnywey.wordpress.com&amp;blog=1415338&amp;post=546&amp;subd=johnnywey&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://johnnywey.wordpress.com/2011/09/22/early-impressions-of-some-new-choices/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4a06c3df15297e9c39c4eb483a415460?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">johnnywey</media:title>
		</media:content>
	</item>
		<item>
		<title>Why Chrome OS Likely Doesn&#8217;t Matter Anymore</title>
		<link>http://johnnywey.wordpress.com/2010/12/15/why-chrome-os-likely-doesnt-matter-anymore/</link>
		<comments>http://johnnywey.wordpress.com/2010/12/15/why-chrome-os-likely-doesnt-matter-anymore/#comments</comments>
		<pubDate>Thu, 16 Dec 2010 04:42:46 +0000</pubDate>
		<dc:creator>johnnywey</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://johnnywey.wordpress.com/?p=514</guid>
		<description><![CDATA[In July of 2009, Google announced a new operating system based on the Chrome browser: ChromeOS. The idea was all applications would run inside the browser and the underlying OS would only provide enough functionality to allow the browser to load. All data would reside &#8220;in the cloud&#8221;. I remember that announcement very clearly and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=johnnywey.wordpress.com&amp;blog=1415338&amp;post=514&amp;subd=johnnywey&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In July of 2009, <a href="http://googleblog.blogspot.com/2009/07/introducing-google-chrome-os.html">Google announced</a> a new operating system based on the Chrome browser: ChromeOS.  The idea was all applications would run inside the browser and the underlying OS would only provide enough functionality to allow the browser to load.  All data would reside &#8220;in the cloud&#8221;.  </p>
<p>I remember that announcement very clearly and how excited I was.  I even went around buying up domain names of web applications I thought ChromeOS would need and I would famously build in my spare time (anyone interested in a barely used www.chrometunes.com?)  I felt ChromeOS would be the perfect solution for casual users like my parents performing relatively lightweight tasks like viewing and storing photos, music, and documents.  The ultimate &#8220;<a href="http://en.wikipedia.org/wiki/Thin_client">thin client</a>&#8221; had finally arrived.</p>
<p>On January 27, 2010, Apple announced the iPad and things began to change.  Many people, including myself, grew to think that a tablet could fill the casual computer user space better than a small notebook.  The iPad is cheap, light, easy to use, and gets stellar battery life.  And, not only does it have a very healthy app ecosystem, it also runs modern web applications extremely well.  It&#8217;s the best of both worlds.  Android also stands to perhaps fill that need in the near future with the same split of a native app ecosystem and an advanced web browser.</p>
<p>A few days ago, Google finally released reference hardware of ChromeOS to a <a href="http://www.engadget.com/2010/12/09/google-cr-48-chrome-laptop-preview/">fair</a> <a href="http://techcrunch.com/2010/12/07/live-from-googles-chrome-event-chrome-os-web-store-and-more/">amount</a> of <a href="http://news.cnet.com/8301-31021_3-20024785-260.html">fanfare</a>.  While I&#8217;m still intrigued on the concept, the overall idea is much less exciting to me.  Before the iPad, I could easily picture an ecosystem that didn&#8217;t bother with native applications.</p>
<p>Now, I&#8217;m not so sure.</p>
<p><strong>The Platform</strong><br />
There&#8217;s a reason the &#8220;thin client&#8221; model never really materialized and I don&#8217;t see that changing any time soon.  For the end user, and especially the casual end user, the fact that the &#8220;OS is a browser!!1!!1!&#8221; doesn&#8217;t matter nearly as much as the actual experience.  Browsers have come a long way, but curated and tailored experiences are still very valuable and users have demonstrated they are willing to pay a premium for them.</p>
<p>In short, the application platform is really irrelevant to most people.  What matters is a great experience.  Both the iPad and MacBook Air turn on almost as quickly as you can press a button or open a lid &#8230; just like ChromeOS.  Does it matter that one is a &#8220;thin client&#8221; and the other two aren&#8217;t?</p>
<p><strong>The &#8220;Cloud&#8221;</strong><br />
I agree that remote data storage is a valuable thing for casual users.  Issues of privacy aside, it&#8217;s extremely convenient to have access to documents, photos, and media regardless of location.</p>
<p>But we already have that.  We can view and edit documents stored on the Internet from your phone, laptop, and desktop today.  We can access Facebook and Netflix from a Samsung TV or an iPhone.  What exactly is ChromeOS providing that adds something unique and new?  Will it do it dramatically better?  So far, I&#8217;m not seeing it.</p>
<p><strong>Price</strong><br />
Before the iPad, the cheapest way to get into casual computing was the relatively poor experience of an entry level &#8220;netbook&#8221;.  Today, you can easily get a great casual computing experience for under $500.  ChromeOS may have promised a much lower price point and better quality in 2009, but the bar has moved a lot since then.</p>
<p>I don&#8217;t know what&#8217;s going to happen with ChromeOS, but I honestly don&#8217;t see it gaining a lot of momentum.  I see a future in which casual users will connect to their data with tablets, TVs, and phones and the more advanced users will continue to use powerful laptops and desktops.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/johnnywey.wordpress.com/514/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/johnnywey.wordpress.com/514/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/johnnywey.wordpress.com/514/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/johnnywey.wordpress.com/514/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/johnnywey.wordpress.com/514/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/johnnywey.wordpress.com/514/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/johnnywey.wordpress.com/514/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/johnnywey.wordpress.com/514/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/johnnywey.wordpress.com/514/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/johnnywey.wordpress.com/514/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/johnnywey.wordpress.com/514/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/johnnywey.wordpress.com/514/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/johnnywey.wordpress.com/514/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/johnnywey.wordpress.com/514/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=johnnywey.wordpress.com&amp;blog=1415338&amp;post=514&amp;subd=johnnywey&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://johnnywey.wordpress.com/2010/12/15/why-chrome-os-likely-doesnt-matter-anymore/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4a06c3df15297e9c39c4eb483a415460?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">johnnywey</media:title>
		</media:content>
	</item>
		<item>
		<title>Cycling Season 2010: Organized Event Recap</title>
		<link>http://johnnywey.wordpress.com/2010/12/12/cycling-season-2010-organized-event-recap/</link>
		<comments>http://johnnywey.wordpress.com/2010/12/12/cycling-season-2010-organized-event-recap/#comments</comments>
		<pubDate>Sun, 12 Dec 2010 19:03:51 +0000</pubDate>
		<dc:creator>johnnywey</dc:creator>
				<category><![CDATA[Cycling]]></category>
		<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://johnnywey.wordpress.com/?p=468</guid>
		<description><![CDATA[In early March, I purchased a brand new Specialized Roubaix in anticipation of an epic cycling season. I wasn&#8217;t disappointed. Between the beginning of March and the 7th of November (roughly what I consider to be the cycling season here in Colorado), I put in over 3500 miles on the Roubaix and close to 4000 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=johnnywey.wordpress.com&amp;blog=1415338&amp;post=468&amp;subd=johnnywey&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In early March, I <a href="http://twitter.com/#!/johnnywey/status/10243128251">purchased a brand new Specialized Roubaix</a> in anticipation of an epic cycling season.  I wasn&#8217;t disappointed.  Between the <a href="http://www.dailymile.com/people/johnnywey/entries/1175679">beginning of March</a> and the <a href="http://www.dailymile.com/people/johnnywey/entries/3994567">7th of November</a> (roughly what I consider to be the cycling season here in Colorado), I put in over 3500 miles on the Roubaix and close to 4000 miles total (I have a mountain bike as well).</p>
<p>At the beginning of 2010, I got together with a couple of my best friends and we mapped out the organized event rides we wanted to do for the season.  There are a lot of these types of events all over the place, and it was a challenge to narrow it all down.  Here are the ones we chose and my thoughts:</p>
<ul>
<li>
<strong><a href="http://www.elephantrockride.com/">Elephant Rock</a> (06/06/2010):</strong> This ride is commonly known as the kickoff of the summer riding season.  It has been around for a long time and has a lot of distance options for various skill levels.  I rode the century option which includes close to 6,000 feet of climbing.<br />
<br /><div id="attachment_493" class="wp-caption aligncenter" style="width: 235px"><a href="http://johnnywey.files.wordpress.com/2010/12/img_0402.jpg"><img src="http://johnnywey.files.wordpress.com/2010/12/img_0402.jpg?w=225&#038;h=300" alt="" title="Elephant Rock, 2010" width="225" height="300" class="size-medium wp-image-493" /></a><p class="wp-caption-text">Elephant Rock</p></div><br />
<div id="attachment_495" class="wp-caption aligncenter" style="width: 235px"><a href="http://johnnywey.files.wordpress.com/2010/12/img_0403.jpg"><img src="http://johnnywey.files.wordpress.com/2010/12/img_0403.jpg?w=225&#038;h=300" alt="" title="Angled Road; Elephant Rock" width="225" height="300" class="size-medium wp-image-495" /></a><p class="wp-caption-text">Taking a turn on the Elephant Rock ride</p></div><br />
The course started and ended in Castle Rock traveling in a loop including a dip into Monument.  There were ample rest stops along with the way and, despite some wind, was a reasonably great kickoff to the season.  On the downside, the food wasn&#8217;t so great and, because of the sheer volume of riders on the course, there were times when congestion was a real issue.  I&#8217;ve decided to ride it again next year as it helps set an early season fitness goal, but there were better rides this year no question.
</li>
<li><strong><a href="http://www.nationalmssociety.org/">Bike MS 150</a> (06/26/2010-06/27/210):</strong> This was a two day event.  We rode from Westminster to Fort Collins, stayed the night, and then rode back the second day.  Both days were roughly 75 miles leading to a grand total of 150 combined miles over the weekend.  There is also a century option on the second day for people who want to ride a little farther.<br />
<br /><div id="attachment_499" class="wp-caption aligncenter" style="width: 310px"><a href="http://johnnywey.files.wordpress.com/2010/12/img_1419.jpg"><img src="http://johnnywey.files.wordpress.com/2010/12/img_1419.jpg?w=300&#038;h=225" alt="" title="MS-150 2010" width="300" height="225" class="size-medium wp-image-499" /></a><p class="wp-caption-text">Finishing up the MS-150</p></div><br />
The ride itself was beautiful and relatively easy, with only about 1,500 feet of climbing over Horse-tooth Reservoir.  We averaged close to 20mph on the way up.  The food was outstanding and the volunteers were extremely fun and helpful.  I&#8217;d definitely do this ride again except that the price of admission has gotten relatively high.  Each participant is expected to raise $400 minimum to ride, and I ended paying the majority of that out of pocket.  If you&#8217;re one of those people who love asking for money, then this ride is definitely for you.
</li>
<li><strong><a href="http://www.bikerpelli.com/Sunrise_Century/">Sunrise Century</a> (07/24/2010):</strong> This ride was a 100 mile (with 7,000 foot elevation gain) loop from Boulder into Lyons, over to Nederland on the Peak to Peak, and back down into Boulder via Left Hand Canyon.  This loop and its variants are extremely popular due to some challenging climbing and incredible scenery.  It was likely the hardest ride of the year for us.<br />
<br /><div id="attachment_501" class="wp-caption aligncenter" style="width: 310px"><a href="http://johnnywey.files.wordpress.com/2010/12/img_4664_2_2.jpg"><img src="http://johnnywey.files.wordpress.com/2010/12/img_4664_2_2.jpg?w=300&#038;h=209" alt="" title="Sunrise Century, 2010" width="300" height="209" class="size-medium wp-image-501" /></a><p class="wp-caption-text">Happy to be finishing the Sunrise Century</p></div><br />
The ride, however, isn&#8217;t something I&#8217;ll likely do again.  I spent a lot of time on the Peak to Peak this year before and after the event, and didn&#8217;t really feel as though it was worth paying for the organized version.  The food wasn&#8217;t great and the ride felt disjointed.  If you feel like riding this course (and you really should; it&#8217;s a great course) I recommend doing it on your own.
</li>
<li><strong><a href="http://www.coppertriangle.com/">Copper Triangle</a> (08/07/2010):</strong> This was, hands down, the best ride of the year.  The organization was outstanding, the food excellent, and the course incredible.  There were the perfect number of people on the road and just about everyone was nice and courteous.  We stayed the night before and woke up to one of the best days I&#8217;ve ever had on a bicycle.  I&#8217;m most definitely going to be doing this ride again next year!<div id="attachment_503" class="wp-caption aligncenter" style="width: 210px"><a href="http://johnnywey.files.wordpress.com/2010/12/img_0202.png"><img src="http://johnnywey.files.wordpress.com/2010/12/img_0202.png?w=200&#038;h=300" alt="" title="Copper Triangle Finish" width="200" height="300" class="size-medium wp-image-503" /></a><p class="wp-caption-text">Copper Triangle finish line</p></div>
</li>
<li><strong><a href="http://www.newbelgium.com/tour-de-fat">Tour de Fat</a> (09/11/2010):</strong> This was a great family ride from our house to City Park and back.  The total distance was about 35 miles.  We took the family and kids along and had a great time listening to music and drinking some outstanding beer.  The crowd there is always lively, and everyone is expected to be in costume (we dressed up as Mormons :)<br />
<div id="attachment_505" class="wp-caption aligncenter" style="width: 310px"><a href="http://johnnywey.files.wordpress.com/2010/12/img_0083.jpg"><img src="http://johnnywey.files.wordpress.com/2010/12/img_0083.jpg?w=300&#038;h=217" alt="" title="Tour de Fat 2010 1" width="300" height="217" class="size-medium wp-image-505" /></a><p class="wp-caption-text">Amber and Leslie at the TdF</p></div><br />
<div id="attachment_507" class="wp-caption aligncenter" style="width: 234px"><a href="http://johnnywey.files.wordpress.com/2010/12/img_00841.jpg"><img src="http://johnnywey.files.wordpress.com/2010/12/img_00841.jpg?w=224&#038;h=300" alt="" title="Tour de Fat 2010 2" width="224" height="300" class="size-medium wp-image-507" /></a><p class="wp-caption-text">Waving Hello at the Tour de Fat</p></div><br />
<div id="attachment_509" class="wp-caption aligncenter" style="width: 310px"><a href="http://johnnywey.files.wordpress.com/2010/12/pholjto.jpg"><img src="http://johnnywey.files.wordpress.com/2010/12/pholjto.jpg?w=300&#038;h=224" alt="" title="Tour de Fat 2010 3" width="300" height="224" class="size-medium wp-image-509" /></a><p class="wp-caption-text">The baby at the Tour de Fat</p></div>
</li>
</ul>
<p>Next year, I plan on doing <a href="http://www.elephantrockride.com/">Elephant Rock</a>, the <a href="http://denvercenturyride.com/">Denver Century</a>, <a href="http://www.deercreekchallenge.com/">Deer Creek</a>, the <a href="http://www.coppertriangle.com/">Copper Triangle</a>, the <a href="http://www.coloradocrookedroubaix.com">Crooked Roubaix</a>, and the <a href="http://www.newbelgium.com/tour-de-fat">Tour de Fat</a> (of course).  Also, probably the most exciting thing for me in 2011 is the inclusion of my wife on at least a few of those rides along with the weekly group rides.</p>
<p>2011 is going to be quite epic &#8230; I can&#8217;t wait!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/johnnywey.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/johnnywey.wordpress.com/468/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/johnnywey.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/johnnywey.wordpress.com/468/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/johnnywey.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/johnnywey.wordpress.com/468/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/johnnywey.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/johnnywey.wordpress.com/468/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/johnnywey.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/johnnywey.wordpress.com/468/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/johnnywey.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/johnnywey.wordpress.com/468/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/johnnywey.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/johnnywey.wordpress.com/468/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=johnnywey.wordpress.com&amp;blog=1415338&amp;post=468&amp;subd=johnnywey&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://johnnywey.wordpress.com/2010/12/12/cycling-season-2010-organized-event-recap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4a06c3df15297e9c39c4eb483a415460?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">johnnywey</media:title>
		</media:content>

		<media:content url="http://johnnywey.files.wordpress.com/2010/12/img_0402.jpg?w=225" medium="image">
			<media:title type="html">Elephant Rock, 2010</media:title>
		</media:content>

		<media:content url="http://johnnywey.files.wordpress.com/2010/12/img_0403.jpg?w=225" medium="image">
			<media:title type="html">Angled Road; Elephant Rock</media:title>
		</media:content>

		<media:content url="http://johnnywey.files.wordpress.com/2010/12/img_1419.jpg?w=300" medium="image">
			<media:title type="html">MS-150 2010</media:title>
		</media:content>

		<media:content url="http://johnnywey.files.wordpress.com/2010/12/img_4664_2_2.jpg?w=300" medium="image">
			<media:title type="html">Sunrise Century, 2010</media:title>
		</media:content>

		<media:content url="http://johnnywey.files.wordpress.com/2010/12/img_0202.png?w=200" medium="image">
			<media:title type="html">Copper Triangle Finish</media:title>
		</media:content>

		<media:content url="http://johnnywey.files.wordpress.com/2010/12/img_0083.jpg?w=300" medium="image">
			<media:title type="html">Tour de Fat 2010 1</media:title>
		</media:content>

		<media:content url="http://johnnywey.files.wordpress.com/2010/12/img_00841.jpg?w=224" medium="image">
			<media:title type="html">Tour de Fat 2010 2</media:title>
		</media:content>

		<media:content url="http://johnnywey.files.wordpress.com/2010/12/pholjto.jpg?w=300" medium="image">
			<media:title type="html">Tour de Fat 2010 3</media:title>
		</media:content>
	</item>
		<item>
		<title>Time for a Rewrite Part 2: 5 (Minimal) Requirements for Success</title>
		<link>http://johnnywey.wordpress.com/2010/12/05/time-for-a-rewrite-part-2-5-minimal-requirements-for-success/</link>
		<comments>http://johnnywey.wordpress.com/2010/12/05/time-for-a-rewrite-part-2-5-minimal-requirements-for-success/#comments</comments>
		<pubDate>Sun, 05 Dec 2010 19:25:42 +0000</pubDate>
		<dc:creator>johnnywey</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://johnnywey.wordpress.com/?p=459</guid>
		<description><![CDATA[This is the second part of a short series in rewriting legacy software. To be clear, I&#8217;m not talking about creating a new cron job; these posts are about completely rewriting a complex mission critical application that is either &#8220;shipped&#8221; to customers or used internally in the enterprise. Yesterday, I wrote about having the right [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=johnnywey.wordpress.com&amp;blog=1415338&amp;post=459&amp;subd=johnnywey&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This is the second part of a short series in rewriting legacy software.  To be clear, I&#8217;m not talking about creating a new cron job; these posts are about completely rewriting a complex mission critical application that is either &#8220;shipped&#8221; to customers or used internally in the enterprise.</p>
<p>Yesterday, I <a href="http://johnnywey.wordpress.com/2010/12/04/time-for-a-rewrite-part-1-motivation/">wrote about having the right motivations for a rewrite</a>.  Today, I&#8217;m going to detail the things I believe are required for actual success.  It&#8217;s important to note that this list doesn&#8217;t guarantee success and that these types of projects often fail regardless.  However, if you&#8217;re going to go down you might as well go down swinging!</p>
<ol>
<li><strong>Do you have the right people?</strong> The importance of having the right engineers cannot be stated enough and if only one thing can be taken away from this post I hope that&#8217;s it.  You&#8217;ve got to spend the money and hit the network(s) to get the best you can possibly find and recruit them to the project.  I&#8217;ll leave the definition of a &#8220;good&#8221; engineer to a later post (although a <a href="http://www.google.com/search?sourceid=chrome&amp;ie=UTF-8&amp;q=what+is+a+good+engineer">Google search</a> provides a <a href="http://www.erikvossman.com/2006/01/18/becoming-a-good-engineer-introduction/">plethora</a> <a href="http://wiki.answers.com/Q/What_qualities_should_a_good_engineer_have">of</a> <a href="http://www.canzonatech.com/engineers.shtml">information</a> on this topic).  I will say that it&#8217;s important that the people you find are outstanding both socially and technically as software development is a social activity.  The intersection of those two qualities on a venn diagram is rather small and these people are in high demand.  Expect to work for it.
<p>If you&#8217;ve already hired the head counts you need, is your existing team motivated to do the work?  Are they the type of people that energetically solve problems and are excited to take on such a big challenge?  If not, reconsider your team.  Seriously.</p>
<p>If you&#8217;re using a vendor to do the work rather than an internal development team, the same rules apply.  Make sure you get to know the personalities behind the actual development work.  If the vendor is offshoring the work, it&#8217;s likely you&#8217;ll experience some of the pain associated with that despite how abstracted the project manager might claim it to be.  A past record of success is important in selecting a vendor, but it&#8217;s even more important to be comfortable with the current development team and imagine yourself working with them for a long period of time.</p>
<p><strong>More than anything, your engineers will decide if this project succeeds or fails</strong>.
</li>
<li><strong>Do you have the right process?</strong> As the <a href="http://agilemanifesto.org/">Agile Manifesto</a> states, people are more important than process.  While processes known as Agile are the current <em>trend de jour</em> for sure, adopting some or all of them <strong>doesn&#8217;t guarantee success</strong>.  For many reasons, however, Agile does help create a framework that encourages success more than most previous methods.  It also helps create a system of expectations to interface with other groups and management in the company (see more below).  Adopting an Agile process and doing it well will help you succeed.</li>
<li><strong>Do you have the right expectations?</strong> One of the difficulties of rewriting software versus creating something brand new is that there are explicit and implicit expectations right from the start.  &#8220;It should do everything [the legacy version] can do.&#8221;  You have to understand that there are likely a lot of people already used to getting things done in the old system.  The UI might be atrocious, but it&#8217;s familiar.
<p>So don&#8217;t kid yourself or the company: the new version is going to bring some pain.  It will require new training and perhaps a bunch of CSRs or even customers to relearn and retool their understanding and workflow.  This is the social cost, and it&#8217;s important not to underestimate it.</p>
<p>There are also technical hurdles such as how to stage the rollout.  Do you expect to simply flip a switch one night or gradually migrate over?  How will the migrating from the old database to the new database work?  Beware of creating &#8220;legacy bridges&#8221; to help stage a migration as too many of these will kill your velocity.</p>
<p>If possible, try and freeze feature additions in the legacy platform so you have a static target of functionality to chase rather than attempting to keep up with another development effort.</p>
<p>Finally, give as much insight into your development process as possible.  Be transparent.  If you&#8217;re behind where you think you&#8217;d be, admit it.  This is where adopting an Agile process can really help as it automatically sets these process and velocity expectations with the constituents and product owners.
</li>
<li><strong>Do you have the right product direction?</strong> You can have a great team of engineers and a wonderful process, but still fail without a good product owner.  You need someone who can understand the requirements of the legacy platform and translate them into stories.  You need someone who can decide what features are necessary to get a version 1 release into the field so real iteration can start.  You need a person who can shield the engineering team from any political issues that might arise.  These types of people are just as important as good engineers and should be sought after with the same sense of urgency.</li>
<li><strong>Do you have the right support?</strong> Does the company fully support your effort to perform the rewrite.  Attempting to do something this big without the support of (almost) everyone in the enterprise will be very difficult.  You need cooperation and a certain level of forgiveness from your internal constituents.  You might need help from other groups for integration efforts.  You&#8217;ll likely need lots of testing help.
<p>These types of projects in large organizations can get bogged down in political mire.  Having the support of key people, especially on the C level, will help shield that from happening.</p>
<p>Finally, don&#8217;t be a jerk to other groups.  What you&#8217;re doing may be important, but acting as if it&#8217;s more important than anything else will blow any positive capital you have.  Remember that development like this is largely a social exercise.  Just like in &#8220;real&#8221; life, treating people with respect will buy you a lot more in terms of help than talking down to them.
</li>
</ol>
<p>Good luck!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/johnnywey.wordpress.com/459/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/johnnywey.wordpress.com/459/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/johnnywey.wordpress.com/459/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/johnnywey.wordpress.com/459/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/johnnywey.wordpress.com/459/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/johnnywey.wordpress.com/459/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/johnnywey.wordpress.com/459/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/johnnywey.wordpress.com/459/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/johnnywey.wordpress.com/459/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/johnnywey.wordpress.com/459/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/johnnywey.wordpress.com/459/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/johnnywey.wordpress.com/459/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/johnnywey.wordpress.com/459/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/johnnywey.wordpress.com/459/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=johnnywey.wordpress.com&amp;blog=1415338&amp;post=459&amp;subd=johnnywey&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://johnnywey.wordpress.com/2010/12/05/time-for-a-rewrite-part-2-5-minimal-requirements-for-success/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4a06c3df15297e9c39c4eb483a415460?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">johnnywey</media:title>
		</media:content>
	</item>
		<item>
		<title>Time for a Rewrite Part 1: Motivation</title>
		<link>http://johnnywey.wordpress.com/2010/12/04/time-for-a-rewrite-part-1-motivation/</link>
		<comments>http://johnnywey.wordpress.com/2010/12/04/time-for-a-rewrite-part-1-motivation/#comments</comments>
		<pubDate>Sat, 04 Dec 2010 19:08:20 +0000</pubDate>
		<dc:creator>johnnywey</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://johnnywey.wordpress.com/?p=455</guid>
		<description><![CDATA[For the next couple of posts(ish), I&#8217;m going to share my thoughts on rewriting legacy applications. How many times have you heard the following about an application in your organization: &#8220;this sucks, we should just rewrite it&#8221;? I&#8217;m sure I&#8217;ve said it at least a few times. For a while, the smart money was on [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=johnnywey.wordpress.com&amp;blog=1415338&amp;post=455&amp;subd=johnnywey&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>For the next couple of posts(ish), I&#8217;m going to share my thoughts on rewriting legacy applications.</p>
<p>How many times have you heard the following about an application in your organization: &#8220;this sucks, we should just rewrite it&#8221;?</p>
<p>I&#8217;m sure I&#8217;ve said it at least a few times.  For a while, the smart money was on generally <a href="http://www.joelonsoftware.com/articles/fog0000000069.html">avoiding rewrites</a> and for good reasons.  However, as new tools make it easier to maintain velocity in a software project, a rewrite shouldn&#8217;t just be thrown out on principle.</p>
<p>There are some great questions to ask yourself if you&#8217;ve ever thought about rewriting a deployed legacy system.  Today&#8217;s post centers around the question <strong>&#8220;Do you have the right motivation?&#8221;</strong></p>
<p>In other words, are you considering a rewrite for the right reasons.  Some <strong>good</strong> reasons include:</p>
<ul>
<li><strong>The application can no longer make company and/or performance business requirements.</strong>  This one is obvious, but, especially in cases of performance, make <strong>sure</strong> this is the case (more on this below).</li>
<li><strong>The application technology stack is becoming too costly or difficult to support.</strong>  Maybe the application requires expensive proprietary servers or people who are skilled in the technology powering the application are becoming harder to find and more expensive to hire.  Another example of this might be that the framework or platform the application was written in is deprecated to the point that it is hampering interoperability needs or upgrades to strategic and important new technologies.</li>
<li><strong>It is too difficult to add new features due to extremely excessive code bloat and smell.</strong>  This one is tough to quantify (see below), but can be a good reason to start anew if it is to the point that it is hurting the company&#8217;s competitive edge.</li>
<li><strong>The application development is outsourced and the working relationship with the primary vendor has soured.</strong>  This may not justify a full rewrite, but there are circumstances (don&#8217;t have a license to modify the source code, can&#8217;t legally add new hardware, etc.) where this makes sense.</li>
<li><strong>The application development is internally maintained and the platform makes it difficult to acquire and keep good talent.</strong>  If you see engineers roll their eyes or shrug their shoulders when you try and make Struts 1 development sound exciting, it might be time to move to something good engineers are excited to work on.  Obviously, you can&#8217;t let the latest technical fad decide everything, but there is a pretty obvious line when all the good engineers in your group start jumping ship to work on cooler stuff.</li>
</ul>
<p>Some <strong>bad</strong> reasons to perform a rewrite include:</p>
<ul>
<li><strong>Someone in the company just got wined and dined by a vendor.</strong>  Enough said.</li>
<li><strong>Political motivation</strong> such as a new president trying to show off their chops by beating up on legacy technology or making a play for control of another group.</li>
<li><strong>The application development is internally maintained and you hear casual complaining over code quality by engineers.</strong>  As I stated above, code quality should be considered for sure but this could also signal that a couple of iterations are required to clean up and refactor the code.  If the engineers are complaining about the lack of testing, take a couple iterations to add tests.  Before making a decision to drop everything and start from scratch, see if engaging the right engineers to take ownership of the problems they complain about helps to fix them.</li>
<li><strong>Offhand determinations that the application doesn&#8217;t perform well or doesn&#8217;t meet business requirements.</strong>  These sorts of decisions should be decided using real measurements and with a good understanding of the entire process.  If a transaction seems to take a long time, understand what it&#8217;s doing and if it&#8217;s really the application&#8217;s fault.  Maybe the application is interfacing with another internal process that needs to be optimized.  Maybe the UI has poor speed metaphors and just adding a throbber will make it feel faster.  Make sure there is <strong>hard data</strong> to support this.</li>
</ul>
<p>Next time, I&#8217;ll talk about basic things you&#8217;ll need to help decrease the likelihood of failure during the process.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/johnnywey.wordpress.com/455/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/johnnywey.wordpress.com/455/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/johnnywey.wordpress.com/455/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/johnnywey.wordpress.com/455/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/johnnywey.wordpress.com/455/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/johnnywey.wordpress.com/455/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/johnnywey.wordpress.com/455/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/johnnywey.wordpress.com/455/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/johnnywey.wordpress.com/455/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/johnnywey.wordpress.com/455/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/johnnywey.wordpress.com/455/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/johnnywey.wordpress.com/455/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/johnnywey.wordpress.com/455/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/johnnywey.wordpress.com/455/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=johnnywey.wordpress.com&amp;blog=1415338&amp;post=455&amp;subd=johnnywey&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://johnnywey.wordpress.com/2010/12/04/time-for-a-rewrite-part-1-motivation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4a06c3df15297e9c39c4eb483a415460?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">johnnywey</media:title>
		</media:content>
	</item>
		<item>
		<title>A Simple Solution to iOS Scrolling</title>
		<link>http://johnnywey.wordpress.com/2010/12/03/a-simple-solution-to-ios-scrolling/</link>
		<comments>http://johnnywey.wordpress.com/2010/12/03/a-simple-solution-to-ios-scrolling/#comments</comments>
		<pubDate>Fri, 03 Dec 2010 17:03:34 +0000</pubDate>
		<dc:creator>johnnywey</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://johnnywey.wordpress.com/?p=452</guid>
		<description><![CDATA[One of the most common metaphors for iOS applications, and especially iPad applications, is an independently scrolled window pane. In the iPad&#8217;s mail application, for example, you can easily scroll the message list and the current message itself independent of one another. This is such a common thing on the iPad that transferring it over [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=johnnywey.wordpress.com&amp;blog=1415338&amp;post=452&amp;subd=johnnywey&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>One of the most common metaphors for iOS applications, and especially iPad applications, is an independently scrolled window pane.  In the iPad&#8217;s mail application, for example, you can easily scroll the message list and the current message itself independent of one another.  This is such a common thing on the iPad that transferring it over to iOS web applications seems like a trivial matter.</p>
<p>Except it&#8217;s not.  The iPad doesn&#8217;t support this feature, likely the most common UI metaphor on the device, in an easy way for Mobile Safari applications.  There are some solutions (including <a href="http://stackoverflow.com/questions/1143589/what-is-the-pastrykit-framework">Pastry Kit</a> and <a href="http://www.sencha.com/products/touch/">Sencha Touch</a>), but they all solve the problem a very similar and kludgey way: overwrite the default scrolling behavior with one that uses CSS transformations and JavaScript to move the elements down the window pane.  Even Google&#8217;s iPad GMail interface, one of the best implementations of this in Mobile Safari, is using this strategy.  Implementing this requires a large amount of effort in most cases even with the support of a JavaScript framework behind the scenes.</p>
<p>A simple solution, however, would be to simply change the iPad&#8217;s overflow support.  In most modern browsers, setting a static height / width for a div element and adding the <code>overflow: scroll;</code> property in CSS will result in an independently scrollable portion of the page should content exceed the height / width boundaries.  The iPad does support scrolling in these circumstances, but it requires using two fingers and is often slow and unresponsive.  Most Android browsers (including, as of the time of this writing, the Galaxy Tab) don&#8217;t support this type of scrolling at all.</p>
<p>Changing the device&#8217;s behavior to automatically add the native style tweening, momentum, and scrollbars to these elements would allow UI developers to very easily add intuitive independently scrolling sections to their iPad web applications.  Even better, this solution graceful degrades as desktop browsers would automatically add scrollbars to the content making it easy to understand that additional data is available.</p>
<p><strong>UPDATE</strong>: Looks like this feature is making its way into iOS 5! <a href="http://functionsource.com/post/scrollability-can-hopefully-become-a-shim">http://functionsource.com/post/scrollability-can-hopefully-become-a-shim</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/johnnywey.wordpress.com/452/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/johnnywey.wordpress.com/452/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/johnnywey.wordpress.com/452/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/johnnywey.wordpress.com/452/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/johnnywey.wordpress.com/452/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/johnnywey.wordpress.com/452/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/johnnywey.wordpress.com/452/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/johnnywey.wordpress.com/452/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/johnnywey.wordpress.com/452/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/johnnywey.wordpress.com/452/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/johnnywey.wordpress.com/452/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/johnnywey.wordpress.com/452/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/johnnywey.wordpress.com/452/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/johnnywey.wordpress.com/452/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=johnnywey.wordpress.com&amp;blog=1415338&amp;post=452&amp;subd=johnnywey&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://johnnywey.wordpress.com/2010/12/03/a-simple-solution-to-ios-scrolling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4a06c3df15297e9c39c4eb483a415460?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">johnnywey</media:title>
		</media:content>
	</item>
		<item>
		<title>Hulu is Likely Hurting More Than Helping</title>
		<link>http://johnnywey.wordpress.com/2010/11/20/hulu-is-likely-hurting-more-than-helping/</link>
		<comments>http://johnnywey.wordpress.com/2010/11/20/hulu-is-likely-hurting-more-than-helping/#comments</comments>
		<pubDate>Sun, 21 Nov 2010 06:42:48 +0000</pubDate>
		<dc:creator>johnnywey</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://johnnywey.wordpress.com/?p=450</guid>
		<description><![CDATA[Lately, I&#8217;ve been &#8220;hooked&#8221; on the television show Fringe. I don&#8217;t typically get into shows much, but this one is well written, has decent effects, and I&#8217;ve been surprised by the no holds barred science fiction in prime time vibe. I started watching Fringe a bit into the second season and it occurred to me [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=johnnywey.wordpress.com&amp;blog=1415338&amp;post=450&amp;subd=johnnywey&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Lately, I&#8217;ve been &#8220;hooked&#8221; on the television show Fringe.  I don&#8217;t typically get into shows much, but this one is well written, has decent effects, and I&#8217;ve been surprised by the no holds barred science fiction in prime time vibe.</p>
<p>I started watching Fringe a bit into the second season and it occurred to me today that I haven&#8217;t seen the first season at all.  I went on iTunes to check out how much the first season download costs and immediately decided against it.  I simply balked at the $39.99 and $59.99 price points for standard and high definition downloads.</p>
<p>It&#8217;s not that I believe those are horrible prices per se, but that I&#8217;ve been used to getting content for a much lower price.  We pay for Netflix and Hulu Plus; we don&#8217;t have cable or broadcast TV.  Our bill for both services is under $25 per month.  While we could afford it, I have a hard time justifying $60.00 for something I&#8217;ll only watch a couple of times.</p>
<p>This is a very bad thing for content providers.  The market price of their content is getting closer and closer to zero and, perhaps even worse, people who could pay more are getting conditioned to paying less for consuming content.  Pricing is all about setting expectations, and it&#8217;s very hard to change them once they are set.</p>
<p>You could argue that Hulu, even Hulu Plus, is partially add supported and that allows networks to continue to get paid, but adds are becoming a less and less effective way to pay the bills.  Most networks rely on syndication and sales of physical media to help make ends meet.  However, physical media like DVD and Bluray are rapidly being replaced with streaming services and syndication&#8217;s sole purpose, offering more options for watching a back catalog, becomes unnecessary if an entire back catalog is available for streaming online.</p>
<p>We&#8217;re not far off from being able to access just about anything we want to online for little to no cost.  It&#8217;s where the momentum is.  However, this is likely bad for the industry as a whole.  If the streaming services had been structured more like a cable offering (perhaps ala carte) and opened their content up for distribution on every platform from the get-go, things might have been different.  As of now, I see content providers demanding more and more from their high paying customers (those subscribing to cable or satellite television) increasing the likelihood that people will simply cut the cord as their cable bills, and the number of viable low-cost alternatives, climb.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/johnnywey.wordpress.com/450/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/johnnywey.wordpress.com/450/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/johnnywey.wordpress.com/450/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/johnnywey.wordpress.com/450/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/johnnywey.wordpress.com/450/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/johnnywey.wordpress.com/450/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/johnnywey.wordpress.com/450/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/johnnywey.wordpress.com/450/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/johnnywey.wordpress.com/450/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/johnnywey.wordpress.com/450/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/johnnywey.wordpress.com/450/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/johnnywey.wordpress.com/450/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/johnnywey.wordpress.com/450/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/johnnywey.wordpress.com/450/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=johnnywey.wordpress.com&amp;blog=1415338&amp;post=450&amp;subd=johnnywey&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://johnnywey.wordpress.com/2010/11/20/hulu-is-likely-hurting-more-than-helping/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4a06c3df15297e9c39c4eb483a415460?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">johnnywey</media:title>
		</media:content>
	</item>
	</channel>
</rss>
