<?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>Brian Paden&#039;s somewhat technical blog</title>
	<atom:link href="http://www.college-code.com/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://www.college-code.com/blog</link>
	<description>The mostly tech related musings of a Software Engineering grad student</description>
	<lastBuildDate>Tue, 04 May 2010 06:38:52 +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>Circular Dependencies in the real world</title>
		<link>http://www.college-code.com/blog/2010/circular-dependencies-in-the-real-world</link>
		<comments>http://www.college-code.com/blog/2010/circular-dependencies-in-the-real-world#comments</comments>
		<pubDate>Tue, 04 May 2010 06:38:52 +0000</pubDate>
		<dc:creator>Brian Paden</dc:creator>
				<category><![CDATA[Advice]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[engineering]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[project management]]></category>

		<guid isPermaLink="false">http://www.college-code.com/blog/?p=244</guid>
		<description><![CDATA[In programming there is a problem known as circular dependency, which you know is real because it has its own Wikipedia page and everything.  In summary the problem is that Class A needs to know about Class B, but Class B needs to know about Class A.  The problem arises because the compiler has to [...]]]></description>
			<content:encoded><![CDATA[<p>In programming there is a problem known as <a href="http://en.wikipedia.org/wiki/Circular_dependency" target="_blank">circular dependency</a>, which you know is real because it has its own Wikipedia page and everything.  In summary the problem is that Class A needs to know about Class B, but Class B needs to know about Class A.  The problem arises because the compiler has to pick one to start with.</p>
<p>As an analogy let&#8217;s take Bob and Alice who have been married for many years and won&#8217;t go anywhere without each other.  Strolling through the park they find the bridge across a stream is out but they are in luck, someone with a two seater swan boat is willing to offer rides.  Since it is his boat (and no one is going to question why in the world he owns one personally) he must remain in it at all times.</p>
<p style="text-align: center;"><a href="http://www.college-code.com/blog/wp-content/uploads/2010/05/swan_boat.jpg"><img class="size-full wp-image-245 aligncenter" title="swan_boat" src="http://www.college-code.com/blog/wp-content/uploads/2010/05/swan_boat.jpg" alt="" width="450" height="389" /></a></p>
<p>Now since Bob and Alice, or Alice and Bob if you prefer, won&#8217;t go anywhere alone here is the problem.  The <a href="http://en.wikipedia.org/wiki/Swan">Cygnus</a> captain only has room for one.  He points to Alice and says &#8220;I&#8217;ll take you across first&#8221; to which she responds &#8220;But Bob won&#8217;t be on the other side when I get there so I can&#8217;t.&#8221;  He turns to Bob and says &#8221; if you go first then you will be on the other size and therefore she can cross right after.&#8221;  Bob replies &#8220;That sounds great but only if Alice meets me across the river when I get there.&#8221;  Exasperated, holding his face in his hands, the captain doesn&#8217;t see the iceberg coming downstream which proceeds to sink his swan.  Luckily the river is only a few feet deep but still he winds up wet and boat-less.</p>
<p>He hit an impass, there is no way to get one to cross without the other being there first.  Despite<a href="http://www.imdb.com/title/tt0117774/"> The Substitute</a> teaching otherwise, sometimes the best solution is not to throw a boombox out a second story window.  Outside of programming this is known as the <a href="http://en.wikipedia.org/wiki/Chicken_or_the_egg">chicken or the egg problem</a>.  Clearly one came first but there is no clear cut answer as to which is correct (the egg is the right answer btw).</p>
<h2>Why am I talking about eggs?</h2>
<p>Other than the fact that they are delicious, this problem comes up ALL THE TIME.  Just today I was listening to a cross discipline engineering project where the hardware people said they couldn&#8217;t finish without the software (true) but the software people couldn&#8217;t get started without the hardware it runs on (also true).  Think back and it shouldn&#8217;t take too long to come up with similar situations in your life.  Businesses (especially tech support) thrive on this.</p>
<p>&#8220;To recover your pin number, please type in your pin on the phone keypad now.&#8221;  Most cases aren&#8217;t this bad but stuff that stupid does come up now and again.  Sadly the people involved are likely alive and employed.</p>
<h1>How do we fix this?</h1>
<p>You&#8217;ve convinced me I hear you saying, now how do I solve these seemingly insurmountable cycles?  First I say: Get out of my house!  Secondly we have to take a look and see if we really need one before the other, if not hooray the problem just fixed itself.  The key to break the cycle is to do anything that breaks the cycle.  In the world of making things that depend on other things this would be a prototype.</p>
<h2>Wait, did you say hardware Prototype?</h2>
<p>Not exactly, you filthy word injector, but yes that is what was implied.  Certain situations make prototypes more than helpful, they become essential.  That situation would be any time you don&#8217;t know how to do something.  Since any interesting project will have at least some unknown aspect this covers 99.9999+% of all products.  People thought all vacuums were the same until <a href="http://en.wikipedia.org/wiki/James_Dyson">James Dyson</a> got tired of clogged filters and did something about it.</p>
<p>The way to  break the cycle is to build something, anything that gets you closer to the goal.  IT WILL BE WRONG  and that is okay.  Failing when you absolutely, 100% upfront intend to fail isn&#8217;t bad, it&#8217;s only bad if you don&#8217;t learn from the experience.</p>
<p>Say you are building a widget; I&#8217;ll wait until you finish speaking to continue.</p>
<p>This widget is revolutionary and will sell like hotcakes back when people used to buy a lot of hotcakes.  The only problem is like many products it requires hardware and software.  Damn, now we are really screwed because apparently programmers and engineers (not software engineers) have a fundamental mental disconnect in how they approach problems.</p>
<div id="attachment_249" class="wp-caption aligncenter" style="width: 510px"><a href="http://www.college-code.com/blog/wp-content/uploads/2010/05/walrus-and-carpenter.jpg"><img class="size-medium wp-image-249 " title="walrus-and-carpenter" src="http://www.college-code.com/blog/wp-content/uploads/2010/05/walrus-and-carpenter-500x400.jpg" alt="walrus and carpenter" width="500" height="400" /></a><p class="wp-caption-text">The Engineer and the Programmer, one of which is about to get nailed in the bean with a hammer</p></div>
<p style="text-align: center;">
<h2>The Hardware Engineer Says:</h2>
<p>I have to design this perfectly up front, it is too expensive otherwise.   If I miss one detail it will take months to get the manufacturer to retool the assembly line, that will costs tons of money, hell it may kill the entire project.  Better take as much time as it takes to get it right the first time.  Wish that lazy Programmer would tell me the specifics he needs, then I could spec just enough power to make it work.</p>
<h2>The Programmer Says:</h2>
<p>I have never done anything like this before, there is no way I can get it right the first try.  Would love to make a quick prototype that supports the most important features of the product but the hardware to run it doesn&#8217;t exist yet.  What the hell is wrong with that Engineer wasting time on crap that will clearly be wrong the first time, if not multiple times?</p>
<h2>Who&#8217;s right?</h2>
<p>As one of my professor&#8217;s says &#8220;it depends,&#8221; which is sadly almost always the correct answer for a complex situation.  Both the Engineer and Programmer raise good points.  It does cost money to make mistakes but it is hubris to assume that by working really really hard you can get it perfect the first time.  In the computer world contradictions this strong cause your compiler to lock up, machine to blue screen (even on Linux), and the cpu to burn itself to ash to avoid the agony.  The real world, however, thrives on this shit.  Those familiar with quantum weirdness know that Schrödinger&#8217;s cat is both alive and dead at the same time, at least until you open the box.  Chickens and eggs don&#8217;t care which one came first, they just keep doing whatever it is they do (being delicious).</p>
<div id="attachment_254" class="wp-caption aligncenter" style="width: 341px"><a href="http://www.college-code.com/blog/wp-content/uploads/2010/05/chicken-egg.jpg"><img class="size-full wp-image-254" title="chicken-egg" src="http://www.college-code.com/blog/wp-content/uploads/2010/05/chicken-egg.jpg" alt="" width="331" height="247" /></a><p class="wp-caption-text">Pictured: deliciousness</p></div>
<h2>That wasn&#8217;t an answer at all!</h2>
<p>Damn, you caught me.  So here is my opinion on how you solve the problem.  In building our widget you get the engineer to create a really cheap prototype that does the absolute essentials probably right.  But it is cheap and fast.  He then gives this to the programmer who can start prototyping while the engineer works on fixing obvious and not so obvious design flaws.  You know, the kind that make you slap your head and say &#8220;wow, wish I had known about that back in the design phase.&#8221;  The really important part is that they share feedback throughout the product life cycle.  If the engineer flings a circuit board over the wall then bit later a CD comes bouncing back it absolutely won&#8217;t work.  Close feedback is the key to making this work.  Note: you can have good feedback without being able to physically talk face to face, these days this thing called the internet solves those kinds of problems.  In the software world this form of management is called Agile Development.  In the engineering world it is called Blasphemy.</p>
<p>So we are starting out this supposed year long project.  Team A is using the old standby methods to build, Team B is trying out new, more radical thinking.  Suppose the deadline is absolute.  There is no reasoning with it, no extending it, no nothing.  Here is how these projects work out often enough.  Numbers may or may not be accurate, but they prove my point.</p>

<table id="wp-table-reloaded-id-1-no-1" class="wp-table-reloaded wp-table-reloaded-id-1">
<thead>
	<tr class="row-1 odd">
		<th class="column-1">Date</th><th class="column-2">Traditional Engineer</th><th class="column-3">Traditional Programmer</th><th class="column-4">Agile Engineer</th><th class="column-5">Agile Programmer</th>
	</tr>
</thead>
<tbody>
	<tr class="row-2 even">
		<td class="column-1">Month 1</td><td class="column-2">Got lots of research to do!</td><td class="column-3">Lots of research to do!</td><td class="column-4">Finishing touches built on first prototype after week one brainstorming session.</td><td class="column-5">Been working with engineer to get prototype working.</td>
	</tr>
	<tr class="row-3 odd">
		<td class="column-1">Month 3</td><td class="column-2">Moved on to designing boards and actual engineering.</td><td class="column-3">Toyed around with a few ideas but not really sure what the hardware will be so can't write anything.</td><td class="column-4">Got lots of feedback from first prototype, started on next, more polished one.</td><td class="column-5">Got a pretty good idea where the hard parts are going to be, creating software prototypes of tough stuff.</td>
	</tr>
	<tr class="row-4 even">
		<td class="column-1">Month 6 (of 12)</td><td class="column-2">Design 90% done but still a few kinks to work out.</td><td class="column-3">Playing solitaire as there is no real work to be done until have some device to test out.</td><td class="column-4">Last prototype nailed it, now polishing design and adding optional features.</td><td class="column-5">Testing of required features mostly done, minor bugs remain.</td>
	</tr>
	<tr class="row-5 odd">
		<td class="column-1">Month 8</td><td class="column-2">90% done.</td><td class="column-3">Trying to look busy.</td><td class="column-4">Final polish being added.</td><td class="column-5">Minor features being coded.</td>
	</tr>
	<tr class="row-6 even">
		<td class="column-1">Month 10</td><td class="column-2">Done with board, passed off to programmers.</td><td class="column-3">Coding franticly.</td><td class="column-4">More final polish, working with marketing to improve product launch.</td><td class="column-5">Optimizing code and working on documentation.</td>
	</tr>
	<tr class="row-7 odd">
		<td class="column-1">Month 11</td><td class="column-2">Waiting on feedback from lazy programmers.</td><td class="column-3">Code harder than first expected, putting in extra hours.</td><td class="column-4">Started work on new project while waiting for launch.</td><td class="column-5">Final cleanup and ready for release.</td>
	</tr>
	<tr class="row-8 even">
		<td class="column-1">Month 12</td><td class="column-2">Yelling at programmers to get done.</td><td class="column-3">FUUUUUUUUUUCK!</td><td class="column-4">Enjoying work on second product while success of first happens.</td><td class="column-5">Started on code for second product, not burned out from first project.</td>
	</tr>
</tbody>
</table>

<p>Yes this is an extreme exaggeration, but it&#8217;s my blog so tough crap.  And many real world products move along exactly the same way as the first team.</p>
<h2>Summary</h2>
<p>If you want to break the chain of impossible dependencies you have to do something!  Planning gets you no closer to shipping when you cover the same ground over and over and over again.  Take a chance and build something that might work, or might not.  As long as you aren&#8217;t making life critical products (like a pacemaker) this is not only a good way to go, but in my opinion it is the best way.  Look for future posts on how waterfall design methods (that all engineers use) are crap and agile hardware development.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.college-code.com/blog/2010/circular-dependencies-in-the-real-world/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Confessions, consessions and depression</title>
		<link>http://www.college-code.com/blog/2010/confessions-consessions-and-depression</link>
		<comments>http://www.college-code.com/blog/2010/confessions-consessions-and-depression#comments</comments>
		<pubDate>Sat, 03 Apr 2010 01:04:10 +0000</pubDate>
		<dc:creator>Brian Paden</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[visual studios]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.college-code.com/blog/?p=207</guid>
		<description><![CDATA[
I give up.  After years of fighting everyone in my department I give up.  They win.  What am I talking about?  Which operating system to write code on.  At UAF you start of using Visual Studio, much to the dismay of many students.  Creating small single file projects with MSVS is like killing flies with [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.college-code.com/blog/wp-content/uploads/2010/04/Tux.png"><img class="alignleft size-full wp-image-208" title="Tux" src="http://www.college-code.com/blog/wp-content/uploads/2010/04/Tux.png" alt="" width="159" height="188" /></a></p>
<p>I give up.  After years of fighting everyone in my department I give up.  They win.  What am I talking about?  Which operating system to write code on.  At UAF you start of using Visual Studio, much to the dismay of many students.  Creating small single file projects with MSVS is like killing flies with a bazooka; it may get the job done but there is a lot of collateral damage.  And I am tired of picking up the pieces.</p>
<p>All the tools available, particularly the  ones related to my thesis, either &#8220;work&#8221; on Windows, theoretically work on Windows, or <a href="http://gpsd.berlios.de/">openly flame Windows</a>.</p>
<p>So starting this weekend I am going to install Linux (Ubuntu most likely) and refresh myself in the ways of gcc.  Sigh.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.college-code.com/blog/2010/confessions-consessions-and-depression/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dreamhost Promotional Code</title>
		<link>http://www.college-code.com/blog/2009/dreamhost-promotional-code</link>
		<comments>http://www.college-code.com/blog/2009/dreamhost-promotional-code#comments</comments>
		<pubDate>Tue, 27 Oct 2009 17:12:00 +0000</pubDate>
		<dc:creator>Brian Paden</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[dreamhost]]></category>
		<category><![CDATA[promo code]]></category>

		<guid isPermaLink="false">http://www.college-code.com/blog/?p=185</guid>
		<description><![CDATA[To celebrate actually still being alive, albeit less active on the web, I&#8217;ve created a promotional code for my all time favorite web host Dreamhost.  Aside from having excellent customer support in my experience, they have ridiculous goodies to play with.  My all time favorite would of course be Subversion.  But you don&#8217;t care about [...]]]></description>
			<content:encoded><![CDATA[<p>To celebrate actually still being alive, albeit less active on the web, I&#8217;ve created a promotional code for my all time favorite <a href="http://www.dreamhost.com/r.cgi?407138#COLLEGECODEDSCNT" target="_blank">web host Dreamhost</a>.  Aside from having excellent customer support in my experience, they have ridiculous goodies to play with.  My all time favorite would of course be Subversion.  But you don&#8217;t care about any of that, let&#8217;s get to what you want.</p>
<p>The code: COLLEGECODEDSCNT</p>
<p>The benefits: 10% off of ANY package length of time you sign up for.  If you buy a year save $6 on top of the crazy regular Dreamhost promos.  If you buy a decade save over 70 bucks!  This is on top of the free domain name, excellent service and all the other good things that come with using Dreamhost.</p>
<p>So what are you waiting for?  Sign up for a new account now!  Who knows how long this snow influenced dementia will last.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.college-code.com/blog/2009/dreamhost-promotional-code/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software Manifesto</title>
		<link>http://www.college-code.com/blog/2009/software-manifesto</link>
		<comments>http://www.college-code.com/blog/2009/software-manifesto#comments</comments>
		<pubDate>Tue, 10 Mar 2009 08:57:57 +0000</pubDate>
		<dc:creator>Brian Paden</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[professionalism]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://www.college-code.com/blog/?p=155</guid>
		<description><![CDATA[
Today I stumbled upon an interesting manifesto.  No not that one, the software one.  A call to arms for all professional software writers, as opposed to code monkeys.  Link for those who wish to skip my blabbering.  It isn&#8217;t very long, which is good because I don&#8217;t sign stuff I don&#8217;t read.  It is and [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-medium wp-image-156" title="manifesto" src="http://www.college-code.com/blog/wp-content/uploads/2009/03/manifesto-336x500.gif" alt="manifesto" width="336" height="500" /></p>
<p>Today I stumbled upon an interesting manifesto.  No <a href="http://en.wikipedia.org/wiki/The_Communist_Manifesto">not that one</a>, the software one.  A call to arms for all professional software writers, as opposed to code monkeys.  <a href="http://manifesto.softwarecraftsmanship.org/">Link for those who wish to skip my blabbering</a>.  It isn&#8217;t very long, which is good because I don&#8217;t sign stuff I don&#8217;t read.  It is and I quote:</p>
<blockquote><p>As aspiring Software Craftsmen we are raising the bar of professional software development by practicing it and helping others learn the craft. Through this work we have come to value:<br />
Not only working software,<br />
but also well-crafted software<br />
Not only responding to change,<br />
but also steadily adding value<br />
Not only individuals and interactions,<br />
but also a community of professionals<br />
Not only customer collaboration,<br />
but also productive partnerships</p>
<p>That is, in pursuit of the items on the left we have found the items on the right to be indispensable.</p></blockquote>
<p>A noble and worthy goal, I signed.  I would also encourage anyone else who holds these to be true to sign as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.college-code.com/blog/2009/software-manifesto/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DVD Ripping the Windows Way</title>
		<link>http://www.college-code.com/blog/2009/dvd-ripping-the-windows-way</link>
		<comments>http://www.college-code.com/blog/2009/dvd-ripping-the-windows-way#comments</comments>
		<pubDate>Fri, 23 Jan 2009 08:13:31 +0000</pubDate>
		<dc:creator>Brian Paden</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[dvd]]></category>
		<category><![CDATA[ripping]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.college-code.com/blog/?p=123</guid>
		<description><![CDATA[I finally decided to digitize my dvd collection.  Two things prompted this, 1 the rack is running out of room (see below) and 2 they are all at my parents house.

This prompted research as how to break the annoying dvd decryption and obtain personal use backups of dvd&#8217;s I actually legally purchased (as opposed to [...]]]></description>
			<content:encoded><![CDATA[<p>I finally decided to digitize my dvd collection.  Two things prompted this, 1 the rack is running out of room (see below) and 2 they are all at my parents house.</p>
<p><img class="alignnone size-full wp-image-124" title="dvdrack" src="http://www.college-code.com/blog/wp-content/uploads/2009/01/dvdrack.png" alt="dvdrack" width="264" height="352" /></p>
<p>This prompted research as how to break the annoying dvd decryption and obtain personal use backups of dvd&#8217;s I actually legally purchased (as opposed to many of my other collections).   Googling quickly showed a few programs that work and I find useful.  The first being the zombie program DVD Shrink.</p>
<p>While <a href="http://www.dvdshrink.org/where_en.php">DVD Shrink</a> is no longer being worked on,  you can still find it floating around the net.  The most recent version is 3.2.0.15, note it is freeware so avoid the sites that charge for it.  Or just <a href="http://www.softpedia.com/get/CD-DVD-Tools/CD-DVD-Rip-Other-Tools/DVD-Shrink.shtml">download it here</a>.</p>
<p>The next piece of software used is called <a href="http://handbrake.fr/">Handbrake</a>, which takes dvd formatted data and converts it to normal video files such as mp4, avi or ogm.  It is open source and therefore free.  The thing I am liking most about it is the ability to queue up multiple conversions and let it run overnight, which is important as it takes around 1.5 hours on my gaming machine per movie.</p>
<p>The two afore mentioned pieces of software work most of the time but since DVD Shrink is a few years old it can&#8217;t break some of the newest encryption methods (damn you Disney).  This is annoying because Wall-E is an awesome movie.  So to get around this I found <a href="http://www.slysoft.com/en/anydvdhd.html">AnyDVD HD</a>.  It tears out the encryption on all dvd&#8217;s, the HD version even works on blue-ray and HD discs which is awesome.  The only not awesome part is the price, <a href="http://www.google.com/search?q=79+euros+to+us+dollars&amp;ie=utf-8&amp;oe=utf-8">79 euros = $104 real dollars</a>.  There is no way I was dropping that kind of money on software for a single week long ripping party, luckily they have a 3 week trial version.  The only downside is it forgets your settings when it shuts down, which only matters if you turn off your computer (I don&#8217;t).</p>
<p>With my newly assembled arsenel of software tools I began tearing into the rack of disc&#8217;s like a rabit badger, or at least a wounded chipmunk.  Here is my method.</p>
<p>DVD Shrink makes fine backups but as they are huge (4+ gigs each, some over 8 ) I decided to convert them to the more portable and popular avi format.  Max quality avi&#8217;s of these work out to be around 1.6 gigs tops (Lord of the Rings), pretty close to 1.4 gigs on average though.  If space is an issue then they can be shrunk later on.  Let&#8217;s start making the MPAA cry.</p>
<p>First you insert the dvd in your machine and launch DVD Shrink.  Then choose open disk.  If you have it AnyDVD should be launched first as it intercepts dvds before you open them in DVD Shrink.  Closing or modifying AnyDVD settings while ripping with DVD Shrink causes it to lose connection to the disk and you have to start over.  When the fox icon is pink it is thinking, when it is red it is ready.</p>
<p><img class="alignnone size-full wp-image-125" title="rip1" src="http://www.college-code.com/blog/wp-content/uploads/2009/01/rip1.png" alt="rip1" width="340" height="360" /></p>
<p>Wait while it analyzes the movie, this takes about 2 minutes.  Usually mine start off at a pretty slow speed, like 2,000 kbps then work up to 9,000 max.  The encoding phase does this as well.</p>
<p><img class="alignnone size-full wp-image-126" title="rip2" src="http://www.college-code.com/blog/wp-content/uploads/2009/01/rip2.png" alt="rip2" width="339" height="359" /></p>
<p>If you want to back up the entire disk, menus extras etc, then just choose backup after the dvd is analyzed and skip the next step.  If like me you are only interested in the feature film go to re-author and drag the title from the &#8220;Main Movie&#8221; area over to the empty area on the left.  Now when you choose backup it will only save that one, cutting down on important disk space.  I have a 1 terabyte drive as the buffer for this but 7 gigs adds up pretty quickly.</p>
<p><img class="alignnone size-full wp-image-127" title="rip3" src="http://www.college-code.com/blog/wp-content/uploads/2009/01/rip3.png" alt="rip3" width="339" height="360" /></p>
<p>Once you have the tracks to rip, let &#8216;er rip.  It takes anywhere from 7 minutes to an hour, depending on how much there is to work with and if you chose any other fancier options.  Generally get less than 10 minutes though.  Again it starts off slow and works up to a decent speed.</p>
<p><img class="alignnone size-full wp-image-129" title="rip5" src="http://www.college-code.com/blog/wp-content/uploads/2009/01/rip5.png" alt="rip5" width="486" height="238" /></p>
<p>This is the message you are looking for, the a-ok to move on.  Congratulations, you are now out a large chunk of disk space.  If you are ripping multiple disks at once make you to switch back to &#8220;Full Disc&#8221; mode as otherwise it pops up an annoying message and beeps at you.  Also you can&#8217;t open a new disc until you change to full disc mode.  Note the discrepency in times between the previous picture and this one.</p>
<p><img class="alignnone size-full wp-image-130" title="rip7" src="http://www.college-code.com/blog/wp-content/uploads/2009/01/rip7.png" alt="rip7" width="428" height="256" /></p>
<p>Next we can start converting the big honking mess of dot vob files into a usable format.   Start up Handbrake and choose Source in the upper left corner, then select the DVD / VIDEO_TS Folder.  Find the folder you want to convert on your hard drive and select it.  Sometimes you have to choose the VIDEO_TS folder itself, the immediate parent one won&#8217;t work.</p>
<p><img class="alignnone size-full wp-image-131" title="rip8" src="http://www.college-code.com/blog/wp-content/uploads/2009/01/rip8.png" alt="rip8" width="497" height="342" /></p>
<p>Then you choose the file name, type and all the other settings I don&#8217;t mess with to create the actual file you wanted in the first place.  Normal has worked in all cases, I just change the file type.  Make sure to look at the title drop down and check that the file length is appropriate (seen here), some of them have multiple ones to screw you up.  Annoying to waste 2 hours to find out you chose the wrong chapter to burn.</p>
<p><img class="alignnone size-full wp-image-132" title="rip9" src="http://www.college-code.com/blog/wp-content/uploads/2009/01/rip9.png" alt="rip9" width="498" height="344" /></p>
<p>Choose where you want to save the file and what to call it.  Also the file type, I went with avi as it is widely supported and ogm didn&#8217;t work on my machine (will figure that one out later).</p>
<p><img class="alignnone size-full wp-image-133" title="rip11" src="http://www.college-code.com/blog/wp-content/uploads/2009/01/rip11.png" alt="rip11" width="497" height="342" /></p>
<p>Go over all the settings to make sure it looks good then start it going.  The start button makes it go right now, alternatively you can hit the &#8220;Add to Queue&#8221; and make a big list of them for your computer to work on while you sleep.  It is very cpu intensive so best to let it run alone on your machine if at all possible.  When you hit Start you get a friendly CMD.exe window that has an eta on it.  Don&#8217;t close this window.  It works in two stages, the first is encoding which is the fast phase.</p>
<p><img class="alignnone size-full wp-image-134" title="rip12" src="http://www.college-code.com/blog/wp-content/uploads/2009/01/rip12.png" alt="rip12" width="537" height="377" /></p>
<p>Then there more encoding which eventually writes it to disk.  Takes over an hour for my machine per dvd so settle in.  This next picture is just to show what the second phase looks like.</p>
<p><img class="alignnone size-full wp-image-135" title="rip13" src="http://www.college-code.com/blog/wp-content/uploads/2009/01/rip13.png" alt="rip13" width="537" height="377" /></p>
<p>The next to final stage is to verify the rip actually worked.  Choose your favorite media program (I highly recommend VLC) and load the file, make sure the sound is sync&#8217;d right and other such things.  Note the video did work, the screenshot capture method didn&#8217;t.</p>
<p><img class="alignnone size-full wp-image-136" title="rip14" src="http://www.college-code.com/blog/wp-content/uploads/2009/01/rip14.png" alt="rip14" width="361" height="264" /></p>
<p>When you know the video ripped correctly go back and delete the raw dvd folder as it is just a waste of space.  Now you too in around 2 hours can make digital copies of stuff you already owned.  Sad fact of the day: with a fast internet connection it is  quicker to pirate the movies than convert the ones you own.  But piracy is wrong, and backing up dvds is mostly legal.</p>
<p>One final tip, you can run as many copies of DVD Shrink as you have dvd drives.  I crank on two at a time, tried to put in a third pulled from an old computer but my motherboard didn&#8217;t have a second ide cable.</p>
<p><img class="alignnone size-full wp-image-140" title="rip151" src="http://www.college-code.com/blog/wp-content/uploads/2009/01/rip151.png" alt="rip151" width="491" height="483" /></p>
<p>Have fun backing up you movies!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.college-code.com/blog/2009/dvd-ripping-the-windows-way/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Personal obsession</title>
		<link>http://www.college-code.com/blog/2008/personal-obsession</link>
		<comments>http://www.college-code.com/blog/2008/personal-obsession#comments</comments>
		<pubDate>Fri, 19 Dec 2008 02:03:03 +0000</pubDate>
		<dc:creator>Brian Paden</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[books]]></category>

		<guid isPermaLink="false">http://www.college-code.com/blog/?p=118</guid>
		<description><![CDATA[I was packing up things for the winter break and I realized that I have a lot of books.  And I do mean a lot, this is just the pile of them that are here, there are even more at home.

It is safe to say I am obsessed with paper more than any other programmer [...]]]></description>
			<content:encoded><![CDATA[<p>I was packing up things for the winter break and I realized that I have a lot of books.  And I do mean a lot, this is just the pile of them that are here, there are even more at home.</p>
<p><a href="http://www.college-code.com/blog/wp-content/uploads/2008/12/books.png"><img class="alignnone size-full wp-image-119" title="books" src="http://www.college-code.com/blog/wp-content/uploads/2008/12/books.png" alt="" width="500" height="274" /></a></p>
<p>It is safe to say I am obsessed with paper more than any other programmer I know.  Which is probably a good thing as books are expensive.  The sad thing is this only amounts to about half of my Amazon wish list.  Sigh, I need more shelves.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.college-code.com/blog/2008/personal-obsession/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Help Wikipedia</title>
		<link>http://www.college-code.com/blog/2008/help-wikipedia</link>
		<comments>http://www.college-code.com/blog/2008/help-wikipedia#comments</comments>
		<pubDate>Thu, 11 Dec 2008 05:20:39 +0000</pubDate>
		<dc:creator>Brian Paden</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[donate]]></category>
		<category><![CDATA[wikipedia]]></category>

		<guid isPermaLink="false">http://www.college-code.com/blog/?p=116</guid>
		<description><![CDATA[If you use Wikipedia 1/10 as much as I do, then you owe it to them to donate to the current fundraiser.  It costs a lot to be the 8th most popular website on Earth.  You can donate any amount via paypal, even a dollar can help despite them being not worth the cloth( not [...]]]></description>
			<content:encoded><![CDATA[<p>If you use Wikipedia 1/10 as much as I do, then you owe it to them to donate to the current fundraiser.  It costs a lot to be the <a href="http://www.alexa.com/site/ds/top_sites?ts_mode=global&amp;lang=none" target="_blank">8th most popular website on Earth</a>.  You can donate any amount via paypal, even a dollar can help despite them being not worth the <a href="http://answers.yahoo.com/question/index?qid=20061024015036AAIuIPi" target="_blank">cloth( not paper )</a> they are printed on.  To show my approval I added the support Wikipedia button on the siderbar even though I hate clutter on my blog.</p>
<p>And yes, I donated what I could.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.college-code.com/blog/2008/help-wikipedia/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Give Advice</title>
		<link>http://www.college-code.com/blog/2008/how-to-give-advice</link>
		<comments>http://www.college-code.com/blog/2008/how-to-give-advice#comments</comments>
		<pubDate>Wed, 26 Nov 2008 08:35:51 +0000</pubDate>
		<dc:creator>Brian Paden</dc:creator>
				<category><![CDATA[Advice]]></category>
		<category><![CDATA[giving advice]]></category>

		<guid isPermaLink="false">http://www.college-code.com/blog/?p=106</guid>
		<description><![CDATA[In a startlingly high level of hypocrisy I am now going to tell people to not give advice.  Let me explain before you completely tune me out as being mad.

Say you&#8217;re at work and someone does something in a way that strikes you as odd.  Maybe the code is indented different than usual, or not [...]]]></description>
			<content:encoded><![CDATA[<p>In a startlingly high level of hypocrisy I am now going to tell people to not give advice.  Let me explain before you completely tune me out as being mad.</p>
<p><a href="http://abrachan.wordpress.com/2007/05/30/take-my-advice-i-dont-use-it-anyway/"><img class="alignnone" title="Take My Advice" src="http://abrachan.files.wordpress.com/2007/05/advice1.jpg" alt="" width="300" height="300" /></a></p>
<p>Say you&#8217;re at work and someone does something in a way that strikes you as odd.  Maybe the code is indented different than usual, or not at all.  Perhaps they use #defines in your C++ project.  Whatever it is, you have an opinion and want to tell them &#8220;the right way&#8221; to do things.  Even if you can step back far enough to realize yours may not be the best way, but is instead something based on years of practical experience, they will still interpret it as &#8220;your opinion&#8221;.  Which of course it is.</p>
<p>What&#8217;s the worst thing that could happen if you spread some helpful advice?  I used to think the worst thing was that they would ignore you.  Ideally they can look past their own ignorance and see your brilliant idea for what it is.  This is wrong, and highly optimistic as it turns out.</p>
<p>The worst case isn&#8217;t that they ignore you.  Sadly ignoring your unsolicited advice is the BEST CASE scenario.  They listen, nod, say &#8220;uh huh&#8221; while you are speaking; then once you are gone blank it from their memories.  It can go so much worse.  They can get offended.  How DARE you try and tell them you are right and they are wrong?!  How DARE you say that they are dumb and you are so much smarter and better that you will guide them out of the caves?  Exaggerating a bit?  Not as much as you might hope.</p>
<p>There are several reasons people do the things they do.</p>
<p>1) They aren&#8217;t conscious of it ( how much attention do you pay on your commute to work every day, honestly? ).</p>
<p>2) They are conscious of it and choose to do it that way.</p>
<p>If you are talking to someone in group one, you probably are trying to help them.  Spare them your mistakes as it were.  But they don&#8217;t care.  If they cared, they would probably think more about how they were doing it.  These are the people who will ignore your advice.</p>
<p>The group two&#8217;ers are the troublemakers of the advice realm.  If you tell them they are wrong, they will fight you tooth and nail.  No matter how polite you are, how genuinely helpful you are or how long you have been friends they will object.  Because when you give unsolicited advice you are saying, in no uncertain terms, that you know more than they do.  And people generally don&#8217;t like being called stupid.</p>
<p>Telling a two&#8217;er how to do things will often not result in being ignored.  It won&#8217;t result in them following your advice either.  What it will do is piss them off.  From their perspective it is an attack on their person and they will do things about it.  Relations may become strained, feelings hurt, tempers flared.</p>
<p>So if being ignored or hurting feelings are the results of giving advice, how do you give advice?</p>
<p>The answer is, you don&#8217;t.  You can&#8217;t.  And you sure as hell shouldn&#8217;t try.</p>
<p>This applies to the forms of advice most people give and receive every day.  Hey you should blank.  Or why don&#8217;t you x instead of y?  There is one, and only one, category of advice that works the way you want it to.  That is when someone asks for it.</p>
<p>If someone sincerely asks &#8220;how would you do this&#8221; what they are really saying is &#8220;I appreciate and acknowledge your understanding of this topic and would be interesting in your approach to this problem.&#8221;  They are pushing down their ego enough to say that you are more experienced and ask for help.  But now isn&#8217;t the time to get big-headed.  This is the time to teach.  This is the only time someone will actually listen to your advice and possibly carry it out.  Heck with enough time they may pass it on to someone else.  And that is what you wanted to do the whole time, spread your knowledge to help others.</p>
<p>People can seek help without expressly asking for it as well.  If someone is distressed and you may be able to help, see if they want it before throwing it out there.  Often times it is difficult for someone to put their ego out of the way, so you have to help with that too.  Saying something like &#8220;I had that same problem last year, would you care to hear some tips that really helped me out?&#8221; is a good icebreaker, but only if you actually had that problem last year.  Groups like Alcoholics Anonymous are founded on the principle of shared empathy, you know what they are going through because it happened to you and they can feel that.  If they don&#8217;t want the tips, don&#8217;t offer them regardless.  People only hear what they want to hear, repeating yourself won&#8217;t change that.</p>
<p>Based on my ( limited ) understanding of psychology and people this is the way things are.  Think of how much grief is caused by unwanted advice, which to the receiver feels sarcastic and insulting.  Before you advise, empathize ( nice huh? ).  Think how you would feel if someone came over to your desk and said &#8220;Your layout is all wrong, idiot&#8221;.</p>
<p>Hopefully you wanted to learn something about advice before reading this entry, or were at least open to it.  But the people who think I&#8217;m an idiot will either ignore what I&#8217;ve said or post responses saying how dumb I am.   I didn&#8217;t write this article for them, I wrote it for the people out there who really wanted to learn something.  Hopefully they did.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.college-code.com/blog/2008/how-to-give-advice/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Boost Asio Serial_Port Demo</title>
		<link>http://www.college-code.com/blog/2008/boost-asio-serial_port-demo</link>
		<comments>http://www.college-code.com/blog/2008/boost-asio-serial_port-demo#comments</comments>
		<pubDate>Fri, 07 Nov 2008 07:20:49 +0000</pubDate>
		<dc:creator>Brian Paden</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[boost]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[serial ports]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.college-code.com/blog/?p=96</guid>
		<description><![CDATA[So I&#8217;ve recently started playing with hardware more.  This necessitated learning how to communicate my C++ with the actual hardware.  The de facto method for this for decades has been the RS232 serial port.  But how to actually use this to talk with code?
In Unix you can directly talk to dev/ttyS0 or wherever the device [...]]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;ve recently started playing with hardware more.  This necessitated learning how to communicate my C++ with the actual hardware.  The de facto method for this for decades has been the RS232 serial port.  But how to actually use this to talk with code?</p>
<p>In Unix you can directly talk to dev/ttyS0 or wherever the device is located.  Windows gives you some com stuff to talk to it.  But is there a way to do it cross platform?</p>
<p>Of course there is, otherwise I wouldn&#8217;t write about it.  Enter Boost, the pivotal C++ library.  In Boost::Asio (ASynchronous Input/Output) there exists a serial_port class.  Seems to be good enough, all that is left is to get it to work.  Easier said than done.  There are basically no examples and the doc&#8217;s aren&#8217;t very helpful (weren&#8217;t to me at least).</p>
<p>So here is a small program that covers most of what a serial_port class needs to do.  You set the parameters before the program starts (certain os&#8217;s have limits built in, like you must set the baud rate beforehand etc).  The hardware this talks to takes a baud rate of 19200, 8 bits of data, no parity, and 1 stop bit.  My test board only read input so the example doesn&#8217;t take input yet.  Check the comments for more details, the license is at the top of the file.</p>
<p>Due to the stupidity of Wordpress the code format kept getting eaten so you have to download the file instead.</p>
<p>Link to file: <a href="http://www.college-code.com/blog/wp-content/uploads/2008/11/boost_serial_port_demo.cpp">boost_serial_port_demo.cpp</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.college-code.com/blog/2008/boost-asio-serial_port-demo/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Reece&#8217;s Math</title>
		<link>http://www.college-code.com/blog/2008/reeces-math</link>
		<comments>http://www.college-code.com/blog/2008/reeces-math#comments</comments>
		<pubDate>Sun, 26 Oct 2008 05:52:26 +0000</pubDate>
		<dc:creator>Brian Paden</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[math]]></category>
		<category><![CDATA[random]]></category>

		<guid isPermaLink="false">http://www.college-code.com/blog/?p=82</guid>
		<description><![CDATA[So I was enjoying some delicious Reece&#8217;s Pieces and noticed that while there were three colors (orange, yellow and brown) there seemed to be an awful lot of orange.  That got me thinking: exactly how many more orange are there?

The nutrition facts lists the bag at 13 servings of approximately 50 pieces per serving, which [...]]]></description>
			<content:encoded><![CDATA[<p>So I was enjoying some delicious Reece&#8217;s Pieces and noticed that while there were three colors (orange, yellow and brown) there seemed to be an awful lot of orange.  That got me thinking: exactly how many more orange are there?</p>
<p><a href="http://www.college-code.com/blog/wp-content/uploads/2008/10/reeces.png"><img class="alignnone size-full wp-image-83" title="reeces pieces" src="http://www.college-code.com/blog/wp-content/uploads/2008/10/reeces.png" alt="" width="500" height="365" /></a></p>
<p>The nutrition facts lists the bag at 13 servings of approximately 50 pieces per serving, which comes out to be 650 pieces total.  Yes I did actually sit down and count out each color, results below.  No I have no life.</p>
<p>Yellow &#8211; 140</p>
<p>Brown &#8211; 161</p>
<p>Orange &#8211; 368</p>
<p>Total &#8211; 669</p>
<p>Percentage wise that is:</p>
<p>Yellow &#8211; 20.9%</p>
<p>Brown &#8211; 24.0%</p>
<p>Orange &#8211; 55.0%</p>
<p>It looks like it is supposed to be a 1-1-2 ratio for yellow, brown orange.  Of course there is no way to be sure if that is the true ratio without a statistically meaningful sample size, but I am not going to count another bag.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.college-code.com/blog/2008/reeces-math/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
