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

<channel>
	<title>Steve Heffernan's Blog &#187; Websites</title>
	<atom:link href="http://blog.steveheffernan.com/category/websites/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.steveheffernan.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Tue, 25 May 2010 16:25:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Tutorial: How to Build an HTML5 Video Player</title>
		<link>http://blog.steveheffernan.com/2010/04/how-to-build-an-html5-video-player/</link>
		<comments>http://blog.steveheffernan.com/2010/04/how-to-build-an-html5-video-player/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 23:54:45 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Video Encoding]]></category>
		<category><![CDATA[Websites]]></category>

		<guid isPermaLink="false">http://blog.steveheffernan.com/?p=350</guid>
		<description><![CDATA[UPDATE: This tutorial has been rolled into an open source html5 video player.
This is a tutorial on building an HTML5 video player in Javascript. It&#8217;s meant to give you a basic understanding of the different options you have with the new video tag in HTML5, and the javascript needed to create some of the typical [...]]]></description>
			<content:encoded><![CDATA[<p>UPDATE: This tutorial has been rolled into an open source <a href="http://videojs.com">html5 video player</a>.</p>
<p>This is a tutorial on building an HTML5 video player in Javascript. It&#8217;s meant to give you a basic understanding of the different options you have with the new video tag in HTML5, and the javascript needed to create some of the typical video controls you&#8217;d find in other players. It&#8217;s library agnostic, meaning you don&#8217;t need a library like jQuery to create it, however once you understand how everything works it can definitely be simplified/improved on. I&#8217;m always open for feedback if you have suggestions.</p>
<p>
<h3><a href="http://www.steveheffernan.com/html5-video-player/demo-video-player.html" target="_blank">View the final result.</a></h3>
</p>
<p><span id="more-350"></span></p>
<h2>Setup</h2>
<p>Download these movies for testing.<br />
<a href="http://zencoder-demo.s3.amazonaws.com/trailer_test.mp4">trailer_test.mp4</a><br />
<a href="http://zencoder-demo.s3.amazonaws.com/trailer_test.ogg">trailer_test.ogg</a><br />
(c) copyright Blender Foundation | <a href="http://www.bigbuckbunny.org">www.bigbuckbunny.org</a>
</p>
<p>To speed things along, copy the source of the following link.</p>
<p><a href="http://www.steveheffernan.com/html5-video-player/start.html" target="_blank">start.html </a></p>
<p>&#8230;and create a file in the same folder as the downloaded movies. The page has the html for the video tag, controls, and some basic javascript variables set up. Hopefully it&#8217;s straight forward enough without going into too much more detail. Afterwards you can easily restyle everything to make it look however you want. </p>
<h2>HTML5 Video Tag</h2>
<p>The &lt;video&gt; tag is basically a new tag introduced in HTML5 that allows you to embed video in a web page without having to use Flash or another embeddable plugin, and instead use a player that&#8217;s built into the browser. It&#8217;s only supported by advanced browsers like Firefox, Safari, Chrome, and Opera. Not Internet Explorer, though IE9 is supposed to support it. For your video to work in all the advanced browsers, it has to be converted into at least 2 formats: h.264 (Safari and Chrome) and Ogg (Firefox and Opera). VP8, a new codec from On2/Google, may eventually remove the need for multiple versions, but that could take some time.</p>
<p>I&#8217;ve already set up the video tag in the example code, and I&#8217;m not going to go into the specific attributes of the video tag beyond what&#8217;s needed for this tutorial, but if you&#8217;re looking for some good resources on using the video tag specifically, start with Kroc Camen&#8217;s <a href="http://camendesign.com/code/video_for_everybody">Video for Everybody</a>.</p>
<p>Ok, getting on to it.</p>
<h2>Controller Setup</h2>
<p>The controller html has already been created, but it needs to be positioned and revealed. The showController method is simple, but can be expanded on if you want to add effects.</p>
<pre class="brush: jscript;">
function showController(){
  controls.style.display = &quot;block&quot;;
}
</pre>
<p>The positionController function moves the controller to the bottom left of the video and makes it as wide as the video.</p>
<pre class="brush: jscript;">
function positionController(){
  controls.style.top = (video.offsetHeight - controls.offsetHeight) + &quot;px&quot;;
  controls.style.left = &quot;0px&quot;;
  controls.style.width = video.offsetWidth + &quot;px&quot;;
  sizeProgressBar();
}
</pre>
<p>We also want to resize the progress section so the controls fill the width of the video. The numbers being subtracted from the widths are specific to the example design, and will change if you create your own.</p>
<pre class="brush: jscript;">
function sizeProgressBar(){
  progressControl.style.width = (controls.offsetWidth - 125) + &quot;px&quot;;
  progressHolder.style.width = (progressControl.offsetWidth - 80) + &quot;px&quot;;
}
</pre>
<p>Once these functions are created we need to add them to the bodyLoaded function. The show function has to come first for the positioning to work.</p>
<pre class="brush: jscript;">
var bodyLoaded = function(){
  ...
  showController();
  positionController();
}
</pre>
<h2>Play/Pause</h2>
<p>To play and pause the video, we can use the play() and pause() methods of the video element. Create functions that will call these methods.</p>
<pre class="brush: jscript;">
function playVideo(){
  video.play();
  playControl.className = &quot;pause control&quot;;
}

function pauseVideo(){
  video.pause();
  playControl.className = &quot;play control&quot;;
}
</pre>
<p>I&#8217;ve also added lines that update the class of the play button to switch it between the play and pause icons.</p>
<p>Next we have to add an event listener for the play button to handle when a user clicks it. We need to add it to bodyLoaded method so it waits for the play button to be available. We&#8217;ll use the &#8216;paused&#8217; attribute to decide which method to call.</p>
<pre class="brush: jscript;">
playControl.addEventListener(&quot;click&quot;, function(){
  if (video.paused) {
    playVideo();
  } else {
    pauseVideo();
  }
}, true);
</pre>
<h2>Play Progress</h2>
<p>Next we&#8217;ll want to show the progress of the video as it plays. To do this we&#8217;ll need to set an interval that continually updates the progress bar width. We only want the interval to run when the video is playing however, so we&#8217;ll also create a function that stops the interval, that will be called whenever the video is paused.</p>
<pre class="brush: jscript;">
function trackPlayProgress(){
  playProgressInterval = setInterval(updatePlayProgress, 33);
}

function stopTrackingPlayProgress(){
  clearInterval(playProgressInterval);
}
</pre>
<p>The updatePlayProgress function uses the video&#8217;s current time to total time (duration) ratio, to resize the progress bar based on the progress bar holder&#8217;s width. The &#8220;- 2&#8243; is to account for the border on the progressHolder.</p>
<pre class="brush: jscript;">
function updatePlayProgress(){
  playProgressBar.style.width = ((video.currentTime / video.duration) * (progressHolder.offsetWidth - 2)) + &quot;px&quot;;
}
</pre>
<p>Now that we have these functions in place, we need to add them to the play and pause functions to trigger them.</p>
<pre class="brush: jscript;">
function playVideo(){
  ...
  trackPlayProgress();
}

function pauseVideo(){
  ...
  stopTrackingPlayProgress();
}
</pre>
<p>We&#8217;ll also add the updatePlayProgress method to the sizeProgressBar method, so whenever the progress bar is resized, the current progress is updated as well.</p>
<pre class="brush: jscript;">
function sizeProgressBar(){
  ...
  updatePlayProgress();
}
</pre>
<h2>Time Display</h2>
<p>Next we&#8217;ll want to update the time display (to the right of the progress bar) to show the exact time through the video. I&#8217;m using the formatTime method to convert seconds into a MM:SS format.</p>
<pre class="brush: jscript;">
function updateTimeDisplay(){
  currentTimeDisplay.innerHTML = formatTime(video.currentTime);
  if (video.duration) durationDisplay.innerHTML = formatTime(video.duration);
}

function formatTime(seconds) {
  seconds = Math.round(seconds);
  minutes = Math.floor(seconds / 60);
  minutes = (minutes &gt;= 10) ? minutes : &quot;0&quot; + minutes;
  seconds = Math.floor(seconds % 60);
  seconds = (seconds &gt;= 10) ? seconds : &quot;0&quot; + seconds;
  return minutes + &quot;:&quot; + seconds;
}
</pre>
<p>After we have these functions, we need to add them to updateTimeDisplay to the updatePlayProgress method, so it&#8217;s called at the same time.</p>
<pre class="brush: jscript;">
function updatePlayProgress(){
  ...
  updateTimeDisplay();
}
</pre>
<h2>Progress Bar Scrubbing</h2>
<p>Now that we&#8217;re showing the progress through the video, we want to make it so you can click and drag on the progress bar to move around in the video&#8217;s timeline. For this we&#8217;ll need a few new functions.</p>
<p>The setPlayProgress uses a click X value to tell where on the bar the user clicked or dragged. The Math.max and Math.min functions are used to make sure the video time is never set to a point outside of 0-100% of the duration.</p>
<pre class="brush: jscript;">
function setPlayProgress(clickX) {
  var newPercent = Math.max(0, Math.min(1, (clickX - findPosX(progressHolder)) / progressHolder.offsetWidth));
  video.currentTime = newPercent * video.duration
  playProgressBar.style.width = newPercent * (progressHolder.offsetWidth - 2)  + &quot;px&quot;;
  updateTimeDisplay();
}
</pre>
<p>The blockTextSelection and unblockTextSelection methods are used so when the user is dragging the mouse, it&#8217;s not selecting the elements under it.</p>
<pre class="brush: jscript;">
function blockTextSelection(){
  document.body.focus();
  document.onselectstart = function () { return false; };
}

function unblockTextSelection(){
  document.onselectstart = function () { return true; };
}
</pre>
<p>The findPosX function is used to determine an object&#8217;s x value in relation to the edge of the page. This is required to compare the user&#8217;s click to the location of the progress bar.</p>
<pre class="brush: jscript;">
function findPosX(obj) {
  var curleft = obj.offsetLeft;
  while(obj = obj.offsetParent) {
    curleft += obj.offsetLeft;
  }
  return curleft;
}
</pre>
<p>Now that we have these functions, we need to add a couple of event listeners (in the bodyLoaded function) to handle when a user clicks and drags on the progress bar. We&#8217;ll use the videoWasPlaying variable to keep track of the status of the video, so we can pause the video while the user is scrubbing, and start it again when they stop if it was playing before.</p>
<pre class="brush: jscript;">
progressHolder.addEventListener(&quot;mousedown&quot;, function(){
  stopTrackingPlayProgress();

  if (video.paused) {
    videoWasPlaying = false;
  } else {
    videoWasPlaying = true;
    video.pause();
  }

  blockTextSelection();
  document.onmousemove = function(e) {
    setPlayProgress(e.pageX);
  }

  document.onmouseup = function() {
    unblockTextSelection();
    document.onmousemove = null;
    document.onmouseup = null;
    if (videoWasPlaying) {
      video.play();
      trackPlayProgress();
    }
  }
}, true);

progressHolder.addEventListener(&quot;mouseup&quot;, function(e){
  setPlayProgress(e.pageX);
}, true);
</pre>
<h2>Volume Control</h2>
<p>For the volume, we&#8217;ll create a function to set the volume and a function to update the volume display. The setVolume function is similar to the setPlayProgress function. It uses the mouse&#8217;s x position over the volume control to calculate the new volume. In this case, instead of using the Math.max and Math.min function to limit the volume number, I&#8217;m using a simple if/else.</p>
<pre class="brush: jscript;">
function setVolume(clickX) {
  var newVol = (clickX - findPosX(volumeControl)) / volumeControl.offsetWidth;
  if (newVol &gt; 1) {
    newVol = 1;
  } else if (newVol &lt; 0) {
    newVol = 0;
  }
  video.volume = newVol;
  updateVolumeDisplay();
}
</pre>
<p>The volume display used here is specific to this example. It uses bottom borders on &lt;li&gt;s to create the look of bars. The function is used to updated the color of each bar.</p>
<pre class="brush: jscript;">
function updateVolumeDisplay(){
  var volNum = Math.floor(video.volume * 6);
  for(var i=0; i&lt;6; i++) {
    if (i &lt; volNum) {
      volumeDisplay.children[i].style.borderColor = &quot;#fff&quot;;
    } else {
      volumeDisplay.children[i].style.borderColor = &quot;#555&quot;;
    }
  }
}
</pre>
<p>Now that we have these, we need to add event listeners to bodyLoaded to handle when a user clicks and drags on the volume control.</p>
<pre class="brush: jscript;">
volumeControl.addEventListener(&quot;mousedown&quot;, function(){
  blockTextSelection();
  document.onmousemove = function(e) {
    setVolume(e.pageX);
  }
  document.onmouseup = function() {
    unblockTextSelection();
    document.onmousemove = null;
    document.onmouseup = null;
  }
}, true);

volumeControl.addEventListener(&quot;mouseup&quot;, function(e){
  setVolume(e.pageX);
}, true);
</pre>
<p>We&#8217;ll also call updateVolumeDisplay directly so the volume display is updated when the page is loaded.</p>
<pre class="brush: jscript;">
updateVolumeDisplay();
</pre>
<h2>Full Screen (or Full Window) mode</h2>
<p>Browsers don&#8217;t yet have the capability for us to expand the video to the full screen like you can in Flash video. The best we can get is expanding it to the size of the browser window. You could also potentially resize the window to be larger, but this doesn&#8217;t work in all browsers and can be annoying for the user.</p>
<p>The fullScreenOn function changes the video to a &#8216;fixed&#8217; positioning, puts it at 0,0 in the browser window, and stretches it to the width of the window. It then repositions the controller at the bottom. I&#8217;m also adding a &#8220;fs-active&#8221; class to the button to change the look of the fullscreen icon.</p>
<pre class="brush: jscript;">
function fullScreenOn(){
  videoIsFullScreen = true;
  videoOrigWidth = video.offsetWidth;
  videoOrigHeight = video.offsetHeight;

  video.style.width = window.innerWidth + &quot;px&quot;;
  video.style.height = window.innerHeight + &quot;px&quot;;
  video.style.position = &quot;fixed&quot;;
  video.style.left = 0;
  video.style.top = 0;
  controls.style.position = &quot;fixed&quot;;
  positionController();

  fullScreenControl.className = &quot;fs-active control&quot;;
}
</pre>
<p>The fullScreenOff function resets the video to the original position, width, and height.</p>
<pre class="brush: jscript;">
function fullScreenOff(){
  videoIsFullScreen = false;
  video.style.width = videoOrigWidth + &quot;px&quot;;
  video.style.height = videoOrigHeight + &quot;px&quot;;
  video.style.position = &quot;static&quot;;
  controls.style.position = &quot;absolute&quot;;
  positionController();
  fullScreenControl.className = &quot;control&quot;;
}
</pre>
<p>Next we need to add an even listener to handle clicks on the full screen button.</p>
<pre class="brush: jscript;">
fullScreenControl.addEventListener(&quot;click&quot;, function(){
  if (!videoIsFullScreen) {
    fullScreenOn();
  } else {
    fullScreenOff();
  }
}, true);
</pre>
<h2>Conclusion</h2>
<p>If you&#8217;ve found this useful I&#8217;d appreciate a link or a tweet. And if you can expand on or improve this I would love to hear about it. Thanks! </p>
<p><a href="http://www.steveheffernan.com/html5-video-player/demo-video-player.html" target="_blank">Final code version.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.steveheffernan.com/2010/04/how-to-build-an-html5-video-player/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
<enclosure url="http://zencoder-demo.s3.amazonaws.com/trailer_test.mp4" length="3711807" type="video/mp4" />
<enclosure url="http://zencoder-demo.s3.amazonaws.com/trailer_test.ogg" length="3478496" type="video/ogg" />
		</item>
		<item>
		<title>Transcoding as a Service Providers (TaaS)</title>
		<link>http://blog.steveheffernan.com/2010/01/transcoding-as-a-service-providers-taas/</link>
		<comments>http://blog.steveheffernan.com/2010/01/transcoding-as-a-service-providers-taas/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 05:13:26 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Apps]]></category>
		<category><![CDATA[Video Encoding]]></category>
		<category><![CDATA[Websites]]></category>

		<guid isPermaLink="false">http://blog.steveheffernan.com/?p=340</guid>
		<description><![CDATA[This is a list of online video transcoding providers in no particular order. More for my own reference.

Pure Transcoders:
FlixCloud &#8212; On-Demand Video Encoding Powered by On2 Flix Engine, Amazon EC2 and Zencoder
Encoding.com &#8212; On Demand Video Encoding
HeyWatch! &#8212; Video encoding web service
HDCloud &#8212; Video Encoding and Video Transcoding In The Cloud
Zencoder &#8212; Online Video Encoding
Closer [...]]]></description>
			<content:encoded><![CDATA[<p>This is a list of online video transcoding providers in no particular order. More for my own reference.<br />
<span id="more-340"></span></p>
<h2>Pure Transcoders:</h2>
<p><a href="http://www.flixcloud.com">FlixCloud</a> &mdash; On-Demand Video Encoding Powered by On2 Flix Engine, Amazon EC2 and Zencoder<br />
<a href="http://encoding.com">Encoding.com</a> &mdash; On Demand Video Encoding<br />
<a href="http://heywatch.com">HeyWatch!</a> &mdash; Video encoding web service<br />
<a href="http://hdcloud.com">HDCloud</a> &mdash; Video Encoding and Video Transcoding In The Cloud<br />
<a href="http://zencoder.tv/">Zencoder</a> &mdash; Online Video Encoding</p>
<h2>Closer to Platforms</h2>
<p><a href="http://mpoint.net/">mPOINT</a> &mdash; Online Video Transcoding and Syndication<br />
<a href="http://www.multicastmedia.com">Multicast</a> &mdash; Live Internet broadcast leader. Online video platform.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.steveheffernan.com/2010/01/transcoding-as-a-service-providers-taas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Switch to dot com, or just redirect?</title>
		<link>http://blog.steveheffernan.com/2010/01/switch-to-dot-com-or-just-redirect/</link>
		<comments>http://blog.steveheffernan.com/2010/01/switch-to-dot-com-or-just-redirect/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 06:19:47 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Video Encoding]]></category>
		<category><![CDATA[Websites]]></category>

		<guid isPermaLink="false">http://blog.steveheffernan.com/?p=335</guid>
		<description><![CDATA[For a long time Zencoder has had the domain zencoder.tv. Since then we&#8217;ve purchased the dot com version from the original owner. The question now is whether to completely switch over to the dot com version, or just redirect dot com requests to dot tv.

Some things to consider if switching to dot com:
Links from other [...]]]></description>
			<content:encoded><![CDATA[<p>For a long time Zencoder has had the domain <a href="http://zencoder.tv">zencoder.tv</a>. Since then we&#8217;ve purchased the dot com version from the original owner. The question now is whether to completely switch over to the dot com version, or just redirect dot com requests to dot tv.<br />
<span id="more-335"></span><br />
Some things to consider if switching to dot com:<br />
Links from other sites &mdash; we can 301 redirect from dot tv to make sure we don&#8217;t lose links. Also, people may just assume dot com.<br />
Domain age / Backlink Age &mdash; zencode.com is actually older than dot tv, though it never had any links to it. I doubt it would give us any benefit.<br />
Switching emails and calendars &#038;mdash while these can probably be redirected, it would still be a pain to update everything and everyone.</p>
<p>It would probably be best to switch to the dot com, just to make it easier on everyone for the long run, and sooner rather than later.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.steveheffernan.com/2010/01/switch-to-dot-com-or-just-redirect/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>First Snorkel Sale!</title>
		<link>http://blog.steveheffernan.com/2009/07/first-snorkel-sale/</link>
		<comments>http://blog.steveheffernan.com/2009/07/first-snorkel-sale/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 01:43:34 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Websites]]></category>

		<guid isPermaLink="false">http://blog.steveheffernan.com/?p=319</guid>
		<description><![CDATA[
Last weekend a friend and I put a little more work into our snorkel website. We&#8217;ve still got a ways to go, but it&#8217;s looking a million times better than it did. Apparently it paid off because today I got an email that we made a sale! We sold a pink Kapitol Reef Snorkel interestingly [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="/2009/07/first-snorkel-sale/"><img src="http://blog.steveheffernan.com/wp-content/uploads/kapitol-reef-snorkel-koral-pink_1_medium.png" alt="kapitol-reef-snorkel-koral-pink" title="kapitol-reef-snorkel-koral-pink" width="75" height="240" class="aligncenter" /></a></p>
<p>Last weekend a friend and I put a little more work into our <a href="http://www.prosnorkel.com">snorkel website</a>. We&#8217;ve still got a ways to go, but it&#8217;s looking a million times better than it did. Apparently it paid off because today I got an email that we made a sale! We sold a <a href="http://www.prosnorkel.com/products/kapitol-reef-snorkel-koral-pink">pink Kapitol Reef Snorkel</a> interestingly enough. We only sell Kapitol Reef snorkels at this point, but pink is the last color I expected.<span id="more-319"></span></p>
<p>Soon we&#8217;ll be branching out into other upcoming Kapitol Reef products, including masks, fins, and a pretty slick package that contains everything you need to snorkel like a pro. We really like Kapitol Reef products because they&#8217;re reliable and technologically advanced, but if things go well enough we&#8217;ll look into selling other snorkel brands as well.</p>
<p>We built the store using <a href="http://www.shopify.com/">Shopify</a>, a pretty nice online store system that was built using Ruby on Rails (the language/framework <a href="http://sevenwire.com">Sevenwire</a> uses for web apps). Their template system is probably the best I&#8217;ve seen. The only downsides so far is that we don&#8217;t make enough yet to justify upgrading our plan to get some features we want. Namely coupons and user reviews. User reviews is actually a separate plugin that costs $30/month, which would double how much we&#8217;re paying for Shopify. I doubt we&#8217;ll ever make enough to justify spending $30/month for reviews, and coupons is the only feature we&#8217;d want from the next higher up plan. If we start selling enough it might be worth it, but we&#8217;ll see.</p>
<p><a href="http://www.prosnorkel.com">Buy Kapitol Reef Snorkels Online</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.steveheffernan.com/2009/07/first-snorkel-sale/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tumblon &#8211; Best Parenting Website</title>
		<link>http://blog.steveheffernan.com/2009/04/tumblon-best-parenting-website/</link>
		<comments>http://blog.steveheffernan.com/2009/04/tumblon-best-parenting-website/#comments</comments>
		<pubDate>Sun, 19 Apr 2009 03:10:17 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Apps]]></category>
		<category><![CDATA[Websites]]></category>

		<guid isPermaLink="false">http://blog.steveheffernan.com/?p=299</guid>
		<description><![CDATA[
Today is my sister&#8217;s birthday, and for her gift I&#8217;m moving her new baby&#8217;s website from Totsites to Tumblon, and getting her a year of the premium subscription. Both sites allow you to blog about your child, post photos, notify family members, etc., but Totsites has super cheesy templates while Tumblon is really clean. Not [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img src="http://blog.steveheffernan.com/wp-content/uploads/tumblon_logo_vertical_full_aspect_medium.png" alt="tumblon_logo_vertical_full_aspect_medium" title="tumblon_logo_vertical_full_aspect_medium" width="200" height="58" class="aligncenter size-full wp-image-300" /></p>
<p>Today is my sister&#8217;s birthday, and for her gift I&#8217;m moving her new baby&#8217;s website from Totsites to <a href="http://tumblon.com">Tumblon</a>, and getting her a year of the premium subscription. Both sites allow you to blog about your child, post photos, notify family members, etc., but Totsites has super cheesy templates while Tumblon is really clean. Not to mention it&#8217;s owned by a friend of mine from <a href="http://zencoder.tv">Zencoder</a>, <a href="http://twitter.com/jondahl">John Dahl</a>.<br />
<span id="more-299"></span><br />
The process went smoothly enough. My sister only had about 5 blog entries, and those were easy enough to cut and past over. The only issue there is I couldn&#8217;t change the date of the new post, so I had to add an &#8220;Originally posted&#8221; line.</p>
<p>Photos were a bit of a challenge. My sister had over 100 photos on the old site, most with captions. I needed to download each and move them over to Tumblon. Luckily I&#8217;m currently staying with my friend Justin, a programming super stud. He saw me tirelessly copying each one at time, scolded me for not doing it programatically, then helped me write a Ruby script that would parse image URLs from Totsites, download them to my computer, and name them with their captions for easy importing into Tumblon (which has an awesome multi-photo uploader). I should probably give that script to Tumblon.</p>
<p>I did run into an issue with the Tumblon photo uploader when I tried adding more photos than the 50 that my free account allowed for the month. It stalled in the middle of the group and then wouldn&#8217;t let me delete or edit the ones that had been uploaded. I sent a letter to support, but I upgraded to the premium account and that fixed everything anyway.</p>
<p>Tumblon has some awesome developmental info built into the service. I can&#8217;t quite use it myself, but I think my sister will appreciate it. Anyway, I don&#8217;t want to give out my sister&#8217;s page, but here&#8217;s mine. <img src='http://blog.steveheffernan.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://heffernan.tumblon.com/">http://heffernan.tumblon.com/</a></p>
<p><a href="http://tumblon.com">Best Parenting Website</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.steveheffernan.com/2009/04/tumblon-best-parenting-website/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Adding to Wikipedia for the first time</title>
		<link>http://blog.steveheffernan.com/2009/04/adding-to-wikipedia-for-the-first-time/</link>
		<comments>http://blog.steveheffernan.com/2009/04/adding-to-wikipedia-for-the-first-time/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 22:21:42 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Video Encoding]]></category>
		<category><![CDATA[Websites]]></category>

		<guid isPermaLink="false">http://blog.steveheffernan.com/?p=288</guid>
		<description><![CDATA[
I wanted to add both Zencoder and Flix Cloud to a list of video editing software on Wikipedia, but Wikipedia is pretty picky about external links. My links got erased after only a day.

To make it more legit, I created these pages: Zencoder, Flix Cloud. I&#8217;ll be interested to see how long they last. I [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img src="http://blog.steveheffernan.com/wp-content/uploads/picture-11.png" alt="picture-11" title="picture-11" width="151" height="159" class="aligncenter size-full wp-image-289" /></p>
<p>I wanted to add both <a href="http://zencoder.tv">Zencoder</a> and <a href="http://www.flixcloud.com">Flix Cloud</a> to a <a href="http://en.wikipedia.org/wiki/List_of_video_editing_software">list of video editing software</a> on Wikipedia, but Wikipedia is pretty picky about external links. My links got erased after only a day.<br />
<span id="more-288"></span><br />
To make it more legit, I created these pages: <a href="http://en.wikipedia.org/wiki/Zencoder">Zencoder</a>, <a href="http://en.wikipedia.org/wiki/Flix_Cloud">Flix Cloud</a>. I&#8217;ll be interested to see how long they last. I don&#8217;t think there&#8217;s anything wrong with the pages I created, in fact I used references more than most other pages I&#8217;ve seen, but since my motivation was more on the side of promotion I&#8217;m a little nervous. It makes me wonder how any other page about a specific company got on to the wiki if it wasn&#8217;t for self promotion. Are there actually people out there who care enough about the completeness of the info that they&#8217;ll spend their time doing the necessary research? </p>
<p>Even if there is, it&#8217;s still up to the company to maintain the page and make sure no slanderous material gets in there. At <a href="http://www.apu.edu">APU</a> we used to have to fix changes from Biola students saying we weren&#8217;t a Christian university anymore.</p>
<p>Anyway, I&#8217;m gonna keep an eye on those pages, and hopefully nobody finds an issue with them.</p>
<p>UPDATE</p>
<p>Um, well, next day:</p>
<p>&#8220;A tag has been placed on Flix Cloud, requesting that it be speedily deleted from Wikipedia. This has been done under the criteria for speedy deletion, because the article seems to be blatant advertising that only promotes a company, product, group, service or person and would need to be fundamentally rewritten in order to become an encyclopedia article. Please read the general criteria for speedy deletion, particularly item 11, as well as the guidelines on spam.<br />
If you can indicate why the subject of this article is not blatant advertising, you may contest the tagging. To do this, please add {{hangon}} on the top of Flix Cloud and leave a note on the article&#8217;s talk page explaining your position. Please do not remove the speedy deletion tag yourself, but don&#8217;t hesitate to add information to the article that would help make it encyclopedic, as well as adding any citations from independent reliable sources to ensure that the article will be verifiable. Feel free to leave a note on my talk page if you have any questions about this. Jim Ward (talk·stalk) 23:56, 16 April 2009 (UTC)&#8221;</p>
<p>I&#8217;ll admit, I did a slightly better job on the Zencoder entry, which seems to be surviving. I still used independent resources as references, but I didn&#8217;t have any thing like &#8220;Founded in 2008 by blah blah&#8221;. Oh well. I&#8217;ll try again later.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.steveheffernan.com/2009/04/adding-to-wikipedia-for-the-first-time/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Goal: Sell Something on eBay</title>
		<link>http://blog.steveheffernan.com/2009/02/sell-something-on-ebay/</link>
		<comments>http://blog.steveheffernan.com/2009/02/sell-something-on-ebay/#comments</comments>
		<pubDate>Thu, 05 Feb 2009 07:06:05 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Goals]]></category>
		<category><![CDATA[Websites]]></category>

		<guid isPermaLink="false">http://blog.steveheffernan.com/?p=197</guid>
		<description><![CDATA[
When eBay was first gaining popularity I bought a good amount of stuff there, but I never actually sold anything. I think it was the hassle of having to package something and send it off that kept me from trying.

Now, however, I&#8217;m on a kick to get rid of as much stuff as I can, [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="/2009/02/sell-something-on-ebay/"><img class="aligncenter size-thumbnail wp-image-201" title="ebay-logo-716-90_302_x_302" src="/wp-content/uploads/ebay-logo-716-90_302_x_302-150x150.jpg" alt="ebay-logo-716-90_302_x_302" width="150" height="150" /></a></p>
<p>When eBay was first gaining popularity I bought a good amount of stuff there, but I never actually sold anything. I think it was the hassle of having to package something and send it off that kept me from trying.<br />
<span id="more-197"></span><br />
Now, however, I&#8217;m on a kick to get rid of as much stuff as I can, and I might as well try to make some extra cash while I do it. This started with a dream to become super portable, to the point where I could carry everything I own with me wherever I travel. That&#8217;s more possible than ever these days, but it still would be pretty difficult. I&#8217;m also <a href="/2009/02/best-real-estate-website/">considering buying a home soon</a> (not very portable) and the less I have to move the better.</p>
<p>I&#8217;ve gathered a lot of crap over the years, and most of it has just continued to lose value. So the sooner the better. I just want to start with one thing though, and go from there. Now to choose what that one thing will be&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.steveheffernan.com/2009/02/sell-something-on-ebay/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Best Real Estate Website</title>
		<link>http://blog.steveheffernan.com/2009/02/best-real-estate-website/</link>
		<comments>http://blog.steveheffernan.com/2009/02/best-real-estate-website/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 06:26:30 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Websites]]></category>

		<guid isPermaLink="false">http://blog.steveheffernan.com/?p=189</guid>
		<description><![CDATA[
 
A friend and I are starting to look into buying a home. One of the latest Fortune editions has LA with the biggest price drop in 2009 at 25%, and they expect it will continue to drop another 5% in 2010. That plus some upcoming government incentives make it a good time to start looking [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:center;"><a href="http://blog.steveheffernan.com/2009/02/best-real-estate-website/"><img class="aligncenter size-full wp-image-216" title="redfin-logo" src="http://blog.steveheffernan.com/wp-content/uploads/redfin-logo.jpg" alt="redfin-logo" width="226" height="128" /></a></p>
<p> </p>
<p>A friend and I are starting to look into buying a home. One of the latest Fortune editions has LA with the biggest price drop in 2009 at 25%, and they expect it will continue to drop another 5% in 2010. That plus some <a href="http://www.nytimes.com/2009/02/04/us/politics/04housing.html?ref=us">upcoming government incentives</a> make it a good time to start looking for the perfect deal.</p>
<p><span id="more-189"></span> Unfortunately looking for a home on the interwebs isn&#8217;t nearly as easy as it should be. The largest database is apparently the MLS, but they seem to be a hodgepodge of crappy search engines built into even crappier real estate website. And the home information is limited, which I assume is to help keep real estate agents in a job. Though they are apparently starting to <a href="http://www.techcrunch.com/2008/11/10/mls-tired-of-zillow-trulia-goes-direct-to-consumers/">open the doors</a>.</p>
<p>I started looking into homes about a year ago and found <a href="http://www.zillow.com/">Zillow</a> and <a href="http://www.trulia.com/">Trulia</a>. These websites gave me a little hope, but they definitely had a limited number of listings, many of which seemed out of date.</p>
<p>This time around however, I found <a href="http://www.redfin.com">Redfin</a>. While the other two said they found more homes in a search in Glendora, Redfin showed what seemed like 10x more on the map. Their map is way more polished as well, with easy filtering, and the ability to distinguish between &#8220;for sale by owner&#8221;, &#8220;for sale by agent&#8221;, and bank owned homes. Also, I&#8217;ve yet to find a home in my agent&#8217;s MLS listings that hasn&#8217;t also been in Redfin. It really does kick butt.</p>
<p>On a related note, I found <a href="http://www.mortgagecalculator.org/">mortgagecalculator.org</a> pretty useful. It does a good job of showing you exactly how your mortgage works out.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.steveheffernan.com/2009/02/best-real-estate-website/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>I actually updated SteveHeffernan.com</title>
		<link>http://blog.steveheffernan.com/2009/01/steve-heffernan-com/</link>
		<comments>http://blog.steveheffernan.com/2009/01/steve-heffernan-com/#comments</comments>
		<pubDate>Sat, 17 Jan 2009 22:16:33 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Websites]]></category>

		<guid isPermaLink="false">http://blog.steveheffernan.com/?p=110</guid>
		<description><![CDATA[After years of it saying &#8220;I&#8217;m not making any promises&#8221;, with some jacked-up accidental jQuery effect that made everything disappear, I have updated steveheffernan.com. It was more about the content than anything else, so I went with a 600px wide, 1 column layout, with nothing interesting design-wise except some highlight-styled links.

Interestingly enough, I really like it. I [...]]]></description>
			<content:encoded><![CDATA[<p>After years of it saying &#8220;I&#8217;m not making any promises&#8221;, with some jacked-up accidental jQuery effect that made everything disappear, I have updated <a title="Steve Heffernan" href="http://steveheffernan.com" target="_blank">steveheffernan.com</a>. It was more about the content than anything else, so I went with a 600px wide, 1 column layout, with nothing interesting design-wise except some highlight-styled links.</p>
<p><span id="more-110"></span></p>
<p>Interestingly enough, I <em>really</em> like it. I might even make a similar Wordpress theme for this blog. </p>
<p>The main reason I suddenly decided to update it is that some how, steveheffernan.com has a Page Rank of 5. Page Rank is one way Google grade&#8217;s your web pages.</p>
<p>It&#8217;s based mostly on external links to a page, and has a scale of 1 to 10, 10 being the highest, and only the Google homepage has a 10. The scale is an exponential scale, kind of like the Richter Scale for earthquakes, so every level requires more links to move up to than the last. To give you some perspective, <a href="http://sevenwire.com" target="_blank">Sevenwire</a> has a PR of 4, <a href="http://www.apu.edu" target="_blank">APU</a> has a PR of 7, <a href="http://www.albinokraken.com/" target="_blank">Albino Kraken</a> (the blog of my only subscriber) has a PR of 2, and this blog has a PR of 0. <img src='http://blog.steveheffernan.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  I&#8217;m done explaining that, here&#8217;s a <a href="http://en.wikipedia.org/wiki/PageRank" target="_blank">wikipedia link</a>.</p>
<p>The weird thing is, Google itself tells me it only knows of <a href="http://www.google.com/search?q=link:steveheffernan.com" target="_blank">one link</a> to steveheffernan.com, and it&#8217;s from THIS BLOG. So I don&#8217;t get it, but I&#8217;m not gonna complain. I&#8217;m just gonna use it to to boost all my other projects&#8217; SEO, hence the link-ridden new steveheffernan.com.</p>
<p><a href="http://www.steveheffernan.com" target="_blank">check it, yo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.steveheffernan.com/2009/01/steve-heffernan-com/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Crappy Airport Parking Website</title>
		<link>http://blog.steveheffernan.com/2009/01/crappy-airport-parking-website/</link>
		<comments>http://blog.steveheffernan.com/2009/01/crappy-airport-parking-website/#comments</comments>
		<pubDate>Wed, 14 Jan 2009 06:25:38 +0000</pubDate>
		<dc:creator>Steve</dc:creator>
				<category><![CDATA[Flying]]></category>
		<category><![CDATA[Websites]]></category>

		<guid isPermaLink="false">http://blog.steveheffernan.com/?p=94</guid>
		<description><![CDATA[Flying to TX tomorrow to see my new niece, and needed a place to park near Ontario Airport. I clicked the first search result, &#8220;Park &#8216;n Fly&#8221;, and it looked decent enough. I set up my reservation, put in my credit card info, and after hitting submit I realized I wasn&#8217;t on a secure page! [...]]]></description>
			<content:encoded><![CDATA[<p>Flying to TX tomorrow to see my <a href="http://www.totsites.com/tot/babyhouchin" target="_blank">new niece</a>, and needed a place to park near Ontario Airport. I clicked the first search result, &#8220;Park &#8216;n Fly&#8221;, and it looked decent enough. I set up my reservation, put in my credit card info, and after hitting submit I realized I wasn&#8217;t on a secure page! I used to be really good about checking for that, but up to this point I&#8217;ve never seen a site that didn&#8217;t use a secure page on a form, especially when accepting credit cards, so I got lazy. Some web developer out there needs to be slapped. Here&#8217;s the <a href="http://book.pnfnetwork.com/travel/gateway.rvlx" target="_blank">unsecured site</a>.<span id="more-94"></span></p>
<p>If you don&#8217;t know, you can tell a page is secure by the &#8220;https&#8221; instead of just &#8220;http&#8221; in the web address. If a page isn&#8217;t secure, your information is being sent through the web as clear text, so somebody watching the signals in the tubes can steal your info.</p>
<p>Here&#8217;s a pic of the offending site that does not have the &#8220;https&#8221; yet is requesting CC info. Technically if this page submitted to a secure page it would be okay, but it doesn&#8217;t. I didn&#8217;t feel like buying more parking to show the really bad page.</p>
<p> </p>
<p style="text-align: center; "><a href="http://blog.steveheffernan.com/wp-content/uploads/picture-3.png"><img class="size-medium wp-image-95 aligncenter" title="non-secure-form" src="http://blog.steveheffernan.com/wp-content/uploads/picture-3-300x272.png" alt="non-secure-form" width="300" height="272" /></a></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">So after seeing this I looked for some contact info where I could let somebody know of the security hole. I found a &#8220;contact us&#8221; link at bottom, and it didn&#8217;t work! In fact none of the links in the footer worked. I&#8217;m not sure why I was surprised. The links pointed to &#8220;#&#8221;, which is kind of a place holder address where you&#8217;ll put something later.</p>
<p style="text-align: left;"> </p>
<p style="text-align: center;"><a href="http://blog.steveheffernan.com/wp-content/uploads/picture-1.png"><img class="size-medium wp-image-96 aligncenter" title="broken-links" src="http://blog.steveheffernan.com/wp-content/uploads/picture-1-300x47.png" alt="broken-links" width="300" height="47" /></a></p>
<p style="text-align: left;"> </p>
<p style="text-align: left;">So dumb&#8230;</p>
<p> </p>
<hr />UPDATE<br />
   </p>
<p> </p>
<p>I received this email the very next day:</p>
<blockquote><p>Mr. Heffernan,</p>
<p>This has been fixed. Thank you for your feedback and because of our<br />
feedback on this issue we have asked our Marketing Department to fix the<br />
problem and today, they did announce that is now secure with https.<br />
Thank you for remaining a loyal customer!</p>
<p>Thank You, </p>
<p>Alexis Torrence </p>
<p>Park N Fly Headquarters<br />
Frequent Parker Program<br />
 </p></blockquote>
<p>So yeah, pretty quick response time. I&#8217;m impressed. I didn&#8217;t think that would actually work. I checked and the security issue has been fixed. The footer links are still broken, but that&#8217;s a minor issue in comparison. Not bad Park &#8216;N Fly. For that I&#8217;ll give you an SEO link: <a title="Airport Parking" href="http://www.pnf.com/" target="_blank">Airport Parking</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.steveheffernan.com/2009/01/crappy-airport-parking-website/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
