<?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>Justin Spradlin &#187; General Technology</title>
	<atom:link href="http://www.justinspradlin.com/category/general-technology/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.justinspradlin.com</link>
	<description>Coding and such...</description>
	<lastBuildDate>Sun, 06 Mar 2011 06:19:59 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>5 Reasons VirtualBox Rocks My Socks</title>
		<link>http://www.justinspradlin.com/general-technology/5-reasons-virtualbox-rocks-my-socks/</link>
		<comments>http://www.justinspradlin.com/general-technology/5-reasons-virtualbox-rocks-my-socks/#comments</comments>
		<pubDate>Mon, 12 Jan 2009 01:30:37 +0000</pubDate>
		<dc:creator>Justin Spradlin</dc:creator>
				<category><![CDATA[General Technology]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[VirtualBox]]></category>

		<guid isPermaLink="false">http://www.justinspradlin.com/?p=24</guid>
		<description><![CDATA[Lately I&#8217;ve been interested in learning about a variety of the Operating Systems that are available today.  I&#8217;m a big advocate of using the right tool for the job so experimenting with the latest OSes is a must in order to figure out the strengths and weaknesses of each.  While experimentation is a [...]]]></description>
			<content:encoded><![CDATA[<a href="http://www.justinspradlin.com/general-technology/5-reasons-virtualbox-rocks-my-socks/"><img src="http://www.justinspradlin.com/images/vboxlogo.jpg" alt="Virtualbox Logo" class="rev_right"/></a><p>Lately I&#8217;ve been interested in learning about a variety of the Operating Systems that are available today.  I&#8217;m a big advocate of using the right tool for the job so experimenting with the latest OSes is a must in order to figure out the strengths and weaknesses of each.  While experimentation is a great way to learn it can be a bit of a pain to find an old machine, format the hard drive, and install an OS.  <a href="http://en.wikipedia.org/wiki/Dual_boot">Dual booting</a> is an alternative option, but there is the inherent risk of messing up the current state of your machine.</p>
<p>Overcoming these issues was always a bit of a challenge for me until about six months ago when I stumbled upon <a href="http://www.virtualbox.org/">VirtualBox</a>.  VirtualBox is Sun&#8217;s &#8220;family of powerful x86 virtualization products.&#8221;  VirtualBox allows you to install and run &#8220;guest&#8221; operating systems in their own virtual environment on top of a &#8220;host&#8221; operating system.  I know that virtualization has been around for a while, but until finding VirtualBox, I&#8217;ve never had much success running virtualization software.  VirtualBox is different.  It&#8217;s intuitive and easy to use.  Here are the top 5 reasons why I love VirtualBox:</p>
<span id="more-24"></span>
<ol>
	<li><a href="#cheap_machines">Cheap Machines for Easy Experimentation</a></li>
	<li><a href="#dual_booting">No More Dual Booting</a></li>
	<li><a href="#networking_works">Networking Works</a></li>
	<li><a href="#vm_cloning">Virtual Machine Cloning</a></li>
	<li><a href="#guest_additions">Guest Additions Make for Seamless Work</a></li>
</ol>
<h3 id="cheap_machines">1. Cheap Machines for Easy Experimentation</h3>
<p>If you&#8217;ve ever wanted to try out a particular OS, but didn&#8217;t feel like dealing with the hassles mentioned above then VirtualBox may be exactly what you are looking for.  VirtualBox allows you to install guest operating systems in their own virtual environment which means there are no side effects on the current state of your machine (other than taking up some hard drive space of course).  If you mess something up simply discard your virtual machine (VM) and start over.</p>
<p>The net effect is that you save a lot of time.  No need for additional machines, formatting, or partitioning.  Simply create a new VM, mount the CD drive (or an .iso image of the OS you want to install), and fire up the virtual machine.</p>
<p><a href="http://www.justinspradlin.com/images/vbox_config.jpg"><img class="centered" src="http://www.justinspradlin.com/images/vbox_config_small.jpg" alt="VirtualBox settings window"/></a><br/><i>VirtualBox allows you to install a wide range of OSes including, but not limited to Linux (Ubuntu, etc.), BSD, Solaris, Windows (including 3.1).  For a full list of guest operating systems <a href="http://www.virtualbox.org/wiki/Guest_OSes">click here.</a></i></p>
<h3 id="dual_booting">2. No More Dual Booting</h3>
<p>When I first started dual booting years ago I appreciated the fact that it was possible to run two (or more) operating systems on the same machine.  This proved to be very useful when I wanted to play video games, write, or work with multimedia and graphics tools using Windows, but wanted to develop software using the tools available under various flavors of Linux.  There was a problem however.  Sometimes I would want to do work that required tools available in one of the OSes but not the other.  Other times I would simply prefer to work in a way that favored a particular operating system.  In either case I would often have to reboot my machine, select a particular OS, do my work in that OS, and then reboot back to my main operating system.  As you can imagine this was quite painful.</p>
<p>With VirtualBox you can have the best of all worlds.  You can work with as many OSes as you want at the same time.  I do this a lot particularly when developing websites.  I can run a full <a href="http://en.wikipedia.org/wiki/LAMP_(software_bundle)">LAMP</a> stack on an Ubuntu Linux guest operating system while I use photo editing software on my Windows host machine.  As a bonus you can place the guest OS into &#8220;Full Screen&#8221; mode and be totally ignorant of the fact that you are running a virtualized operating system.  Best of all:  No reboots required.</p>
<p><a href="http://www.justinspradlin.com/images/ubuntu_guest.jpg"><img class="centered" src="http://www.justinspradlin.com/images/ubuntu_guest_small.jpg" alt="VirtualBox running inside of Windows"/></a><br/><i>VirtualBox running inside of Windows.</i></p>
<p><a href="http://www.justinspradlin.com/images/ubuntu_full.jpg"><img class="centered" src="http://www.justinspradlin.com/images/ubuntu_full_small.jpg" alt="VirtualBox running in full screen mode"/></a><br/><i>VirtualBox running in full screen mode.</i></p>
<h3 id="networking_works">3. Networking Works</h3>
<p>One of the most exciting aspects about VirtualBox for me is that networking works between guest and host operating systems, guest and other guest operating systems, and guest operating systems and external networks (i.e. the Internet).  This has a lot of interesting implications.  One thing that I&#8217;ve been able to do is set up an old Dell computer in my closet running two VirtualBox VMs.  I have Ubuntu Linux installed on both VM instances.  I use one VM to serve as a centralized <a href="http://git-scm.com/">Git</a> source code repository (you are using <a href="http://www.justinspradlin.com/general-technology/getting-it-on-with-git-part-1/">Git</a>, <a href="http://www.justinspradlin.com/general-technology/getting-it-on-with-git-part-2/">right?</a>).  The other VM hosts a LAMP stack for serving a simple Wiki.  On my network these two VMs act as individual machines.  I can restart, shutdown, or in any other way modify one VM without disrupting the other.</p>
<p>With previous versions of VirtualBox networking could be slightly cumbersome to set up, but version 2.1 makes setup a breeze.  If you do try VirtualBox and get caught up along the way there is plenty of <a href="http://www.virtualbox.org/wiki/Documentation">documentation</a> and a strong <a href="http://www.virtualbox.org/wiki/Community">development community</a> to help you out along the way.</p>
<p><a href="http://www.justinspradlin.com/images/networking.jpg"><img class="centered" src="http://www.justinspradlin.com/images/networking_small.jpg" alt="VirtualBox networking"/></a><br/><i>VirtualBox networking allows for communication between guests, hosts, and outside networks.</i></p>
<h3 id="vm_cloning">4. Virtual Machine Cloning</h3>
<p>I once spent a lot of time setting up one of my virtual machine guest environments to the exact specifications that I needed.  I downloaded tons of software, added bash aliases, and tweaked various configurations to suit my needs.  Then an interesting thing happened.  I ended up needing another VM with the exact same specifications.  Taking the time to manually configure another VM wasn&#8217;t really an option.  Fortunately VirtualBox has built in VM cloning* support.  All I had to do was run the following command:<sup>**</sup></p>
<div class="codeBlock">
	<pre><code>VBoxManage clonehd &lt;/path/source.vdi&gt; &lt;/path/target.vdi&gt; -format VDI</code></pre>
</div>
<p>This saves a lot of time by reducing the effort needed to reproduce the guest virtual machines that you have previously set up using VirtualBox.  This also allows you to share your environment with other people by simply giving them access to your .vdi file (VirtualBox VM instance) and configuration settings.  In addition, once you set up a pristine environment you can clone it and always have it stored as a backup incase you mess something up with the VM you are currently working with.</p>
<p><sup>*</sup><i>There is a bit of a bug in VirtualBox 2.1.  The <code>clonehd</code> command seems to be generating corrupt .vdi files.  In the meantime as a work around you can simply copy the .vdi file, paste it into a target directory, and then run <code>VBoxManage internalcommands sethduuid &lt;target.vdi&gt;</code> command (thanks to <a href="http://paulsiu.wordpress.com/category/virtualization/virtualbox/">The Bonobo Journal</a> for the tip).</i></p>
<p><sup>**</sup><i>Note:  On Windows don&#8217;t forget to make sure you add the VBoxManage application to your path so that you can run it from the command line.</i></p>
<h3 id="guest_additions">5. Guest Additions Make for Seamless Work</h3>
<p>If you decide to install VirtualBox you will definitely want to install the &#8220;Guest Additions&#8221; package that is available for most guest operating systems.  Guest Additions allow for better interoperability between your installed guest VMs and your host system.  A few of the best features included with Guest Additions are:</p>
<blockquote>
<p><strong>Shared Clipboard</strong> &#8211; gives you the ability to bi-directionally copy and paste text between guest and host operating systems.</p>
<p><strong>Independent Mouse Control</strong> &#8211; permits you to move your mouse between guest and host systems.  Without Guest Additions installed your mouse is &#8220;captured&#8221; by the guest virtual machine until the &#8220;Host Key&#8221; is pressed (usually the right <code>ctrl</code> key).</p>
<p><strong>Better Video Support</strong> &#8211; allows you to resize your VM window while also dynamically resizing the screen resolution of your guest operating system.</p>
</blockquote>
<p><a href="http://www.justinspradlin.com/images/resized_guest.jpg"><img class="centered" src="http://www.justinspradlin.com/images/resized_guest_small.jpg" alt="Resized VirtualBox Window"/></a><br/><i>With Guest Additions installed VirtualBox screens can dynamically be resized to any screen resolution.</i></p>
<h3>Conclusion</h3>
<p>Besides simply saving time, space, and energy there are a lot of real world applications for VirtualBox.  I really like to setup multiple VMs on my host machine to serve as development and staging environments for the various web applications that I work on.  Also I like to test my web applications using a combination of different operating systems and browsers (especially various Windows/Internet Explorer combinations).  With VirtualBox this is all very straight forward.  In the future I would like to use VirtualBox to experiment with running multiple VMs over a network to learn more about setting up clustered, load balanced environments.</p>
<p>There are other virtualization and emulation tools on the market (<a href="http://www.vmware.com/">VMWare</a>, <a href="http://www.xen.org/">Xen</a>, <a href="http://www.winehq.org/">Wine</a>), but I find that VirtualBox has the right mix of performance and ease of use to suit all of my development needs.</p>]]></content:encoded>
			<wfw:commentRss>http://www.justinspradlin.com/general-technology/5-reasons-virtualbox-rocks-my-socks/feed/</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
		<item>
		<title>Getting it on with Git &#8211; Part 2</title>
		<link>http://www.justinspradlin.com/general-technology/getting-it-on-with-git-part-2/</link>
		<comments>http://www.justinspradlin.com/general-technology/getting-it-on-with-git-part-2/#comments</comments>
		<pubDate>Sun, 05 Oct 2008 21:20:09 +0000</pubDate>
		<dc:creator>Justin Spradlin</dc:creator>
				<category><![CDATA[General Technology]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[Project Management]]></category>

		<guid isPermaLink="false">http://www.justinspradlin.com/?p=21</guid>
		<description><![CDATA[In my previous post I introduced Git and discussed its distributed nature, speed, and powerful branching/merging capabilities.  Today I'm going to continue the discussion on Git by writing about GitHub, Git in practice, and why Git may not be for everyone.

GitHub is Sexy
GitHub is an online Git repository hosting service that is freely available [...]]]></description>
			<content:encoded><![CDATA[<p>In my <a href="http://www.justinspradlin.com/general-technology/getting-it-on-with-git-part-1/">previous post</a> I introduced <a href="http://git.or.cz/">Git</a> and discussed its distributed nature, speed, and powerful branching/merging capabilities.  Today I'm going to continue the discussion on Git by writing about GitHub, Git in practice, and why Git may not be for everyone.</p>
<span id="more-21"></span>
<h3 id="github_sexy">GitHub is Sexy</h3>
<p><a href="http://github.com/">GitHub</a> is an online Git repository hosting service that is freely available to anyone who wishes to share their Git managed projects.  The service is very similar to <a href="http://sourceforge.net/">SourceForge</a> and <a href="http://code.google.com/hosting/">Google Code Hosting</a>, but because GitHub uses Git as its source control management system it offers a variety of advantages over other code hosting services.</p>
<p>To begin with, by using GitHub the barrier for working on and contributing to open source projects is significantly reduced.  In traditional centralized models only certain developers are given commit rights to any given project repository.  This creates a problem however for those developers who checkout the project and make changes.  Those developers have no way of keeping track of their local changes and history unless they import the project into their own centralized repository.  Doing this however means that the developer will lose the ability to easily synchronize their local project with the original project.</p>
<p>This problem goes away when using Git because all commits are local.  You can checkout a project from GitHub, makes changes as you wish, and commit them to your local repository.  This allows you to keep track of all of your changes and their history.  If you want to synchronize with the original project's repository you simply need to issue a "pull" command to get the latest updates.  As a bonus, if you come up with some feature that you think is particularly useful to the original project, you can ask the owner of that project to issue a "pull" request from your repository so your changes can be merged back into the master project.</p>
<p>Setting up your own remote Git repository is not that difficult, but GitHub adds a great web interface on top of Git that feels very much like a social networking site and serves as a platform for developers to share and contribute to each other's projects.  A lot of big name open source projects (especially in the Ruby community) are hosted on GitHub including <a href="http://www.rubyonrails.org/">Rails</a>, <a href="http://merbivore.com/">Merb</a>, and <a href="http://script.aculo.us/">Script.aculo.us</a> so developers can feel confident that the guys at GitHub have their act together.  GitHub also offers a variety of other features including private repositories (for a fee), a developer API, and integration with other services including <a href="http://www.basecamphq.com/">Basecamp</a>, <a href="http://lighthouseapp.com/">Lighthouse</a>, and <a href="http://twitter.com/">Twitter</a>.</p>
<h3 id="git_in_practice">Git in Practice</h3>
<p>It's highly unlikely that a developer will be able to get their current project team to switch version control systems overnight, but with Git you don't have to.  Git has powerful migration tools that can be used in conjunction with other version control systems, especially <a href="http://subversion.tigris.org/">Subversion</a>.  Current Subversion users can use Git to manage the source code on their local machine while still staying in sync with their team's Subversion repository using a built in Git command called "<a href="http://www.kernel.org/pub/software/scm/git/docs/git-svn.html">git-svn</a>".  The git-svn command allows developers to "push" and "pull" commits to and from a centralized Subversion repository.  This gives developers the power of local branching/merging capabilities using Git without forcing the technology on their team members.  In fact, no one even needs to know that Git is being used.</p>
<h3 id="git_not_for_everyone">Git, it's not for everyone</h3>
<p>Git is a pretty incredible tool, but it is likely not going to be championed by all developers.  To begin with, Git's learning curve can be a bit steep especially when compared with other version control tools.  Developers who desire to give Git a shot should be very comfortable working with the command line because Git's visualization support leaves something to be desired.</p>
<p>Git was created by Linux kernel developer Linus Torvalds so it may not come as a huge surprise that Git support on Windows is a bit lackluster.  I would guess that a majority of developers use Windows in some capacity so having a tool with weak Windows support is likely to hinder the adoption of that tool.  Fortunately, there is a project called <a href="http://code.google.com/p/msysgit/">MSysgit</a> which allows developers to use Git on their Windows machines.  I've personally used this tool on my Windows XP laptop and find that it works pretty well.</p>
<h3>Conclusion</h3>
<p>Minor drawbacks aside, Git is a pretty amazing tool for source control management and will be the one that I use for my future projects.  Its distributed nature, speed, and branching/merging capabilities make it a great tool for managing source code changes and revision history.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.justinspradlin.com/general-technology/getting-it-on-with-git-part-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Getting it on with Git &#8211; Part 1</title>
		<link>http://www.justinspradlin.com/general-technology/getting-it-on-with-git-part-1/</link>
		<comments>http://www.justinspradlin.com/general-technology/getting-it-on-with-git-part-1/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 02:40:56 +0000</pubDate>
		<dc:creator>Justin Spradlin</dc:creator>
				<category><![CDATA[General Technology]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[Project Management]]></category>

		<guid isPermaLink="false">http://www.justinspradlin.com/?p=20</guid>
		<description><![CDATA[When I first heard about Git a few months ago the first thing that popped in my mind was: "Why the hell would I ever want to learn a new version control system?"  Subversion works perfectly fine, doesn't it?  I resisted at first, but after a few weeks I came around and decided [...]]]></description>
			<content:encoded><![CDATA[<p>When I first heard about <a href="http://git.or.cz/">Git</a> a few months ago the first thing that popped in my mind was: "Why the hell would I ever want to learn a new version control system?"  Subversion works perfectly fine, doesn't it?  I resisted at first, but after a few weeks I came around and decided to take Git for a test drive.  This is what I discovered:</p>
<span id="more-20"></span>
<h3>Distributed Source Code Management</h3>
<p>Git is a <strong><em>distributed</em></strong> source code management tool which means that there is no centralized source code repository.  This is a fundamental shift in the way source control is handled by systems like <a href="http://subversion.tigris.org/">Subversion</a>, <a href="http://www.nongnu.org/cvs/">CVS</a>, and <a href="http://www.perforce.com/">Perforce</a> and is probably the most challenging concept to grasp (it certainly was for me) when first learning about Git.  Version control using a centralized model is useful for things such as sharing code among developers, providing a history of changes to the code, and backing up data in a single location.  However, since Git does not use a centralized repository, a few obvious questions are raised about the Git's workflow model.  Questions like:</p>
<p><strong><em>Where are code commits stored?</em></strong></p>
<p>All code commits are stored on each developer's local machine.  Everyone has a copy of the entire repository and all of its history.</p>
<p><strong><em>How do developers share code?</em></strong></p>
<p>Developers share code with Git by executing commands called "push" and "pull".  Issuing a push command will push changes made in your repository to another developer's repository.  Conversely, issuing a pull command will pull changes from another developer's repository into your repository.  This may seem strange at first, but it actually ends up providing developers with a lot of collaborative power.  For example, instead of checking code changes into a central repository for everyone to see, two or more developers can share code with one another directly in a controlled fashion by pushing and pulling changes to and from each of their repositories respectively.</p>
<p><strong><em>How are backups handled in Git?</em></strong></p>
<p>If all of my code commits are stored on my local machine and my hard drive fails, wouldn't I be in a lot of trouble?  Not with Git.  If you are working by yourself, regularly backing up your repository using <a href="http://samba.anu.edu.au/rsync/">rsync</a>, <a href="http://mozy.com/">Mozy</a>, <a href="http://www.apple.com/timecapsule/backup.html">Time Capsule</a> or some other backup system will allow you to completely restore all of your work.  This is because Git stores all code revisions and history within each repository.</p>
<p>If you are working with other developers you simply need to <a href="http://www.kernel.org/pub/software/scm/git/docs/git-clone.html">clone</a> their copy of the repository.  In this sense, Git is actually incredibly fault-tolerant in that it provides geographically redundant archives of a repository because each repository is essentially a mirror of the entire project.</p>
<p>Finally, you could use one of the many publicly available Git repositories including <a href="http://github.com/">GitHub</a> and <a href="http://repo.or.cz/">repo.or.cz</a>.</p>
<h3>Git is Blazing Fast</h3>
<p>Since all commits, branching, and merging operations are local, Git is fast.  Real fast.  Unless you are pushing or pulling code there is no network to worry about.  Increased speed means developers can be more productive because they don't have to spend time waiting for costly repository operations to take place across a network.</p>
<h3>Git Makes Branching and Merging Easy</h3>
<p>In a centralized version control system branching and merging can often times be a source of frustration for developers.  All branches must live in the centralized repository and are likely viewable by other developers on the team.  If enough developers decide to create branches on the centralized server the repository can quickly become bloated.</p>
<p>Git takes a different approach.  Branching and merging in Git occur locally.  This dramatically increases the speed in which branching and merging can take place.  In addition, a single developer can create and destroy as many branches as they desire without having to worry about polluting a centralized repository.  Experimental features can quickly and easily be tested by creating a branch from the current working copy's "master" branch.  If the code produced in the branch proves worthy, it can be merged back into the "master" branch.  If the code from the branch ends up being useless, the branch can simply be deleted and no one ever needs to know that it existed.</p>
<h3>Part 1 Wrap Up</h3>
<p>Sunday I'll post <a href="http://www.justinspradlin.com/general-technology/getting-it-on-with-git-part-2/">Part 2</a> of my "Getting it on with Git" series where I'll discuss <a href="http://www.justinspradlin.com/general-technology/getting-it-on-with-git-part-2#github_sexy">GitHub</a>, <a href="http://www.justinspradlin.com/general-technology/getting-it-on-with-git-part-2#git_in_practice">Git in practice</a>, and why <a href="http://www.justinspradlin.com/general-technology/getting-it-on-with-git-part-2#git_not_for_everyone">Git may not be for everyone</a>.  Be sure to check back then!</p>
<h3>Useful Links</h3>
<p><a href="http://git.or.cz/">Official Git Site</a></p>
<p><a href="http://git.or.cz/gitwiki/GitCheatSheet">Git Cheat sheet</a></p>
<p><a href="http://www.youtube.com/watch?v=8dhZ9BXQgc4">Google Tech Talk on Git</a></p>
<p><a href="http://www.youtube.com/watch?v=4XpnKHJAok8">Linus Torvalds on Git</a></p>
<p><a href="http://www-cs-students.stanford.edu/~blynn/gitmagic/book.html">GitMagic Book</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.justinspradlin.com/general-technology/getting-it-on-with-git-part-1/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

