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

<channel>
	<title>gabriel mcgovern (dot com)</title>
	<atom:link href="http://www.gabrielmcgovern.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.gabrielmcgovern.com/blog</link>
	<description>like butter scraped over too much bread...</description>
	<pubDate>Thu, 07 Aug 2008 17:14:34 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Monica</title>
		<link>http://www.gabrielmcgovern.com/blog/2008/08/07/monica/</link>
		<comments>http://www.gabrielmcgovern.com/blog/2008/08/07/monica/#comments</comments>
		<pubDate>Thu, 07 Aug 2008 17:11:40 +0000</pubDate>
		<dc:creator>gabrielm</dc:creator>
		
		<category><![CDATA[play]]></category>

		<guid isPermaLink="false">http://www.gabrielmcgovern.com/blog/2008/08/07/monica/</guid>
		<description><![CDATA[Pic of monica

]]></description>
			<content:encoded><![CDATA[<p>Pic of monica</p>
<p><a href="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/08/l-640-480-a902e3b8-0360-43c7-add8-7db4fa0edc51.jpeg"><img src="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/08/l-640-480-a902e3b8-0360-43c7-add8-7db4fa0edc51.jpeg" alt="" width="300" height="225" class="alignnone size-full wp-image-364" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielmcgovern.com/blog/2008/08/07/monica/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The joy of compression</title>
		<link>http://www.gabrielmcgovern.com/blog/2008/08/05/the-joy-of-compression/</link>
		<comments>http://www.gabrielmcgovern.com/blog/2008/08/05/the-joy-of-compression/#comments</comments>
		<pubDate>Wed, 06 Aug 2008 01:24:44 +0000</pubDate>
		<dc:creator>gabrielm</dc:creator>
		
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.gabrielmcgovern.com/blog/?p=791</guid>
		<description><![CDATA[I gave a little talk at our monthly &#8220;All Developers Meeting&#8221; today. The topic was web optimization. Recently we setup http compression on our servers and I decided to take a look at how much bandwidth we save via all of our optimization/compression techniques. Using our academic programs page as a sample, I ran the [...]]]></description>
			<content:encoded><![CDATA[<p>I gave a little talk at our monthly &#8220;All Developers Meeting&#8221; today. The topic was web optimization. Recently we setup http compression on our servers and I decided to take a look at how much bandwidth we save via all of our optimization/compression techniques. Using our <a href="http://www.pcc.edu/programs/">academic programs page</a> as a sample, I ran the numbers and found that we are saving from 1-6.5 terabytes annually. Here are my notes for the presentation:</p>
<h4>No Optimization - Huge/bad/gross</h4>
<p>No css or styles inline. Tables for layout. Scripts directly on page. Won&#8217;t even  bother showing an example.</p>
<h4>Step 1. Separate code<strong> - 283 KB</strong></h4>
<p>Style is separated from content (separate .css). Behavior is separated from content (separate .js). Images are used wisely ( for instance 1px background image that repeats horizontally)</p>
<h4>Step 2. Compress images, then compress agai<strong>n - 239 KB</strong> [44K less]</h4>
<p>Choose the correct file type for each image (JPG for photos, PNG &gt; GIF). Compress each image (<a href="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/08/photoshop-png.gif">using photoshop</a>). PNG images can be compressed again (<a href="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/08/pngslim-png.gif">pngslim removes meta and shuffles bits - like defrag</a>)</p>
<h4>Step 3. Minify styles and scripts<strong> - 158 KB</strong> [81K less]</h4>
<p>View compressed script library, or layout css. For Javascript we use <a href="http://www.crockford.com/javascript/jsmin.html">JSMin</a> (removes comments white space. Need well-formed code.) There are other algorithms like <a href="http://dean.edwards.name/weblog/2007/04/packer3/">packer</a>, but they requires non-trivial client-side processing time to uncompress the code. For CSS we use <a href="http://csstidy.sourceforge.net/">CSStidy</a> ( removes white space., compresses colors, combines styles)</p>
<h4>Step 4. Enable HTTP compression<strong> - 70 KB</strong> [88K less]</h4>
<p>Note that this is our live version! Text is compressed by server and uncompressed by browser. Unsupported browsers will receive uncompressed version (<a href="http://en.wikipedia.org/wiki/HTTP_compression">wiki</a>). <a href="http://www.http-compression.com/#msie">Browser support:</a> Internet Explorer (&gt;= 4.0) FireFox (all) Netscape (&gt;= <a id="black" name="netscape">4.06</a>) Opera (&gt;<a id="black2" name="opera">=5.12)</a> Images are not compressed further (doesn&#8217;t result in smaller size).<br />
Minified files <a href="http://www.julienlecomte.net/blog/2007/08/13/">compress better then original</a>.</p>
<h3>Total Optimization</h3>
<p>283 KB original<br />
70 KB compressed<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
<strong>213 KB saved </strong>[That over a 2/3 savings]</p>
<p><img class="alignnone size-full wp-image-793" title="visitors-overview" src="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/08/visitors-overview.png" alt="" width="500" height="216" /></p>
<h4>And it adds up quickly!</h4>
<p>Over the past year (Aug 4, 2007 - Aug 4. 2008) the site received:</p>
<ul>
<li>32,550,230  Pageviews  from</li>
<li>2,213,198  Absolute Unique Visitors</li>
</ul>
<h4>If 13KB  				  was saved per pageview, then:</h4>
<p>213 kilobytes * 32,550,230 pageviews = <strong>6.5 terabytes of bandwidth saved </strong></p>
<h4>Or, with best-possible caching:</h4>
<p>First page: 213 kilobytes * 2,213,198pages = 449.6 gigabytes<br />
Subsequent pages: (32,550,230-2,213,198) pages * 20KB (html+images) 				  = 578.6  gigabytes</p>
<h3><strong>So&#8230;</strong></h3>
<p>Between <strong>1 and 6.5TB saved annually</strong> (not to mention the amount of time saved for our end-users)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielmcgovern.com/blog/2008/08/05/the-joy-of-compression/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A List Apart - the survey</title>
		<link>http://www.gabrielmcgovern.com/blog/2008/07/29/a-list-apart-the-survey/</link>
		<comments>http://www.gabrielmcgovern.com/blog/2008/07/29/a-list-apart-the-survey/#comments</comments>
		<pubDate>Tue, 29 Jul 2008 19:26:15 +0000</pubDate>
		<dc:creator>gabrielm</dc:creator>
		
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.gabrielmcgovern.com/blog/?p=790</guid>
		<description><![CDATA[A List Apart is currently conducting their yearly survey:



The Survey, 2008
Calling all designers, developers, information architects, project managers, writers, editors, marketers, and everyone else who makes websites. It is time once again to pool our information so as to begin sketching a true picture of the way our profession is practiced worldwide.
All web professionals should [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alistapart.com/">A List Apart</a> is currently conducting their yearly survey:</p>
<div class="item">
<blockquote>
<h4 class="title"><a href="http://www.alistapart.com/"><img class="alignright size-full wp-image-789" title="survey-logo-2008" src="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/07/survey-logo-2008.gif" alt="" width="220" height="128" /></a></h4>
<h4 class="title"><a title="The Survey, 2008" href="http://www.alistapart.com/articles/survey2008">The Survey, 2008</a></h4>
<p>Calling all designers, developers, information architects, project managers, writers, editors, marketers, and everyone else who makes websites. It is time once again to pool our information so as to begin sketching a true picture of the way our profession is practiced worldwide.</p></blockquote>
<p>All web professionals should take a few minutes to help them get a bigger dataset.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielmcgovern.com/blog/2008/07/29/a-list-apart-the-survey/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Wordpress iPhone App Attack</title>
		<link>http://www.gabrielmcgovern.com/blog/2008/07/22/wordpress-iphone-app-attack/</link>
		<comments>http://www.gabrielmcgovern.com/blog/2008/07/22/wordpress-iphone-app-attack/#comments</comments>
		<pubDate>Wed, 23 Jul 2008 03:55:19 +0000</pubDate>
		<dc:creator>gabrielm</dc:creator>
		
		<category><![CDATA[play]]></category>

		<guid isPermaLink="false">http://www.gabrielmcgovern.com/blog/2008/07/22/wordpress-iphone-app-attack/</guid>
		<description><![CDATA[This post was created using the new iPhone Wordpress application. A few days ago, I posted about my excitement. Now that I have had a chance to use it - I can say that I am not disappointed. 
It is available now in the app store and cost the same as wordpress.org - absolutly nothing!
The [...]]]></description>
			<content:encoded><![CDATA[<p>This post was created using the new iPhone Wordpress application. A few days ago, I posted about my excitement. Now that I have had a chance to use it - I can say that I am not disappointed. </p>
<p>It is available now in the app store and cost the same as wordpress.org - absolutly nothing!</p>
<p>The interface is refreshingly simple and easy to use. There does not seem to be a WYSIWYG editor, but <b>basic</b> HTML should still work.</p>
<p>You can even include images stored on your phone. The final image below shows the interface. The others are just random images that were on the phone.  </p>
<p><a href="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/07/p-640-480-0d6905ea-659c-409b-bbf8-a62937a853bb.jpeg"><img src="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/07/p-640-480-0d6905ea-659c-409b-bbf8-a62937a853bb.jpeg" alt="photo" width="225" height="300" class="alignnone size-full wp-image-364" /></a></p>
<p><a href="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/07/p-480-321-19bbcca3-f781-43f0-a600-672c8c9ae402.jpeg"><img src="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/07/p-480-321-19bbcca3-f781-43f0-a600-672c8c9ae402.jpeg" alt="photo" width="200" height="300" class="alignnone size-full wp-image-364" /></a></p>
<p><a href="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/07/p-480-343-33d24973-94ed-4871-9f9b-0944c5ace71b.jpeg"><img src="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/07/p-480-343-33d24973-94ed-4871-9f9b-0944c5ace71b.jpeg" alt="photo" width="214" height="300" class="alignnone size-full wp-image-364" /></a></p>
<p><a href="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/07/p-480-343-243f6a8e-7b70-46d2-860b-f525cc0ff7a5.jpeg"><img src="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/07/p-480-343-243f6a8e-7b70-46d2-860b-f525cc0ff7a5.jpeg" alt="photo" width="214" height="300" class="alignnone size-full wp-image-364" /></a></p>
<p><a href="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/07/p-480-320-1cd72349-d449-483e-9a88-48874f6c1cef.jpeg"><img src="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/07/p-480-320-1cd72349-d449-483e-9a88-48874f6c1cef.jpeg" alt="photo" width="200" height="300" class="alignnone size-full wp-image-364" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielmcgovern.com/blog/2008/07/22/wordpress-iphone-app-attack/feed/</wfw:commentRss>
		</item>
		<item>
		<title>RSS autodiscovery on every page (of a static site)</title>
		<link>http://www.gabrielmcgovern.com/blog/2008/07/10/rss-autodiscovery/</link>
		<comments>http://www.gabrielmcgovern.com/blog/2008/07/10/rss-autodiscovery/#comments</comments>
		<pubDate>Fri, 11 Jul 2008 02:13:05 +0000</pubDate>
		<dc:creator>gabrielm</dc:creator>
		
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.gabrielmcgovern.com/blog/?p=777</guid>
		<description><![CDATA[So you have some feeds and want browsers to be able to find them using autodiscovery.
The problem
Unfortunatly, you have static pages and would have to update each one to add the &#60;link&#62; tag. At PCC, we have a site composed of tens-of-thousands of pages. Some are static, some are dynamic applications we can alter, some [...]]]></description>
			<content:encoded><![CDATA[<p>So you have some feeds and want browsers to be able to find them using <a href="http://www.rssboard.org/rss-autodiscovery">autodiscovery</a>.</p>
<h3>The problem</h3>
<p>Unfortunatly, you have static pages and would have to update each one to add the &lt;link&gt; tag. At PCC, we have a site composed of tens-of-thousands of pages. Some are static, some are dynamic applications we can alter, some are closed vendor products.</p>
<h3>The solution</h3>
<p>Like I said - we have many different types of pages. However, they all use the same JavaScript library!</p>
<p>JS is really good at inserting content into the page. We use the <a href="http://jquery.com/">jQuery library</a>, so adding a feed is as easy as:</p>
<blockquote><p><code><br />
/* add feed autofind! */<br />
$("head").append('&lt;link rel="alternate" type="application/rss+xml" title="News Releases | Portland Community College" href="http://www.pcc.edu/about/feeds/news/" /&gt;');</code></p></blockquote>
<p>We can now add/remove feeds at a later date without opening every page on the site. If desired, the script could check the URL and only display the feed on appropriate pages, but for now lets put them everywhere.</p>
<h3>Final Thoughts</h3>
<p>I looked around the web, but didn&#8217;t see much discussion on this meathod. It seems to work in all modern browsers, but let me know if you find any problems.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielmcgovern.com/blog/2008/07/10/rss-autodiscovery/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Wordpress on the iPhone</title>
		<link>http://www.gabrielmcgovern.com/blog/2008/07/10/wordpress-on-the-iphone/</link>
		<comments>http://www.gabrielmcgovern.com/blog/2008/07/10/wordpress-on-the-iphone/#comments</comments>
		<pubDate>Fri, 11 Jul 2008 01:28:29 +0000</pubDate>
		<dc:creator>gabrielm</dc:creator>
		
		<category><![CDATA[play]]></category>

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

		<guid isPermaLink="false">http://www.gabrielmcgovern.com/blog/?p=774</guid>
		<description><![CDATA[Matt Mullenweg of wordpress fame just announced:
&#8220;We&#8217;re doing an iPhone-native WordPress client, check out the screencast here. It will work for both .com and .org, be available FREE from the App Store, and best of all it&#8217;s going to be completely Open Source, which as far as I know no current apps in the store [...]]]></description>
			<content:encoded><![CDATA[<p>Matt Mullenweg of wordpress fame <a href="http://ma.tt/2008/07/iphone-native-wordpress-client/">just announced</a>:</p>
<p style="padding-left: 30px;">&#8220;We&#8217;re doing an iPhone-native WordPress client, check out the screencast here. It will work for both .com and .org, be available FREE from the App Store, and best of all it&#8217;s going to be completely Open Source, which as far as I know no current apps in the store are.&#8221;</p>
<p><img class="alignright size-thumbnail wp-image-775" title="iPhone Wordpress Interface" src="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/07/ss1-128x128.jpg" alt="" width="128" height="128" />For me this is the &#8220;killer app&#8221; that I have been waiting for. Until now - you had to edit your blog through the safari browser. It worked, but it was not easy. I will post a review as soon as it becomes available in the app store.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielmcgovern.com/blog/2008/07/10/wordpress-on-the-iphone/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Safely using FeedBurner</title>
		<link>http://www.gabrielmcgovern.com/blog/2008/07/09/safely-using-feedburner/</link>
		<comments>http://www.gabrielmcgovern.com/blog/2008/07/09/safely-using-feedburner/#comments</comments>
		<pubDate>Thu, 10 Jul 2008 01:28:31 +0000</pubDate>
		<dc:creator>gabrielm</dc:creator>
		
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.gabrielmcgovern.com/blog/?p=776</guid>
		<description><![CDATA[So you have some feeds and you want to track subscriptions using FeedBurner.
The problem?
FeedBurner is a great service and probably will stay that way since it was recently acuired by google. However, it is still a 3rd-party service and that&#8217;s somthing you should always be worried about.
You see, when someone subscribes to a burned feed, [...]]]></description>
			<content:encoded><![CDATA[<p>So you have some feeds and you want to track subscriptions using <a href="http://www.feedburner.com/">FeedBurner</a>.</p>
<h3>The problem?</h3>
<p>FeedBurner is a great service and probably will stay that way since it was recently acuired by google. However, it is still a 3rd-party service and that&#8217;s somthing you should always be worried about.</p>
<p>You see, when someone subscribes to a burned feed, they will be pointing the agregator to: <code>&lt;feeds.feedburner.com/your-feed&gt;</code>. This means that you will loose all of your subscribers if any of the following happens:</p>
<ul>
<li>FeedBurner goes down, closes shop, or starts charging an outrageous fee. <em>(unlikely) </em></li>
<li>The person who set up the account forgets the password, or becomes a disgruntled employee. <em>(possible)</em></li>
<li>A better service comes along and you decide to switch. <em>(very likley)</em></li>
</ul>
<h3>The solution</h3>
<p>The simple solution is to have users subscribe to a feed on your domain.</p>
<ol>
<li>Create a folder structure for the feeds - like: /feeds/news/ and /feeds/videos.</li>
<li>In each folder create an index page using you favorite server-side language - index.php, index.cfm, etc. This gives us added flexibility. We can even change the language at a later date!</li>
<li>Use this page to mirror the FeedBurner feed. below is an example in ColdFusion. In PHP you will want to look into cURL:</li>
</ol>
<blockquote><p>
<code>&lt;!----------------------------------------------------------------------------------------------------<br />
-  This is a placeholder for a feed.<br />
-  Make sure to link to the folder and not this .cfm page for even more flexibility.<br />
-  Created:   2008-04-09 Gabriel McGovern<br />
-  Modified:<br />
-----------------------------------------------------------------------------------------------------&gt;<br />
<code><br />
&lt;cfhttp url="http://feeds.feedburner.com/pcc-videos/"&gt;<br />
&lt;cfoutput&gt;#cfhttp.filecontent#&lt;/cfoutput&gt;<br />
</code>
</p></blockquote>
<h3>Examples</h3>
<p>Check out <a href="http://www.pcc.edu/about/feeds/">the feeds we offer for Portland Community College</a>. Each is being run through FeedBurner, but you subscribe to a URL in our domain. If we decide to change services - all we have to do is update the index page. You as a subscriber would never even have to know.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielmcgovern.com/blog/2008/07/09/safely-using-feedburner/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Fireworks</title>
		<link>http://www.gabrielmcgovern.com/blog/2008/07/08/fireworks/</link>
		<comments>http://www.gabrielmcgovern.com/blog/2008/07/08/fireworks/#comments</comments>
		<pubDate>Tue, 08 Jul 2008 20:44:24 +0000</pubDate>
		<dc:creator>gabrielm</dc:creator>
		
		<category><![CDATA[play]]></category>

		<guid isPermaLink="false">http://www.gabrielmcgovern.com/blog/?p=746</guid>
		<description><![CDATA[For the forth, we went down to the waterfront to watch the fireworks. Portland puts on a pretty good show. I forgot to bring a camera - but found that the iPhone takes pretty good firework shots:










]]></description>
			<content:encoded><![CDATA[<p>For the forth, we went down to the waterfront to watch the fireworks. Portland puts on a pretty good show. I forgot to bring a camera - but found that the iPhone takes pretty good firework shots:</p>

<a href='http://www.gabrielmcgovern.com/blog/2008/07/08/fireworks/img_0602/' title='img_0602'><img src="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/07/img_0602-128x128.jpg" width="128" height="128" class="attachment-thumbnail" alt="" /></a>
<a href='http://www.gabrielmcgovern.com/blog/2008/07/08/fireworks/img_0632/' title='img_0632'><img src="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/07/img_0632-128x128.jpg" width="128" height="128" class="attachment-thumbnail" alt="" /></a>
<a href='http://www.gabrielmcgovern.com/blog/2008/07/08/fireworks/img_0639/' title='img_0639'><img src="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/07/img_0639-128x128.jpg" width="128" height="128" class="attachment-thumbnail" alt="" /></a>
<a href='http://www.gabrielmcgovern.com/blog/2008/07/08/fireworks/img_0647/' title='img_0647'><img src="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/07/img_0647-128x128.jpg" width="128" height="128" class="attachment-thumbnail" alt="" /></a>
<a href='http://www.gabrielmcgovern.com/blog/2008/07/08/fireworks/img_0662/' title='img_0662'><img src="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/07/img_0662-128x128.jpg" width="128" height="128" class="attachment-thumbnail" alt="" /></a>
<a href='http://www.gabrielmcgovern.com/blog/2008/07/08/fireworks/img_0665/' title='img_0665'><img src="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/07/img_0665-128x128.jpg" width="128" height="128" class="attachment-thumbnail" alt="" /></a>
<a href='http://www.gabrielmcgovern.com/blog/2008/07/08/fireworks/img_0675/' title='img_0675'><img src="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/07/img_0675-128x128.jpg" width="128" height="128" class="attachment-thumbnail" alt="" /></a>
<a href='http://www.gabrielmcgovern.com/blog/2008/07/08/fireworks/img_0689/' title='img_0689'><img src="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/07/img_0689-128x128.jpg" width="128" height="128" class="attachment-thumbnail" alt="" /></a>

]]></content:encoded>
			<wfw:commentRss>http://www.gabrielmcgovern.com/blog/2008/07/08/fireworks/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Obama has a posse</title>
		<link>http://www.gabrielmcgovern.com/blog/2008/07/03/obama-has-a-posse/</link>
		<comments>http://www.gabrielmcgovern.com/blog/2008/07/03/obama-has-a-posse/#comments</comments>
		<pubDate>Thu, 03 Jul 2008 19:53:59 +0000</pubDate>
		<dc:creator>gabrielm</dc:creator>
		
		<category><![CDATA[play]]></category>

		<guid isPermaLink="false">http://www.gabrielmcgovern.com/blog/?p=744</guid>
		<description><![CDATA[Looks like Andre isn&#8217;t the only one. Spotted this on the corner of 13th and Nehalem St:

]]></description>
			<content:encoded><![CDATA[<p>Looks like <a href="http://en.wikipedia.org/wiki/Andr%C3%A9_the_Giant_Has_a_Posse">Andre</a> isn&#8217;t the only one. Spotted this on the corner of <a href="http://maps.google.com/?ie=UTF8&amp;t=h&amp;ll=45.465667,-122.653131&amp;spn=0.000657,0.001175&amp;z=20&amp;layer=c&amp;cbll=45.46567,-122.65303&amp;panoid=C8NTUthCa6I8LB8G6qCX3Q">13th and Nehalem St</a>:</p>
<p><a href="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/07/obama.jpg"><img class="size-medium wp-image-745 imgcenter" title="obama" src="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/07/obama-337x450.jpg" alt="" width="337" height="450" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielmcgovern.com/blog/2008/07/03/obama-has-a-posse/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Extracting DVD Subtitles</title>
		<link>http://www.gabrielmcgovern.com/blog/2008/07/02/extracting-dvd-subtitles/</link>
		<comments>http://www.gabrielmcgovern.com/blog/2008/07/02/extracting-dvd-subtitles/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 20:04:17 +0000</pubDate>
		<dc:creator>gabrielm</dc:creator>
		
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.gabrielmcgovern.com/blog/?p=741</guid>
		<description><![CDATA[Problem

Our foundation has a great little video produced by an outside complany and they want us to put it online, but&#8230;
We require that all online video includes captioning for accessibility (dfxp format) and&#8230;
They only have a DVD of the video with captions (not original text).

Solution
Well we could re-transcribe the video, but that seems like a [...]]]></description>
			<content:encoded><![CDATA[<h3><img class="alignright size-full wp-image-743" title="sub-ocr" src="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/07/sub-ocr.png" alt="" width="300" height="201" />Problem</h3>
<ul>
<li>Our <a href="http://www.pcc.edu/about/foundation/">foundation has a great little video</a> produced by an outside complany and they want us to put it online, but&#8230;</li>
<li>We require that all online video includes captioning for accessibility (<a href="http://www.gabrielmcgovern.com/blog/2007/10/10/highedwebdev2007/">dfxp format</a>) and&#8230;</li>
<li>They only have a DVD of the video with captions (not original text).</li>
</ul>
<h3>Solution</h3>
<p>Well we could re-transcribe the video, but that seems like a lot of redundant work since someone already took the time to make the captions for the DVD. The only problem is that DVD captions are stored as bitmap images rather then acctual timed- text.</p>
<div class="section">
<h4>Step 1: OCR the DVD subtitles</h4>
<p>OCR stands for &#8220;Optical Character Recognition&#8221;. Your scanner may have this for decoding paper documents. Because the subs are actually images - OCR is needed here too. There is a cool little application called <a href="http://zuggy.wz.cz/">SubRip</a> that does exactly what we need.</p>
<p>You point to the correct DVD file and it will attempt to transform the subtitle images into text. Since subtitles can come in all different fonts, languages and colors - the process is not completly automatic. From time to time it will ask you to identify certian charater(s). Think <em>L</em> vs. <em>I</em> and <em>m</em> vs. <em>rn</em>.</p>
<h4>Step 2: Convert the subs to dfxp</h4>
<p>SubRip does a pretty good job, but you will still need to clean up the output and transform it into the correct format.</p>
<p>SubRip outputs an .srt file where the captions look like:<br />
<code>1<br />
00:00:06,373 --&gt; 00:00:08,933<br />
Whether we realize it or not, we need<br />
each other.</code></p>
<p>We need them to be in dfxp format like:<br />
<code>&lt;p begin="00:00:06.37" end="00:00:08.93"&gt;Whether we realize it or not, we need each other.&lt;/p&gt;</code></p>
<p>This is a job for regular expressions!</p>
<ul>
<li>Replace the entry number (1,2,3) with a marker: <code>/n/d+/n</code> becomes <code>~</code></li>
<li>Then grab the srt timecode and text info:<br />
<code>~(\d\d:\d\d:\d\d),(\d\d)\d --&gt; (\d\d:\d\d:\d\d),(\d\d)\d<br />
([^~]+)</code></li>
<li>This becomes:<br />
<code>&lt;p begin="$1.$2" end="$3.$4"&gt;&lt;span tts:fontStyle="italic" &gt;Speaker&lt;/span&gt;&lt;br/&gt;$5&lt;/p&gt;</code></li>
</ul>
<h4><img class="alignright size-full wp-image-742" title="l-vs-i" src="http://www.gabrielmcgovern.com/blog/wp-content/uploads/2008/07/l-vs-i.png" alt="" width="300" height="200" />Step 3: Check your work</h4>
<p>Now, you just need to make sure that it all worked as expected.</p>
<p>For this example, I found that the captions were actually off about 4 seconds. This could have been due to editing differences between this DVD and my final FLV.</p>
<p>I also found some minor mistakes that the OCR had created.</p>
<p>Luckily, both of these wer easy to fix manually.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.gabrielmcgovern.com/blog/2008/07/02/extracting-dvd-subtitles/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
