<?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>Chomper Stomping &#187; tutorial</title>
	<atom:link href="http://blog.chomperstomp.com/category/tutorial/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.chomperstomp.com</link>
	<description>AJAX/JavaScript/CSS/HTML, Flash Game Development (AS 2.0/AS 3.0), iPhone App Development, Java/PHP/Python/ActionScript and other random techie tidbits I've collected</description>
	<lastBuildDate>Wed, 08 Sep 2010 17:31:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Flurl &#8211; Part 5: The Unicorn/Panda Rainbow Connection</title>
		<link>http://blog.chomperstomp.com/flurl-part-5-the-unicornpanda-rainbow-connection/</link>
		<comments>http://blog.chomperstomp.com/flurl-part-5-the-unicornpanda-rainbow-connection/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 20:53:32 +0000</pubDate>
		<dc:creator>Christopher McCulloh</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[TOTW]]></category>
		<category><![CDATA[programming concepts]]></category>
		<category><![CDATA[prototyping]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[web sites]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.chomperstomp.com/?p=564</guid>
		<description><![CDATA[Wait, where&#8217;s parts 2 through 4? Not done yet, but I&#8217;m done with the project and I may never get around to posting those other parts and wanted to post the finished product. Again, Flurl is a little practice exercise I did. A mashup of Flickr and Qurl and no external JS libraries used (so [...]]]></description>
			<content:encoded><![CDATA[<p>Wait, where&#8217;s parts 2 through 4? Not done yet, but I&#8217;m done with the project and I may never get around to posting those other parts and wanted to post the finished product.</p>
<p>Again, Flurl is a little practice exercise I did. A mashup of Flickr and Qurl and no external JS libraries used (so I wrote my own).</p>
<p>I&#8217;m taking <a href="http://www.flickr.com/explore/panda">this photo stream</a> and sending the URLs to Qurl for shortening (using their API). This is the end result (best experienced in Chrome): <a href="http://chomperstomp.com/flurl/">The Unicorn/Panda Rainbow Connection</a> (Be careful, since the photos are completely random &#8220;popular&#8221; flickr photos, even though they purport to be &#8220;safe&#8221; there are definitely some NSFW photos now and then).</p>
<p>Some thoughts: Qurl sucks as far as response time. I had to limit my photos to five because Qurl was so darn slow responding to my requests and there is no way to do a batch request. BAD. What would I do to fix this? How about dump Qurl entirely. Flickr has their own shortening algorithm that doesn&#8217;t even require an API call. If I had to keep using Qurl? I&#8217;d go ahead and load the photos to the page for the user with the long links, then I&#8217;d make a button on the photo (or link or something) that allowed them to request a shortened URL from Qurl. They click the button/link and an AJAX request fires off grabbing the URL and giving it to them.</p>
<p>I couldn&#8217;t get the Flickr API to return only a certain number of Photos. I did everything I could find that it said I should do to get it to only return five or ten photos, but alas, it didn&#8217;t work. So I had to make a loop that just used the first five/ten photos and ignore the rest. If it weren&#8217;t for Qurl, which takes over 30 seconds most times to shorten 5 urls, I wouldn&#8217;t care how many Flickr sent back. Still weird and wasteful and if I had more time I&#8217;d look into it until I got it working.</p>
<p>When I removed Qurl from the loop, the photos returned in less than five seconds flat (awesome!). However, with Qurl the response time ranges from 30s to 90s. So AS SOON AS I get the response back I fire off another request. If the response only took 5s total, I&#8217;d put a timeout or interval or something that queried only once a minute or so. Or, better yet, I&#8217;d make it fire off the request 10 seconds before my photo scroll ended and just put the new photos above my current scroll and make the scroll seem endless (like the pandas).</p>
<p>I spent far too much time on the library. I had big plans and it turned out I wrote way more code than I ended up needing because I was doing VERY LITTLE DOM manipulation. Of course if I worked on this for another forty hours or so the library really would have paid off because it would have saved me time as my interactions got more and more complex. If I had come up with the full design before I started writing the code I would have known I wasn&#8217;t going to need much DOM interaction, but as it stands I didn&#8217;t have any idea what the page was going to look like until I was almost completely finished with the cQuery JS library.</p>
<p>Queue. Something interesting I came up with was a way of handling mutliple simultaneous AJAX requests and multiple simultaneous animations. A queue. </p>
<p>For the AJAX requests I had an AJAX queue that just held all of my requests (didn&#8217;t end up needing this, but it is there if I decide to do the Qurl thing separate from the photo retrieval). I hope to go into the AJAX queue in more detail in another post, but the reason I needed it was the callback function. I needed somewhere to put it until the request completed. </p>
<p>For the animation queue, I didn&#8217;t want to set up a whole bunch of different &#8220;set intervals&#8221; or &#8220;set timeouts&#8221; so instead I made an &#8220;animations&#8221; array and then made ONE setInterval that called a function that looped through the animation array. Each spot in the array held an &#8220;animation&#8221; Object, which had an &#8220;animate()&#8221; function. The animate function would get called on the object and be allowed to run in the proper context (with &#8220;this&#8221; functioning as expected). This ended up saving me a lot of code and headaches and made my JS run way faster than it otherwise would have. Of course I ended up only having one animation run at a time and I have no standard way of removing from the queue, but I could add that to the library and there is definitely room for more animations.</p>
<p><script src="http://gist.github.com/450528.js?file=animation%20queue"></script></p>
<p>One last thing, the song is from <a href="http://www.thewikies.com/">Jonathan Neal</a> (<a href="http://www.youtube.com/watch?v=2NE9O8hTvfI">who is hilarious</a>). I converted it to .ogg format because Firefox didn&#8217;t allow anything else, however it appears that Safari doesn&#8217;t accept .ogg format, so if I had more time I&#8217;d make something to detect with browser I&#8217;m in and respond with the .mp3 format instead&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chomperstomp.com/flurl-part-5-the-unicornpanda-rainbow-connection/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TOTW: Modernizr</title>
		<link>http://blog.chomperstomp.com/totw-modernizr/</link>
		<comments>http://blog.chomperstomp.com/totw-modernizr/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 21:11:45 +0000</pubDate>
		<dc:creator>Christopher McCulloh</dc:creator>
				<category><![CDATA[TOTW]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tool of the Week]]></category>

		<guid isPermaLink="false">http://blog.chomperstomp.com/?p=557</guid>
		<description><![CDATA[Modernizr is a JavaScript library that you include on your page that executes itself and adds a series of classes to your HTML tag. This allows to implement modern CSS functionality without worrying about writing conditionals in JavaScript or anything complicated like that. You simply write one (or at most two) style definitions around the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.modernizr.com/">Modernizr</a> is a JavaScript library that you include on your page that executes itself and adds a series of classes to your HTML tag. This allows to implement modern CSS functionality without worrying about writing conditionals in JavaScript or anything complicated like that. You simply write one (or at most two) style definitions around the functionality you want, like this:</p>
<p>.functionalityYouWant #myElement{<br />
    css3thing: blah;<br />
}</p>
<p>.no-functionalityYouWant #myElement{<br />
    oldSchoolWay: blah;<br />
}</p>
<p>So, real world example:</p>
<p>.cssgradients .sideNavTitleBox{<br />
	background: -moz-linear-gradient(center bottom, #000 13%, #353535 84%);<br />
	background: -webkit-gradient(linear, center bottom, center top, color-stop(0.13, #000), color-stop(0.84, #353535));<br />
}</p>
<p>.no-cssgradients .sideNavTitleBox{<br />
	background-color: #000;<br />
	background-image: url(/media/images/backgrounds/left_nav_box_header.gif);<br />
	background-repeat: repeat-x;<br />
	background-position: left top;<br />
}</p>
<p>Again, you don&#8217;t have to write any javascript at all, you just include <a href="http://www.modernizr.com/">the library</a> on the page and it runs all on it&#8217;s own and enables this awesomeness!</p>
<p>EDIT: Oh look, ALA just posted a great article on <a href="http://www.alistapart.com/articles/taking-advantage-of-html5-and-css3-with-modernizr/">modernizr</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chomperstomp.com/totw-modernizr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flurl &#8211; Part 1.a: Rolling your own JavaScript library, setting up the core</title>
		<link>http://blog.chomperstomp.com/flurl-part-1-a-rolling-your-own-javascript-library-setting-up-the-core/</link>
		<comments>http://blog.chomperstomp.com/flurl-part-1-a-rolling-your-own-javascript-library-setting-up-the-core/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 05:30:09 +0000</pubDate>
		<dc:creator>Christopher McCulloh</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[programming concepts]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[about]]></category>
		<category><![CDATA[cQuery]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[toolkit]]></category>

		<guid isPermaLink="false">http://blog.chomperstomp.com/?p=549</guid>
		<description><![CDATA[Flurl is a mashup I did recently as a practice exercise. It takes a flickr panda photo-stream, displays a photo, and uses qurl to make a shortened URL link to the photo. These are the notes I took while I was doing it. The project can be found on GitHub at http://github.com/cmcculloh/Flurl For this exercise [...]]]></description>
			<content:encoded><![CDATA[<p>Flurl is a mashup I did recently as a practice exercise.</p>
<p>It takes a flickr panda photo-stream, displays a photo, and uses qurl to make a shortened URL link to the photo.</p>
<p>These are the notes I took while I was doing it.</p>
<p>The project can be found on GitHub at <a href="http://github.com/cmcculloh/Flurl">http://github.com/cmcculloh/Flurl</a></p>
<p>For this exercise I didn&#8217;t want to use any JavaScript library. Normally I&#8217;d use jQuery (naturally) but I wanted to feel the pain of plain jane JavaScript again since it had been well over a year since I had done any AJAX without a library.</p>
<p>I decided I&#8217;d roll my own library that I could use to encapsulate the AJAX and DOM selection framework to keep it seperate from the actual app and to simplify my life in actually writing the app.</p>
<p>Since I wanted my library to feel a little jQuerish I decided as an homage I&#8217;d name it cQuery and use the _ instead of the $.</p>
<p>Step 1, the ubiquitous self executing anonymous function:</p>
<p><code>(function(window, document, undefined){})(this, document);</code></p>
<p>I&#8217;ll break it down. The starting paren &#8220;(&#8221; and it&#8217;s mate are just a &#8220;cool guy&#8221; coding convention to let people know, &#8220;this is weird! This is a library! This ain&#8217;t yo mama&#8217;s JavaScript!&#8221;. It&#8217;s the same as this:</p>
<p><code>function(window, document, undefined){}(this, document);</code></p>
<p>Which is simply just a function that immediately calls itself. The main reason to do this is to prepare our code for minification. When we minify, it will end up something like this:</p>
<p><code>(function(A,B,C){})(this, document);</code></p>
<p>So anywhere in our library where we had &#8220;window&#8221; or &#8220;document&#8221; or &#8220;undefined&#8221; it will not be the much shorter &#8220;A&#8221;, &#8220;B&#8221; or &#8220;C&#8221;, much smaller!</p>
<p>Paul Irish explains this in a *little* more detail in his <a href="http://paulirish.com/2010/10-things-i-learned-from-the-jquery-source/">10 Things I Learned From the jQuery Source</a> video.</p>
<p>Next we build the core function of our library, add it to the namespace and give it it&#8217;s &#8220;_&#8221; shortcut:</p>
<p><code>var cQuery = function(elm){<br />
};</p>
<p>window.cQuery = window._ = cQuery;</code></p>
<p>Note that if we didn&#8217;t do that last line &#8216;cQuery&#8217; would not be available in the rest of our JavaScript since it is hidden away inside of the closure we talked about above.</p>
<p>I really like the way jQuery works, and I want my library to mimic this. So calling:</p>
<p><code>cQuery("#domElementById").someMethod().anotherMethod();</code></p>
<p>ought to work.</p>
<p>Functions in JavaScript are just Objects that you can invoke. Functions can have their own methods, properties, etc. So basically cQuery is just an object that can DO something on it&#8217;s own so we can say cQuery() instead of cQuery.doThing(). Much more convenient. So basically our var cQuery = function(elm){} code is just setting up my cQuery library object in a way that it can be called and passed the dom element we are working with.</p>
<p>Since I want to be able to &#8220;chain&#8221; things in my library, I&#8217;ll need to add the methods in there that enable my chaining. I do this by ending my cQuery function with a return statement that returns an object containing the methods I wish to be available for chaining, each of these methods in turn returning an instance of the cQuery object (unless the method is specifically supposed to return something else, which makes it a destructive method because it ends my chaining), <a href="http://pastebin.me/ad4b222f4ddf23d70fb4b9446bca1a07">like in this example</a>:</p>
<p><code>(function(){<br />
var c = function(){<br />
  return{<br />
    blah:function(){<br />
      alert("blah");<br />
      return c();<br />
    },<br />
    blah2:function(){<br />
      alert("blah2");<br />
      return c();<br />
    }<br />
  };<br />
};</p>
<p>window.c = c;<br />
})();</p>
<p>c().blah().blah2();</code></p>
<p>That&#8217;s it! Now I&#8217;ve got the core of my JavaScript library all set up, chaining enabled, library closed in but available on the namespace, all ready to be made useful! Here&#8217;s the code we&#8217;ve got so far:</p>
<p>(function(window, document, undefined) {</p>
<p>var cQuery = function(elm){<br />
//DOM selection and storage will go here</p>
<p>	return {<br />
//chain-able library methods go here<br />
	};<br />
};</p>
<p>//make sure our library is exposed to the global namespace and make a shortcut &#8220;_&#8221; so we don&#8217;t have to type cQuery every time.<br />
window.cQuery = window._ = cQuery;</p>
<p>})(this, document);</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chomperstomp.com/flurl-part-1-a-rolling-your-own-javascript-library-setting-up-the-core/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using jQuery to bind a function to a select box change and retrieve the selected value</title>
		<link>http://blog.chomperstomp.com/using-jquery-to-bind-a-function-to-a-select-box-change-and-retrieve-the-selected-value/</link>
		<comments>http://blog.chomperstomp.com/using-jquery-to-bind-a-function-to-a-select-box-change-and-retrieve-the-selected-value/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 14:51:02 +0000</pubDate>
		<dc:creator>Christopher McCulloh</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[change]]></category>
		<category><![CDATA[console]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[firebug]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[onchange]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[select]]></category>
		<category><![CDATA[select box]]></category>
		<category><![CDATA[selected]]></category>
		<category><![CDATA[selector]]></category>
		<category><![CDATA[value]]></category>

		<guid isPermaLink="false">http://blog.chomperstomp.com/?p=536</guid>
		<description><![CDATA[If you need to bind a function to be called when a user selects an option from a select box using jQuery, you&#8217;ve come to the right place. There are several different ways to skin this cat, but basically here is what we are going to do: 1. Bind a change event listener to the [...]]]></description>
			<content:encoded><![CDATA[<p>If you need to bind a function to be called when a user selects an option from a select box using jQuery, you&#8217;ve come to the right place.</p>
<p>There are several different ways to skin this cat, but basically here is what we are going to do:</p>
<p>1. Bind a change event listener to the select box itself<br />
2. When the box is changed, call a function that detects and retrieves the selected value</p>
<p>Here&#8217;s the code:</p>
<p><code>            $("#selectBoxId").change(function(){<br />
                var selectedValue = $(this).find(":selected").val();<br />
                console.log("the value you selected: " + selectedValue);<br />
            });</code></p>
<p>Let&#8217;s break it down line by line.</p>
<p>Line 1:<br />
<code>            $("#selectBoxId").change(function(){</code></p>
<p><code>$("#selectBoxId")</code> grabs the DOM element out of the html and makes a jQuery object.<br />
<code>.change(function(){});</code> binds a function to the change event of the select box. Any time anyone changes the selection in the select box this function will fire off</p>
<p>Line 2:<br />
<code>                var selectedValue = $(this).find(":selected").val();</code>                </p>
<p><code>var selectedValue</code> creates a new variable that the selected value will be stored in.<br />
<code>$(this)</code> creates a jQuery object based on the select box that triggered the function.<br />
<code>.find(":selected")</code> looks a the select box that triggered the function and finds the option that got selected.<br />
<code>.val()</code> gets the &#8220;value&#8221; of the selected option.</p>
<p>Line 3:<br />
<code>                console.log("the value you selected: " + selectedValue);</code></p>
<p>this just calls the firebug console in firefox and tells it you want to print something out to it. You don&#8217;t need this line, but this line shows you that the above code did indeed grab the selected value out of the select box.</p>
<p>Line 4:<br />
<code>            });</code><br />
This just closes the open change function started on line 1.</p>
<p>This code assumes that you have an HTML select box with an id of &#8220;selectBoxId&#8221;. If you have a series of select boxes that all need the same function bound to them for some reason you can give them all the same class name (say &#8220;selectBoxesClass&#8221;) and select them like so: $(&#8220;.selectBoxesClass&#8221;).</p>
<p><code>&lt;!DOCTYPE html><br />
&lt;html><br />
  &lt;head><br />
    &lt;meta charset="utf-8" /><br />
    &lt;title>Conforming XHTML 1.0 Strict Template&lt;/title><br />
    &lt;script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js">&lt;/script><br />
    &lt;script type="text/javascript"><br />
        $(function(){<br />
            $("#selectBoxId").change(function(){<br />
                var selectedValue = $(this).find(":selected").val();<br />
                console.log("the value you selected: " + selectedValue);<br />
            });<br />
        });<br />
    &lt;/script><br />
&lt;/head></p>
<p>&lt;body><br />
  &lt;select id="selectBoxId"><br />
    &lt;option>Foo&lt;/option><br />
    &lt;option>Bar&lt;/option><br />
    &lt;option selected="selected">Beh&lt;/option><br />
  &lt;/select><br />
&lt;/body><br />
&lt;/html></code></p>
<p><a href="http://pastebin.me/5b9b49d7e96cc26bcf6567ff88b11ced">Here is the example</a></p>
<p>Here are some resources for further reading:<br />
<a href="http://jquery.com/">jQuery</a><br />
<a href="http://api.jquery.com/change/">jQuery change</a><br />
<a href="http://api.jquery.com/find/">jQuery find</a><br />
<a href="http://api.jquery.com/val/">jQuery val</a><br />
<a href="http://api.jquery.com/selected-selector/">jQuery :selected selector</a><br />
<a href="http://api.jquery.com/element-selector/">jQuery Element selector</a><br />
<a href="http://api.jquery.com/id-selector/">jQuery id selector</a><br />
<a href="http://api.jquery.com/class-selector/">jQuery class selector</a><br />
<a href="http://www.mozilla.com/en-US/firefox/firefox.html">Firefox</a><br />
<a href="http://getfirebug.com/">Firebug</a><br />
<a href="http://getfirebug.com/wiki/index.php/Console_API#console.log.28object.5B.2C_object.2C_....5D.29">Firebug Console</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chomperstomp.com/using-jquery-to-bind-a-function-to-a-select-box-change-and-retrieve-the-selected-value/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>TOTW: Freenode IRC Webchat Client</title>
		<link>http://blog.chomperstomp.com/518/</link>
		<comments>http://blog.chomperstomp.com/518/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 12:00:39 +0000</pubDate>
		<dc:creator>Christopher McCulloh</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[TOTW]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[web sites]]></category>
		<category><![CDATA[browser tools]]></category>
		<category><![CDATA[communication]]></category>
		<category><![CDATA[irc]]></category>
		<category><![CDATA[Tool of the Week]]></category>
		<category><![CDATA[web apps]]></category>

		<guid isPermaLink="false">http://blog.chomperstomp.com/?p=518</guid>
		<description><![CDATA[This week&#8217;s Tool of the Week is The Freenode IRC Webchat Client. What it does: Allows you to chat on Freenode IRC through your browser, even if your corporate proxy blocks IRC (IRC is the third biggest security hole for corporate networks). When you need it: When you don&#8217;t have an IRC Client installed When [...]]]></description>
			<content:encoded><![CDATA[<p>This week&#8217;s Tool of the Week is <a href="http://webchat.freenode.net/">The Freenode IRC Webchat Client</a>.</p>
<p><strong>What it does:</strong></p>
<p>Allows you to chat on Freenode IRC through your browser, even if your corporate proxy blocks IRC (IRC is the third biggest security hole for corporate networks).</p>
<p><strong>When you need it:</strong></p>
<ul>
<li>When you don&#8217;t have an IRC Client installed</li>
<li>When IRC is blocked</li>
</ul>
<p><strong>How to use it:</strong><br />
<object id="scPlayer" width="546" height="668"><param name="movie" value="http://content.screencast.com/users/cmccullo/folders/Jing/media/1983a54a-a3b1-4f47-96dd-d31709dea369/jingswfplayer.swf"></param><param name="quality" value="high"></param><param name="bgcolor" value="#FFFFFF"></param><param name="flashVars" value="thumb=http://content.screencast.com/users/cmccullo/folders/Jing/media/1983a54a-a3b1-4f47-96dd-d31709dea369/FirstFrame.jpg&#038;containerwidth=546&#038;containerheight=668&#038;content=http://content.screencast.com/users/cmccullo/folders/Jing/media/1983a54a-a3b1-4f47-96dd-d31709dea369/freenode.swf"></param><param name="allowFullScreen" value="true"></param><param name="scale" value="showall"></param><param name="allowScriptAccess" value="always"></param><param name="base" value="http://content.screencast.com/users/cmccullo/folders/Jing/media/1983a54a-a3b1-4f47-96dd-d31709dea369/"></param>  <embed src="http://content.screencast.com/users/cmccullo/folders/Jing/media/1983a54a-a3b1-4f47-96dd-d31709dea369/jingswfplayer.swf" quality="high" bgcolor="#FFFFFF" width="546" height="668" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/users/cmccullo/folders/Jing/media/1983a54a-a3b1-4f47-96dd-d31709dea369/FirstFrame.jpg&#038;containerwidth=546&#038;containerheight=668&#038;content=http://content.screencast.com/users/cmccullo/folders/Jing/media/1983a54a-a3b1-4f47-96dd-d31709dea369/freenode.swf" allowFullScreen="true" base="http://content.screencast.com/users/cmccullo/folders/Jing/media/1983a54a-a3b1-4f47-96dd-d31709dea369/" scale="showall"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chomperstomp.com/518/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>TOTW: Dynamic Dummy Image Generator</title>
		<link>http://blog.chomperstomp.com/totw-dynamic-dummy-image-generator/</link>
		<comments>http://blog.chomperstomp.com/totw-dynamic-dummy-image-generator/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 12:00:23 +0000</pubDate>
		<dc:creator>Christopher McCulloh</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[TOTW]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[prototyping]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tool of the Week]]></category>

		<guid isPermaLink="false">http://blog.chomperstomp.com/?p=492</guid>
		<description><![CDATA[This week&#8217;s Tool of the Week is Dynamic Dummy Image Generator. What it does: Allows you to display custom sized dynamic images on any webpage using nothing but a normal image tag and a special URL. When you need it: Mockups Prototypes Place Holder Images How to use it: The Example:]]></description>
			<content:encoded><![CDATA[<p>This week&#8217;s Tool of the Week is <a href="http://dummyimage.com/">Dynamic Dummy Image Generator</a>.</p>
<p><strong>What it does:</strong></p>
<p>Allows you to display custom sized dynamic images on any webpage using nothing but a normal image tag and a special URL.</p>
<p><strong>When you need it:</strong></p>
<ul>
<li>Mockups</li>
<li>Prototypes</li>
<li>Place Holder Images</li>
</ul>
<p><strong>How to use it:</strong><br />
<object id="scPlayer" width="551" height="752"><param name="movie" value="http://content.screencast.com/users/cmccullo/folders/Jing/media/bc3222b3-1cbf-4e8b-9d43-ea05bef6bc1a/jingswfplayer.swf"></param><param name="quality" value="high"></param><param name="bgcolor" value="#FFFFFF"></param><param name="flashVars" value="thumb=http://content.screencast.com/users/cmccullo/folders/Jing/media/bc3222b3-1cbf-4e8b-9d43-ea05bef6bc1a/FirstFrame.jpg&#038;containerwidth=551&#038;containerheight=752&#038;content=http://content.screencast.com/users/cmccullo/folders/Jing/media/bc3222b3-1cbf-4e8b-9d43-ea05bef6bc1a/2010-02-04_1733.swf"></param><param name="allowFullScreen" value="true"></param><param name="scale" value="showall"></param><param name="allowScriptAccess" value="always"></param><param name="base" value="http://content.screencast.com/users/cmccullo/folders/Jing/media/bc3222b3-1cbf-4e8b-9d43-ea05bef6bc1a/"></param>  <embed src="http://content.screencast.com/users/cmccullo/folders/Jing/media/bc3222b3-1cbf-4e8b-9d43-ea05bef6bc1a/jingswfplayer.swf" quality="high" bgcolor="#FFFFFF" width="551" height="752" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/users/cmccullo/folders/Jing/media/bc3222b3-1cbf-4e8b-9d43-ea05bef6bc1a/FirstFrame.jpg&#038;containerwidth=551&#038;containerheight=752&#038;content=http://content.screencast.com/users/cmccullo/folders/Jing/media/bc3222b3-1cbf-4e8b-9d43-ea05bef6bc1a/2010-02-04_1733.swf" allowFullScreen="true" base="http://content.screencast.com/users/cmccullo/folders/Jing/media/bc3222b3-1cbf-4e8b-9d43-ea05bef6bc1a/" scale="showall"></embed></object></p>
<p><strong>The Example:</strong><br />
<script src='http://pastie.org/810133.js'></script></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chomperstomp.com/totw-dynamic-dummy-image-generator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>One Click Backup w/ Sabrent &amp; Hitachi</title>
		<link>http://blog.chomperstomp.com/one-click-backup-w-sabrent-hitachi/</link>
		<comments>http://blog.chomperstomp.com/one-click-backup-w-sabrent-hitachi/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 02:54:19 +0000</pubDate>
		<dc:creator>Christopher McCulloh</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[500GB]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[data backup]]></category>
		<category><![CDATA[deskstar]]></category>
		<category><![CDATA[docking station]]></category>
		<category><![CDATA[format]]></category>
		<category><![CDATA[hard drive]]></category>
		<category><![CDATA[hdd]]></category>
		<category><![CDATA[hitachi]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Install]]></category>
		<category><![CDATA[one touch backup]]></category>
		<category><![CDATA[sabrent]]></category>
		<category><![CDATA[sata]]></category>
		<category><![CDATA[USB]]></category>

		<guid isPermaLink="false">http://blog.chomperstomp.com/?p=480</guid>
		<description><![CDATA[I&#8217;ve been trying to get Mozy backup to work for two months now. First of all, my harddrive is 300GB, and apparently this will take two weeks to backup over my connection. On top of that, there is no &#8220;start where you left off&#8221; feature, so anytime windows downloads an update and auto-restarts, I&#8217;m screwed. [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been trying to get Mozy backup to work for two months now. First of all, my harddrive is 300GB, and apparently this will take two weeks to backup over my connection. On top of that, there is no &#8220;start where you left off&#8221; feature, so anytime windows downloads an update and auto-restarts, I&#8217;m screwed. So, I can either turn that off, or never have a backup. Crap.</p>
<p>Let&#8217;s try plan B.</p>
<p>Went to Frye&#8217;s Electronics and picked up a <a href="http://www.sabrent.com/#itemID=173&#038;section=Product&#038;itemName=ENCLOSURES">Sabrent SATA 2.5&#8243;/3.5&#8243; Hard Drive to USB 2.0 Docking Station</a>, which comes with a one click backup button. Then I grabed a <a href="http://www.hitachigst.com/portal/site/en/products/deskstar/7K1000.B/">Hitachi Deskstar 500GB Sata HDD</a>. Total cost: $99.00.</p>
<p>End goal is to have two or three HDD, once a week I&#8217;ll click the button and then grab the drive and toss it in my bag and take it to work and put it in my desk and swap it out with the drive in my desk and bring that one home. Rinse, wash, repeat. The other great thing about the dock is that it is scalable and useful. I can back up as many different computers and as much data as I want. I&#8217;m only limited by how many drives I want to buy.</p>
<p>So, a little trouble when trying to get the Hitachi drive to be recognized. I had to right click on &#8220;My Computer&#8221; and select &#8220;Manage&#8221;. Then I clicked on &#8220;Storage&#8221; and clicked &#8220;Disk Management&#8221;; Immediately some dialog thingy popped up asking if I wanted to do such-and-such and I said yes (without snapping a screenshot, oops). This was the end result:</p>
<p><a href="http://content.screencast.com/users/cmccullo/folders/Jing/media/cae7972f-a983-44dc-8d14-48784a07be28/2010-02-03_2136.png"><img class="embeddedObject" src="http://content.screencast.com/users/cmccullo/folders/Jing/media/cae7972f-a983-44dc-8d14-48784a07be28/2010-02-03_2136.png" width="638" height="452" border="0" /></a></p>
<p>It sees this drive as &#8220;drive 5&#8243;. Cool. Whatever.</p>
<p>So, now I right click on the drive and select something about &#8220;format&#8221; or &#8220;partition&#8221; (idk, couldn&#8217;t get a screen-shot, there&#8217;s only three options, you&#8217;ll figure it out) and a dialog pops up. I captured some screen caps of what I did along the way. My choices were based on almost nothing other than gut instinct. We&#8217;ll see how it works out:</p>
<p><a href="http://content.screencast.com/users/cmccullo/folders/Jing/media/4fd37cc4-f9dc-4b7d-a17d-b5d35eb8cb5c/2010-02-03_2144.png"><img class="embeddedObject" src="http://content.screencast.com/users/cmccullo/folders/Jing/media/4fd37cc4-f9dc-4b7d-a17d-b5d35eb8cb5c/2010-02-03_2144.png" width="503" height="393" border="0" /></a></p>
<p><a href="http://content.screencast.com/users/cmccullo/folders/Jing/media/8a8c2f98-6147-4620-920d-93fef9dcb347/2010-02-03_2144.png"><img class="embeddedObject" src="http://content.screencast.com/users/cmccullo/folders/Jing/media/8a8c2f98-6147-4620-920d-93fef9dcb347/2010-02-03_2144.png" width="503" height="393" border="0" /></a></p>
<p><a href="http://content.screencast.com/users/cmccullo/folders/Jing/media/8a8c2f98-6147-4620-920d-93fef9dcb347/2010-02-03_2144.png"><img class="embeddedObject" src="http://content.screencast.com/users/cmccullo/folders/Jing/media/8a8c2f98-6147-4620-920d-93fef9dcb347/2010-02-03_2144.png" width="503" height="393" border="0" /></a></p>
<p><a href="http://content.screencast.com/users/cmccullo/folders/Jing/media/7246a740-7522-43e4-b022-65e6aa9c6ba0/2010-02-03_2145.png"><img class="embeddedObject" src="http://content.screencast.com/users/cmccullo/folders/Jing/media/7246a740-7522-43e4-b022-65e6aa9c6ba0/2010-02-03_2145.png" width="503" height="393" border="0" /></a><br />
(Selected &#8220;no&#8221; here because I&#8217;m planning on this being assigned dynamically because I&#8217;ll theoretically be swapping multiple drives out here and I want them all to be seen as the same drive by the computer. So maybe I should have chosen &#8220;Z&#8221; or something, idk&#8230;)</p>
<p><a href="http://content.screencast.com/users/cmccullo/folders/Jing/media/2a1c59b7-107f-488e-a70d-f7caa93dee1c/2010-02-03_2145.png"><img class="embeddedObject" src="http://content.screencast.com/users/cmccullo/folders/Jing/media/2a1c59b7-107f-488e-a70d-f7caa93dee1c/2010-02-03_2145.png" width="503" height="393" border="0" /></a></p>
<p><a href="http://content.screencast.com/users/cmccullo/folders/Jing/media/00cc4f46-03b3-47ea-b236-d97186e361b5/2010-02-03_2145.png"><img class="embeddedObject" src="http://content.screencast.com/users/cmccullo/folders/Jing/media/00cc4f46-03b3-47ea-b236-d97186e361b5/2010-02-03_2145.png" width="503" height="393" border="0" /></a></p>
<p><a href="http://content.screencast.com/users/cmccullo/folders/Jing/media/0f4e6775-1753-44e1-8103-ab19689bb78c/2010-02-03_2145.png"><img class="embeddedObject" src="http://content.screencast.com/users/cmccullo/folders/Jing/media/0f4e6775-1753-44e1-8103-ab19689bb78c/2010-02-03_2145.png" width="638" height="452" border="0" /></a></p>
<p>At this point I closed out of the dialog assuming I was done. No Dice. When I went back in I saw it was formatting. After about 15 minutes it was only at 8%:</p>
<p><a href="http://content.screencast.com/users/cmccullo/folders/Jing/media/46a38e9b-465f-479f-8f89-2abc813c1c17/2010-02-03_2151.png"><img class="embeddedObject" src="http://content.screencast.com/users/cmccullo/folders/Jing/media/46a38e9b-465f-479f-8f89-2abc813c1c17/2010-02-03_2151.png" width="638" height="452" border="0" /></a></p>
<p>So, it&#8217;s going to take a while. About an hour later it&#8217;s done. Apparently bad call on the not assigning a drive letter. It&#8217;s ok though, I just right click on the drive partition and select &#8220;Change drive letter and path&#8230;&#8221;</p>
<p><a href="http://content.screencast.com/users/cmccullo/folders/Jing/media/bc0c0c83-8ef4-4b49-a59c-50988f9e4679/2010-02-03_2306.png"><img class="embeddedObject" src="http://content.screencast.com/users/cmccullo/folders/Jing/media/bc0c0c83-8ef4-4b49-a59c-50988f9e4679/2010-02-03_2306.png" width="638" height="452" border="0" /></a></p>
<p><a href="http://content.screencast.com/users/cmccullo/folders/Jing/media/eb19ea8f-e812-436e-9e86-376f575b6277/2010-02-03_2307.png"><img class="embeddedObject" src="http://content.screencast.com/users/cmccullo/folders/Jing/media/eb19ea8f-e812-436e-9e86-376f575b6277/2010-02-03_2307.png" width="384" height="256" border="0" /></a></p>
<p><a href="http://content.screencast.com/users/cmccullo/folders/Jing/media/cd053fcb-a039-471f-8aa1-f51c2a78d20f/2010-02-03_2307.png"><img class="embeddedObject" src="http://content.screencast.com/users/cmccullo/folders/Jing/media/cd053fcb-a039-471f-8aa1-f51c2a78d20f/2010-02-03_2307.png" width="384" height="190" border="0" /></a></p>
<p>And hey, check it out! There it is!</p>
<p><a href="http://content.screencast.com/users/cmccullo/folders/Jing/media/5d021c19-75ef-4ccc-b06f-9a41680d0556/2010-02-03_2308.png"><img class="embeddedObject" src="http://content.screencast.com/users/cmccullo/folders/Jing/media/5d021c19-75ef-4ccc-b06f-9a41680d0556/2010-02-03_2308.png" width="800" height="600" border="0" /></a></p>
<p>Now I can easily use the software and one button backup that comes with the sabrent docking station.</p>
<p><a href="http://content.screencast.com/users/cmccullo/folders/Jing/media/02e66d88-41c5-45bb-b7ea-9bf88a657cf1/2010-02-03_2311.png"><img class="embeddedObject" src="http://content.screencast.com/users/cmccullo/folders/Jing/media/02e66d88-41c5-45bb-b7ea-9bf88a657cf1/2010-02-03_2311.png" width="485" height="412" border="0" /></a></p>
<p><a href="http://content.screencast.com/users/cmccullo/folders/Jing/media/b4782592-0f1e-407c-a7a0-27ffe8bbc233/2010-02-03_2311.png"><img class="embeddedObject" src="http://content.screencast.com/users/cmccullo/folders/Jing/media/b4782592-0f1e-407c-a7a0-27ffe8bbc233/2010-02-03_2311.png" width="479" height="433" border="0" /></a></p>
<p><a href="http://content.screencast.com/users/cmccullo/folders/Jing/media/0f85e2da-fb09-486d-8fe5-fb50925b014a/2010-02-03_2312.png"><img class="embeddedObject" src="http://content.screencast.com/users/cmccullo/folders/Jing/media/0f85e2da-fb09-486d-8fe5-fb50925b014a/2010-02-03_2312.png" width="479" height="433" border="0" /></a></p>
<p><a href="http://content.screencast.com/users/cmccullo/folders/Jing/media/00bf306e-110e-4f22-87bb-08858a40f49e/2010-02-03_2312.png"><img class="embeddedObject" src="http://content.screencast.com/users/cmccullo/folders/Jing/media/00bf306e-110e-4f22-87bb-08858a40f49e/2010-02-03_2312.png" width="485" height="412" border="0" /></a></p>
<p><a href="http://content.screencast.com/users/cmccullo/folders/Jing/media/93f4335d-401a-4fa1-881c-8277ff882e38/2010-02-03_2316.png"><img class="embeddedObject" src="http://content.screencast.com/users/cmccullo/folders/Jing/media/93f4335d-401a-4fa1-881c-8277ff882e38/2010-02-03_2316.png" width="606" height="169" border="0" /></a></p>
<p>This step is going to take a while&#8230;</p>
<p><a href="http://content.screencast.com/users/cmccullo/folders/Jing/media/0c27a2d3-928e-4234-b0bd-13452b6f3824/2010-02-03_2324.png"><img class="embeddedObject" src="http://content.screencast.com/users/cmccullo/folders/Jing/media/0c27a2d3-928e-4234-b0bd-13452b6f3824/2010-02-03_2324.png" width="606" height="169" border="0" /></a></p>
<p>About an hour in&#8230;</p>
<p><a href="http://content.screencast.com/users/cmccullo/folders/Jing/media/ec43b5cd-5bba-47b6-ac6c-fa92ff3b039a/2010-02-03_2358.png"><img class="embeddedObject" src="http://content.screencast.com/users/cmccullo/folders/Jing/media/ec43b5cd-5bba-47b6-ac6c-fa92ff3b039a/2010-02-03_2358.png" width="606" height="169" border="0" /></a></p>
<p>Went to bed, woke up, <a href="http://blog.chomperstomp.com/fixing-dell-xps-410-front-panel-error-codes-3-4/">and my computer had crashed (it does this at least once a week, another reason Mozy wasn&#8217;t working)</a>. So I checked the backup drive. Nope. Didn&#8217;t get everything. Got about half of everything. Trying again&#8230; </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chomperstomp.com/one-click-backup-w-sabrent-hitachi/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>TOTW: Subversion &amp; Subversion Clients for Mac</title>
		<link>http://blog.chomperstomp.com/totw-subversion-clients-for-mac/</link>
		<comments>http://blog.chomperstomp.com/totw-subversion-clients-for-mac/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 12:00:54 +0000</pubDate>
		<dc:creator>Christopher McCulloh</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[TOTW]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Install]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Macintosh]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[Subversion Client]]></category>
		<category><![CDATA[Subversion Mac]]></category>
		<category><![CDATA[SVN]]></category>
		<category><![CDATA[SVN Client]]></category>
		<category><![CDATA[SVN Mac]]></category>
		<category><![CDATA[Tool of the Week]]></category>

		<guid isPermaLink="false">http://blog.chomperstomp.com/?p=464</guid>
		<description><![CDATA[I did a little research a few months back about Subversion Clients for Mac. I ended up switching to GIT, but since I already had this post mostly finished, here&#8217;s what I found. This is going to break a little from the traditional TOTW format since it&#8217;s more of a sampling of a lot of [...]]]></description>
			<content:encoded><![CDATA[<p>I did a little research a few months back about Subversion Clients for Mac. I ended up switching to GIT, but since I already had this post mostly finished, here&#8217;s what I found. This is going to break a little from the traditional TOTW format since it&#8217;s more of a sampling of a lot of different tools. I&#8217;ve <a href="http://blog.chomperstomp.com/mac-subversion-client-scplugin-installation/">already</a> <a href="http://blog.chomperstomp.com/command-line-subversion-client-mac/">posted</a> about two of these before&#8230;</p>
<p><strong>What it is:</strong><br />
Subversion is a semi-modern version control system. As I said, Git is quickly replacing it as the &#8220;next big thing&#8221;. But if you are going to do version control, and you&#8217;re not doing Git, you should at least consider Subversion (and I&#8217;d stay away from CVS, it&#8217;s old and borked). It allows you to &#8220;save states&#8221; of your program. So, instead of &#8220;save as&#8221; > &#8220;myProject1&#8243;, then &#8220;save as&#8221; > &#8220;myProject1working&#8221; and then &#8220;myProject1tryNewThing&#8221; etc, you would just have one copy of your project/file that you &#8220;commit&#8221; to your version control. Each commit lives as it&#8217;s own snapshot so that if you need to go back to another version, you just browse your history and restore that version. You can even &#8220;diff&#8221; your current version with any other older version to see what you changed if you&#8217;re trying to figure out how you broke something.</p>
<p><strong>When you need it:</strong><br />
Anytime you do any software project at all, big or small, I&#8217;d say you need version control. But here&#8217;s the bullet list:</p>
<p>Working on a software project:</p>
<ul>
<li>In a group</li>
<li>By yourself on one machine</li>
<li>By yourself across multiple machines</li>
<li>Working on an open source project to help distribute the source code</li>
<li>Joining an open source project (if they don&#8217;t have version control, they aren&#8217;t worth joining, unless you are joining to set them up with version control <img src='http://blog.chomperstomp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  )</li>
</ul>
<p>There&#8217;s a few options out there, but no clear winner. On Windows, TortoiseSVN seems to be the clear winner, and is a great tool. Nothing stands out this way on Mac. At least nothing free. So here you&#8217;ll find a list of several Subversion clients for Mac. My favorite as of this writing is Versions, but it costs $60 (there&#8217;s a free 30 day trial). I recommend setting up a subversion server (either on your local machine, or corsair) and using it. Any job worth having is going to require you to use a version control system, so it&#8217;s best you become familiar with one now.</p>
<p><a href="http://stackoverflow.com/questions/899/best-subversion-client-for-mac-os">Here&#8217;s a question on StackOverflow</a> discussing these plugins if you&#8217;re interested in learning a little more.</p>
<p><strong>Using Subversion from command line</strong></p>
<div style="width:425px;text-align:left" id="__ss_2463652"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/cmcculloh/installing-and-using-command-line-subversion-client-on-mac" title="Installing And Using Command Line Subversion Client On Mac">Installing And Using Command Line Subversion Client On Mac</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=installingandusingcommandlinesubversionclientonmac-091110003038-phpapp02&#038;stripped_title=installing-and-using-command-line-subversion-client-on-mac" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=installingandusingcommandlinesubversionclientonmac-091110003038-phpapp02&#038;stripped_title=installing-and-using-command-line-subversion-client-on-mac" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">documents</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/cmcculloh">Christopher McCulloh</a>.</div>
</div>
<p><a href="http://homepage.mac.com/martinott/">Martin Ott&#8217;s Binaries</a><br />
<a href="http://svnbook.red-bean.com/en/1.5/index.html">Free Subversion Book</a></p>
<p><strong><a href="http://versionsapp.com/">Versions</a></strong></p>
<p>Versions provides a pleasant way to work with Subversion on your Mac. Whether you&#8217;re a hardcore Subversion user or new to version control systems, Versions will help streamline your workflow. Versions is here now, so say hello to the fresh new look of your repository and start saying less to that command-line interface. Download the free demo to take it for a spin.</p>
<p><strong><a href="http://scplugin.tigris.org/">SCPlugin</a></strong></p>
<p><a href="http://scplugin.tigris.org/servlets/ProjectDocumentList">SCPlugin Download</a></p>
<div style="width:425px;text-align:left" id="__ss_2452160"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/cmcculloh/installing-scplugin-subversion-client" title="Installing SCPlugin (Subversion Client)">Installing SCPlugin (Subversion Client)</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=installinsubversionclient-091108150307-phpapp02&#038;stripped_title=installing-scplugin-subversion-client" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=installinsubversionclient-091108150307-phpapp02&#038;stripped_title=installing-scplugin-subversion-client" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">documents</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/cmcculloh">Christopher McCulloh</a>.</div>
</div>
<p><a href="http://zigversion.com/">ZigVersion</a></p>
<p>ZigVersion is an easy to use interface for Subversion, a popular open source version control system. Instead of simply reproducing the command line concepts as a graphical interface, we looked at the typical workflows of professional programmers and designed an interface around them.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chomperstomp.com/totw-subversion-clients-for-mac/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>TOTW: Google Closure JavaScript Compiler Web Interface</title>
		<link>http://blog.chomperstomp.com/totw-google-closure-javascript-compiler-web-interface/</link>
		<comments>http://blog.chomperstomp.com/totw-google-closure-javascript-compiler-web-interface/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 12:00:50 +0000</pubDate>
		<dc:creator>Christopher McCulloh</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[TOTW]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[programming concepts]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[web sites]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tool of the Week]]></category>

		<guid isPermaLink="false">http://blog.chomperstomp.com/?p=458</guid>
		<description><![CDATA[This week&#8217;s Tool of the Week is Google Closure JavaScript Compiler. I know everyone has probably heard of it, but if you haven&#8217;t gotten around to checking it out, this post is great for you. What it does: Allows you to compile JavaScript down to a compressed form. It reads in your JavaScript, parses it, [...]]]></description>
			<content:encoded><![CDATA[<p>This week&#8217;s Tool of the Week is <a href="http://closure-compiler.appspot.com/home/">Google Closure JavaScript Compiler</a>. I know everyone has probably heard of it, but if you haven&#8217;t gotten around to checking it out, this post is great for you.</p>
<p><strong>What it does:</strong></p>
<p>Allows you to compile JavaScript down to a compressed form. It reads in your JavaScript, parses it, and re-writes it to be much smaller. This is good for you because it will make your site load faster, much faster in some cases.</p>
<p><strong>When you need it:</strong></p>
<ul>
<li>To compress your JavaScript</li>
<li>To combine multiple JavaScript Files</li>
</ul>
<p><strong>How to use it:</strong><br />
<object width="542" height="594"><param name="movie" value="http://content.screencast.com/users/cmccullo/folders/Jing/media/6f164bd6-ae16-4c15-9c5c-261230405e83/jingswfplayer.swf"></param><param name="quality" value="high"></param><param name="bgcolor" value="#FFFFFF"></param><param name="flashVars" value="thumb=http://content.screencast.com/users/cmccullo/folders/Jing/media/6f164bd6-ae16-4c15-9c5c-261230405e83/FirstFrame.jpg&#038;containerwidth=542&#038;containerheight=594&#038;content=http://content.screencast.com/users/cmccullo/folders/Jing/media/6f164bd6-ae16-4c15-9c5c-261230405e83/Google%20Closure%20JavaScript%20Compiler.swf"></param><param name="allowFullScreen" value="true"></param><param name="scale" value="showall"></param><param name="allowScriptAccess" value="always"></param><param name="base" value="http://content.screencast.com/users/cmccullo/folders/Jing/media/6f164bd6-ae16-4c15-9c5c-261230405e83/"></param>  <embed src="http://content.screencast.com/users/cmccullo/folders/Jing/media/6f164bd6-ae16-4c15-9c5c-261230405e83/jingswfplayer.swf" quality="high" bgcolor="#FFFFFF" width="542" height="594" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/users/cmccullo/folders/Jing/media/6f164bd6-ae16-4c15-9c5c-261230405e83/FirstFrame.jpg&#038;containerwidth=542&#038;containerheight=594&#038;content=http://content.screencast.com/users/cmccullo/folders/Jing/media/6f164bd6-ae16-4c15-9c5c-261230405e83/Google%20Closure%20JavaScript%20Compiler.swf" allowFullScreen="true" base="http://content.screencast.com/users/cmccullo/folders/Jing/media/6f164bd6-ae16-4c15-9c5c-261230405e83/" scale="showall"></embed></object></p>
<p><strong>The Example:</strong><br />
<script src='http://pastie.org/791507.js'></script></p>
<p><strong>Additional Notes:</strong><br />
Notice in the compile directions there is an @output_file_name parameter. You can change this to something other than &#8220;default.js&#8221; (you can name it anything you want. Then you can actually access the results by clicking on the link on the right hand pane that says &#8220;The code may also be accessed at default.js&#8221; (if you rename it it will put the name you put instead of default.js). <a href="http://closure-compiler.appspot.com/code/jscd47741c5c9c1671cc424ea966c2b6cf/script.full.min.js">Here&#8217;s the file generated by my example</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chomperstomp.com/totw-google-closure-javascript-compiler-web-interface/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TOTW: Etherpad.com</title>
		<link>http://blog.chomperstomp.com/totw-etherpad-com/</link>
		<comments>http://blog.chomperstomp.com/totw-etherpad-com/#comments</comments>
		<pubDate>Mon, 28 Dec 2009 12:00:00 +0000</pubDate>
		<dc:creator>Christopher McCulloh</dc:creator>
				<category><![CDATA[TOTW]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[screencast]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[web sites]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tool of the Week]]></category>

		<guid isPermaLink="false">http://blog.chomperstomp.com/?p=425</guid>
		<description><![CDATA[This week&#8217;s Tool of the Week is Etherpad.com. What it does: Allows you to edit a text file collaboratively in real time with others. Each person&#8217;s changes are highlighted in a unique color. The file gets saved to their server at a unique URL that you can share and reference. You can view past versions [...]]]></description>
			<content:encoded><![CDATA[<p>This week&#8217;s Tool of the Week is <a href="http://etherpad.com">Etherpad.com</a>.</p>
<p><strong>What it does:</strong></p>
<p>Allows you to edit a text file collaboratively in real time with others. Each person&#8217;s changes are highlighted in a unique color. The file gets saved to their server at a unique URL that you can share and reference. You can view past versions of the file using a &#8220;Time Slider&#8221;. It&#8217;s kind of like Google Wave, but easier to use&#8230; There is even a chat feature on the side of the page for off-document conversation that persists from session to session.</p>
<p><strong>When you need it:</strong></p>
<ul>
<li>When walking through or collaborating on some code with another developer</li>
<li>When collaborating on a text document (like a list or something)</li>
</ul>
<p><strong>How to use it:</strong></p>
<p><object width="553" height="721"><param name="movie" value="http://content.screencast.com/users/cmccullo/folders/Jing/media/1f0dbe42-d487-4f33-8ac0-fe9b924534d8/jingswfplayer.swf"></param><param name="quality" value="high"></param><param name="bgcolor" value="#FFFFFF"></param><param name="flashVars" value="thumb=http://content.screencast.com/users/cmccullo/folders/Jing/media/1f0dbe42-d487-4f33-8ac0-fe9b924534d8/FirstFrame.jpg&#038;containerwidth=553&#038;containerheight=721&#038;content=http://content.screencast.com/users/cmccullo/folders/Jing/media/1f0dbe42-d487-4f33-8ac0-fe9b924534d8/etherpad_example.swf"></param><param name="allowFullScreen" value="true"></param><param name="scale" value="showall"></param><param name="allowScriptAccess" value="always"></param><param name="base" value="http://content.screencast.com/users/cmccullo/folders/Jing/media/1f0dbe42-d487-4f33-8ac0-fe9b924534d8/"></param>  <embed src="http://content.screencast.com/users/cmccullo/folders/Jing/media/1f0dbe42-d487-4f33-8ac0-fe9b924534d8/jingswfplayer.swf" quality="high" bgcolor="#FFFFFF" width="553" height="721" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/users/cmccullo/folders/Jing/media/1f0dbe42-d487-4f33-8ac0-fe9b924534d8/FirstFrame.jpg&#038;containerwidth=553&#038;containerheight=721&#038;content=http://content.screencast.com/users/cmccullo/folders/Jing/media/1f0dbe42-d487-4f33-8ac0-fe9b924534d8/etherpad_example.swf" allowFullScreen="true" base="http://content.screencast.com/users/cmccullo/folders/Jing/media/1f0dbe42-d487-4f33-8ac0-fe9b924534d8/" scale="showall"></embed></object></p>
<p>In case you blinked at the end, I had Firefox and Chrome both open and was editing the same pad from within the two browsers. It kept the edits in sync live between the two browsers. This would have been more apparent had I actually had them both showing, which I should have done, but didn&#8217;t think about it until just now&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chomperstomp.com/totw-etherpad-com/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
