Rex Swain's HTTP Viewer
http://www.rexswain.com/httpview.html
Code last updated 5 September 2009
Parameters:
URL = http://www.raibledesigns.com
UAG = CCBot/1.0 (+http://www.commoncrawl.org/bot.html)
REF = (not specified)
AEN =
REQ = GET ;
VER = 1.1 ;
FMT = AUTO
Sending request:
GET / HTTP/1.1
Host: www.raibledesigns.com
User-Agent: CCBot/1.0 (+http://www.commoncrawl.org/bot.html)
Connection: close
• Finding host IP address...
• Host IP address = 69.13.19.124
• Finding TCP protocol...
• Binding to local socket...
• Connecting to host...
• Sending request...
• Waiting for response...
Receiving Header:
HTTP/1.1·200·OK(CR)(LF)
Date:·Fri,·30·Jul·2010·17:52:29·GMT(CR)(LF)
Server:·Apache/1.3.37·(Unix)·Resin/3.0.4·mod_gzip/1.3.26.1a·mod_jk/1.2.20·mod_ssl/2.8.28·OpenSSL/0.9.7l·PHP/4.4.4·FrontPage/5.0.2.2634(CR)(LF)
Last-Modified:·Fri,·30·Jul·2010·05:54:00·GMT(CR)(LF)
Expires:·Thu,·01·Jan·1970·00:00:00·GMT(CR)(LF)
Content-Length:·118742(CR)(LF)
Connection:·close(CR)(LF)
Content-Type:·text/html;charset=utf-8(CR)(LF)
(CR)(LF)
End of Header (Length = 360)
• Elapsed time so far: 0 seconds
• Waiting for additional response until connection closes...
Total bytes received = 119102
Elapsed time so far: 0 seconds
Content (Length = 118742):
···················<!DOCTYPE·html·PUBLIC·"-//W3C//DTD·XHTML·1.0·Transitional//EN"(LF)
····"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">(LF)
<html·lang="en"·xml:lang="en"·xmlns="http://www.w3.org/1999/xhtml">(LF)
<head>(LF)
····<title>Raible·Designs·|··Matt·Raible's·discussions·on·Java·and·Web·Development·</title>(LF)
····<meta·http-equiv="Content-Type"·content="text/html;·charset=utf-8"/>(LF)
····<meta·http-equiv="Content-Language"·content="en"/>(LF)
····<meta·http-equiv="X-UA-Compatible"·content="chrome=1"/>(LF)
····<meta·name="viewport"·content="width=device-width"·/>(LF)
····<base·href="http://raibledesigns.com"·/>(LF)
····<link·rel="openid.server"·href="http://www.myopenid.com/server"/>(LF)
····<link·rel="openid.delegate"·href="http://mraible.openid.com"/>(LF)
····<meta·http-equiv="X-XRDS-Location"·content="http://mraible.myopenid.com/xrds"·/>(LF)
···············<link·rel="EditURI"···type="application/rsd+xml"·title="RSD"·href="http://raibledesigns.com/rd/rsd"/>(LF)
········(LF)
············<link·rel="alternate"·type="application/atom+xml"·title="Recent·Entries·(Atom)"··href="http://raibledesigns.com/rd/feed/entries/atom"·/>(LF)
····<link·rel="alternate"·type="application/rss+xml"··title="Recent·Entries·(RSS)"···href="http://raibledesigns.com/rd/feed/entries/rss"·/>(LF)
····<link·rel="alternate"·type="application/atom+xml"·title="Recent·Comments·(Atom)"·href="http://raibledesigns.com/rd/feed/comments/atom"·/>(LF)
····<link·rel="alternate"·type="application/rss+xml"··title="Recent·Comments·(RSS)"··href="http://raibledesigns.com/rd/feed/comments/rss"·/>(LF)
(LF)
····(LF)
········<link·type="text/css"·rel="stylesheet"·href="/wro/andreas08.css"/>(LF)
</head>(LF)
(LF)
(LF)
(LF)
<body·id="page-weblog">(LF)
····(LF)
<div·id="page">(LF)
····<div·id="header"·class="clearfix">(LF)
········<h1><a·href="http://raibledesigns.com/rd/">Raible·Designs</a></h1>(LF)
(LF)
········<h2><!--·Short·tagline·goes·here·--></h2>(LF)
········<div·id="branding"></div>(LF)
····</div>(LF)
(LF)
····<div·id="content"·class="clearfix">(LF)
········<div·id="main">(LF)
········(LF)
····<div·id="twitter_div"·class="smokey"·style="border:·1px·solid·silver">(LF)
<div·id="status_updates">Loading·Twitter·updates·<img·src="/themes/andreas08/images/ajax-loader.gif"·alt="Loading..."/></div>(LF)
<a·href="http://twitter.com/mraible"·style="float:right;·font-size:·10px;·margin-top:·-15px">Follow·me·on·Twitter</a>(LF)
</div>(LF)
<div·class="entries">(LF)
<div·style="text-align:·center">(LF)
<script·type="text/javascript">(LF)
<!--(LF)
if·(document.referrer·!=·null·&&·document.referrer.toString().indexOf("google")·!=·-1)·{(LF)
··google_ad_client·=·"pub-7968247362757416";(LF)
··google_ad_width·=·468;(LF)
··google_ad_height·=·60;(LF)
··google_ad_format·=·"468x60_as";(LF)
··google_color_border·=·"CCCCCC";(LF)
··google_color_bg·=·"FFFFFF";(LF)
··google_color_link·=·"000000";(LF)
··google_color_url·=·"0000FF";(LF)
··google_color_text·=·"333333";(LF)
··document.write("<scr"·+·"ipt·type='text/javascript'·src='http://pagead2.googlesyndication.com/pagead/show_ads.js'><\/scr"·+·"ipt>");(LF)
}(LF)
//·-->(LF)
</script>(LF)
</div>(LF)
(LF)
········<div·class="next-previous">(LF)
················································<a·href="/rd/">Main</a>(LF)
················|·<a·href="/rd/?page=1">Next·page</a>·»(LF)
················</div>(LF)
········(LF)
················<div·class="day">(CR)(LF)
(CR)(LF)
<div·class="entry">(CR)(LF)
········<a·href="http://raibledesigns.com/rd/date/20100729">(CR)(LF)
········<img·class="daypermalink"(CR)(LF)
············src="/themes/andreas08/images/calendar.png"(CR)(LF)
············title="Permanent·link·to·this·day"(CR)(LF)
············alt="20100729"·/></a>(CR)(LF)
(CR)(LF)
······Thursday·July·29,·2010(CR)(LF)
</div>(CR)(LF)
(CR)(LF)
<p>(CR)(LF)
····<a·name="jess_and_lili_s_legendary"></a>(CR)(LF)
····<span·class="entryTitle"><a·href="http://raibledesigns.com/rd/entry/jess_and_lili_s_legendary">Jess·and·Lili's·Legendary·Wedding·on·The·Lost·Coast</a>(CR)(LF)
············</span>(CR)(LF)
(CR)(LF)
············If·you're·a·long-time·reader·of·this·blog,·you'll·know·I've·been·to·<a·href="http://raibledesigns.com/rd/entry/jason_and_holly_s_wedding">some</a>·<a·href="http://raibledesigns.com/rd/entry/ryan_and_breanne_s_wedding">great</a>·<a·href="http://raibledesigns.com/rd/entry/my_sister_s_fabulous_wedding">weddings</a>·in·the·last·couple·years.·This·past·weekend,·I·had·the·pleasure·of·experiencing·yet·another·fantastic·celebration·with·two·old·and·close·friends,·Clint·and·Jess.·You·might·remember·Clint·from·his·<a·href="http://raibledesigns.com/rd/entry/costa_rica_was_awesome">wedding·in·Costa·Rica</a>·or·when·we·<a·href="http://raibledesigns.com/rd/entry/my_almost_slept_in_a">almost·slept·in·a·snow·cave</a>.·I'm·happy·to·report·we·didn't·get·in·any·trouble·and·everyone·survived·the·weekend·without·a·scratch.(CR)(LF)
</p>(CR)(LF)
<p>My·trip·to·Jess's·wedding·(on·the·<a·href="http://en.wikipedia.org/wiki/Lost_Coast">Lost·Coast</a>·of·Northern·California)·started·with·a·flight·to·Portland,·Oregon.·After·arriving,·I·drove·to·Clint·and·Autumn's·house·in·Eugene·where·we·enjoyed·some·sweet·Oregon·micros·and·reminisced·about·Costa·Rica.·The·next·morning,·we·headed·for·the·wedding;·an·8-hour·drive.·Our·road·trip·was·awesome,·especially·when·we·started·driving·through·the·Redwood·Groves·on·101.</p>(CR)(LF)
<p>We·stayed·in·a·<a·href="http://www.vrbo.com/30279">sweet·beach·house</a>·for·the·weekend.·While·it·was·foggy·most·of·the·time,·the·sun·did·come·out·on·Saturday.·We·quickly·became·surrounded·by·beautiful·views·and·headed·to·the·beach·to·relax·with·Jess.(CR)(LF)
</p>(CR)(LF)
<p·style="text-align:·center">(CR)(LF)
<a·href="http://farm5.static.flickr.com/4152/4837105756_a8c04f820b.jpg"·title="Whoo·hoo!·Sunshine!"·rel="lightbox[jessandliliwedding]"><img·src="http://farm5.static.flickr.com/4152/4837105756_a8c04f820b_t.jpg"·width="100"·height="75"·alt="Whoo·hoo!·Sunshine!"·style="border:·1px·solid·black"·/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4147/4837106698_506429dc8c.jpg"·title="Taking·it·all·in"·rel="lightbox[jessandliliwedding]"><img·src="http://farm5.static.flickr.com/4147/4837106698_506429dc8c_t.jpg"·width="100"·height="75"·alt="Taking·it·all·in"·style="margin-left:·10px;·border:·1px·solid·black"·/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4152/4836495851_95ef11cf5d.jpg"·title="Fog·Lifting"·rel="lightbox[jessandliliwedding]"><img·src="http://farm5.static.flickr.com/4152/4836495851_95ef11cf5d_t.jpg"·width="100"·height="75"·alt="Fog·Lifting"·style="margin-left:·10px;·border:·1px·solid·black"·/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4089/4836496609_5d5349fe0b.jpg"·title="Clint·and·Jess"·rel="lightbox[jessandliliwedding]"><img·src="http://farm5.static.flickr.com/4089/4836496609_5d5349fe0b_t.jpg"·width="100"·height="75"·alt="Clint·and·Jess"·style="margin-left:·10px;·border:·1px·solid·black"·/></a>(CR)(LF)
</p>(CR)(LF)
<p>The·wedding·was·on·Sunday,·a·mere·block·from·where·we·were·staying.·The·ceremony·was·one·of·the·most·heartfelt·I've·ever·heard,·especially·since·the·Wedding·Official·was·a·friend·of·the·bride's·since·she·was·born.</p>(CR)(LF)
<p·style="text-align:·center">(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4127/4837109660_1bf82702c6.jpg"·title="Jess·and·Kai"·rel="lightbox[jessandliliwedding]"><img·src="http://farm5.static.flickr.com/4127/4837109660_1bf82702c6_t.jpg"·width="100"·height="75"·alt="Jess·and·Kai"·style="border:·1px·solid·black"·/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4112/4836499239_9fc18dec2f.jpg"·title="Smiles·all·around"·rel="lightbox[jessandliliwedding]"><img·src="http://farm5.static.flickr.com/4112/4836499239_9fc18dec2f_t.jpg"·width="100"·height="75"·alt="Smiles·all·around"·style="margin-left:·10px;·border:·1px·solid·black"·/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4147/4837113014_b5f0a698f3.jpg"·title="Vows"·rel="lightbox[jessandliliwedding]"><img·src="http://farm5.static.flickr.com/4147/4837113014_b5f0a698f3_t.jpg"·width="100"·height="75"·alt="Vows"·style="margin-left:·10px;·border:·1px·solid·black"·/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4148/4837113676_f742506fbc.jpg"·title="Aawwwwww"·rel="lightbox[jessandliliwedding]"><img·src="http://farm5.static.flickr.com/4148/4837113676_f742506fbc_t.jpg"·width="100"·height="75"·alt="Aawwwwww"·style="margin-left:·10px;·border:·1px·solid·black"·/></a>(CR)(LF)
</p>(CR)(LF)
<p>The·reception·afterwards·was·a·truly·spectacular·party·that·lasted·well·into·the·evening.·Clint·and·I·vowed·to·go·to·bed·early,·but·we·ended·up·having·so·much·fun·we·closed·the·place·down.·Jess·and·Lili·were·an·instrumental·part·in·creating·a·spectacular·night,·especially·with·their·<a·href="http://www.youtube.com/watch?v=zVNYDwQXggI">wedding·dance</a>·and·infectious·happiness.(CR)(LF)
<p·style="text-align:·center">(CR)(LF)
<a·href="http://farm5.static.flickr.com/4128/4836504101_199c9821ba.jpg"·title="Lili·and·Jess"·rel="lightbox[jessandliliwedding]"><img·src="http://farm5.static.flickr.com/4128/4836504101_199c9821ba_m.jpg"·width="240"·height="180"·alt="Lili·and·Jess"·style="border:·1px·solid·black"·/></a>(CR)(LF)
</p>(CR)(LF)
<p>The·next·day,·we·woke·up·on·time,·embarked·on·the·10-hour·road·trip·back·to·Oregon·and·enjoyed·a·quick·detour·through·the·<a·href="http://avenueofthegiants.net/">Avenue·of·the·Giants</a>.·I·did·end·up·missing·my·flight·home,·but·it·was·worth·it.·Thanks·to·Lili·and·Jess·(and·their·families)·for·showing·us·such·a·great·time.·It·was·truly·spectacular.<p>(CR)(LF)
<p>(CR)(LF)
For·more·pictures,·see·albums·on·<a·href="http://www.flickr.com/photos/mraible/sets/72157624599819640/">Flickr</a>,·<a·href="http://www.facebook.com/album.php?id=571296711&aid=194884">Facebook</a>·or·the·slideshow·below.(CR)(LF)
</p>(CR)(LF)
<p·style="text-align:·center">(CR)(LF)
<object·width="400"·height="300">·<param·name="flashvars"·value="offsite=true&lang=en-us&page_show_url=%2Fphotos%2Fmraible%2Fsets%2F72157624599819640%2Fshow%2F&page_show_back_url=%2Fphotos%2Fmraible%2Fsets%2F72157624599819640%2F&set_id=72157624599819640&jump_to="></param>·<param·name="movie"·value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param>·<param·name="allowFullScreen"·value="true"></param><embed·type="application/x-shockwave-flash"·src="http://www.flickr.com/apps/slideshow/show.swf?v=71649"·allowFullScreen="true"·flashvars="offsite=true&lang=en-us&page_show_url=%2Fphotos%2Fmraible%2Fsets%2F72157624599819640%2Fshow%2F&page_show_back_url=%2Fphotos%2Fmraible%2Fsets%2F72157624599819640%2F&set_id=72157624599819640&jump_to="·width="400"·height="300"></embed></object>(CR)(LF)
</p>(CR)(LF)
<p>(CR)(LF)
(CR)(LF)
····(CR)(LF)
····<span·class="info">(CR)(LF)
················Posted·in·<span·class="category"><a·href="http://raibledesigns.com/rd/category/General">General</a></span>(CR)(LF)
········<span·class="dateStamp">at·<a·href="http://raibledesigns.com/rd/entry/jess_and_lili_s_legendary">Jul·29·2010,·11:54:00·PM·MDT</a></span>(CR)(LF)
····························<a·href="http://raibledesigns.com/rd/entry/jess_and_lili_s_legendary#comments"·class="commentsLink">(CR)(LF)
····························Add·a·Comment(CR)(LF)
························</a>(CR)(LF)
············</span>(CR)(LF)
········<!--(LF)
<rdf:RDF·xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"(LF)
·········xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"(LF)
·········xmlns:dc="http://purl.org/dc/elements/1.1/">(LF)
<rdf:Description(LF)
····rdf:about="http://raibledesigns.com/rd/entry/jess_and_lili_s_legendary"(LF)
····trackback:ping="http://raibledesigns.com/rd/entry/jess_and_lili_s_legendary"(LF)
····dc:title="Jess·and·Lili's·Legendary·Wedding·on·The·Lost·Coast"(LF)
····dc:identifier="http://raibledesigns.com/rd/entry/jess_and_lili_s_legendary"(LF)
····dc:subject="General"(LF)
····dc:description="Jess·and·Lili's·Legendary·Wedding·on·The·Lost·Coast"(LF)
····dc:creator="Matt·Raible"(LF)
····dc:date="2010-07-29·23:54:00.0"·/>(LF)
</rdf:RDF>(LF)
-->(LF)
</p>(CR)(LF)
</div>(CR)(LF)
(CR)(LF)
············<div·class="day">(CR)(LF)
(CR)(LF)
<div·class="entry">(CR)(LF)
········<a·href="http://raibledesigns.com/rd/date/20100713">(CR)(LF)
········<img·class="daypermalink"(CR)(LF)
············src="/themes/andreas08/images/calendar.png"(CR)(LF)
············title="Permanent·link·to·this·day"(CR)(LF)
············alt="20100713"·/></a>(CR)(LF)
(CR)(LF)
······Tuesday·July·13,·2010(CR)(LF)
</div>(CR)(LF)
(CR)(LF)
<p>(CR)(LF)
····<a·name="scaling_flash_movies_to_match"></a>(CR)(LF)
····<span·class="entryTitle"><a·href="http://raibledesigns.com/rd/entry/scaling_flash_movies_to_match">Scaling·Flash·Movies·to·match·Browser·Zoom·Levels</a>(CR)(LF)
············</span>(CR)(LF)
(CR)(LF)
············Recently·I·was·tasked·with·figuring·out·how·to·scale·the·Flash·assets·in·the·web·application·I'm·working·on.·In·the·app,·there's·two·different·Flash·assets:·a·Spotlight·(cycles·through·images)·and·a·Video·Player.·Before·I·started·working·on·the·issue,·our·assets·would·stay·the·same·fixed·size·no·matter·what·the·browser·zoom·level.·You·can·see·this·issue·in·action·by·going·to·<a·href="http://hulu.com">Hulu</a>·or·<a·href="http://fancast.com">Fancast</a>·and·zooming·in/out·(Command·+/-·on·Mac,·Control·+/-·on·Windows).·The·Flash·assets·don't·scale·with·the·browser's·text.(CR)(LF)
</p>(CR)(LF)
<p>I·found·a·<a·href="http://delicious.com/mraible/textzoom">lot·of·references</a>·for·how·to·trap·and·handle·resizing·in·JavaScript,·so·that's·the·initial·path·I·took.·I·ended·up·having·issues·trapping·the·resize·event·in·IE,·as·well·as·persisting·the·appropriate·zoom·level·on·page·reload.·Because·of·this,·I·ended·up·using·a·pure·<a·href="http://raibledesigns.com/rd/entry/scaling_flash_movies_to_match#actionscript">ActionScript·solution</a>·that·works·much·better.·This·article·shows·how·I·implemented·both·solutions.(CR)(LF)
</p>(CR)(LF)
<p>(CR)(LF)
Regardless·of·implementation,·the·first·change·I·had·to·make·was·to·move·the·height·and·width·from·the·Flash·asset·(object/embed/JS)·to·its·surrounding·tag·(<section>·in·our·app).·Then·I·changed·the·height/width·to·100%·on·the·Flash·asset.(CR)(LF)
</p>(CR)(LF)
<p>(CR)(LF)
<strong·id="javascript">JavaScript·Implementation</strong><br/>(CR)(LF)
To·allow·zooming·in·ActionScript,·I·modified·our·main·class·to·expose·a·"zoom"·method·to·JavaScript:(CR)(LF)
</p>(CR)(LF)
<pre·class="brush:·java">(CR)(LF)
ExternalInterface.addCallback("zoom",·_zoom);(CR)(LF)
(CR)(LF)
...(CR)(LF)
(CR)(LF)
private·function·_zoom(scale:Number):void·{(CR)(LF)
····_view.scaleX·=·_view.scaleX·*·scale;(CR)(LF)
····_view.scaleY·=·_view.scaleY·*·scale;(CR)(LF)
}(CR)(LF)
</pre>(CR)(LF)
<p><strong>ActionScript·Implementation</strong><br/>(CR)(LF)
In·this·code,·_view·refers·to·the·container·that·holds·all·the·items·in·the·player.·To·call·this·method·in·JavaScript,·I·added·the·following·code:(CR)(LF)
</p>(CR)(LF)
<pre·class="brush:·java">(CR)(LF)
var·windowHeight;(CR)(LF)
var·documentHeight;(CR)(LF)
(CR)(LF)
$(document).ready(function()·{·(CR)(LF)
····...(CR)(LF)
····windowHeight·=·$(window).height();(CR)(LF)
····documentHeight·=·$(document).height();(CR)(LF)
(CR)(LF)
····$(window).resize(resizeWindow);(CR)(LF)
}(CR)(LF)
(CR)(LF)
//·Resize·Flash·assets·when·page·is·zoomed(CR)(LF)
function·resizeWindow()·{(CR)(LF)
····var·newWindowHeight·=·$(window).height();(CR)(LF)
····var·newDocumentHeight·=·$(document).height();(CR)(LF)
····//·if·document·height·hasn't·changed,·it's·a·browser·window·resize(CR)(LF)
····//·event·instead·of·a·text·zoom·-·don't·change·anything(CR)(LF)
····if·(newDocumentHeight·===·documentHeight)·{(CR)(LF)
········return;(CR)(LF)
····}·else·{(CR)(LF)
········documentHeight·=·newDocumentHeight;(CR)(LF)
····}(CR)(LF)
····var·scale·=·(windowHeight·/·newWindowHeight);·(CR)(LF)
(CR)(LF)
····var·player·=·getFlashMovie('playerId');(CR)(LF)
····if·(player·&&·player.zoom)·{(CR)(LF)
········player.zoom(scale);(CR)(LF)
····}(CR)(LF)
····var·spotlight·=·getFlashMovie('spotlightId');(CR)(LF)
····if·(spotlight·&&·spotlight.zoom)·{(CR)(LF)
········spotlight.zoom(scale);(CR)(LF)
····}(CR)(LF)
(CR)(LF)
····windowHeight·=·newWindowHeight;(CR)(LF)
}(CR)(LF)
</pre>(CR)(LF)
<p>(CR)(LF)
This·seemed·to·work·well·in·Firefox,·Safari·and·Opera,·but·not·in·IE.·I·found·<a·href="http://old.nabble.com/$%28window%29.bind%28%27resize%27,-fn%29-not-working-in-IE-td21447946s27240.html">this·explanation</a>·about·why·it·might·not·work,·but·I·was·unsuccessful·in·getting·IE·to·recognize·a·resize/zoom·event.·(CR)(LF)
</p>(CR)(LF)
<p>(CR)(LF)
To·fix·scaling·in·our·Spotlight·asset,·I·used·a·similar·solution.·However,·since·the·Spotlight·didn't·have·all·its·elements·in·a·container·(they·were·being·added·directly·to·the·stage),·I·had·to·refactor·the·code·to·add·a·SpotlightView·(extends·Sprite)·that·contains·the·bulk·of·the·code.(CR)(LF)
</p>(CR)(LF)
<p>Browsers·persist·the·zoom·level·you've·set·for·a·site.·The·problem·with·the·solution·used·here·is·it·only·scales·up·and·down·properly·if·you·start·from·scale·=·1·and·revert·to·scale·=·1·before·leaving·the·site.·If·you·zoom·in·and·close·your·browser,·when·you·come·back·the·flash·movies·will·be·scale·=·1·while·the·rest·of·the·site·is·zoomed·in.·To·solve·this·problem,·I·attempted·to·save·the·scale·value·in·a·cookie.·This·worked,·and·I·was·able·to·read·the·cookie·in·the·*.as·files·to·scale·the·movie·correctly.·However,·I·experienced·some·issues·with·this·approach·and·didn't·like·having·to·delete·cookies·when·I·wanted·the·Flash·assets·to·scale·correctly.(CR)(LF)
</p>·(CR)(LF)
<p><strong·id="actionscript">ActionScript·Implementation</strong><br/>(CR)(LF)
After·discovering·issues·with·the·JavaScript·implementation,·I·did·some·research·to·see·if·it·was·possible·to·listen·for·the·browser·resize·event·in·ActionScript.·The·<a·href="http://www.republicofcode.com/tutorials/flash/as3fluidresize/">Flash·Fluid·Layouts·and·Stage·Resize·in·AS3</a>·tutorial·clued·me·in·that·the·stage·could·listen·for·a·resize·event.·(CR)(LF)
</p>(CR)(LF)
<pre·class="brush:·java;·toolbar:·false">(CR)(LF)
stage.addEventListener(Event.RESIZE,·resizeListener);·(CR)(LF)
</pre>(CR)(LF)
<p>After·adding·the·above·line·in·the·initialization,·I·added·a·resizeListener·function·that·scales·based·on·the·default·dimensions.·It·also·ensures·no·scaling·happens·in·full·screen·mode.·(CR)(LF)
</p>(CR)(LF)
<pre·class="brush:·java">(CR)(LF)
private·function·resizeListener(e:Event):void·{(CR)(LF)
····//·don't·scale·if·entering·full·screen·mode(CR)(LF)
····if·(stage.displayState·==·StageDisplayState.FULL_SCREEN)··{(CR)(LF)
········_view.scaleX·=·1;(CR)(LF)
········_view.scaleY·=·1;(CR)(LF)
····}·else·{(CR)(LF)
········_view.scaleX·=·stage.stageWidth·/·964;(CR)(LF)
········_view.scaleY·=·stage.stageHeight·/·586;(CR)(LF)
····}(CR)(LF)
}(CR)(LF)
</pre>(CR)(LF)
<p>(CR)(LF)
For·the·Spotlight·asset,·there·are·a·number·of·different·layouts·(home,·featured·and·news).·The·main·class·has·a·resizeListener·function·that·scales·accordingly·to·which·layout·type·is·being·used.(CR)(LF)
</p>(CR)(LF)
<pre·class="brush:·java">(CR)(LF)
private·function·resizeListener(e:Event):void·{(CR)(LF)
····var·type:String·=·_view.getLayoutType();(CR)(LF)
(CR)(LF)
····if·(type·==·"featured")·{·(CR)(LF)
········_view.scaleX·=·stage.stageWidth·/·958;(CR)(LF)
·······_view.scaleY·=·stage.stageHeight·/·180;(CR)(LF)
···}·else·if·(type·==·"home")·{·(CR)(LF)
········_view.scaleX·=·stage.stageWidth·/·964;(CR)(LF)
········_view.scaleY·=·stage.stageHeight·/·428;(CR)(LF)
····}·else·if·(type·==·"news")·{(CR)(LF)
········_view.scaleX·=·stage.stageWidth·/·964;(CR)(LF)
········_view.scaleY·=·stage.stageHeight·/·189;(CR)(LF)
····}(CR)(LF)
}(CR)(LF)
</pre>(CR)(LF)
<p>Because·the·layout·type·isn't·set·until·the·XML·is·loaded,·I·listen·for·that·event·in·my·URLLoader.(CR)(LF)
</p>(CR)(LF)
<pre·class="brush:·java;·toolbar:·false">(CR)(LF)
xmlLoader.addEventListener(Event.COMPLETE,·resizeListener);(CR)(LF)
</pre>(CR)(LF)
<p>With·the·pure·ActionScript·implementation,·the·zoom·level·is·automatically·persisted.·The·Event.RESIZE·event·is·fired·by·the·Flash·plugin·when·the·page·first·loads·if·the·dimensions·are·not·the·default.·(CR)(LF)
</p>(CR)(LF)
<p>(CR)(LF)
That's·it!·Special·thanks·to·<a·href="http://www.jamesward.com/">James·Ward</a>·for·clueing·me·into·<em>scaleX</em>·and·<em>scaleY</em>.·Hopefully·Hulu·and·Comcast·can·use·this·tutorial·to·scale·their·video·players·too.·<img·src="http://raibledesigns.com/images/smileys/wink.gif"·class="smiley"·alt=";-)"·title=";-)"·/>(CR)(LF)
(CR)(LF)
····(CR)(LF)
····<span·class="info">(CR)(LF)
················Posted·in·<span·class="category"><a·href="http://raibledesigns.com/rd/category/The+Web">The·Web</a></span>(CR)(LF)
········<span·class="dateStamp">at·<a·href="http://raibledesigns.com/rd/entry/scaling_flash_movies_to_match">Jul·13·2010,·12:18:42·PM·MDT</a></span>(CR)(LF)
····························<a·href="http://raibledesigns.com/rd/entry/scaling_flash_movies_to_match#comments"·class="commentsLink">(CR)(LF)
····························3·Comments(CR)(LF)
························</a>(CR)(LF)
············</span>(CR)(LF)
········<!--(LF)
<rdf:RDF·xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"(LF)
·········xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"(LF)
·········xmlns:dc="http://purl.org/dc/elements/1.1/">(LF)
<rdf:Description(LF)
····rdf:about="http://raibledesigns.com/rd/entry/scaling_flash_movies_to_match"(LF)
····trackback:ping="http://raibledesigns.com/rd/entry/scaling_flash_movies_to_match"(LF)
····dc:title="Scaling·Flash·Movies·to·match·Browser·Zoom·Levels"(LF)
····dc:identifier="http://raibledesigns.com/rd/entry/scaling_flash_movies_to_match"(LF)
····dc:subject="The·Web"(LF)
····dc:description="Scaling·Flash·Movies·to·match·Browser·Zoom·Levels"(LF)
····dc:creator="Matt·Raible"(LF)
····dc:date="2010-07-13·12:18:42.0"·/>(LF)
</rdf:RDF>(LF)
-->(LF)
</p>(CR)(LF)
<p>(CR)(LF)
····<a·name="my_summer_vacation_in_montana1"></a>(CR)(LF)
····<span·class="entryTitle"><a·href="http://raibledesigns.com/rd/entry/my_summer_vacation_in_montana1">My·Summer·Vacation·in·Montana</a>(CR)(LF)
············</span>(CR)(LF)
(CR)(LF)
············My·favorite·time·of·year·is·summertime.·My·favorite·place·to·spend·it·is·in·Montana,·often·called·"<a·href="http://www.nytimes.com/2008/08/18/us/18trademark.html">The·Last·Best·Place</a>"·by·natives.·This·year·was·no·different·and·I·spent·the·last·two·weeks·at·my·family's·cabin·celebrating·the·4th·of·July.·Shortly·after·returning·from·our·<a·href="http://raibledesigns.com/rd/entry/another_fun_father_s_day">Father's·Day·Camping·Trip</a>,·my·parents·packed·up·Abbie·and·Jack·and·headed·on·a·3-day·road·trip·through·Wyoming·and·Montana,·camping·and·sight-seeing·along·the·way.·I·followed·them·a·few·days·later·and·made·the·<a·href="http://twitter.com/mraible/status/17135468902"·title="Made·it·to·The·Cabin·-·woo·hoo!·950·miles·in·14.25·hours.">950-mile·drive·in·just·over·14·hours</a>.·With·scenes·like·the·one·below,·the·trip·was·very·enjoyable,·despite·it·being·so·long.</p>(CR)(LF)
<p·style="text-align:·center">(CR)(LF)
<a·href="http://farm5.static.flickr.com/4096/4788758981_ea7346ab25.jpg"·rel="lightbox[montanavacation2010]"·title="Big·Sky·Country"><img·src="http://farm5.static.flickr.com/4096/4788758981_ea7346ab25_m.jpg"·width="240"·height="179"·alt="Big·Sky·Country"·style="border:·1px·solid·black"></a>(CR)(LF)
</p>·(CR)(LF)
<p>The·first·week·I·was·there,·I·worked·remotely.·It's·always·fun·to·tell·people·<a·href="http://raibledesigns.com/rd/entry/the_cabin">The·Cabin</a>·has·no·electricity·or·running·water,·but·it·does·have·DSL.·To·be·fair,·it·<em>does</em>·have·electricity,·but·it's·not·"on·the·grid"·electricity·-·it's·my·Dad's·concoction·of·generators,·batteries·and·inverters.·While·I·worked·most·of·the·week,·I·did·manage·to·get·a·nice·mountain·bike·ride·in·along·the·Foothills·Trail·to·Holland·Lake.</p>(CR)(LF)
<p>My·real·vacation·began·on·the·4th·of·July·weekend·and·we·did·it·up·right·with·the·Swan·Valley·Parade·and·lots·of·big·fireworks·I·picked·up·in·Wyoming.·The·kids·dressed·up·as·Woody·and·Jesse·(from·<a·href="http://disney.go.com/toystory/">Toy·Story</a>)·and·walked·in·the·parade·all·by·themselves·(first·time·w/o·me).·They·were·especially·excited·when·their·<a·href="http://farm5.static.flickr.com/4073/4788770319_62ac31485b.jpg"·rel="lightbox[montanavacation2010]"·title="Abbie·and·Jack·are·famous!">pictures·appeared·in·the·local·paper</a>·the·following·week.(CR)(LF)
(CR)(LF)
</p>(CR)(LF)
<p·style="text-align:·center">(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4077/4788762471_187425438b.jpg"·title="Ready·for·the·Parade"·rel="lightbox[montanavacation2010]"><img·src="http://farm5.static.flickr.com/4077/4788762471_187425438b_t.jpg"·width="100"·height="75"·alt="Ready·for·the·Parade"·style="border:·1px·solid·black"></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4114/4788762677_2a9bccec92.jpg"·title="Tossing·Candy·in·the·Parade"·rel="lightbox[montanavacation2010]"><img·src="http://farm5.static.flickr.com/4114/4788762677_2a9bccec92_t.jpg"·width="100"·height="75"·alt="Tossing·Candy·in·the·Parade"·style="margin-left:·10px;·border:·1px·solid·black"></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4096/4789393410_52aa8aa457.jpg"·title="Woddy·and·Jesse·in·the·4th·of·July·Parade"·rel="lightbox[montanavacation2010]"><img·src="http://farm5.static.flickr.com/4096/4789393410_52aa8aa457_t.jpg"·width="100"·height="75"·alt="Woddy·and·Jesse·in·the·4th·of·July·Parade"·style="margin-left:·10px;·border:·1px·solid·black"></a>(CR)(LF)
</p>(CR)(LF)
<p>Last·week·was·spent·hiking·to·Glacier·Lake·in·the·rain,·golfing·in·Seeley·Lake·and·Columbia·Falls·and·hanging·out·with·my·good·friend·<a·href="http://www.facebook.com/oconley1">Owen·Conley</a>·and·his·family.(CR)(LF)
</p>(CR)(LF)
<p·style="text-align:·center">(CR)(LF)
<a·href="http://farm5.static.flickr.com/4096/4789395818_8eefb50d1e.jpg"·title="Made·it·to·Glacier·Lake"·rel="lightbox[montanavacation2010]"><img·src="http://farm5.static.flickr.com/4096/4789395818_8eefb50d1e_t.jpg"·width="100"·height="75"·alt="Made·it·to·Glacier·Lake"·style="border:·1px·solid·black"></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4098/4788767939_d273d4ddf5.jpg"·title="Chris·Auchenbach"·rel="lightbox[montanavacation2010]"><img·src="http://farm5.static.flickr.com/4098/4788767939_d273d4ddf5_t.jpg"·width="100"·height="75"·alt="Chris·Auchenbach"·style="margin-left:·10px;·border:·1px·solid·black"></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4143/4789398916_a70dd2077e.jpg"·title="Meadow·Lake·Golf·Course·in·Columbia·Falls"·rel="lightbox[montanavacation2010]"><img·src="http://farm5.static.flickr.com/4143/4789398916_a70dd2077e_t.jpg"·width="100"·height="75"·alt="Meadow·Lake·Golf·Course·in·Columbia·Falls"·style="margin-left:·10px;·border:·1px·solid·black"></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4074/4788771667_a5bab64f22.jpg"·title="Sunset·from·The·Conley's"·rel="lightbox[montanavacation2010]"><img·src="http://farm5.static.flickr.com/4074/4788771667_a5bab64f22_t.jpg"·width="100"·height="75"·alt="Sunset·from·The·Conley's"·style="margin-left:·10px;·border:·1px·solid·black"></a>(CR)(LF)
</p>·(CR)(LF)
<p>(CR)(LF)
The·kids·and·I·drove·home·last·Sunday·and·it·only·took·us·15·minutes·longer·than·it·did·for·me·solo.·I·think·they're·quickly·becoming·road-tripping·professionals.·<img·src="http://raibledesigns.com/images/smileys/smile.gif"·class="smiley"·alt=":-)"·title=":-)"·/>(CR)(LF)
</p>(CR)(LF)
<p>My·favorite·part·of·this·year's·trip·to·The·Cabin·was·seeing·it·as·a·home·again.·My·<a·href="http://raibledesigns.com/rd/entry/celebrating_my_mom_s_retirement">Mom·retired·in·April</a>·and·my·parents·moved·back·to·Montana·shortly·after.·Seeing·how·happy·they·are·there·is·truly·magical.·I·especially·enjoy·the·thought·of·visiting·them·and·all·the·wonderful·folks·in·the·Swan·Valley·many,·many·times·in·the·future.·(CR)(LF)
</p>(CR)(LF)
<p>(CR)(LF)
To·see·all·the·pictures·I·took·on·this·trip,·check·out·the·slideshow·below.·(CR)(LF)
</p>(CR)(LF)
<p·style="text-align:·center">(CR)(LF)
<object·width="400"·height="300">·<param·name="flashvars"·value="offsite=true&lang=en-us&page_show_url=%2Fphotos%2Fmraible%2Fsets%2F72157624358584447%2Fshow%2F&page_show_back_url=%2Fphotos%2Fmraible%2Fsets%2F72157624358584447%2F&set_id=72157624358584447&jump_to="></param>·<param·name="movie"·value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param>·<param·name="allowFullScreen"·value="true"></param><embed·type="application/x-shockwave-flash"·src="http://www.flickr.com/apps/slideshow/show.swf?v=71649"·allowFullScreen="true"·flashvars="offsite=true&lang=en-us&page_show_url=%2Fphotos%2Fmraible%2Fsets%2F72157624358584447%2Fshow%2F&page_show_back_url=%2Fphotos%2Fmraible%2Fsets%2F72157624358584447%2F&set_id=72157624358584447&jump_to="·width="400"·height="300"></embed></object>(CR)(LF)
</p><p·style="border-top:·1px·dotted·silver;·padding-top:·5px;·color:·#666">P.S.·An·interesting·note·about·<a·href="http://www.flickr.com/photos/mraible/sets/72157624358584447/"·style="color:·#666">all·the·pictures·I·took</a>·-·they're·all·from·my·iPhone·4.·I·forgot·my·camera's·battery·at·home·and·it·seemed·like·a·good·experiment.</p>(CR)(LF)
<p>(CR)(LF)
····(CR)(LF)
····<span·class="info">(CR)(LF)
················Posted·in·<span·class="category"><a·href="http://raibledesigns.com/rd/category/General">General</a></span>(CR)(LF)
········<span·class="dateStamp">at·<a·href="http://raibledesigns.com/rd/entry/my_summer_vacation_in_montana1">Jul·13·2010,·08:12:02·AM·MDT</a></span>(CR)(LF)
····························<a·href="http://raibledesigns.com/rd/entry/my_summer_vacation_in_montana1#comments"·class="commentsLink">(CR)(LF)
····························Add·a·Comment(CR)(LF)
························</a>(CR)(LF)
············</span>(CR)(LF)
········<!--(LF)
<rdf:RDF·xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"(LF)
·········xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"(LF)
·········xmlns:dc="http://purl.org/dc/elements/1.1/">(LF)
<rdf:Description(LF)
····rdf:about="http://raibledesigns.com/rd/entry/my_summer_vacation_in_montana1"(LF)
····trackback:ping="http://raibledesigns.com/rd/entry/my_summer_vacation_in_montana1"(LF)
····dc:title="My·Summer·Vacation·in·Montana"(LF)
····dc:identifier="http://raibledesigns.com/rd/entry/my_summer_vacation_in_montana1"(LF)
····dc:subject="General"(LF)
····dc:description="My·Summer·Vacation·in·Montana"(LF)
····dc:creator="Matt·Raible"(LF)
····dc:date="2010-07-13·08:12:02.0"·/>(LF)
</rdf:RDF>(LF)
-->(LF)
</p>(CR)(LF)
</div>(CR)(LF)
(CR)(LF)
············<div·class="day">(CR)(LF)
(CR)(LF)
<div·class="entry">(CR)(LF)
········<a·href="http://raibledesigns.com/rd/date/20100625">(CR)(LF)
········<img·class="daypermalink"(CR)(LF)
············src="/themes/andreas08/images/calendar.png"(CR)(LF)
············title="Permanent·link·to·this·day"(CR)(LF)
············alt="20100625"·/></a>(CR)(LF)
(CR)(LF)
······Friday·June·25,·2010(CR)(LF)
</div>(CR)(LF)
(CR)(LF)
<p>(CR)(LF)
····<a·name="another_fun_father_s_day"></a>(CR)(LF)
····<span·class="entryTitle"><a·href="http://raibledesigns.com/rd/entry/another_fun_father_s_day">Another·Fun·Father's·Day·at·The·Great·Sand·Dunes</a>(CR)(LF)
············</span>(CR)(LF)
(CR)(LF)
············For·this·year's·Father's·Day·Camping·trip,·my·parents·drove·down·from·Montana·and·we·headed·to·the·<a·href="http://www.nps.gov/grsa/">Great·Sand·Dunes</a>·(like·<a·href="http://raibledesigns.com/rd/entry/a_fun_father_s_day">last·year</a>).·My·friend·<a·href="http://raibledesigns.com/rd/entry/jason_and_holly_s_wedding">Jason</a>·and·his·Dad·joined·us,·as·well·as·my·co-worker·Noah·and·his·family.·The·weather·was·beautiful,·the·sand·was·hot·and·we·had·a·blast·flying·kites·while·admiring·the·<a·href="http://www.9news.com/rss/article.aspx?storyid=141346">Medano·Fire</a>.·(CR)(LF)
</p>(CR)(LF)
<p·style="text-align:·center">(CR)(LF)
<a·href="http://farm2.static.flickr.com/1380/4723000531_06d7eebc83.jpg"·title="Friday·Breakfast"·rel="lightbox[fathersday2010]"><img·src="http://farm2.static.flickr.com/1380/4723000531_06d7eebc83_t.jpg"·width="100"·height="75"·alt="Friday·Breakfast"·style="border:·1px·solid·black"·/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm2.static.flickr.com/1256/4723654044_983b351d02.jpg"·title="Hot,·hot,·hot!"·rel="lightbox[fathersday2010]"><img·src="http://farm2.static.flickr.com/1256/4723654044_983b351d02_t.jpg"·width="100"·height="75"·alt="Hot,·hot,·hot!"·style="border:·1px·solid·black;·margin-left:·10px"·/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm2.static.flickr.com/1006/4723007017_97f1bda2af.jpg"·title="Aaaahhhhhh!!"·rel="lightbox[fathersday2010]"><img·src="http://farm2.static.flickr.com/1006/4723007017_97f1bda2af_t.jpg"·width="100"·height="75"·alt="Aaaahhhhhh!!"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm2.static.flickr.com/1359/4723660690_9313a26d78.jpg"·title="Fire·in·Background,·100·foot·tall·flames"·rel="lightbox[fathersday2010]"><img·src="http://farm2.static.flickr.com/1359/4723660690_9313a26d78_t.jpg"·width="100"·height="75"·alt="Fire·in·Background,·100·foot·tall·flames"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
<br/><br/>(CR)(LF)
(CR)(LF)
<a·href="http://farm2.static.flickr.com/1434/4723008711_5eb498de86.jpg"·title="Nice·Grill"·rel="lightbox[fathersday2010]"><img·src="http://farm2.static.flickr.com/1434/4723008711_5eb498de86_t.jpg"·width="100"·height="75"·alt="Nice·Grill"·style="border:·1px·solid·black"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm2.static.flickr.com/1092/4723661584_91220319a1.jpg"·title="At·the·Top"·rel="lightbox[fathersday2010]"><img·src="http://farm2.static.flickr.com/1092/4723661584_91220319a1_t.jpg"·width="100"·height="75"·alt="At·the·Top"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm2.static.flickr.com/1052/4723009765_3eb0093a3d.jpg"·title="Dillon"·rel="lightbox[fathersday2010]"><img·src="http://farm2.static.flickr.com/1052/4723009765_3eb0093a3d_t.jpg"·width="100"·height="75"·alt="Dillon"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm2.static.flickr.com/1329/4723012083_fef73eb7bd.jpg"·title="Colors"·rel="lightbox[fathersday2010]"><img·src="http://farm2.static.flickr.com/1329/4723012083_fef73eb7bd_t.jpg"·width="100"·height="75"·alt="Colors"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
<p>On·Saturday,·we·spent·several·hours·on·"the·beach"·watching·the·kids·play,·flying·kites·and·sipping·on·cold·ones.·A·good·time·was·had·by·all.</p>(CR)(LF)
(CR)(LF)
<p·style="text-align:·center">(CR)(LF)
<a·href="http://farm2.static.flickr.com/1181/4723013323_edab771a37.jpg"·title="Inventing·Stuff"·rel="lightbox[fathersday2010]"><img·src="http://farm2.static.flickr.com/1181/4723013323_edab771a37_t.jpg"·width="100"·height="75"·alt="Inventing·Stuff"·style="border:·1px·solid·black"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm2.static.flickr.com/1224/4723013695_869f23ea41.jpg"·title="Where·did·Jack·go?"·rel="lightbox[fathersday2010]"><img·src="http://farm2.static.flickr.com/1224/4723013695_869f23ea41_t.jpg"·width="100"·height="75"·alt="Where·did·Jack·go?"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm2.static.flickr.com/1065/4723667980_5875034965.jpg"·title="Push·me·again!"·rel="lightbox[fathersday2010]"><img·src="http://farm2.static.flickr.com/1065/4723667980_5875034965_t.jpg"·width="100"·height="75"·alt="Push·me·again!"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm2.static.flickr.com/1426/4723016307_9cf9635926.jpg"·title="Smile!"·rel="lightbox[fathersday2010]"><img·src="http://farm2.static.flickr.com/1426/4723016307_9cf9635926_t.jpg"·width="100"·height="75"·alt="Smile!"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
<br/><br/>(CR)(LF)
(CR)(LF)
(CR)(LF)
<a·href="http://farm2.static.flickr.com/1149/4723016879_308bc75d6b.jpg"·title="Ela·and·Jack"·rel="lightbox[fathersday2010]"><img·src="http://farm2.static.flickr.com/1149/4723016879_308bc75d6b_t.jpg"·width="100"·height="75"·alt="Ela·and·Jack"·style="border:·1px·solid·black"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm2.static.flickr.com/1341/4723017053_5f44f5d811.jpg"·title="Abbie·and·Mimi"·rel="lightbox[fathersday2010]"><img·src="http://farm2.static.flickr.com/1341/4723017053_5f44f5d811_t.jpg"·width="100"·height="75"·alt="Abbie·and·Mimi"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm2.static.flickr.com/1112/4723670454_7bb0af7c93.jpg"·title="Sweet"·rel="lightbox[fathersday2010]"><img·src="http://farm2.static.flickr.com/1112/4723670454_7bb0af7c93_t.jpg"·width="100"·height="75"·alt="Sweet"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm2.static.flickr.com/1123/4723670592_43e3ae1031.jpg"·title="Sunset"·rel="lightbox[fathersday2010]"><img·src="http://farm2.static.flickr.com/1123/4723670592_43e3ae1031_t.jpg"·width="100"·height="75"·alt="Sunset"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
</p>(CR)(LF)
<p>To·see·all·the·pictures·I·took·on·this·trip,·see·my·<a·href="http://www.flickr.com/photos/mraible/sets/72157624205304687/">Great·Sand·Dunes·2010·set·on·Flickr</a>.(CR)(LF)
····(CR)(LF)
····<span·class="info">(CR)(LF)
················Posted·in·<span·class="category"><a·href="http://raibledesigns.com/rd/category/General">General</a></span>(CR)(LF)
········<span·class="dateStamp">at·<a·href="http://raibledesigns.com/rd/entry/another_fun_father_s_day">Jun·25·2010,·04:22:36·PM·MDT</a></span>(CR)(LF)
····························<a·href="http://raibledesigns.com/rd/entry/another_fun_father_s_day#comments"·class="commentsLink">(CR)(LF)
····························Add·a·Comment(CR)(LF)
························</a>(CR)(LF)
············</span>(CR)(LF)
········<!--(LF)
<rdf:RDF·xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"(LF)
·········xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"(LF)
·········xmlns:dc="http://purl.org/dc/elements/1.1/">(LF)
<rdf:Description(LF)
····rdf:about="http://raibledesigns.com/rd/entry/another_fun_father_s_day"(LF)
····trackback:ping="http://raibledesigns.com/rd/entry/another_fun_father_s_day"(LF)
····dc:title="Another·Fun·Father's·Day·at·The·Great·Sand·Dunes"(LF)
····dc:identifier="http://raibledesigns.com/rd/entry/another_fun_father_s_day"(LF)
····dc:subject="General"(LF)
····dc:description="Another·Fun·Father's·Day·at·The·Great·Sand·Dunes"(LF)
····dc:creator="Matt·Raible"(LF)
····dc:date="2010-06-25·16:22:36.0"·/>(LF)
</rdf:RDF>(LF)
-->(LF)
</p>(CR)(LF)
</div>(CR)(LF)
(CR)(LF)
············<div·class="day">(CR)(LF)
(CR)(LF)
<div·class="entry">(CR)(LF)
········<a·href="http://raibledesigns.com/rd/date/20100614">(CR)(LF)
········<img·class="daypermalink"(CR)(LF)
············src="/themes/andreas08/images/calendar.png"(CR)(LF)
············title="Permanent·link·to·this·day"(CR)(LF)
············alt="20100614"·/></a>(CR)(LF)
(CR)(LF)
······Monday·June·14,·2010(CR)(LF)
</div>(CR)(LF)
(CR)(LF)
<p>(CR)(LF)
····<a·name="my_incredible_trip_to_ireland"></a>(CR)(LF)
····<span·class="entryTitle"><a·href="http://raibledesigns.com/rd/entry/my_incredible_trip_to_ireland">My·Incredible·Trip·to·Ireland</a>(CR)(LF)
············</span>(CR)(LF)
(CR)(LF)
············<em>If·you·ever·get·a·chance·to·travel·to·Ireland,·take·it!</em>·I·don't·know·when·I·heard·these·words,·or·how·they·came·into·my·head,·but·I·remembered·them·clearly·when·I·was·first·introduced·to·<a·href="http://ie.linkedin.com/in/irishdev">Barry·Alistair</a>·by·<a·href="http://www.linkedin.com/in/jgenender">Jeff·Genender</a>.·Soon·after,·I·was·able·to·negotiate·my·way·into·being·a·speaker·at·<a·href="http://epicenter.ie/2010.html">The·2010·Irish·Software·Show</a>.·(CR)(LF)
</p>(CR)(LF)
<p>(CR)(LF)
The·show·was·last·week·and·I·had·a·blast·traveling·to·Dublin·to·speak·and·explore.·<a·href="http://twitter.com/kraible">My·sister</a>·came·me·on·this·trip,·but·missed·a·connection·in·Seattle·and·had·to·join·me·a·day·late.··I·left·Denver·at·noon·on·Monday·and·arrived·at·<a·href="http://www.dublinairport.com/">Dublin·Airport</a>·at·7·am.·I·was·on·the·same·flight·as·<a·href="http://www.joshlong.com/">Josh·Long</a>·and·thoroughly·enjoyed·my·iPad·as·a·travel·companion.·When·I·got·off·the·plane,·my·battery·life·was·at·60%·and·I'd·been·watching·movies·and·listening·to·music·for·6·hours.·(CR)(LF)
</p>(CR)(LF)
<p>I·took·a·cab·through·the·misty,·cool·morning·to·<a·href="http://en.wikipedia.org/wiki/Trinity_Capital_Hotel">my·hotel</a>.·I·grabbed·a·coffee,·cleaned·up,·and·walked·a·few·blocks·to·<a·href="http://www.tcd.ie/">Trinity·College</a>·for·the·conference.·I·made·it·in·time·for·the·<a·href="http://epicenter.ie/2010.html?zone_id=19&mode=agenda&session=164%23session">opening·keynote</a>·by·<a·href="http://chrisjhorn.wordpress.com">Chris·Horn</a>.·It·was·an·interesting·talk,·focusing·on·what·needed·to·happen·to·make·Ireland·the·Innovation·Hub·of·Europe.·After·that,·I·attended·<a·href="http://augusttechgroup.com/tim/blog">Tim·Berglund's</a>·session·on·<a·href="http://epicenter.ie/2010.html?zone_id=19&mode=agenda&session=160%23session">Complexity·Theory·and·Software·Development</a>.·After·lunch·and·a·few·more·talks,·I·teamed·up·with·<a·href="http://www.jroller.com/aalmiray/">Andres·Almiray</a>·and·Josh·Long·for·a·pint·at·the·hotel·bar.(CR)(LF)
</p>(CR)(LF)
<p>That·evening,·we·attended·<a·href="http://www.linkedin.com/in/jgenender">Jeff·Genender's</a>·talk·on·<a·href="http://epicenter.ie/2010.html?zone_id=19&mode=agenda&session=189%23session">Getting·into·Open·Source</a>.·The·free·drinks·loosened·everyone·up·and·Jeff·did·a·great·job·with·a·humorous·presentation·on·how·to·get·Committer·Status.·After·Jeff's·talk,·about·10·of·us·headed·to·a·Moroccan·restaurant·for·a·late·dinner.·I·was·in·bed·around·midnight.(CR)(LF)
</p>(CR)(LF)
<p·style="text-align:·center">(CR)(LF)
<a·href="http://farm2.static.flickr.com/1297/4699497085_b551c7a58f.jpg"·title="Andres·Almiray·and·Josh·Long"·rel="lightbox[ireland2010]"><img·src="http://farm2.static.flickr.com/1297/4699497085_b551c7a58f_t.jpg"·width="100"·height="75"·alt="Andres·Almiray·and·Josh·Long"·style="border:·1px·solid·black"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4029/4699497659_19812e51bf.jpg"·title="The·Genenders"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4029/4699497659_19812e51bf_t.jpg"·width="100"·height="75"·alt="The·Genenders"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4049/4700126996_f29207d60c.jpg"·title="Heading·for·Indian·After·Jeff's·Talk"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4049/4700126996_f29207d60c_t.jpg"·width="100"·height="75"·alt="Heading·for·Indian·After·Jeff's·Talk"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4070/4699498241_c076566b11.jpg"·title="Streets·of·Dublin·in·the·early·morning"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4070/4699498241_c076566b11_t.jpg"·width="100"·height="75"·alt="Streets·of·Dublin·in·the·early·morning"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
</p>(CR)(LF)
<p>(CR)(LF)
Wednesday·morning,·my·sister·arrived·in·my·hotel·room·at·8·and·promptly·fell·into·bed.·I·set·my·alarm·to·sleep·an·hour·and·closed·the·Vegas-style,·no-light-allowed·curtains.·We·awoke·much·later·(12:30)·than·we'd·planned·(9:00).·We·quickly·got·up·and·headed·for·some·sight-seeing·in·Dublin.·First·off,·we·hit·<a·href="http://www.dublinia.ie/">Dublinia</a>·and·<a·href="http://en.wikipedia.org/wiki/Christ_Church_Cathedral,_Dublin">Christ·Church·Cathedral</a>.·Both·sites·were·spectacular·and·we·both·learned·a·lot·about·the·history·of·Dublin.·From·there,·we·skipped·across·the·bridge·to·<a·href="http://www.jamesonwhiskey.com/Heritage-US/Visitor-Centres/The-Old-Jameson-Distillery-Tour-Info.aspx">The·Old·Jameson·Distillery</a>·for·a·tour·and·a·bit·of·whiskey.·</p>(CR)(LF)
<p·style="text-align:·center">(CR)(LF)
<a·href="http://farm5.static.flickr.com/4063/4699499527_602302bea9.jpg"·title="Runes·Exhibit·in·Dublinia"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4063/4699499527_602302bea9_t.jpg"·width="100"·height="75"·alt="Runes·Exhibit·in·Dublinia"·style="border:·1px·solid·black"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4070/4700130192_25a9cfcf52.jpg"·title="Christ·Church·Cathedral·and·Dublinia"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4070/4700130192_25a9cfcf52_t.jpg"·width="100"·height="75"·alt="Christ·Church·Cathedral·and·Dublinia"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4022/4699501899_b92347236e.jpg"·title="Tasting·Whiskey"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4022/4699501899_b92347236e_t.jpg"·width="100"·height="75"·alt="Tasting·Whiskey"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm2.static.flickr.com/1279/4700131426_db95eb5c9b.jpg"·title="The·18·Year"·rel="lightbox[ireland2010]"><img·src="http://farm2.static.flickr.com/1279/4700131426_db95eb5c9b_t.jpg"·width="100"·height="75"·alt="The·18·Year"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
</p>(CR)(LF)
<p>The·picture·below·was·taken·on·the·<a·href="http://en.wikipedia.org/wiki/Ha%27penny_Bridge">Ha'penny·Bridge</a>·as·we·were·heading·back·from·Jameson.·The·expression·of·the·girl·on·the·left·is·priceless.·(CR)(LF)
</p>(CR)(LF)
<p·style="text-align:·center">(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4033/4700134408_d5f99cb5d0.jpg"·title="Kalin·on·the·Half·Penny"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4033/4700134408_d5f99cb5d0_m.jpg"·width="240"·height="180"·alt="Kalin·on·the·Half·Penny"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
</p>(CR)(LF)
<p>A·couple·hours·later·and·I·was·delivering·my·talk·on·<a·href="http://raibledesigns.com/rd/entry/presentations_from_the_irish_software">The·Future·of·Web·Frameworks</a>.·The·crowd·was·lively;·the·Guinness·I·drank·while·talking·was·lovely.·My·session·was·followed·by·a·Web·Framework·Experts·Panel·with·<a·href="http://www.cacoethes.co.uk/blog/">Peter·Ledbrook</a>·(Grails),·<a·href="http://www.jamievandyke.com/">Jamie·van·Dyke</a>·(Rails),·<a·href="http://www.ironshay.com/">Shay·Friedman</a>·(ASP.NET·MVC),·<a·href="http://blog.fitzell.ca/">Julian·Fitzell</a>·(Seaside)·and·myself·(Java·Frameworks).·The·debate·was·good·and·there·was·much·discussion·about·the·right·apps·for·each·framework·and·how·important·statelessness·is·for·scalable·applications.·After·3·hours·of·talking,·my·sister·and·I·headed·back·to·the·hotel.·I·was·particularly·happy·about·the·evening·since·it·was·the·first·time·a·family·member·of·mine·had·seen·me·speak.(CR)(LF)
</p>(CR)(LF)
<p·style="font-style:·italic;·color:·#666"·class="quote">Correction·from·my·Dad:·This·wasn't·the·first·time·a·family·member·saw·me·speak.·He·attended·my·talk·at·<a·href="http://raibledesigns.com/rd/entry/what_a_trip_amsterdam_was">ApacheCon·EU·2007</a>.(CR)(LF)
</p>(CR)(LF)
<p>A·block·from·the·hotel,·we·spotted·a·nice·looking·pub·(<a·href="http://www.doylesintown.com/">Doyles</a>)·and·stopped·in·for·a·pint.·As·we·bellied·up·to·the·end·of·the·bar,·we·recognized·Jamie·(from·the·panel)·and·got·introduced·to·his·friend·<a·href="http://yrobs.blogspot.com/">Rob</a>.·We·quickly·got·lost·in·conversation,·stories·and·laughter·and·were·surprised·when·we·discovered·it·was·2:30am.·Since·I·had·a·talk·first·thing·in·the·morning,·we·ducked·out·shortly·after.(CR)(LF)
</p>(CR)(LF)
<p·style="text-align:·center">(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4017/4699506393_3b1fedd531.jpg"·title="Web·Framework·Experts·Panel"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4017/4699506393_3b1fedd531_t.jpg"·width="100"·height="75"·alt="Web·Framework·Experts·Panel"·style="border:·1px·solid·black"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4048/4700135162_f3099a46c4.jpg"·title="Barry·on·Evangelist·Night"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4048/4700135162_f3099a46c4_t.jpg"·width="100"·height="75"·alt="Barry·on·Evangelist·Night"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4008/4700135912_6b71bcd50c.jpg"·title="The·Night·we·met·Jamie·and·Rob"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4008/4700135912_6b71bcd50c_t.jpg"·width="100"·height="75"·alt="The·Night·we·met·Jamie·and·Rob"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
</p>(CR)(LF)
<p>Thursday·started·with·my·talk·<a·href="http://raibledesigns.com/rd/entry/presentations_from_the_irish_software">Comparing·Kick-Ass·Web·Frameworks</a>.·Then·my·sister·and·I·did·some·more·site-seeing,·starting·at·the·<a·href="http://www.guinness-storehouse.com/en/Index.aspx">Guinness·Storehouse</a>.·We·met·Josh·and·<a·href="http://www.johnmwillis.com/">John·Willis</a>·as·they·were·leaving·and·they·advised·we·go·straight·to·The·Gravity·Bar·at·the·top.·We·took·there·advise·and·were·getting·great·views·of·Dublin·and·savoring·sweet·pints·of·Guinness·moments·later.·The·tour·facility·was·freakin'·awesome·and·I·loved·how·it·was·shaped·like·a·pint·glass.·(CR)(LF)
</p>(CR)(LF)
<p·style="text-align:·center">(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4006/4699508311_77a05c609a.jpg"·title="Straight·to·the·top!"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4006/4699508311_77a05c609a_t.jpg"·width="100"·height="75"·alt="Straight·to·the·top!"·style="border:·1px·solid·black"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4015/4699508737_612d1b1b42.jpg"·title="Mmmmm,·Guinness"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4015/4699508737_612d1b1b42_t.jpg"·width="100"·height="75"·alt="Mmmmm,·Guinness"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4052/4700141820_3943b0dea6.jpg"·title="The·Storehouse·is·shaped·like·a·pint·glass"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4052/4700141820_3943b0dea6_t.jpg"·width="100"·height="75"·alt="The·Storehouse·is·shaped·like·a·pint·glass"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm2.static.flickr.com/1285/4700143032_120cd3d789.jpg"·title="Brainwave"·rel="lightbox[ireland2010]"><img·src="http://farm2.static.flickr.com/1285/4700143032_120cd3d789_t.jpg"·width="100"·height="75"·alt="Brainwave"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
</p>(CR)(LF)
<p>(CR)(LF)
We·grabbed·some·gear·from·the·gift·shopped·and·landed·(by·accident)·at·<a·href="http://www.brazenhead.com/">The·Brazen·Head</a>·(Ireland's·Oldest·Pub,·Est.·1198)·for·a·pint·of·cider·and·Guinness.·Since·my·sister·<a·href="http://raibledesigns.com/rd/entry/chelan_hard_cider">used·to·be·in·the·cider·business</a>,·she·was·particularly·happy·there·was·so·much·on·tap·in·Ireland.(CR)(LF)
</p>(CR)(LF)
<p>(CR)(LF)
From·the·pub,·we·headed·to·<a·href="http://www.johnmwillis.com/">John·Willis's</a>·session·on·<a·href="http://epicenter.ie/2010.html?zone_id=21&mode=agenda&session=157#session">The·Cambrian·Cloud·Explosion</a>.·Following·John's·session,·we·headed·to·the·Speaker's·Dinner·for·a·very·fun·evening·with·the·hosts·and·speakers·of·the·conference.(CR)(LF)
</p>(CR)(LF)
<p·style="text-align:·center">(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4027/4700144746_2a6f095f07.jpg"·title="John·Willis·and·Barry·Alistair"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4027/4700144746_2a6f095f07_t.jpg"·width="100"·height="75"·alt="John·Willis·and·Barry·Alistair"·style="border:·1px·solid·black"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4053/4699515883_49068fc757.jpg"·title="Speaker's·Dinner·at·Irish·Software·Show·2010"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4053/4699515883_49068fc757_t.jpg"·width="100"·height="75"·alt="Speaker's·Dinner·at·Irish·Software·Show·2010"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4039/4700145482_9e809aa875.jpg"·title="Speaker's·Dinner·at·Irish·Software·Show·2010"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4039/4700145482_9e809aa875_t.jpg"·width="100"·height="75"·alt="Speaker's·Dinner·at·Irish·Software·Show·2010"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4067/4699516499_61333b6e25.jpg"·title="Speaker's·Dinner·at·Irish·Software·Show·2010"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4067/4699516499_61333b6e25_t.jpg"·width="100"·height="75"·alt="Speaker's·Dinner·at·Irish·Software·Show·2010"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
<br/><br/>(CR)(LF)
<a·href="http://farm5.static.flickr.com/4004/4699516869_9bdda79ac4.jpg"·title="Speaker's·Dinner·at·Irish·Software·Show·2010"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4004/4699516869_9bdda79ac4_t.jpg"·width="100"·height="75"·alt="Speaker's·Dinner·at·Irish·Software·Show·2010"·style="border:·1px·solid·black"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4022/4699517415_46575ba674.jpg"·title="Speaker's·Dinner·at·Irish·Software·Show·2010"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4022/4699517415_46575ba674_t.jpg"·width="100"·height="75"·alt="Speaker's·Dinner·at·Irish·Software·Show·2010"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4016/4700153542_a46fca1c58.jpg"·title="Speaker's·Dinner·at·Irish·Software·Show·2010"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4016/4700153542_a46fca1c58_t.jpg"·width="100"·height="75"·alt="Speaker's·Dinner·at·Irish·Software·Show·2010"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
</p>(CR)(LF)
<p>(CR)(LF)
On·Friday,·we·woke·up·in·the·early·afternoon·and·quickly·decided·the·<a·href="http://en.wikipedia.org/wiki/Book_of_Kells">Book·of·Kells</a>·was·our·best·chance·of·getting·some·site·seeing·in.·After·visiting·the·Book·of·Kells,·my·favorite·quote·of·the·conference·happened·in·the·courtyard.·(CR)(LF)
</p>(CR)(LF)
<p>(CR)(LF)
Josh·looked·at·Jamie·(with·his·bad·hangover)·and·exclaimed,·"My·God·Man.·Your·skin·is·so·white·it's·hurting·my·eyes!".·You·probably·had·to·be·there·(or·know·Josh)·to·enjoy·the·humor,·but·I·wanted·to·capture·the·memory·in·this·post·so·I·could·laugh·whenever·I·read·this·in·the·future.·After·that,·Jamie,·Josh,·Kalin·and·I·enjoyed·a·Starbuck's·patio·talking·about·living·in·the·South·of·France·for·a·couple·hours.·Then·we·walked·2·blocks·to·the·<a·href="http://www.porterhousebrewco.com/">Porterhouse·Brewing·Co.</a>·to·watch·the·World·Cup·and·enjoy·more·interesting·conversations.·(CR)(LF)
</p>(CR)(LF)
(CR)(LF)
<p·style="text-align:·center">(CR)(LF)
<a·href="http://farm5.static.flickr.com/4049/4699526381_b93c7d22a4.jpg"·title="The·Book·of·Kells"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4049/4699526381_b93c7d22a4_t.jpg"·width="100"·height="75"·alt="The·Book·of·Kells"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4025/4700168324_26c13c6b46.jpg"·title="Jamie·with·the·Wenches"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4025/4700168324_26c13c6b46_t.jpg"·width="100"·height="75"·alt="Jamie·with·the·Wenches"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4066/4700168582_88b49c92c2.jpg"·title="Lovely·Wenches"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4066/4700168582_88b49c92c2_t.jpg"·width="100"·height="75"·alt="Lovely·Wenches"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4006/4699540829_ca5481a452.jpg"·title="Jamie·and·his·Lady·Drink"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4006/4699540829_ca5481a452_t.jpg"·width="100"·height="75"·alt="Jamie·and·his·Lady·Drink"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
</p>(CR)(LF)
<p>Jamie·left·the·conference·that·evening·and·we·joined·a·whole·slew·of·other·speakers·for·dinner·at·an·excellent·Lebanese·restaurant·near·Temple·Bar.·Good·times·where·had·afterwards·at·a·nearby·Silent·Disco.(CR)(LF)
</p>(CR)(LF)
<p·style="text-align:·center">(CR)(LF)
<a·href="http://farm5.static.flickr.com/4044/4700172766_b7b82c29b5.jpg"·title="Kalin·and·Craig"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4044/4700172766_b7b82c29b5_t.jpg"·width="100"·height="75"·alt="Kalin·and·Craig"·style="border:·1px·solid·black"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4071/4699543397_e997b2b8ff.jpg"·title="Post·Absinthe"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4071/4699543397_e997b2b8ff_t.jpg"·width="100"·height="75"·alt="Post·Absinthe"·style="border:·1px·solid·black"/></a>(CR)(LF)
</p>(CR)(LF)
<p>Saturday,·we·woke·up·early·to·catch·a·tour·bus·out·to·<a·href="http://en.wikipedia.org/wiki/Glendalough">Glendalough</a>·with·Josh·and·John.·The·bus·ride·was·not·pleasant,·but·the·destination·was·spectacular.·We·hung·out·there·for·several·hours,·exploring·the·buildings,·walking·to·the·lake·and·humoring·each·other.(CR)(LF)
</p>(CR)(LF)
<p·style="text-align:·center">(CR)(LF)
<a·href="http://farm5.static.flickr.com/4068/4700176486_aa86563fbf.jpg"·title="Glendalough"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4068/4700176486_aa86563fbf_t.jpg"·width="100"·height="75"·alt="Glendalough"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm2.static.flickr.com/1287/4699547639_3904ddaaf1.jpg"·title="Beautiful·Views·at·Glendalough"·rel="lightbox[ireland2010]"><img·src="http://farm2.static.flickr.com/1287/4699547639_3904ddaaf1_t.jpg"·width="100"·height="75"·alt="Beautiful·Views·at·Glendalough"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4031/4700178148_23b6c2852a.jpg"·title="Glendalough"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4031/4700178148_23b6c2852a_t.jpg"·width="100"·height="75"·alt="Glendalough"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4070/4699549013_40916ab088.jpg"·title="Lower·Lake·at·Glendalough"·rel="lightbox[ireland2010]"><img·src="http://farm5.static.flickr.com/4070/4699549013_40916ab088_t.jpg"·width="100"·height="75"·alt="Lower·Lake·at·Glendalough"·style="border:·1px·solid·black;·margin-left:·10px"/></a>(CR)(LF)
</p>(CR)(LF)
<p>Our·last·night·in·Dublin·was·an·early,·relaxing·one.·As·you·can·tell,·I·really·enjoyed·this·trip,·particularly·hanging·out·with·my·sister·and·all·the·cool·people·we·met.·I·can·easily·say·that·this·trip·registers·as·one·of·my·favorite·conference·experiences·to·date.(CR)(LF)
</p>(CR)(LF)
<p·style="border-top:·1px·dotted·silver;·padding-top:·5px;·color:·#666">(CR)(LF)
To·see·all·the·pictures·I·took·on·this·trip,·check·out·my·<a·href="http://www.flickr.com/photos/mraible/sets/72157624148828777/"·style="color:·#555">Irish·Software·Show·2010·set·on·Flickr</a>.</p>(CR)(LF)
<p>(CR)(LF)
····(CR)(LF)
····<span·class="info">(CR)(LF)
················Posted·in·<span·class="category"><a·href="http://raibledesigns.com/rd/category/Java">Java</a></span>(CR)(LF)
········<span·class="dateStamp">at·<a·href="http://raibledesigns.com/rd/entry/my_incredible_trip_to_ireland">Jun·14·2010,·11:42:55·PM·MDT</a></span>(CR)(LF)
····························<a·href="http://raibledesigns.com/rd/entry/my_incredible_trip_to_ireland#comments"·class="commentsLink">(CR)(LF)
····························Add·a·Comment(CR)(LF)
························</a>(CR)(LF)
············</span>(CR)(LF)
········<!--(LF)
<rdf:RDF·xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"(LF)
·········xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"(LF)
·········xmlns:dc="http://purl.org/dc/elements/1.1/">(LF)
<rdf:Description(LF)
····rdf:about="http://raibledesigns.com/rd/entry/my_incredible_trip_to_ireland"(LF)
····trackback:ping="http://raibledesigns.com/rd/entry/my_incredible_trip_to_ireland"(LF)
····dc:title="My·Incredible·Trip·to·Ireland"(LF)
····dc:identifier="http://raibledesigns.com/rd/entry/my_incredible_trip_to_ireland"(LF)
····dc:subject="Java"(LF)
····dc:description="My·Incredible·Trip·to·Ireland"(LF)
····dc:creator="Matt·Raible"(LF)
····dc:date="2010-06-14·23:42:55.0"·/>(LF)
</rdf:RDF>(LF)
-->(LF)
</p>(CR)(LF)
</div>(CR)(LF)
(CR)(LF)
············<div·class="day">(CR)(LF)
(CR)(LF)
<div·class="entry">(CR)(LF)
········<a·href="http://raibledesigns.com/rd/date/20100610">(CR)(LF)
········<img·class="daypermalink"(CR)(LF)
············src="/themes/andreas08/images/calendar.png"(CR)(LF)
············title="Permanent·link·to·this·day"(CR)(LF)
············alt="20100610"·/></a>(CR)(LF)
(CR)(LF)
······Thursday·June·10,·2010(CR)(LF)
</div>(CR)(LF)
(CR)(LF)
<p>(CR)(LF)
····<a·name="presentations_from_the_irish_software"></a>(CR)(LF)
····<span·class="entryTitle"><a·href="http://raibledesigns.com/rd/entry/presentations_from_the_irish_software">My·Presentations·from·The·Irish·Software·Show·2010</a>(CR)(LF)
············</span>(CR)(LF)
(CR)(LF)
············This·week·I've·been·enjoying·Dublin,·Ireland·thanks·to·the·2nd·Annual·<a·href="http://epicenter.ie/2010.html">Irish·Software·Show</a>.·On·Wednesday·night,·I·spoke·about·<a·href="http://epicenter.ie/2010.html?zone_id=20&mode=agenda&session=152#session">The·Future·of·Web·Frameworks</a>·and··participated·in·a·panel·with·Grails,·Rails,·ASP.NET·MVC·and·Seaside·developers.·It·was·a·fun·night·with·lots·of·lively·discussion.·Below·is·my·presentation·from·this·event.</p>(CR)(LF)
(CR)(LF)
<p·style="text-align:·center"><object·id="__sse3271151"·width="425"·height="355"><param·name="movie"·value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=thefutureofwebframeworks-100225012146-phpapp02&stripped_title=the-future-of-web-frameworks"·/><param·name="allowFullScreen"·value="true"/><param·name="allowScriptAccess"·value="always"/><embed·name="__sse3271151"·src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=thefutureofwebframeworks-100225012146-phpapp02&stripped_title=the-future-of-web-frameworks"·type="application/x-shockwave-flash"·allowscriptaccess="always"·allowfullscreen="true"·width="425"·height="355"></embed></object>(CR)(LF)
</p>(CR)(LF)
<p>This·morning,·I·delivered·my·<a·href="http://epicenter.ie/2010.html?zone_id=20&mode=agenda&session=151#session">Comparing·Kick-Ass·Web·Frameworks</a>·talk.·This·presentation·contains·updated·statistics·for·various·metrics·comparing·Rails·vs.·Grails·and·Flex·vs.·GWT.·(CR)(LF)
</p>(CR)(LF)
<p·style="text-align:·center">(CR)(LF)
<object·id="__sse2644393"·width="425"·height="355"><param·name="movie"·value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=comparingkickasswebframeworks-091203145644-phpapp02&stripped_title=comparing-kick-ass-web-frameworks"·/><param·name="allowFullScreen"·value="true"/><param·name="allowScriptAccess"·value="always"/><embed·name="__sse2644393"·src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=comparingkickasswebframeworks-091203145644-phpapp02&stripped_title=comparing-kick-ass-web-frameworks"·type="application/x-shockwave-flash"·allowscriptaccess="always"·allowfullscreen="true"·width="425"·height="355"></embed></object>(CR)(LF)
</p>(CR)(LF)
<p>(CR)(LF)
Thanks·to·all·who·attended·my·talks·this·week!(CR)(LF)
</p>(CR)(LF)
<p·style="border-top:·1px·dotted·silver;·padding-top:·5px;·color:·#666">(CR)(LF)
P.S.·I·believe·audio·was·recorded·on·Wednesday·night,·but·I'm·unsure·how·it·turned·out.·I'm·pretty·sure·no·recordings·were·done·on·this·morning's·session.·(CR)(LF)
</p><p>(CR)(LF)
····(CR)(LF)
····<span·class="info">(CR)(LF)
················Posted·in·<span·class="category"><a·href="http://raibledesigns.com/rd/category/Java">Java</a></span>(CR)(LF)
········<span·class="dateStamp">at·<a·href="http://raibledesigns.com/rd/entry/presentations_from_the_irish_software">Jun·10·2010,·07:11:35·AM·MDT</a></span>(CR)(LF)
····························<a·href="http://raibledesigns.com/rd/entry/presentations_from_the_irish_software#comments"·class="commentsLink">(CR)(LF)
····························9·Comments(CR)(LF)
························</a>(CR)(LF)
············</span>(CR)(LF)
········<!--(LF)
<rdf:RDF·xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"(LF)
·········xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"(LF)
·········xmlns:dc="http://purl.org/dc/elements/1.1/">(LF)
<rdf:Description(LF)
····rdf:about="http://raibledesigns.com/rd/entry/presentations_from_the_irish_software"(LF)
····trackback:ping="http://raibledesigns.com/rd/entry/presentations_from_the_irish_software"(LF)
····dc:title="My·Presentations·from·The·Irish·Software·Show·2010"(LF)
····dc:identifier="http://raibledesigns.com/rd/entry/presentations_from_the_irish_software"(LF)
····dc:subject="Java"(LF)
····dc:description="My·Presentations·from·The·Irish·Software·Show·2010"(LF)
····dc:creator="Matt·Raible"(LF)
····dc:date="2010-06-10·07:11:35.0"·/>(LF)
</rdf:RDF>(LF)
-->(LF)
</p>(CR)(LF)
</div>(CR)(LF)
(CR)(LF)
············<div·class="day">(CR)(LF)
(CR)(LF)
<div·class="entry">(CR)(LF)
········<a·href="http://raibledesigns.com/rd/date/20100607">(CR)(LF)
········<img·class="daypermalink"(CR)(LF)
············src="/themes/andreas08/images/calendar.png"(CR)(LF)
············title="Permanent·link·to·this·day"(CR)(LF)
············alt="20100607"·/></a>(CR)(LF)
(CR)(LF)
······Monday·June·07,·2010(CR)(LF)
</div>(CR)(LF)
(CR)(LF)
<p>(CR)(LF)
····<a·name="a_nice_riding_weekend_before"></a>(CR)(LF)
····<span·class="entryTitle"><a·href="http://raibledesigns.com/rd/entry/a_nice_riding_weekend_before">A·Nice·Riding·Weekend·before·heading·to·the·Emerald·Isle</a>(CR)(LF)
············</span>(CR)(LF)
(CR)(LF)
············I'm·writing·this·post·while·waiting·to·board·a·flight·to·the·<a·href="http://epicenter.ie/2010.html">Irish·Software·Show</a>·in·Dublin,·Ireland.·Before·I·go,·I·thought·I'd·let·y'all·know·about·the·killer·weekend·I·had·tooling·around·on·my·bike.·(CR)(LF)
</p>(CR)(LF)
<p>(CR)(LF)
Saturday·was·Big·Head·Todd·and·the·Monsters·at·Red·Rocks,·so·I·had·the·pleasure·of·joining·<a·href="http://bsnyderblog.blogspot.com">Bruce</a>·and·The·Professor·for·our·<a·href="http://raibledesigns.com/rd/entry/2nd_row_at_red_rocks">annual·Ride·to·Red·Rocks</a>.·We·were·slow·getting·out·there·(as·usual),·but·had·a·great·time·at·the·show.·17th·row·seats·and·plenty·of·excellent·music.·The·ride·home·was·dark·and·fast;·arriving·at·my·house·at·1:30.·After·late·night·<a·href="http://www.jerusalemrestaurant.com/">Jerusalems</a>,·I·crawled·in·bed·at·2:30.(CR)(LF)
</p>(CR)(LF)
<p·style="text-align:·center">(CR)(LF)
<a·href="http://farm5.static.flickr.com/4038/4677953358_729c5b539b.jpg"·title="Red·Rocks·in·Site"·rel="lightbox[bhtm2010]"><img·src="http://farm5.static.flickr.com/4038/4677953358_729c5b539b_t.jpg"·style="border:·1px·solid·black"·width="100"·height="75"·alt="Red·Rocks·in·Site"·/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4009/4677325237_7c02d01ae1.jpg"·title="Rainbow·at·Red·Rocks"·rel="lightbox[bhtm2010]"><img·src="http://farm5.static.flickr.com/4009/4677325237_7c02d01ae1_t.jpg"·style="border:·1px·solid·black;·margin-left:·10px"·width="100"·height="75"·alt="Rainbow·at·Red·Rocks"·/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm2.static.flickr.com/1273/4677954620_bbd019895d.jpg"·title="Sunset·at·Red·Rocks"·rel="lightbox[bhtm2010]"><img·src="http://farm2.static.flickr.com/1273/4677954620_bbd019895d_t.jpg"·style="border:·1px·solid·black;·margin-left:·10px"·width="100"·height="75"·alt="Sunset·at·Red·Rocks"·/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4049/4677955006_cba2bba9e9.jpg"·title="Big·Head·Todd"·rel="lightbox[bhtm2010]"><img·src="http://farm5.static.flickr.com/4049/4677955006_cba2bba9e9_t.jpg"·style="border:·1px·solid·black;·margin-left:·10px"·width="100"·height="75"·alt="Big·Head·Todd"·/></a>(CR)(LF)
</p>(CR)(LF)
<p>Six·hours·later,·I·hopped·out·of·bed,·jumped·in·my·car·and·drove·down·to·Castle·Rock·for·<a·href="http://www.elephantrockride.com/">Elephant·Rock</a>.·I·did·the·25-mile·off-road·ride·on·my·mountain·bike.·Unfortunately,·there·was·no·singletrack,·and·I'm·pretty·sure·I·was·the·last·one·to·start·the·race.·The·ride·itself·was·nice·and·windy·with·plenty·of·sun.·When·I·reached·the·highway·on·the·backside·of·Castlewood·Canyon,·I·caught·a·stellar·tailwind·and·had·a·blast·cruising·to·the·finish·line.</p>(CR)(LF)
<p·style="text-align:·center">(CR)(LF)
<a·href="http://farm5.static.flickr.com/4050/4677955536_469aba1f4f.jpg"·title="Elephant·Rock·25·mile·cruiser"·rel="lightbox[bhtm2010]"><img·src="http://farm5.static.flickr.com/4050/4677955536_469aba1f4f_t.jpg"·style="border:·1px·solid·black"·width="100"·height="75"·alt="Elephant·Rock·25·mile·cruiser"·/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4033/4677956190_d3983f9a6c.jpg"·title="Approaching·Castlewood·Canyon·State·Park"·rel="lightbox[bhtm2010]"><img·src="http://farm5.static.flickr.com/4033/4677956190_d3983f9a6c_t.jpg"·style="border:·1px·solid·black;·margin-left:·10px"·width="100"·height="75"·alt="Approaching·Castlewood·Canyon·State·Park"·/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4021/4677328429_042d90387b.jpg"·title="Leaving·Castlewood·Canyon"·rel="lightbox[bhtm2010]"><img·src="http://farm5.static.flickr.com/4021/4677328429_042d90387b_t.jpg"·style="border:·1px·solid·black;·margin-left:·10px"·width="100"·height="75"·alt="Leaving·Castlewood·Canyon"·/></a>(CR)(LF)
(CR)(LF)
<a·href="http://farm5.static.flickr.com/4002/4677957256_8fd89ba8e8.jpg"·title="Sweet·Tailwind"·rel="lightbox[bhtm2010]"><img·src="http://farm5.static.flickr.com/4002/4677957256_8fd89ba8e8_t.jpg"·style="border:·1px·solid·black;·margin-left:·10px"·width="100"·height="75"·alt="Sweet·Tailwind"·/></a>(CR)(LF)
</p>(CR)(LF)
<p>If·you'd·like·to·see·more·pictures·from·my·weekend·biking·adventures,·checkout·my·<a·href="http://www.flickr.com/photos/mraible/sets/72157624221044810/">Big·Head·Todd·and·Elephant·Rock·set</a>·on·Flickr.</p>(CR)(LF)
<p>If·you're·going·to·be·at·the·Irish·Software·Show·this·week,·be·sure·to·stop·by·and·say·hi.·I'll·be·speaking·about·<a·href="http://epicenter.ie/2010.html?zone_id=20&mode=agenda&session=152#session">The·Future·of·Web·Frameworks</a>·on·Wednesday·at·7:30pm·and·<a·href="http://epicenter.ie/2010.html?zone_id=20&mode=agenda&session=151#session">Comparing·Kick-Ass·Web·Frameworks</a>·early·on·Thursday·morning.(CR)(LF)
····(CR)(LF)
····<span·class="info">(CR)(LF)
················Posted·in·<span·class="category"><a·href="http://raibledesigns.com/rd/category/General">General</a></span>(CR)(LF)
········<span·class="dateStamp">at·<a·href="http://raibledesigns.com/rd/entry/a_nice_riding_weekend_before">Jun·07·2010,·11:54:07·AM·MDT</a></span>(CR)(LF)
····························<a·href="http://raibledesigns.com/rd/entry/a_nice_riding_weekend_before#comments"·class="commentsLink">(CR)(LF)
····························Add·a·Comment(CR)(LF)
························</a>(CR)(LF)
············</span>(CR)(LF)
········<!--(LF)
<rdf:RDF·xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"(LF)
·········xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"(LF)
·········xmlns:dc="http://purl.org/dc/elements/1.1/">(LF)
<rdf:Description(LF)
····rdf:about="http://raibledesigns.com/rd/entry/a_nice_riding_weekend_before"(LF)
····trackback:ping="http://raibledesigns.com/rd/entry/a_nice_riding_weekend_before"(LF)
····dc:title="A·Nice·Riding·Weekend·before·heading·to·the·Emerald·Isle"(LF)
····dc:identifier="http://raibledesigns.com/rd/entry/a_nice_riding_weekend_before"(LF)
····dc:subject="General"(LF)
····dc:description="A·Nice·Riding·Weekend·before·heading·to·the·Emerald·Isle"(LF)
····dc:creator="Matt·Raible"(LF)
····dc:date="2010-06-07·11:54:07.0"·/>(LF)
</rdf:RDF>(LF)
-->(LF)
</p>(CR)(LF)
</div>(CR)(LF)
(CR)(LF)
············<div·class="day">(CR)(LF)
(CR)(LF)
<div·class="entry">(CR)(LF)
········<a·href="http://raibledesigns.com/rd/date/20100606">(CR)(LF)
········<img·class="daypermalink"(CR)(LF)
············src="/themes/andreas08/images/calendar.png"(CR)(LF)
············title="Permanent·link·to·this·day"(CR)(LF)
············alt="20100606"·/></a>(CR)(LF)
(CR)(LF)
······Sunday·June·06,·2010(CR)(LF)
</div>(CR)(LF)
(CR)(LF)
<p>(CR)(LF)
····<a·name="running_selenium_tests_on_sauce"></a>(CR)(LF)
····<span·class="entryTitle"><a·href="http://raibledesigns.com/rd/entry/running_selenium_tests_on_sauce">Running·Selenium·Tests·on·Sauce·Labs</a>(CR)(LF)
············</span>(CR)(LF)
(CR)(LF)
············Recently·I·embarked·on·a·mission·to·configure·my·team's·Selenium·testing·process·to·support·multiple·browsers.·We·use·<a·href="http://hudson-ci.org">Hudson</a>·for·our·continuous·integration·server.··Since·our·Hudson·instance·runs·on·Solaris,·testing·with·Firefox·on·Solaris·didn't·seem·like·a·good·representation·of·our·clients.·Our·browser·support·matrix·currently·looks·as·follows:</p>(CR)(LF)
<table·class="comparison"·width="300">(CR)(LF)
<thead><tr>(CR)(LF)
<th>·Platform·</th><th>·Browser(CR)(LF)
</th></tr>(CR)(LF)
</thead>(CR)(LF)
<tbody>(CR)(LF)
<tr>(CR)(LF)
<td>·<b>Supported</b>(CR)(LF)
</td><td>·</td></tr>(CR)(LF)
<tr>(CR)(LF)
<td>·Windows·</td><td>·IE7.x·and·8.x,·Firefox·2.x·and·3.x(CR)(LF)
</td></tr>(CR)(LF)
<tr>(CR)(LF)
<td>·Mac·</td><td>·Safari·3.x,·4.x(CR)(LF)
</td></tr>(CR)(LF)
<tr>(CR)(LF)
<td>·<b>Best·Effort</b>(CR)(LF)
</td><td>·</td></tr>(CR)(LF)
<tr>(CR)(LF)
<td>Windows·and·Mac·</td><td>·Chrome·4.x(CR)(LF)
</td></tr>(CR)(LF)
</tbody>(CR)(LF)
</table>(CR)(LF)
<p>(CR)(LF)
At·first,·I·attempted·to·use·Windows·VMs·to·run·Selenium·tests·on·IE.·This·was·a·solution·that·didn't·work·too·well.·The·major·reasons·it·didn't·work:(CR)(LF)
</p>(CR)(LF)
<ol><li>I·had·issues·getting·the·<a·href="http://wiki.hudson-ci.org/display/HUDSON/Selenium+Plugin">Selenium·Plugin·for·Hudson</a>·working.·<a·href="http://issues.hudson-ci.org/browse/HUDSON-6207">Upgrading·the·plugin·to·use·Selenium·RC·1.0.5</a>·may·solve·this·issue.(CR)(LF)
</li><li>We·had·some·unit·tests·that·failed·on·Windows.·I·tried·using·the·<a·href="http://wiki.hudson-ci.org/display/HUDSON/Cygpath+Plugin">Cygpath·Plugin</a>·for·Hudson·(which·allows·you·to·emulate·a·Unix·environment·on·Windows),·but·<a·href="http://comments.gmane.org/gmane.comp.java.hudson.user/31049">failed</a>·to·get·it·to·work.(CR)(LF)
</li><li>We·quickly·realized·it·might·become·a·maintenance·nightmare·to·keep·all·the·different·VMs·up-to-date.</li></ol>(CR)(LF)
<p>Frustrated·by·these·issues,·I·turned·to·<a·href="http://saucelabs.com/">Sauce·Labs</a>.·They·have·a·cloud-based·model·that·runs·Selenium·tests·on·VMs·that·point·back·to·your·application.·They·also·support·<a·href="http://saucelabs.com/products/docs/sauce-ondemand/browsers">many·different·browser/OS·combinations</a>.·We·asked·them·about·support·for·OS·X·and·various·Windows·versions·and·they·indicated·that·their·experience·shows·browsers·are·the·same·across·OSes.(CR)(LF)
</p>(CR)(LF)
<p>I'm·writing·this·article·to·show·you·how·we've·configured·our·build·process·to·support·1)·testing·locally·and·2)·testing·on·Sauce·Labs.·In·a·future·post,·I·hope·to·write·about·how·to·run·Selenium·tests·concurrently·for·faster·execution.</p>(CR)(LF)
<p><strong>Running·Selenium·Tests·Locally</strong><br/>(CR)(LF)
We·use·Maven·to·build·our·project·and·run·our·Selenium·tests.·Our·configuration·is·very·similar·to·the·poms·referenced·in·<a·href="http://raibledesigns.com/rd/entry/integrating_selenium_with_maven_2">Integrating·Selenium·with·Maven·2</a>.·Basically,·we·have·an·"itest"·profile·that·gets·invoked·when·we·pass·in·-Pitest.·It·downloads/starts·Tomcat·(using·<a·href="http://cargo.codehaus.org">Cargo</a>),·deploys·our·WAR,·starts·Selenium·RC·(using·the·<a·href="http://mojo.codehaus.org/selenium-maven-plugin/">selenium-maven-plugin</a>)·and·executes·JUnit-based·tests·using·the·<a·href="http://maven.apache.org/plugins/maven-surefire-plugin/index.html">maven-surefire-plugin</a>.·All·of·this·configuration·is·pretty·standard·and·something·I've·used·on·many·projects·over·the·past·several·years.</p>(CR)(LF)
<p>Beyond·that,·we·have·a·custom·BlockJUnit4ClassRunner·class·that·takes·screenshots·and·captures·the·HTML·source·for·tests·that·fail.</p>(CR)(LF)
<pre·class="brush:·java">(CR)(LF)
public·class·SeleniumJUnitRunner·extends·BlockJUnit4ClassRunner·{(CR)(LF)
····public·SeleniumJUnitRunner(Class<?>·klass)·throws·InitializationError·{(CR)(LF)
········super(klass);(CR)(LF)
····}(CR)(LF)
(CR)(LF)
····protected·Statement·methodInvoker(FrameworkMethod·method,·Object·test)·{(CR)(LF)
········if·(!(test·instanceof·AbstractSeleniumTestCase))·{(CR)(LF)
············throw·new·RuntimeException("Only·works·with·AbstractSeleniumTestCase");(CR)(LF)
········}(CR)(LF)
(CR)(LF)
········final·AbstractSeleniumTestCase·stc·=·((AbstractSeleniumTestCase)·test);(CR)(LF)
········stc.setDescription(describeChild(method));(CR)(LF)
(CR)(LF)
········return·new·InvokeMethod(method,·test)·{(CR)(LF)
············@Override(CR)(LF)
············public·void·evaluate()·throws·Throwable·{(CR)(LF)
················try·{(CR)(LF)
····················super.evaluate();(CR)(LF)
················}·catch·(Throwable·throwable)·{(CR)(LF)
····················stc.takeScreenshot("FAILURE");(CR)(LF)
····················stc.captureHtmlSource("FAILURE");(CR)(LF)
····················throw·throwable;(CR)(LF)
················}(CR)(LF)
············}(CR)(LF)
········};(CR)(LF)
····}(CR)(LF)
}(CR)(LF)
</pre>(CR)(LF)
<p>To·use·the·functionality·SeleniumJUnitRunner·provides,·we·have·a·parent·class·for·all·our·tests.·This·class·uses·the·@RunWith·annotation·as·follows:</p>(CR)(LF)
<pre·class="brush:·java">(CR)(LF)
@RunWith(SeleniumJUnitRunner.class)(CR)(LF)
public·abstract·class·AbstractSeleniumTestCase·{(CR)(LF)
····//·convenience·methods(CR)(LF)
}(CR)(LF)
</pre>(CR)(LF)
<p>This·class·looks·up·the·Selenium·RC·Server,·the·app·location·and·what·browser·to·use·based·on·system·properties.·If·system·properties·are·not·set,·it·has·defaults·for·running·locally.(CR)(LF)
</p>(CR)(LF)
<pre·class="brush:·java">(CR)(LF)
public·static·String·SERVER·=·System.getProperty("selenium.server");(CR)(LF)
public·static·String·APP·=·System.getProperty("selenium.application");(CR)(LF)
public·static·String·BROWSER·=·System.getProperty("selenium.browser");(CR)(LF)
(CR)(LF)
protected·Selenium·selenium;(CR)(LF)
(CR)(LF)
@Before(CR)(LF)
public·void·setUp()·throws·Exception·{(CR)(LF)
····if·(SERVER·==·null)·{(CR)(LF)
········SERVER·=·"localhost";(CR)(LF)
····}(CR)(LF)
(CR)(LF)
····if·(BROWSER·==·null)·{(CR)(LF)
········BROWSER·=·"*firefox3";(CR)(LF)
····}(CR)(LF)
(CR)(LF)
····if·(APP·==·null)·{(CR)(LF)
········APP·=·"http://localhost:9000";(CR)(LF)
····}(CR)(LF)
(CR)(LF)
····selenium·=·new·DefaultSelenium(SERVER,·4444,·BROWSER,·APP);(CR)(LF)
····selenium.start("captureNetworkTraffic=true");(CR)(LF)
····selenium.getEval("window.moveTo(1,1);·window.resizeTo(1021,737);");(CR)(LF)
····selenium.setTimeout("60000");(CR)(LF)
}(CR)(LF)
</pre>(CR)(LF)
<p>The·system·properties·are·specified·as·part·of·the·surefire-plugin's·configuration.·The·reason·we·default·them·in·the·above·code·is·so·tests·can·be·run·from·IDEA·as·well.</p>(CR)(LF)
<pre·class="brush:·xml">(CR)(LF)
<artifactId>maven-surefire-plugin</artifactId>(CR)(LF)
<version>2.5</version>(CR)(LF)
<configuration>(CR)(LF)
····<systemPropertyVariables>(CR)(LF)
········<selenium.application>${selenium.application}</selenium.application>(CR)(LF)
········<selenium.browser>${selenium.browser}</selenium.browser>(CR)(LF)
········<selenium.server>${selenium.server}</selenium.server>(CR)(LF)
····</systemPropertyVariables>(CR)(LF)
</configuration>(CR)(LF)
</pre>(CR)(LF)
<p><strong>Running·Selenium·Tests·in·the·Cloud</strong><br/>(CR)(LF)
To·run·tests·in·the·cloud,·you·have·to·do·a·bit·of·setup·first.·(CR)(LF)
If·you're·behind·a·firewall,·you'll·need·to·setup·<a·href="http://saucelabs.com/products/docs/sauce-ondemand/tunnel">SSH·tunneling</a>·so·Sauce·Labs·can·see·your·machine.·You'll·also·need·to·setup·SSH·Tunneling·on·your·Hudson·server,·but·installing/configuring/running·locally·is·usually·a·good·first·step.·Below·are·the·steps·I·used·to·configure·Sauce·Labs'·SSH·Tunneling·on·OS·X.(CR)(LF)
</p>(CR)(LF)
<p>1.·Install·the·<a·href="http://github.com/saucelabs/saucerest-python">Python·version</a>·in·/opt/tools/saucelabs.·If·you·get·an·error·(<span·style="color:·red">No·local·packages·or·download·links·found·for·install</span>)·<a·href="http://pypi.python.org/pypi/setuptools#downloads">download·the·egg</a>·and·run·it·with:(CR)(LF)
</p>(CR)(LF)
<p·style="padding-left:·20px"><span·style="color:·green">sudo·sh·setuptools-0.6c11-py2.6.egg</span></p>(CR)(LF)
<p><strong>NOTE:</strong>·If·you·get·an·error·(<span·style="color:·red">unable·to·execute·gcc-4.2:·No·such·file·or·directory</span>)·when·installing·pycrypto·on·OS·X,·you'll·need·to·install·the·OS·X·Developer·Tools.</p>(CR)(LF)
<p>2.·Create·a·/opt/tools/saucelabs/local.sh·script·with·the·following·in·it.·You·should·change·the·last·parameter·to·use·your·username·(instead·of·mraible)·since·Sauce·Labs·uses·unique·tunnel·names.(CR)(LF)
</p>(CR)(LF)
<p·style="padding-left:·20px"><span·style="color:·green">python·tunnel.py·{sauce.username}·{sauce.key}·localhost·9000:80·mraible.local</span></p>(CR)(LF)
<p>3.·Start·the·tunnel·by·executing·local.sh.·You·should·see·output·similar·to·the·following.(CR)(LF)
</p>(CR)(LF)
<pre>$·sh·local.sh·(CR)(LF)
/System/../Python.framework/../2.6/../twisted/internet/_sslverify.py:5:·DeprecationWarning:·the·md5·module·is·deprecated;·use·hashlib·instead(CR)(LF)
·import·itertools,·md5(CR)(LF)
/System/../Python.framework/../2.6/../twisted/conch/ssh/keys.py:13:·DeprecationWarning:·the·sha·module·is·deprecated;·use·the·hashlib·module·instead(CR)(LF)
·import·sha,·md5(CR)(LF)
Launching·tunnel·...·(CR)(LF)
Status:·new(CR)(LF)
Status:·booting(CR)(LF)
Status:·running(CR)(LF)
Tunnel·host:·ec2-75-101-216-8.compute-1.amazonaws.com(CR)(LF)
Tunnel·ID:·70f15fb59d2e7ebde55a6274ddfa54dd(CR)(LF)
<sshtunnel.TunnelTransport·instance·at·0x10217ad88>·created(CR)(LF)
requesting·remote·forwarding·for·tunnel·70f15fb59d2e7ebde55a6274ddfa54dd·80=>localhost:9000(CR)(LF)
accepted·remote·forwarding·for·tunnel·70f15fb59d2e7ebde55a6274ddfa54dd·80=>localhost:9000(CR)(LF)
</pre>(CR)(LF)
<p>After·setting·up·the·SSH·Tunnel,·I·modified·AbstractSeleniumTestCase's·setUp()·method·to·allow·running·tests·on·Sauce·Labs.</p>(CR)(LF)
<pre·class="brush:·java">(CR)(LF)
@Before(CR)(LF)
public·void·setUp()·throws·Exception·{(CR)(LF)
····if·(SERVER·==·null)·{(CR)(LF)
········SERVER·=·"localhost";(CR)(LF)
····}(CR)(LF)
(CR)(LF)
····if·(BROWSER·==·null)·{(CR)(LF)
········BROWSER·=·"*firefox3";(CR)(LF)
····}·else·if·(BROWSER.split(":").length·==·3)·{(CR)(LF)
········String[]·platform·=·BROWSER.split(":");(CR)(LF)
(CR)(LF)
········String·os·=·platform[0];(CR)(LF)
········String·browser·=·platform[1];(CR)(LF)
(CR)(LF)
········//·if·Google·Chrome,·don't·use·a·version·#(CR)(LF)
········String·version·=·(platform[1].equals("googlechrome")·?·""·:·platform[2]);(CR)(LF)
········String·printableVersion·=·((version.length()·>·0)·?·"·"·+·platform[2].charAt(0)·:·"");(CR)(LF)
(CR)(LF)
········String·jobName·=·description.getMethodName()·+·"·["·+·browser·+·printableVersion·+·"]";(CR)(LF)
(CR)(LF)
········BROWSER·=·"{\"username\":\"{your-username}\",\"access-key\":\"{your-access-key}\","·+(CR)(LF)
················"\"os\":\""·+·platform[0]·+·"\",\"browser\":·\""·+·platform[1]·+·"\","·+(CR)(LF)
················"\"browser-version\":\""·+·version·+·"\","·+(CR)(LF)
················"\"job-name\":\""·+·jobName·+·"\"}";(CR)(LF)
(CR)(LF)
········log.debug("Testing·with·"·+·browser·+·printableVersion·+·"·on·"·+·os);(CR)(LF)
····}(CR)(LF)
(CR)(LF)
····if·(APP·==·null)·{(CR)(LF)
········APP·=·"http://localhost:9000";(CR)(LF)
····}(CR)(LF)
(CR)(LF)
····selenium·=·new·DefaultSelenium(SERVER,·4444,·BROWSER,·APP);(CR)(LF)
····selenium.start("captureNetworkTraffic=true");(CR)(LF)
····selenium.getEval("window.moveTo(1,1);·window.resizeTo(1021,737);");(CR)(LF)
····selenium.setTimeout("60000");(CR)(LF)
}(CR)(LF)
</pre>(CR)(LF)
<p>After·making·this·change,·I·was·able·to·run·Selenium·tests·from·IDEA·using·the·following·steps:</p>(CR)(LF)
<ol·style="margin-bottom:·0px">(CR)(LF)
<li>Start·Jetty·on·port·9000·(since·that's·what·the·tunnel·points·to).·In·IDEA's·Maven·panel,·create·a·run/debug·configuration·for·jetty:run,·click·the·"Runner"·tab·and·enter·"-Djetty.port=9000"·in·the·VM·Parameters·box.</li>(CR)(LF)
<li>Right-click·on·the·test·to·run·and·create·a·run/debug·configuration.·Enter·the·following·in·the·VM·Parameters·box.·The·last·two·parameters·allow·skipping·the·xvfb·and·Selenium·RC·startup·process.(CR)(LF)
<div·style="color:·green;·padding:·5px">-Dselenium.browser="Windows·2003:iexplore:8."·-Dselenium.application=mraible.local·-Dselenium.server=saucelabs.com·-Dxvfb.skip=true·-Dselenium.server.skip=true</div>(CR)(LF)
</li>(CR)(LF)
</ol>(CR)(LF)
<p>These·same·parameters·can·be·used·if·you·want·to·run·all·tests·from·the·command·line:(CR)(LF)
</p>(CR)(LF)
<p·style="color:·green;·padding-left:·20px;·text-align:·left">mvn·install·-Pitest·-Dselenium.browser="Windows·2003:iexplore:8."·-Dselenium.application=mraible.local·-Dselenium.server=saucelabs.com·-Dxvfb.skip=true·-Dselenium.server.skip=true·-Dcargo.port=9000(CR)(LF)
</p>(CR)(LF)
<p>To·simplify·things,·we·create·profiles·for·the·various·browsers.·For·example,·below·are·profiles·for·IE8·and·Firefox·3.6.(CR)(LF)
</p>(CR)(LF)
<pre·class="brush:·xml">(CR)(LF)
<profile>(CR)(LF)
····<id>firefox-win</id>(CR)(LF)
····<properties>(CR)(LF)
········<cargo.port>9000</cargo.port>(CR)(LF)
········<selenium.application>http://${user.name}.local</selenium.application>(CR)(LF)
········<selenium.browser>Windows·2003:firefox:3.6.</selenium.browser>(CR)(LF)
········<selenium.server>saucelabs.com</selenium.server>(CR)(LF)
········<selenium.server.skip>true</selenium.server.skip>(CR)(LF)
········<xvfb.skip>true</xvfb.skip>(CR)(LF)
····</properties>(CR)(LF)
</profile>(CR)(LF)
<profile>(CR)(LF)
····<id>ie-win</id>(CR)(LF)
····<properties>(CR)(LF)
········<cargo.port>9000</cargo.port>(CR)(LF)
········<selenium.application>http://${user.name}.local</selenium.application>(CR)(LF)
········<selenium.browser>Windows·2003:iexplore:8.</selenium.browser>(CR)(LF)
········<selenium.server>saucelabs.com</selenium.server>(CR)(LF)
········<selenium.server.skip>true</selenium.server.skip>(CR)(LF)
········<xvfb.skip>true</xvfb.skip>(CR)(LF)
····</properties>(CR)(LF)
</profile>(CR)(LF)
</pre>(CR)(LF)
<p><strong>Issues</strong><br/>(CR)(LF)
Since·we've·started·using·Sauce·Labs,·we've·run·into·a·number·of·issues.·Some·of·these·are·Selenium-related·and·some·are·simply·things·we·learned·since·we·started·testing·on·multiple·browsers.</p>(CR)(LF)
<ul>(CR)(LF)
<li><strong>SSH·Tunnels·Keep·Restarting</strong>·This·happens·on·our·Hudson·server·that·runs·the·tunnels·as·a·service.·This·seems·to·happen·daily·and·screws·up·our·Hudson·results·because·builds·fail.</li>(CR)(LF)
<li><strong>XPath·vs.·CSS·Selectors</strong>(CR)(LF)
One·of·the·first·things·we·noticed·was·that·our·IE·tests·were·2-3·times·slower·than·the·same·tests·on·Firefox.·We·discovered·this·is·because·Internet·Explorer·has·a·<a·href="http://blogs.telerik.com/testing/posts/07-07-16/selenium_ie_performance_issues_tests_optimization.aspx">very·slow·XPath·engine</a>.·To·fix·this·issue,·it's·recommended·that·ids·or·CSS·Selectors·be·used·whenever·trying·to·locate·elements.·For·more·information·on·CSS·Selectors·and·Selenium,·see·(CR)(LF)
<a·href="http://saucelabs.com/blog/index.php/2010/01/selenium-totw-css-selectors-in-selenium-demystified/">CSS·Selectors·in·Selenium·Demystified</a>.·To·test·CSS·Selectors,·I·found·<a·href="https://addons.mozilla.org/en-US/firefox/addon/11905">Firefinder</a>·to·be·a·very·useful·Firefox·plugin.·Note·that·many·pseudo·elements·<a·href="http://msdn.microsoft.com/en-us/library/cc351024%28VS.85%29.aspx">won't·work·in·IE</a>.(CR)(LF)
</li>(CR)(LF)
<li><strong>IE7·fails·to·initialize·on·Sauce·Labs</strong>·There's·no·errors·in·our·JUnit·reports,·so·we're·not·sure·what's·causing·this.·It·could·very·well·be·bugs·in·our·code/configuration,·but·IE8·works·fine.</li>(CR)(LF)
<li>The·Job·Names·on·Sauce·Labs·don't·get·set·correctly·and·often·results·in·duplicate·job·names.·This·could·certainly·be·related·to·my·code.·Finding·videos·that·show·failed·tests·is·difficult·when·the·job·names·aren't·set·correctly.</li>(CR)(LF)
<li>It·would·be·slick·if·you·could·<a·href="http://saucelabs.com/forums/viewtopic.php?id=50">download·the·video·of·a·failed·test</a>,·similar·to·what·we·do·by·taking·screenshots.</li>(CR)(LF)
<li>Google·Chrome·works·on·Sauce·Labs,·but·I'm·unable·to·get·it·working·locally·(on·Windows·or·OS·X).·This·seems·to·be·a·Selenium·issue.</li>(CR)(LF)
<li>Safari·4·works,·but·when·it·fails,·the·screenshot·shows·a·<a·href="http://twitpic.com/1grjtx">Safari·can't·find·the·file</a>·error.·Since·there's·no·real·error·to·debug,·it's·difficult·to·figure·out·why·the·test·fails.·Since·Safari·4·is·not·listed·on·<a·href="http://seleniumhq.org/about/platforms.html">platforms·supported·by·Selenium</a>,·I'm·unsure·how·to·fix·this.</li>(CR)(LF)
</ul>(CR)(LF)
<p>Overall,·Sauce·Labs·seems·to·work·pretty·well.·However,·in·the·process·of·messing·with·Hudson,·build·agents·and·Selenium·infrastructure,·it's·become·readily·apparent·that·we·need·a·team·member·to·devote·their·full-attention·to·it.·Having·a·developer·or·two·work·on·it·every·now-and-then·is·inefficient,·especially·when·we're·still·in·the·process·of·ironing·everything·out·and·making·it·all·stable.·(CR)(LF)
</p>(CR)(LF)
<p>(CR)(LF)
If·you·have·any·tips·on·how·you've·solved·issues·with·Sauce·Labs·(ssh·tunnels,·IE7)·or·Selenium·(Safari·4,·Google·Chrome),·I'd·love·to·hear·them.·I'm·also·interested·to·hear·from·anyone·with·experience·running·Selenium·tests·concurrently·(locally·or·in·the·cloud).(CR)(LF)
</p>(CR)(LF)
<p><strong>Update:</strong>·I·discovered·a·bug·in·my·AbstractSeleniumTest's·setUp()·method·where·job·names·weren't·being·set·correctly.·I've·since·changed·the·code·in·this·class·to·the·following:</p>(CR)(LF)
<pre·class="brush:·java">(CR)(LF)
private·static·String·browser,·printableVersion;(CR)(LF)
(CR)(LF)
@BeforeClass(CR)(LF)
public·static·void·parseBrowser()·{(CR)(LF)
(CR)(LF)
····if·(BROWSER·==·null)·{(CR)(LF)
········BROWSER·=·"*firefox3";(CR)(LF)
····}·else·if·(BROWSER.split(":").length·==·3)·{(CR)(LF)
········String[]·platform·=·BROWSER.split(":");(CR)(LF)
(CR)(LF)
········String·os·=·platform[0];(CR)(LF)
········browser·=·platform[1];(CR)(LF)
(CR)(LF)
········//·if·Google·Chrome,·don't·use·a·version·#(CR)(LF)
········String·version·=·(platform[1].equals("googlechrome")·?·""·:·platform[2]);(CR)(LF)
········printableVersion·=·((version.length()·>·0)·?·"·"·+·platform[2].charAt(0)·:·"");(CR)(LF)
(CR)(LF)
········BROWSER·=·"{\"username\":\"{your-username}\",\"access-key\":\"{your-access-key}\","·+(CR)(LF)
················"\"os\":\""·+·os·+·"\",\"browser\":·\""·+·browser·+·"\","·+(CR)(LF)
················"\"browser-version\":\""·+·version·+·"\",·"·+(CR)(LF)
················"\"job-name\":·\"jobName\"}";(CR)(LF)
····}(CR)(LF)
}(CR)(LF)
(CR)(LF)
@Before(CR)(LF)
public·void·setUp()·throws·Exception·{(CR)(LF)
····if·(SERVER·==·null)·{(CR)(LF)
········SERVER·=·"localhost";(CR)(LF)
····}(CR)(LF)
(CR)(LF)
····if·(APP·==·null)·{(CR)(LF)
········APP·=·"http://localhost:9000";(CR)(LF)
····}(CR)(LF)
(CR)(LF)
····String·seleniumBrowser·=·BROWSER;(CR)(LF)
····if·(BROWSER.startsWith("{"))·{·//·sauce·labs(CR)(LF)
········String·jobName·=·description.getMethodName()·+·"·["·+·browser·+·printableVersion·+·"]";(CR)(LF)
········log.debug("=>·Running·job:·"·+·jobName);(CR)(LF)
(CR)(LF)
········seleniumBrowser·=·BROWSER.replace("jobName",·jobName);(CR)(LF)
····}(CR)(LF)
(CR)(LF)
····selenium·=·new·DefaultSelenium(SERVER,·4444,·seleniumBrowser,·APP);(CR)(LF)
····selenium.start("captureNetworkTraffic=true");(CR)(LF)
····selenium.getEval("window.moveTo(1,1);·window.resizeTo(1021,737);");(CR)(LF)
····selenium.setTimeout("60000");(CR)(LF)
}(CR)(LF)
</pre>(CR)(LF)
<p>(CR)(LF)
····(CR)(LF)
····<span·class="info">(CR)(LF)
················Posted·in·<span·class="category"><a·href="http://raibledesigns.com/rd/category/Java">Java</a></span>(CR)(LF)
········<span·class="dateStamp">at·<a·href="http://raibledesigns.com/rd/entry/running_selenium_tests_on_sauce">Jun·06·2010,·07:50:20·PM·MDT</a></span>(CR)(LF)
····························<a·href="http://raibledesigns.com/rd/entry/running_selenium_tests_on_sauce#comments"·class="commentsLink">(CR)(LF)
····························3·Comments(CR)(LF)
························</a>(CR)(LF)
············</span>(CR)(LF)
········<!--(LF)
<rdf:RDF·xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"(LF)
·········xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"(LF)
·········xmlns:dc="http://purl.org/dc/elements/1.1/">(LF)
<rdf:Description(LF)
····rdf:about="http://raibledesigns.com/rd/entry/running_selenium_tests_on_sauce"(LF)
····trackback:ping="http://raibledesigns.com/rd/entry/running_selenium_tests_on_sauce"(LF)
····dc:title="Running·Selenium·Tests·on·Sauce·Labs"(LF)
····dc:identifier="http://raibledesigns.com/rd/entry/running_selenium_tests_on_sauce"(LF)
····dc:subject="Java"(LF)
····dc:description="Running·Selenium·Tests·on·Sauce·Labs"(LF)
····dc:creator="Matt·Raible"(LF)
····dc:date="2010-06-06·19:50:20.0"·/>(LF)
</rdf:RDF>(LF)
-->(LF)
</p>(CR)(LF)
</div>(CR)(LF)
(CR)(LF)
············<div·class="day">(CR)(LF)
(CR)(LF)
<div·class="entry">(CR)(LF)
········<a·href="http://raibledesigns.com/rd/date/20100604">(CR)(LF)
········<img·class="daypermalink"(CR)(LF)
············src="/themes/andreas08/images/calendar.png"(CR)(LF)
············title="Permanent·link·to·this·day"(CR)(LF)
············alt="20100604"·/></a>(CR)(LF)
(CR)(LF)
······Friday·June·04,·2010(CR)(LF)
</div>(CR)(LF)
(CR)(LF)
<p>(CR)(LF)
····<a·name="versioning_static_assets_with_urlrewritefilter"></a>(CR)(LF)
····<span·class="entryTitle"><a·href="http://raibledesigns.com/rd/entry/versioning_static_assets_with_urlrewritefilter">Versioning·Static·Assets·with·UrlRewriteFilter</a>(CR)(LF)
············</span>(CR)(LF)
(CR)(LF)
············A·few·weeks·ago,·a·<a·href="http://www.linkedin.com/in/ericmitchell">co-worker</a>·sent·me·interesting·email·after·talking·with·the·<a·href="http://zoompf.com/">Zoompf·CEO</a>·at·<a·href="http://jsconf.us/2010/">JSConf</a>.</p>(CR)(LF)
<p·class="quote"·style="color:·#666">(CR)(LF)
One·interesting·tip·mentioned·was·how·we·querystring·the·version·on·our·scripts·and·css.·Apparently·this·doesn't·always·cache·the·way·we·expected·it·would·(some·proxies·will·never·cache·an·asset·if·it·has·a·querystring).··The·<a·href="http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/">recommendation·is·to·rev·the·filename·itself</a>.·(CR)(LF)
</p>(CR)(LF)
<p>This·article·explains·how·we·implemented·a·"cache·busting"·system·in·our·application·with·Maven·and·the·UrlRewriteFilter.·We·originally·used·querystring·in·our·implementation,·but·switched·to·filenames·after·reading·Souders'·recommendation.·That·part·was·figured·out·by·my·esteemed·colleague·<a·href="http://software.druidhillroad.com/">Noah·Paci</a>.(CR)(LF)
</p>(CR)(LF)
<p><strong>Our·Requirements</strong></p>(CR)(LF)
<ul><li>Make·the·URL·include·a·version·number·for·each·static·asset·URL·(JS,·CSS·and·SWF)·that·serves·to·expire·a·client's·cache·of·the·asset.·(CR)(LF)
</li><li>Insert·the·version·number·into·the·application·so·the·version·number·can·be·included·in·the·URL.(CR)(LF)
</li><li>Use·a·random·version·number·when·in·development·mode·(based·on·running·without·a·packaged·war)·so·that·developers·will·not·need·to·clear·their·browser·cache·when·making·changes·to·static·resources.··The·random·version·number·should·match·the·production·version·number·formats·which·is·currently:·x.y-SNAPSHOT-revisionNumber(CR)(LF)
</li><li>When·running·in·production,·the·version·number/cachebust·is·computed·once·(when·a·Filter·is·initialized).··In·development,·a·new·cachebust·is·computed·on·each·request.(CR)(LF)
</li></ul>(CR)(LF)
<p>In·our·app,·we're·using·Maven,·Spring·and·JSP,·but·the·latter·two·don't·really·matter·for·the·purposes·of·this·discussion.(CR)(LF)
</p>(CR)(LF)
<p><strong>Implementation·Steps</strong>(CR)(LF)
<br/>(CR)(LF)
1.·First·we·added·the·<a·href="http://mojo.codehaus.org/buildnumber-maven-plugin/">buildnumber-maven-plugin</a>·to·our·project's·pom.xml·so·the·build·number·is·calculated·from·SVN.(CR)(LF)
</p>(CR)(LF)
<pre·class="brush:·xml">(CR)(LF)
<plugin>(CR)(LF)
····<groupId>org.codehaus.mojo</groupId>(CR)(LF)
····<artifactId>buildnumber-maven-plugin</artifactId>(CR)(LF)
····<version>1.0-beta-4</version>(CR)(LF)
····<executions>(CR)(LF)
········<execution>(CR)(LF)
············<phase>validate</phase>(CR)(LF)
············<goals>(CR)(LF)
················<goal>create</goal>(CR)(LF)
············</goals>(CR)(LF)
········</execution>(CR)(LF)
····</executions>(CR)(LF)
····<configuration>(CR)(LF)
········<doCheck>false</doCheck>(CR)(LF)
········<doUpdate>false</doUpdate>(CR)(LF)
········<providerImplementations>(CR)(LF)
············<svn>javasvn</svn>(CR)(LF)
········</providerImplementations>(CR)(LF)
····</configuration>(CR)(LF)
</plugin>(CR)(LF)
</pre>(CR)(LF)
<p>2.·Next·we·used·the·maven-war-plugin·to·add·these·values·to·our·WAR's·MANIFEST.MF·file.</p>(CR)(LF)
<pre·class="brush:·xml">(CR)(LF)
<plugin>(CR)(LF)
····<artifactId>maven-war-plugin</artifactId>(CR)(LF)
····<version>2.0.2</version>(CR)(LF)
····<configuration>(CR)(LF)
········<archive>(CR)(LF)
············<manifest>(CR)(LF)
················<addDefaultImplementationEntries>true</addDefaultImplementationEntries>(CR)(LF)
············</manifest>(CR)(LF)
············<manifestEntries>(CR)(LF)
················<Implementation-Version>${project.version}</Implementation-Version>(CR)(LF)
················<Implementation-Build>${buildNumber}</Implementation-Build>(CR)(LF)
················<Implementation-Timestamp>${timestamp}</Implementation-Timestamp>(CR)(LF)
············</manifestEntries>(CR)(LF)
········</archive>(CR)(LF)
····</configuration>(CR)(LF)
</plugin>(CR)(LF)
</pre>(CR)(LF)
<p>3.·Then·we·configured·a·Filter·to·read·the·values·from·this·file·on·startup.·If·this·file·doesn't·exist,·a·default·version·number·of·"1.0-SNAPSHOT-{random}"·is·used.·Otherwise,·the·version·is·calculated·as·${project.version}-${buildNumber}.(CR)(LF)
</p>(CR)(LF)
<pre·class="brush:·java">(CR)(LF)
private·String·buildNumber·=·null;(CR)(LF)
(CR)(LF)
...(CR)(LF)
@Override(CR)(LF)
public·void·initFilterBean()·throws·ServletException·{(CR)(LF)
····try·{(CR)(LF)
········InputStream·is·=·(CR)(LF)
············servletContext.getResourceAsStream("/META-INF/MANIFEST.MF");(CR)(LF)
········if·(is·==·null)·{(CR)(LF)
············log.warn("META-INF/MANIFEST.MF·not·found.");(CR)(LF)
········}·else·{(CR)(LF)
············Manifest·mf·=·new·Manifest();(CR)(LF)
············mf.read(is);(CR)(LF)
············Attributes·atts·=·mf.getMainAttributes();(CR)(LF)
············buildNumber·=·atts.getValue("Implementation-Version")·+·"-"·+·atts.getValue("Implementation-Build");(CR)(LF)
············log.info("Application·version·set·to:·"·+·buildNumber);(CR)(LF)
········}(CR)(LF)
·····}·catch·(IOException·e)·{(CR)(LF)
········log.error("I/O·Exception·reading·manifest:·"·+·e.getMessage());(CR)(LF)
·····}(CR)(LF)
}(CR)(LF)
(CR)(LF)
...(CR)(LF)
(CR)(LF)
····//·If·there·was·a·build·number·defined·in·the·war,·then·use·it·for(CR)(LF)
····//·the·cache·buster.·Otherwise,·assume·we·are·in·development·mode·(CR)(LF)
····//·and·use·a·random·cache·buster·so·developers·don't·have·to·clear·(CR)(LF)
····//·their·browswer·cache.(CR)(LF)
····requestVars.put("cachebust",·buildNumber·!=·null·?·buildNumber·:·"1.0-SNAPSHOT-"·+·new·Random().nextInt(100000));(CR)(LF)
</pre>(CR)(LF)
<p>4.·We·then·used·the·"cachebust"·variable·and·appended·it·to·static·asset·URLs·as·indicated·below.</p>(CR)(LF)
<pre·class="brush:·xml">(CR)(LF)
<c:set·var="version"·scope="request"·(CR)(LF)
····value="${requestScope.requestConfig.cachebust}"/>(CR)(LF)
<c:set·var="base"·scope="request"(CR)(LF)
····value="${pageContext.request.contextPath}"/>(CR)(LF)
(CR)(LF)
<link·rel="stylesheet"·type="text/css"·(CR)(LF)
····href="${base}/v/${version}/assets/css/style.css"·media="all"/>(CR)(LF)
(CR)(LF)
<script·type="text/javascript"·(CR)(LF)
····src="${base}/v/${version}/compressed/jq.js"></script>(CR)(LF)
</pre>(CR)(LF)
<p>(CR)(LF)
The·injection·of·/v/[CACHEBUSTINGSTRING]/(assets|compressed)·eventually·has·to·map·back·to·the·actual·asset·(that·does·not·include·the·two·first·elements·of·the·URI).·The·application·must·remove·these·two·elements·to·map·back·to·the·actual·asset.·To·do·this,·we·use·the·<a·href="http://tuckey.org/urlrewrite/">UrlRewriteFilter</a>.·The·UrlRewriteFilter·is·used·(instead·of·Apache's·<a·href="http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html">mod_rewrite</a>)·so·when·developers·run·locally·(using·<em>mvn·jetty:run</em>)·they·don't·have·to·configure·Apache.(CR)(LF)
</p>(CR)(LF)
<p>5.·In·our·application,·"/compressed/"·is·mapped·to·<a·href="http://code.google.com/p/wro4j/">wro4j</a>'s·WroFilter.·In·order·to·get·UrlRewriteFilter·and·WroFilter·to·work·with·this·setup,·the·WroFilter·has·to·accept·FORWARD·and·REQUEST·dispatchers.(CR)(LF)
</p>(CR)(LF)
<pre·class="brush:·xml">(CR)(LF)
<filter-mapping>(CR)(LF)
····<filter-name>rewriteFilter</filter-name>(CR)(LF)
····<url-pattern>/*</url-pattern>(CR)(LF)
</filter-mapping>(CR)(LF)
(CR)(LF)
<filter-mapping>(CR)(LF)
····<filter-name>WebResourceOptimizer</filter-name>(CR)(LF)
····<url-pattern>/compressed/*</url-pattern>(CR)(LF)
····<dispatcher>FORWARD</dispatcher>(CR)(LF)
····<dispatcher>REQUEST</dispatcher>(CR)(LF)
</filter-mapping>(CR)(LF)
</pre>(CR)(LF)
<p>(CR)(LF)
Once·this·was·configured,·we·added·the·following·rules·to·our·urlrewrite.xml·to·allow·rewriting·of·any·assets·or·compressed·resource·request·back·to·its·"correct"·URL.(CR)(LF)
</p>(CR)(LF)
<pre·class="brush:·xml">(CR)(LF)
<rule·match-type="regex">(CR)(LF)
····<from>^/v/[0-9A-Za-z_.\-]+/assets/(.*)$</from>(CR)(LF)
····<to>/assets/$1</to>(CR)(LF)
</rule>(CR)(LF)
<rule·match-type="regex">(CR)(LF)
····<from>^/v/[0-9A-Za-z_.\-]+/compressed/(.*)$</from>(CR)(LF)
····<to>/compressed/$1</to>(CR)(LF)
</rule>(CR)(LF)
<rule>(CR)(LF)
····<from>/compressed/**</from>(CR)(LF)
····<to>/compressed/$1</to>(CR)(LF)
</rule>(CR)(LF)
</pre>(CR)(LF)
<p>Of·course,·you·can·also·do·this·in·Apache.·This·is·what·it·might·look·like·in·your·vhost.d·file:(CR)(LF)
</p>(CR)(LF)
<pre>(CR)(LF)
RewriteEngine····on(CR)(LF)
RewriteLogLevel··0!(CR)(LF)
RewriteLog·······/srv/log/apache22/app_rewrite_log(CR)(LF)
RewriteRule······^/v/[.A-Za-z0-9_-]+/assets/(.*)·/assets/$1·[PT](CR)(LF)
RewriteRule······^/v/[.A-Za-z0-9_-]+/compressed/(.*)·/compressed/$1·[PT](CR)(LF)
</pre>(CR)(LF)
<p>(CR)(LF)
Whether·it's·a·good·idea·to·implement·this·in·Apache·or·using·the·UrlRewriteFilter·is·up·for·debate.·If·we're·able·to·do·this·with·the·UrlRewriteFilter,·the·benefit·of·doing·this·at·all·in·Apache·is·questionable,·especially·since·it·creates·a·duplicate·of·code.(CR)(LF)
····(CR)(LF)
····<span·class="info">(CR)(LF)
················Posted·in·<span·class="category"><a·href="http://raibledesigns.com/rd/category/Java">Java</a></span>(CR)(LF)
········<span·class="dateStamp">at·<a·href="http://raibledesigns.com/rd/entry/versioning_static_assets_with_urlrewritefilter">Jun·04·2010,·09:27:42·AM·MDT</a></span>(CR)(LF)
····························<a·href="http://raibledesigns.com/rd/entry/versioning_static_assets_with_urlrewritefilter#comments"·class="commentsLink">(CR)(LF)
····························4·Comments(CR)(LF)
························</a>(CR)(LF)
············</span>(CR)(LF)
········<!--(LF)
<rdf:RDF·xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"(LF)
·········xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"(LF)
·········xmlns:dc="http://purl.org/dc/elements/1.1/">(LF)
<rdf:Description(LF)
····rdf:about="http://raibledesigns.com/rd/entry/versioning_static_assets_with_urlrewritefilter"(LF)
····trackback:ping="http://raibledesigns.com/rd/entry/versioning_static_assets_with_urlrewritefilter"(LF)
····dc:title="Versioning·Static·Assets·with·UrlRewriteFilter"(LF)
····dc:identifier="http://raibledesigns.com/rd/entry/versioning_static_assets_with_urlrewritefilter"(LF)
····dc:subject="Java"(LF)
····dc:description="Versioning·Static·Assets·with·UrlRewriteFilter"(LF)
····dc:creator="Matt·Raible"(LF)
····dc:date="2010-06-04·09:27:42.0"·/>(LF)
</rdf:RDF>(LF)
-->(LF)
</p>(CR)(LF)
</div>(CR)(LF)
(CR)(LF)
············<div·class="day">(CR)(LF)
(CR)(LF)
<div·class="entry">(CR)(LF)
········<a·href="http://raibledesigns.com/rd/date/20100603">(CR)(LF)
········<img·class="daypermalink"(CR)(LF)
············src="/themes/andreas08/images/calendar.png"(CR)(LF)
············title="Permanent·link·to·this·day"(CR)(LF)
············alt="20100603"·/></a>(CR)(LF)
(CR)(LF)
······Thursday·June·03,·2010(CR)(LF)
</div>(CR)(LF)
(CR)(LF)
<p>(CR)(LF)
····<a·name="life_without_tv"></a>(CR)(LF)
····<span·class="entryTitle"><a·href="http://raibledesigns.com/rd/entry/life_without_tv">Life·without·TV</a>(CR)(LF)
············</span>(CR)(LF)
(CR)(LF)
············As·a·Denver·sports·enthusiast,·April·started·as·a·great·month.·The·Nuggets·and·the·Avs·both·made·the·playoffs·and·both·appeared·like·they·would·do·fairly·well.·Of·course,·neither·of·them·did·and·by·April·30th,·both·teams'·seasons·where·over.·I·watched·the·final·Nuggets·game·of·the·season·<a·href="http://raibledesigns.com/rd/entry/thanks_to_seattle_for_a">in·Seattle</a>·and·was·so·disgusted·I·decided·to·<a·href="http://twitter.com/mraible/status/13172187335"·title="The·disappointing·playoffs·(Avalanche·and·Nuggets)·have·inspired·me...·ditching·TV·until·June·1st.·Sorry·kids...">turn·off·my·TV·for·a·month</a>.·(CR)(LF)
</p>(CR)(LF)
<p>When·I·first·told·my·kids·(who·spend·50%·of·their·time·at·my·house),·Jack's·lower·lip·started·to·tremble·(mostly·because·it·meant·no·Wii).·Abbie·quickly·asked·"What·about·the·iPad?"·I·said·that·was·OK·and·both·kids·quickly·cheered·up.·I·don't·generally·watch·a·lot·of·TV·(~10·hours/week),·and·I·<a·href="http://raibledesigns.com/rd/entry/the_cabin">grew·up·without·electricity</a>,·so·this·wasn't·a·huge·change·for·me.·However,·I·do·have·some·shows·that·I've·been·following·this·year.·Namely,·24,·FlashForward,·The·Office·and·American·Idol.</p>(CR)(LF)
<p>For·the·last·6·months,·I've·been·developing·an·online·video·site,·so·it·wasn't·long·before·my·brash·"no·TV"·decision·turned·into·a·nice·opportunity·to·research·other·sites·offering·online·video.·Here·are·some·observations·from·my·month·without·TV.</p>(CR)(LF)
<ul>(CR)(LF)
<li>Almost·no·online·video·sites·work·on·the·iPad·because·of·Flash.·I·get·the·feeling·that·most·online·video·sites·aren't·doing·HTML5·<video>·because·of·DRM·and·progressive·download·vs.·streaming.</li>(CR)(LF)
<li>Netflix·is·a·cool·app·for·the·iPad,·but·most·of·the·streaming·content·is·crap.·My·kids·found·plenty·to·watch,·but·I·never·found·anything.</li>(CR)(LF)
<li>Hulu·is·the·bomb·if·they·have·shows·you·like·to·watch.</li>(CR)(LF)
<li>The·ABC·app·for·iPad·is·great·if·they·have·shows·you·like·to·watch.</li>(CR)(LF)
<li>I·watched·a·lot·less·movies·because·I·didn't·have·onDemand·and·didn't·feel·like·renting/ordering·DVDs.</li>(CR)(LF)
<li>I·found·my·laptop·offered·a·better·viewing·experience·than·the·iPad.·</li>(CR)(LF)
<li>My·kids·found·the·iPad·offered·a·better·viewing·experience·than·my·laptop·(easier·to·hold/share).</li>(CR)(LF)
<li>The·iPad·isn't·loud·or·comfortable·enough·to·replace·the·modern·TV.</li>(CR)(LF)
<li>My·TV·(and·surround·sound)·offers·a·much·better·viewing·experience·than·a·computer.</li>(CR)(LF)
<li>Ads·on·Hulu·are·short·and·sweet·(15·seconds)·and·seem·to·inspire·higher·engagement·because·you're·willing·to·wait·for·the·show·to·resume.</li>(CR)(LF)
<li>My·team·has·developed·both·a·webapp·and·a·native·app·that·work·on·the·iPad,·but·I·was·never·inspired·to·use·either·due·to·lack·of·shows·I·wanted·to·watch.</li>(CR)(LF)
<li>American·Idol·was·difficult·to·find·online.·When·I·did·find·it,·it·was·very·poor·quality.</li>(CR)(LF)
<li>I·did·not·use·BitTorrent·because·I·forgot·what·a·good·resource·it·is.</li>(CR)(LF)
<li>I·found·myself·going·to·bed·a·lot·earlier.</li>(CR)(LF)
</ul>(CR)(LF)
<p>(CR)(LF)
Overall,·it·was·a·great·experience·and·I·recommend·others·try·it.·However,·with·the·Stanley·Cup·Finals,·NBA·Finals·and·World·Cup·this·month,·I'm·glad·I·turned·my·TV·back·on.·<img·src="http://raibledesigns.com/images/smileys/wink.gif"·class="smiley"·alt=";-)"·title=";-)"·/>(CR)(LF)
(CR)(LF)
····(CR)(LF)
····<span·class="info">(CR)(LF)
················Posted·in·<span·class="category"><a·href="http://raibledesigns.com/rd/category/General">General</a></span>(CR)(LF)
········<span·class="dateStamp">at·<a·href="http://raibledesigns.com/rd/entry/life_without_tv">Jun·03·2010,·08:06:49·AM·MDT</a></span>(CR)(LF)
····························<a·href="http://raibledesigns.com/rd/entry/life_without_tv#comments"·class="commentsLink">(CR)(LF)
····························2·Comments(CR)(LF)
························</a>(CR)(LF)
············</span>(CR)(LF)
········<!--(LF)
<rdf:RDF·xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"(LF)
·········xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"(LF)
·········xmlns:dc="http://purl.org/dc/elements/1.1/">(LF)
<rdf:Description(LF)
····rdf:about="http://raibledesigns.com/rd/entry/life_without_tv"(LF)
····trackback:ping="http://raibledesigns.com/rd/entry/life_without_tv"(LF)
····dc:title="Life·without·TV"(LF)
····dc:identifier="http://raibledesigns.com/rd/entry/life_without_tv"(LF)
····dc:subject="General"(LF)
····dc:description="Life·without·TV"(LF)
····dc:creator="Matt·Raible"(LF)
····dc:date="2010-06-03·08:06:49.0"·/>(LF)
</rdf:RDF>(LF)
-->(LF)
</p>(CR)(LF)
</div>(CR)(LF)
(CR)(LF)
····</div>(LF)
(LF)
···························</div><!--·end·main·-->(LF)
(LF)
········<div·id="sub">(LF)
················<ul·class="rNavigationBar">(LF)
········<li·class="rNavItem">(LF)
············<a·href="/"><span>Home</span></a>(LF)
········</li>(LF)
········<li·class="rNavItem">(LF)
············<a·href="http://raibledesigns.com/rd/"><span>Weblog</span></a>(LF)
········</li>(LF)
········································································<li·class="rNavItem"><a·href="http://raibledesigns.com/rd/page/about"><span>About</span></a></li>(LF)
····································································································<li·class="rNavItem"><a·href="http://raibledesigns.com/rd/page/archives"><span>Archives</span></a></li>(LF)
····································································································<li·class="rNavItem"><a·href="http://raibledesigns.com/rd/page/contact"><span>Contact</span></a></li>(LF)
····································································································<li·class="rNavItem"><a·href="http://raibledesigns.com/rd/page/publications"><span>Presentations</span></a></li>(LF)
····································································································<li·class="rNavItem"><a·href="http://raibledesigns.com/rd/page/resume"><span>Resume</span></a></li>(LF)
············································································································································································<li·class="rNavItem">(LF)
····················<a·href="/roller-ui/login-redirect.rol"><span>Login</span></a>(LF)
················</li>(LF)
························</ul>(LF)
············<div·class="editorMenu">··(LF)
····(LF)
</div>(LF)
············<div·class="small·box"·id="description">(LF)
················<div·id="feed">(LF)
····················<a·href="http://raibledesigns.com/rd/feed/entries/atom"><img·class="rssbadge"(LF)
························src="/themes/andreas08/images/feed-icon-16x16.jpg"(LF)
························alt="Click·me·to·subscribe"·/></a>(LF)
················</div>(LF)
················<a·class="linkedin-profileinsider-popup"·href="http://www.linkedin.com/in/mraible">Matt·Raible</a>·is·a·UI·Architect·specializing·in·open·source·web·frameworks.·<a·href="http://raibledesigns.com/contact.jsp">Contact·me</a>·for·rates.(LF)
············</div>(LF)
············<div·class="small"·id="calendar"><table·cellspacing="0"·border="0"··summary="Blog·Archive·Calendar"·class="hCalendarTable"><tr><td·colspan="7"·align="center"·class="hCalendarMonthYearRow"><a·href="/rd/date/201006"·title="Prev"·class="hCalendarNavBar">«</a>·July·2010</td></tr><tr><th·class="hCalendarDayNameRow"·align="center">Sun</th><th·class="hCalendarDayNameRow"·align="center">Mon</th><th·class="hCalendarDayNameRow"·align="center">Tue</th><th·class="hCalendarDayNameRow"·align="center">Wed</th><th·class="hCalendarDayNameRow"·align="center">Thu</th><th·class="hCalendarDayNameRow"·align="center">Fri</th><th·class="hCalendarDayNameRow"·align="center">Sat</th></tr><tr><td·class="hCalendarDayNotInMonth"> </td><td·class="hCalendarDayNotInMonth"> </td><td·class="hCalendarDayNotInMonth"> </td><td·class="hCalendarDayNotInMonth"> </td><td·class="hCalendarDay"><div·class="hCalendarDayTitle">1</div></td><td·class="hCalendarDay"><div·class="hCalendarDayTitle">2</div></td><td·class="hCalendarDay"><div·class="hCalendarDayTitle">3</div></td></tr><tr><td·class="hCalendarDay"><div·class="hCalendarDayTitle">4</div></td><td·class="hCalendarDay"><div·class="hCalendarDayTitle">5</div></td><td·class="hCalendarDay"><div·class="hCalendarDayTitle">6</div></td><td·class="hCalendarDay"><div·class="hCalendarDayTitle">7</div></td><td·class="hCalendarDay"><div·class="hCalendarDayTitle">8</div></td><td·class="hCalendarDay"><div·class="hCalendarDayTitle">9</div></td><td·class="hCalendarDay"><div·class="hCalendarDayTitle">10</div></td></tr><tr><td·class="hCalendarDay"><div·class="hCalendarDayTitle">11</div></td><td·class="hCalendarDay"><div·class="hCalendarDayTitle">12</div></td><td·class="hCalendarDayLinked"><div·class="hCalendarDayTitle"><a·href="/rd/date/20100713">13</a></div></td><td·class="hCalendarDay"><div·class="hCalendarDayTitle">14</div></td><td·class="hCalendarDay"><div·class="hCalendarDayTitle">15</div></td><td·class="hCalendarDay"><div·class="hCalendarDayTitle">16</div></td><td·class="hCalendarDay"><div·class="hCalendarDayTitle">17</div></td></tr><tr><td·class="hCalendarDay"><div·class="hCalendarDayTitle">18</div></td><td·class="hCalendarDay"><div·class="hCalendarDayTitle">19</div></td><td·class="hCalendarDay"><div·class="hCalendarDayTitle">20</div></td><td·class="hCalendarDay"><div·class="hCalendarDayTitle">21</div></td><td·class="hCalendarDay"><div·class="hCalendarDayTitle">22</div></td><td·class="hCalendarDay"><div·class="hCalendarDayTitle">23</div></td><td·class="hCalendarDay"><div·class="hCalendarDayTitle">24</div></td></tr><tr><td·class="hCalendarDay"><div·class="hCalendarDayTitle">25</div></td><td·class="hCalendarDay"><div·class="hCalendarDayTitle">26</div></td><td·class="hCalendarDay"><div·class="hCalendarDayTitle">27</div></td><td·class="hCalendarDay"><div·class="hCalendarDayTitle">28</div></td><td·class="hCalendarDayLinked"><div·class="hCalendarDayTitle"><a·href="/rd/date/20100729">29</a></div></td><td·class="hCalendarDayCurrent"><div·class="hCalendarDayTitle">30</div></td><td·class="hCalendarDay"><div·class="hCalendarDayTitle">31</div></td></tr><tr><td·class="hCalendarDayNotInMonth"> </td><td·class="hCalendarDayNotInMonth"> </td><td·class="hCalendarDayNotInMonth"> </td><td·class="hCalendarDayNotInMonth"> </td><td·class="hCalendarDayNotInMonth"> </td><td·class="hCalendarDayNotInMonth"> </td><td·class="hCalendarDayNotInMonth"> </td></tr><tr·class="hCalendarNextPrev"><td·colspan="7"·align="center"><a·href="/rd/"·class="hCalendarNavBar">Today</a></td></tr></table>(LF)
</div>(LF)
············<div·id="searchbar">(LF)
················<h2>Search·This·Site</h2>(LF)
····················<form·id="searchForm"·method="get"·action="/rd/search"(LF)
········style="margin:·0;·padding:·0"·onsubmit="return·validateSearch(this)">(LF)
········<p>(LF)
··········<input·type="text"·id="q"·name="q"·size="10"·class="text·small"(LF)
··············maxlength="255"·value=""·/>(LF)
····················<input·type="submit"·class="button"·value="Search"·id="searchbutton"·/>(LF)
········</p>(LF)
····</form>(LF)
····<script·type="text/javascript">(LF)
········function·validateSearch(form)·{(LF)
············if·(form.q.value·==·"")·{(LF)
················alert("Please·enter·a·search·term·to·continue.");(LF)
················form.q.focus();(LF)
················return·false;(LF)
············}(LF)
············return·true;(LF)
········}(LF)
····</script>(LF)
············</div>(LF)
(LF)
············<h2>Recent·Entries</h2>(LF)
···························<ul·class="rEntriesList">(LF)
··········<li·class="recentposts"><a·href="http://raibledesigns.com/rd/entry/jess_and_lili_s_legendary">Jess·and·Lili's·Legendary·Wedding·on·The·Lost·Coast</a></li>(LF)
··········<li·class="recentposts"><a·href="http://raibledesigns.com/rd/entry/scaling_flash_movies_to_match">Scaling·Flash·Movies·to·match·Browser·Zoom·Levels</a></li>(LF)
··········<li·class="recentposts"><a·href="http://raibledesigns.com/rd/entry/my_summer_vacation_in_montana1">My·Summer·Vacation·in·Montana</a></li>(LF)
··········<li·class="recentposts"><a·href="http://raibledesigns.com/rd/entry/another_fun_father_s_day">Another·Fun·Father's·Day·at·The·Great·Sand·Dunes</a></li>(LF)
··········<li·class="recentposts"><a·href="http://raibledesigns.com/rd/entry/my_incredible_trip_to_ireland">My·Incredible·Trip·to·Ireland</a></li>(LF)
··········<li·class="recentposts"><a·href="http://raibledesigns.com/rd/entry/presentations_from_the_irish_software">My·Presentations·from·The·Irish·Software·Show·2010</a></li>(LF)
··········<li·class="recentposts"><a·href="http://raibledesigns.com/rd/entry/a_nice_riding_weekend_before">A·Nice·Riding·Weekend·before·heading·to·the·Emerald·Isle</a></li>(LF)
··········<li·class="recentposts"><a·href="http://raibledesigns.com/rd/entry/running_selenium_tests_on_sauce">Running·Selenium·Tests·on·Sauce·Labs</a></li>(LF)
··········<li·class="recentposts"><a·href="http://raibledesigns.com/rd/entry/versioning_static_assets_with_urlrewritefilter">Versioning·Static·Assets·with·UrlRewriteFilter</a></li>(LF)
··········<li·class="recentposts"><a·href="http://raibledesigns.com/rd/entry/life_without_tv">Life·without·TV</a></li>(LF)
······</ul>(LF)
(LF)
············<h2>Tag·Cloud</h2>(LF)
············<div·class="tagcloud">(LF)
···············(LF)
···············(LF)
·····································································································································································································································································································································································································································································································································································································································································································································································································································································································································································································································································································································································································································································································································································································································································(LF)
·······························································<a·class="tag·s2"··href="http://raibledesigns.com/rd/tags/abbie"·(LF)
·····················title="27·entries">abbie</a>(LF)
·································<a·class="tag·s4"··href="http://raibledesigns.com/rd/tags/appfuse"·(LF)
·····················title="39·entries">appfuse</a>(LF)
·································<a·class="tag·s0"··href="http://raibledesigns.com/rd/tags/colorado"·(LF)
·····················title="16·entries">colorado</a>(LF)
·································<a·class="tag·s0"··href="http://raibledesigns.com/rd/tags/denver"·(LF)
·····················title="20·entries">denver</a>(LF)
·································<a·class="tag·s0"··href="http://raibledesigns.com/rd/tags/flex"·(LF)
·····················title="18·entries">flex</a>(LF)
·································<a·class="tag·s2"··href="http://raibledesigns.com/rd/tags/grails"·(LF)
·····················title="29·entries">grails</a>(LF)
·································<a·class="tag·s5"··href="http://raibledesigns.com/rd/tags/gwt"·(LF)
·····················title="46·entries">gwt</a>(LF)
·································<a·class="tag·s0"··href="http://raibledesigns.com/rd/tags/hibernate"·(LF)
·····················title="16·entries">hibernate</a>(LF)
·································<a·class="tag·s2"··href="http://raibledesigns.com/rd/tags/jack"·(LF)
·····················title="28·entries">jack</a>(LF)
·································<a·class="tag·s10"··href="http://raibledesigns.com/rd/tags/java"·(LF)
·····················title="70·entries">java</a>(LF)
·································<a·class="tag·s1"··href="http://raibledesigns.com/rd/tags/jsf"·(LF)
·····················title="25·entries">jsf</a>(LF)
·································<a·class="tag·s1"··href="http://raibledesigns.com/rd/tags/linkedin"·(LF)
·····················title="25·entries">linkedin</a>(LF)
·································<a·class="tag·s3"··href="http://raibledesigns.com/rd/tags/maven"·(LF)
·····················title="34·entries">maven</a>(LF)
·································<a·class="tag·s0"··href="http://raibledesigns.com/rd/tags/myfaces"·(LF)
·····················title="16·entries">myfaces</a>(LF)
·································<a·class="tag·s1"··href="http://raibledesigns.com/rd/tags/rails"·(LF)
·····················title="22·entries">rails</a>(LF)
·································<a·class="tag·s0"··href="http://raibledesigns.com/rd/tags/rest"·(LF)
·····················title="16·entries">rest</a>(LF)
·································<a·class="tag·s1"··href="http://raibledesigns.com/rd/tags/skiing"·(LF)
·····················title="22·entries">skiing</a>(LF)
·································<a·class="tag·s3"··href="http://raibledesigns.com/rd/tags/softwaresummit"·(LF)
·····················title="34·entries">softwaresummit</a>(LF)
·································<a·class="tag·s3"··href="http://raibledesigns.com/rd/tags/spring"·(LF)
·····················title="35·entries">spring</a>(LF)
·································<a·class="tag·s1"··href="http://raibledesigns.com/rd/tags/springmvc"·(LF)
·····················title="22·entries">springmvc</a>(LF)
·································<a·class="tag·s2"··href="http://raibledesigns.com/rd/tags/struts2"·(LF)
·····················title="28·entries">struts2</a>(LF)
·································<a·class="tag·s0"··href="http://raibledesigns.com/rd/tags/tapestry"·(LF)
·····················title="21·entries">tapestry</a>(LF)
·································<a·class="tag·s3"··href="http://raibledesigns.com/rd/tags/travel"·(LF)
·····················title="35·entries">travel</a>(LF)
·································<a·class="tag·s7"··href="http://raibledesigns.com/rd/tags/webframeworks"·(LF)
·····················title="59·entries">webframeworks</a>(LF)
·································<a·class="tag·s0"··href="http://raibledesigns.com/rd/tags/wicket"·(LF)
·····················title="19·entries">wicket</a>(LF)
···························</div>(LF)
········</div>(LF)
(LF)
········<div·id="nav">(LF)
············<div·class="wrapper">(LF)
················<h2·class="hide">Navigation</h2>(LF)
················································<ul·class="rCategory">(LF)
····················<li·class="selected"><a·href="http://raibledesigns.com/rd/">All</a></li>(LF)
············································<li><a·href="http://raibledesigns.com/rd/category/The+Web">The·Web</a></li>(LF)
················································<li><a·href="http://raibledesigns.com/rd/category/The+Bus">The·Bus</a></li>(LF)
················································<li><a·href="http://raibledesigns.com/rd/category/Open+Source">Open·Source</a></li>(LF)
················································<li><a·href="http://raibledesigns.com/rd/category/Mac+OS+X">Mac·OS·X</a></li>(LF)
················································<li><a·href="http://raibledesigns.com/rd/category/Roller">Roller</a></li>(LF)
················································<li><a·href="http://raibledesigns.com/rd/category/General">General</a></li>(LF)
················································<li><a·href="http://raibledesigns.com/rd/category/Java">Java</a></li>(LF)
····························</ul>(LF)
················</div>(LF)
········</div>(LF)
····</div><!--·end·content·-->(LF)
(LF)
····<div·id="footer"·class="clearfix">(LF)
········<p>©·1999-2010·Raible·Designs·|·Design·by·<a·href="http://andreasviklund.com">Andreas·Viklund</a></p>(LF)
····</div>(LF)
····<script·type="text/javascript"·src="/wro/all.js"></script>(LF)
····<script·type="text/javascript">(LF)
········SyntaxHighlighter.all();(LF)
········_uacct·=·"UA-141007-1";(LF)
········urchinTracker();(LF)
····</script>(LF)
········<script·type="text/javascript"·charset="utf-8">(LF)
········getTwitters('status_updates',·{·id:·'mraible',·count:·3,·enableLinks:·true,·ignoreReplies:·false,·clearContents:·true,(LF)
············template:·'%text%·<a·href="http://twitter.com/%user_screen_name%/statuses/%id%/">%time%</a>'});(LF)
····</script>(LF)
····</div>(LF)
</body>(LF)
</html>(LF)
(LF)
····(LF)
Done
Total elapsed time: 1 seconds