<?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>AaronStaves.com &#187; Web</title>
	<atom:link href="http://aaronstaves.com/category/web/feed/" rel="self" type="application/rss+xml" />
	<link>http://aaronstaves.com</link>
	<description>Not quite extinct!</description>
	<lastBuildDate>Fri, 01 Apr 2011 20:04:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Gitastrophe &#8211; Part 1</title>
		<link>http://aaronstaves.com/2011/04/01/gitastrophe-part-1/</link>
		<comments>http://aaronstaves.com/2011/04/01/gitastrophe-part-1/#comments</comments>
		<pubDate>Fri, 01 Apr 2011 20:04:55 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Rant]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://aaronstaves.com/?p=153</guid>
		<description><![CDATA[&#160; Yes it may seem like when you switch over to a new revision system, git perhaps? That your brain may explode.  Or that things might turn into a major catastrophe.  Be that as it may I'm going to let you in on how I get things done at my job using git in my [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://aaronstaves.com/wp-content/uploads/2011/03/Hackers-internet-580x263-e1300917489551.png"><img class="alignnone size-full wp-image-154" title="Hackers!" src="http://aaronstaves.com/wp-content/uploads/2011/03/Hackers-internet-580x263-e1300917489551.png" alt="" width="288" height="131" /></a></p>
<p>&nbsp;</p>
<p>Yes it may seem like when you switch over to a new revision system, git perhaps? That your brain may explode.  Or that things might turn into a <strong>major catastrophe</strong>.  Be that as it may I'm going to let you in on how I get things done at my job using git in my daily workflow.  This is by no means the <em>best</em> way to get things done, or the end all solution... so comments and suggestions are <span style="text-decoration: underline;">very welcome<strong>.</strong></span></p>
<p>&nbsp;</p>
<p>So at my current place of employment we have 4 developers coding out of the same code base.  It would <em>seem</em> like it would be easy enough to not step on eachother's toes, but it happens.  Sometimes it happens a lot!  Some of the main reasons:</p>
<ul>
<li>Whitespace in code</li>
<li>Large files/classes/controllers (multiple people working out of the same file)</li>
<li>Unique workflows</li>
<li>Different programming environments</li>
<li>Improper merges</li>
</ul>
<p>I could go on for at least another minute or two, but you get the <a href="http://gist.github.com" target="_blank">gist</a> of it.  The whole point of a revision control system is to not only be able to version your code, but to also let it allow you to work succinctly with all of your team members.  So before I get into a typical day at the office, let's take a look at the structure of how our git repository is setup.</p>
<p>&nbsp;</p>
<h3>Repo Basics</h3>
<p>I'm not going to go into how to setup a repository, how git is a DVCS, or how I like git better than SVN; but if you'd like I can do that in another post.  We're going to nail down the basics of how our repo should function and some general terminology.</p>
<p>First off we have a generic repository for each project.  We then use that generic repository to share code between ourselves and the deployment system.  Each developer then forks that main repository and creates their own repository of the codebase as well.  For instance our main repo might be developers/projectName@github, and my personal repository would be aronstaves/projectName@github.  The great thing about github is they provide a few not-so-common features with their repository and also have the ability to setup private and public repositories.</p>
<p>&nbsp;</p>
<p>For the most part, each developer in our team has access to 3 repositories.</p>
<ol>
<li style="padding: 5px;"><strong>Local</strong> - this is each developer's git repository that's located locally on their development machine.  This is what we develop in day to day.</li>
<li style="padding: 5px;"><strong>Origin</strong> (<em>aaron</em>/<em>projectName@github</em>) - this refers to the personal developer repository that lives remotely (on github).  This is used for personal backups of branches, or for pushing branches remotely that <span style="text-decoration: underline;">that other developers <strong>do not</strong> need access to</span>.</li>
<li style="padding: 5px;"><strong>Upstream </strong>(<em>developers</em>/<em>projectName@github</em>) - this refers to the generic repository that everyone forked their developer repositories from.  Pushing branches to this repository allows you to share code with other developers as well as the deployment system.  If the branch isn't in upstream, it isn't a candidate for deployment.</li>
</ol>
<p>So in short, I develop out of my local branch every day.  If I have a branch I want to save for later, or possibly an incomplete feature I want to delete locally and pull down later, I'll push it to <strong>origin</strong>.  This way I'm not cluttering up <strong>upstream</strong> with various branches that other developers know absolutely nothing about, and that they probably don't care about!  If I need to share code with other developers, or give the deployment system acess to code, I'll push it to <strong>upstream</strong>.</p>
<p>&nbsp;</p>
<h3>Branch Basics</h3>
<p>Alright! Now that you see how the repos work, let's check out how branches work within a repository.  At any given time, I'll have a minimum of 3 branches available.   <strong>Master</strong> and <strong>Release</strong> typically are tracked against the upstream repository, and the development branch is pushed wherever it is needed.  Again, these aren't rules to follow, but how I personally use git.</p>
<h4>Master Branch</h4>
<h4><span style="font-weight: normal;"><span style="text-decoration: underline;">Stable</span> <strong>Tested</strong> code.  I cannot stress that enough, <span style="text-decoration: underline;">only stable and <strong>production</strong> tested code</span> should be put into master.  Once we've had a successful deployment of release code, we will production test it.  Once tested, release code is merged into master and tagged.  This branch is mainly used for breakfixes or rolling back deployment.</span></h4>
<h4>Release Branch</h4>
<h4><span style="font-weight: normal;">This is all code that is staged for release, but not yet tested in a production environment.  Just to reiterate, if your code is not going to get released, it has no business being in this branch.  Once code from a development branch has been tested by a developer, it is merged into this branch and put through QA testing.</span></h4>
<h4><span style="font-weight: normal;"> </span><span style="font-weight: normal;">I also want to stress working out of this branch is typically a big no-no.  Not only could this lead to unwanted code getting committed to the next release, but it also has the potential to spread commits for a specific feature across non-linear commits.  I'll get into the problems this can cause later, but unless you're making a <span style="text-decoration: underline;">single commit</span> change to the soon-to-be released, you should make a branch for your code change.</span></h4>
<h4><strong><span>Development</span></strong></h4>
<h4><strong><span> </span></strong><span style="font-weight: normal;">This is code that is currently being developed and is typically branched from <strong>release</strong>.  So when you want to start a new feature, you'll checkout release (and make sure you have the latest code pulled down!), then create a development branch from that.  I'll also go over a typical development lifecycle later as well.</span></h4>
<p><span style="font-weight: normal;">Anyways, that's a quick high level overview of how I typically get things done in git.  Look out in the next week or two on how I branch, rebase and merge in code with other devs on my team. </span></p>
]]></content:encoded>
			<wfw:commentRss>http://aaronstaves.com/2011/04/01/gitastrophe-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hi There!</title>
		<link>http://aaronstaves.com/2011/03/21/hi-there/</link>
		<comments>http://aaronstaves.com/2011/03/21/hi-there/#comments</comments>
		<pubDate>Mon, 21 Mar 2011 06:12:58 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Random]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://aaronstaves.com/?p=134</guid>
		<description><![CDATA[So it's been a while since my last update!  Not sure if there's anyone out there still listening... but I've got no fancy excuses, I've just been lazy.  But in the spirit of the blog being not quite extinct, life goes on. &#160; At any rate, this is just a quick update to hopefully kick [...]]]></description>
			<content:encoded><![CDATA[<p>So it's been a while since my last update!  Not sure if there's anyone out there <em>still</em> listening... but I've got no fancy excuses, I've just been lazy.  But in the spirit of the blog being <strong>not quite extinct</strong>, life goes on.</p>
<p>&nbsp;</p>
<p>At any rate, this is just a quick update to hopefully kick myself into gear for getting some stuff done.  Some things that will be coming up:</p>
<h3>A new project!</h3>
<p>Not like I really actually <span style="text-decoration: underline;">finish</span> any of my projects but I can dream right?  So far things have gotten off to a better start than most.  I've started using <a href="http://codeigniter.com" target="_blank">codeigniter</a>, which is a pretty lightweight MVC framework.   Toss in a little <a href="http://codeigniter.com/wiki/IgnitedRecord/" target="_blank">ORM </a>magic on there and I'm set!  Right now I've got just a login page, some sessions and some inheritance vodoo going on.  All things considered it's further than I've gotten most times.  I'll be sure to post more updates as they come.<img class="size-medium wp-image-135 alignleft" style="margin: 10px;" title="SmilinJoeFissionjpg" src="http://aaronstaves.com/wp-content/uploads/2011/03/SmilinJoeFissionjpg-225x300.gif" alt="" width="225" height="300" /><br />
&nbsp;</p>
<h3>Revision control!</h3>
<p>At work we've been using git for the past few months and I'm becoming a huge git enthusiast.  Problem is, there's a <span style="text-decoration: underline;"><strong>ton</strong></span> of ways to do things!  So in the next few weeks I'll hopefully have a few posts on how *I* personally use git as well as how it could potentially be used in smaller to mid-size development teams.  This topic might have to be broken out into a few multiple ones.</p>
<p>&nbsp;</p>
<p>So there you have it.  In the spirit of <span style="text-decoration: underline;">keeping me honest</span>, please hound me to get at least one blog post a week.  Sunday nights seem like as good a time as any.  You know, until football season starts.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://aaronstaves.com/2011/03/21/hi-there/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Need a (free) web based movie player?</title>
		<link>http://aaronstaves.com/2009/05/13/need-a-free-web-based-movie-player/</link>
		<comments>http://aaronstaves.com/2009/05/13/need-a-free-web-based-movie-player/#comments</comments>
		<pubDate>Wed, 13 May 2009 18:27:28 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Playing Around]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://aaronstaves.com/?p=111</guid>
		<description><![CDATA[Here's the skinny... If you hadn't heard, my sister and brother in law just had (well, he's 1 now) a baby boy, congrats!.  Given how tech savvy they both are they take a ton of movies and photos and post them online for relatives from all around the country to watch.  This is an awesome [...]]]></description>
			<content:encoded><![CDATA[<h2>Here's the skinny...</h2>
<p><a href="http://aaronstaves.com/wp-content/uploads/2009/05/lookwhostalking.jpg"><img class="alignnone size-medium wp-image-123" title="lookwhostalking" src="http://aaronstaves.com/wp-content/uploads/2009/05/lookwhostalking-273x300.jpg" alt="lookwhostalking" width="273" height="300" /></a></p>
<p>If you hadn't heard, my sister and brother in law just had (well, <em>he's 1 now</em>) a baby boy, congrats!.  Given how tech savvy they both are they take <strong>a ton</strong> of movies and photos and post them online for relatives from all around the country to watch.  This is an awesome way to keep up on how the little guy is doing.  However! Given that some of our relatives may be a bit more on the less <em>tech savvy side</em> I decided that making an interactive web based movie page would be a good way to help them view their new nephew, cousin, grandson or great grandson.  You can <strong>see a demo</strong> of it <a href="http://aaronstaves.com/movietest" target="_blank">here</a>.</p>
<p>For starters, I've already <a href="http://promo.carspot.com/">done</a> a few <a href="http://www.carsgofaster.com/_/product_review.html">projects</a> using the <a href="http://www.longtailvideo.com/players/" target="_blank">JW FLV Player</a>. I use this player for a few reasons.  First off, it's <strong>free</strong> to use for non-commercial purposes!  And even if you do use it commercially, it's pretty <em>dirt cheap</em>.  Second!  It's got an insanely awesome javascript interface.  You can pretty much completely control the player and hook into almost every event you can think of that the player may publish. This is great for web developers that know absolutely nothing about flash but still want the benefit of a flash based movie player.  Lastly, this player is great because it constantly getting updates and there's a huge community behind it; always good stuff.</p>
<p><a href="http://aaronstaves.com/wp-content/uploads/2009/05/lookwhostalking.jpg"><br />
</a></p>
<h2>What you'll need</h2>
<p>I did try to spruce up this player slightly so you'll need a few things if you'd like this to work on your server.</p>
<ul>
<li><strong>mod_perl</strong>, along with the CGI, File::stat and DateTime packages.  I imagine most come pretty standard with a vanilla install of PERL.</li>
<li><strong>ffmpeg</strong>, compiled with png support.  I imagine a pretty standard install of ffmpeg should be fine.</li>
<li><strong>movie files</strong>, yup! you'll need some movies to view.  Right now this is limited by the type of movie files that the player natively supports.  I may add some transcoding using ffmpeg later if anyone actually uses this and wants it.</li>
</ul>
<p>And that should be it!  Pretty simple.  I'm also using the <a href="http://developer.yahoo.com/yui/" target="_blank">YUI javascript toolkit</a>, but Yahoo! has been kind enough to host that on their <a href="http://en.wikipedia.org/wiki/Content_Delivery_Network" target="_blank">CDN</a>.  So no need to download all those crazy javascript files.</p>
<h2>How to Install</h2>
<p>Here are some quick install instructions:</p>
<ol>
<li>Grab the zip file from <a title="here" href="http://aaronstaves.com/movietest/moviePlayerFiles.zip" target="_self">here</a></li>
<li>Make a directory on your server (in my case aaronstaves.com/movietest) where you want the files to and unzip 'em there.</li>
<li>Make a directory (if you need to) where you're movies are going to be placed.  I put mine in aaronstaves.com/movietest/movies).  This directory will <strong>need to be writable</strong> as far as your webserver is concerned.  If you already have them you can forget this step!</li>
<li>Edit the <strong>movies.conf</strong> file.  You'll need to specify the <em>absolute path</em> of your movie director and the url that links to them.</li>
<li>Once that's done you should be able to just go to your url and watch some movies!</li>
</ol>
<h2>Features</h2>
<h3>Sorting and Dates</h3>
<p>I've made it so the player automatically sorts the movies by date.  The newer movies are listed at the top and the older movies are listed at the bottom.  It also grabs the date one of two ways.  1) if the date is specified in the filename (yyyymmdd format), it will use that.  2) otherwise it will grab the timestamp on the actual file.  <em>Neat huh?!</em> The only downside to this is is that it has to touch each file(name) to do this.  But I wanted to make this without the hassle of a DB, kind of a necessary evil.  Hopefully with 100's of files, this won't be that much of a performance hit.</p>
<h3>Native file support</h3>
<p>As I said above, this natively supports mp4 (m4v, etc) files as well as flv files.  So hopefully if your files are in that format, you won't have to deal with transcoding files.  <strong>Awesome!</strong> As I said, transcoding wouldn't be <em>that hard</em> to do, but it would be pretty time consuming on the server side, pending on how large the files were, so I'm not sure how I'd go about that at the moment.</p>
<h3>Downloads</h3>
<p>See a movie you like? Well <strong>download it!</strong> You'll notice at the top of the screen when you play a movie, you'll get an awesome download link.  For anyone that wants to actively share or archive these movies, I figured it would be a necessity.</p>
<h2>Feedback</h2>
<p><a href="http://aaronstaves.com/wp-content/uploads/2009/05/feedback2.jpg"><img class="size-medium wp-image-121 alignnone" title="feedback" src="http://aaronstaves.com/wp-content/uploads/2009/05/feedback2-300x215.jpg" alt="feedback" width="300" height="215" /></a></p>
<p>Right now I've only tested this in FF3+, IE 7  and the latest version of Opera.  If anyone finds something wrong with it, let me know and I'll see if I can address those issues.  Otherwise feedback, suggestions, comments and criticism is welcome.  This is my first mini-project in a while that I've made to "distrubute" so somethings may be clear while others may not.  Hopefully with the addition of the conf file, you won't have to touch any of the code I wrote.  This small tutorial is written for them, but anyone is more than welcome to use it if they want their own personal video page to share with others.  Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://aaronstaves.com/2009/05/13/need-a-free-web-based-movie-player/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AOL CDN FTW</title>
		<link>http://aaronstaves.com/2008/05/05/aol-cdn-ftw/</link>
		<comments>http://aaronstaves.com/2008/05/05/aol-cdn-ftw/#comments</comments>
		<pubDate>Mon, 05 May 2008 22:33:15 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Dojo]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[aol]]></category>
		<category><![CDATA[cdn]]></category>
		<category><![CDATA[grid]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://aaronstaves.com/?p=19</guid>
		<description><![CDATA[So lately I've started undergoing (yet another) personal project. Basically a file request and upload system that will be using the Dojo Grid. Initially I was going to try using a few other widgets from the Dojo family, but decided that it was time to revisit the Grid and see how much it has progressed [...]]]></description>
			<content:encoded><![CDATA[<p>So lately I've started undergoing (yet another) personal project.  Basically a file request and upload system that will be using the <a title="Dojo Grid" href="http://dojotoolkit.org/book/dojo-book-0-9/docx-documentation-under-development/grid">Dojo Grid</a>.  Initially I was going to try using a few other widgets from the Dojo family, but decided that it was time to revisit the Grid and see how much it has progressed since Dojo 1.0.2.</p>
<p>Initially when I was using it, I couldn't understand why my page was loading so slow.  When I slow, I mean <strong>slow</strong>; enough to the point that the browser would give you the whole <strong>this page could be doing bad things, would you like to stop scripts on this page?</strong> slow. Yeah I have a few <a title="XMLHttpRequest" href="http://en.wikipedia.org/wiki/XHR">XHR</a>'s here and there, but nothing out of the ordinary.  The only thing I could find was that commenting out Dojo requires for the actual Grid dijit improved performance immensely, but how am I supposed to use a grid if I can't include it!  I didn't really remember Dojo's demo being slow at all, so I went to investigate on their site.</p>
<p>Copying their example line-for-line worked like a charm.  It loaded up nice and quick, no problems, no lag and <em>none of it was my code</em>.  So I began to tweak a few things to try and get my data in the grid.  First off, I noticed that they were making their includes from the <a title="AOL CDN" href="http://dev.aol.com/dojo">AOL CDN</a>.  I've heard about this but never really looked that much into it (as I probably <a title="Content Delivery Network" href="http://en.wikipedia.org/wiki/Content_delivery_network">should have</a>).  So I took it out, and replaced it with includes from our <a title="DreamHost Homepage" href="http://dreamhost.com">DreamHost</a> server.  Upon doing that, and reloading, <strong>this is where the slow down was from</strong>.</p>
<p>Don't get me wrong, DreamHost is a great hosting company, but lets face it - you get what you pay for.  $90 for two years of hosting, you can't really expect to get lightning fast connections and/or a dedicated machine as your server.  Their notorious slow load times had to be the bottleneck that was killing my code.  For those not in the know: Dojo require statements essentially make requests to grab all the dojo files that they need.  For a heavy duty dijit like the grid, this can add up to <em>a lot</em> of requests!  And making these requests through the DH server was what was slowing me down.</p>
<p>So basically, using AOL's CDN to host all the Dojo includes make things insanely faster (load times below!).  I guess fast javascript isn't enough, but when dealing with massive JS requests and includes, having a fast host is just as important.  Lesson Learned!</p>
<h3>DreamHost Hosted Example - Load Time: 27.86s</h3>
<p><a title="DreamHost Hosted Dojo Grid" href="http://aaronstaves.com/content/gridTestDH.html">(link)</a></p>
<p><a href="http://aaronstaves.com/wp-content/uploads/2008/05/picture-4.png"><img class="alignnone size-medium wp-image-20" title="DH Dojo Grid" src="http://aaronstaves.com/wp-content/uploads/2008/05/picture-4-300x168.png" alt="DH Dojo Grid Load Time" width="300" height="168" /></a></p>
<h3>AOL CDN Hosted Example - Load Time: 2.96s</h3>
<p><a title="AOL CDN Hosted Dojo Grid" href="http://aaronstaves.com/content/gridTestAOLCDN.html">(link)</a></p>
<p><a href="http://aaronstaves.com/wp-content/uploads/2008/05/picture-5.png"><img class="alignnone size-medium wp-image-21" title="AOL CDN Dojo Grid" src="http://aaronstaves.com/wp-content/uploads/2008/05/picture-5-300x168.png" alt="AOL CDN Dojo Hosted Grid" width="300" height="168" /></a></p>
<p>Wow.</p>
]]></content:encoded>
			<wfw:commentRss>http://aaronstaves.com/2008/05/05/aol-cdn-ftw/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Welcome to Planningville &#8211; Population++</title>
		<link>http://aaronstaves.com/2008/02/10/welcome-to-planningville-population/</link>
		<comments>http://aaronstaves.com/2008/02/10/welcome-to-planningville-population/#comments</comments>
		<pubDate>Sun, 10 Feb 2008 08:29:32 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[plan]]></category>
		<category><![CDATA[planning]]></category>
		<category><![CDATA[pylons]]></category>
		<category><![CDATA[wireframe]]></category>
		<category><![CDATA[YUI]]></category>

		<guid isPermaLink="false">http://aaronstaves.com/2008/02/10/welcome-to-planningville-population/</guid>
		<description><![CDATA[Inspired by a recent comment on my last blog, I've taken David up on the webpage wireframe and prototype tutorials he found. Both of the articles seem to be geared towards actual graphic designers or user interface designers that have very little or limited knowledge of javascript; and almost no knowledge of the server side [...]]]></description>
			<content:encoded><![CDATA[<p>Inspired by a recent <a href="http://aaronstaves.com/2008/02/06/all-hail-the-user/#comment-19" title="comment on previous blog" target="_blank">comment</a> on my last blog, I've taken <a href="http://www.hackyourlife.org/" title="David's Blog" target="_blank">David</a> up on the webpage wireframe and prototype tutorials he found.  Both of the articles seem to be geared towards actual graphic designers or user interface designers that have very little or limited knowledge of javascript; and almost no knowledge of the server side of their applications.  But nonetheless, there was some really good info in there.</p>
<p>From what I gather, a wireframe is just that a wire-frame.  It should purely consist of a layout, with the possibility of some actual production CSS in the page.  The articles suggested that there are two main ways to do this:</p>
<ol>
<li>Create a page for each "flow" of your application.</li>
<li>Create one page with a "stacked flow" of your application.</li>
</ol>
<p>Basically, a flow is the various screens/interfaces that the end-user will be presented with.  They give a nice "login" example (one which I actually made one of my own as well) with a "stacked flow" wireframe.  You can see my example of that <a href="http://aaronstaves.com/wp-content/uploads/2008/02/login_wireframes.html" title="Login Wireframes" target="_blank">here</a>. Comments are welcome, but keep in mind:</p>
<ol>
<li>I'm not a graphic designer</li>
<li>This is my first crack at this</li>
<li>It's 2am... and I'm making wireframes...</li>
</ol>
<p><span id="more-14"></span><br />
<img src="http://aaronstaves.com/wp-content/uploads/2008/02/wireframepn8.jpg" alt="Wireframe Maddness!" /></p>
<p>Needless to say, that's kind of how I feel at the moment.  The actual prototype, which I plan on using <a href="http://developer.yahoo.com/yui/" title="Yahoo User Interface Library" target="_blank">YUI</a> for will probably come out tomorrow or sometime next week.</p>
<p>The reason I actually went through and <em>made</em> a wireframe, is because I'm attempting to get some sort of side project going for myself (yet again...) so I can play around with some new things.  These things being YUI; as mentioned above, Python; which I've been somewhat getting into and web frameworks - namely <a href="http://pylonshq.com/" title="Pylons Homepage" target="_blank">Pylons</a>.  So tonight at least I got some wireframes done for the login, the next step will be to learn some YUI and get some fake data going for the prototype.</p>
<p>Lastly, I (possibly re)learned some interesting things today regarding CSS.  As you can see in the source for my wireframes, I'm actually using display: table.  Insane!  I've never actually used that, ever.  I initially had a pretty descent layout, but when looking at it on my Nokia N800, it looked completely borked!  So the only way was to make div's within my login box actually span set percentage widths.</p>
<p>Now you're probably saying, whoa! Just set a width on that puppy and your good to go.  Wrong!  Since I wanted somewhat "tabular" data, consisting of two rows, and two colums.  Each row being 100% the width of the box and each column being 50% of the row, there was no way to do that using pure css and <strong><em>not</em></strong> using tables.  This is for two reasons:</p>
<ol>
<li>Div elements are initially set as display: block.  This means there is a line break before and after the element.  So there's no way to have two "columns" side by side.</li>
<li>Inline elements (or elements set to display:inline!) do line up side by side; however!, they will only take on as much width as they need, and don't respond to width: styles.  They may use the width attribute in some browsers, but not what I was testing it in (FireFox 2).</li>
</ol>
<p>So I  came across an article talking about using display: table.  And really, it couldn't be simpler.  Parent element needs to be set as <strong>display: table</strong>.  The children of that needs to be set as <strong>display: table-row</strong>.  And the children of the rows need to be set to <strong>display: table-cell</strong>.  The only downside, is there is absolutely no support for colspan or rowspan in css or the markup.  Even if they did work, it looks like the CSS for those will be depricated in CSS 3 and replaced by some other multi-row/column attribute.</p>
<p>So all in all, a night of learning pylons, which I'm <em>reall</em>y<em> </em>starting to like.  And hopefully I'll keep cranking out these wireframes/prototypes and get good enough at them so I can actually use them in my daily work.  And although I'm posting more now... I hope I don't make a habit of posting at 2:30am : (.  Next time I'll hopefully have some stuff on prototypes to discuss.</p>
]]></content:encoded>
			<wfw:commentRss>http://aaronstaves.com/2008/02/10/welcome-to-planningville-population/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>All hail the user</title>
		<link>http://aaronstaves.com/2008/02/06/all-hail-the-user/</link>
		<comments>http://aaronstaves.com/2008/02/06/all-hail-the-user/#comments</comments>
		<pubDate>Thu, 07 Feb 2008 05:51:27 +0000</pubDate>
		<dc:creator>Aaron</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://aaronstaves.com/2008/02/06/all-hail-the-user/</guid>
		<description><![CDATA[Contrary to popular belief, "the user" is not an all-powerful being that exists only to play games against sprites. But the truth is out there... somewhere... \ Awesome 90's cartoons aside, there are things that we can learn from the user! The past few weeks I've been re-desiging a lot of the web user interfaces [...]]]></description>
			<content:encoded><![CDATA[<p>Contrary to popular belief, "<em>the user</em>" is not an all-powerful being that exists only to play games against sprites.  But the truth is out there... somewhere...</p>
<p><img src="http://aaronstaves.com/wp-content/uploads/2008/02/reboot-xfiles.jpg" alt="Fax Modem and Data Nully from Reboot" />\</p>
<p>Awesome 90's cartoons aside, there are things that we can learn from<em> the user</em>!  The past few weeks I've been re-desiging a lot of the web user interfaces here at work.  I've found that when I'm given a chance to update an already designed UI, I can pretty much copy the old style and just give it a "web 2.0" boost and add in some new functionality - no biggie.  But when given a completely new projectthat is done from scratch, I start to get a bit lost.</p>
<p>The reason I bring this up is because last <a href="http://en.wikipedia.org/wiki/Scrum_%28development%29#Sprint" title="Wikipedia Link for Sprint" target="_blank">sprint</a> I was given a chance to make a new web tool for some of our in-house support staff to use.  This tool replaces some minor SQL query's that I would do on a day to day basis, so I was already pretty familiar with the project.  Initially I threw together what I thought to be an all-in-one awesome bone-crushing tool that did everything it had to... and more!  However! Upon dropping this tool on our support staff, it became readily apparent that they were not terribly familiar with <em>all</em> aspects of this particular system, and had no idea how to use my brand new shiny tool.  Oops! Looks like my user interface doesn't fit the job!</p>
<p><span id="more-11"></span></p>
<p><img src="http://aaronstaves.com/wp-content/uploads/2008/02/deltaoops.jpg" alt="Delta oops!" height="240" width="320" /></p>
<p>In all fairness it <em>is</em> completely my fault, because I was trying to make a tool that <em>I</em> would use, and not a tool that your average <em>Joe User</em> would use.  So after going over my UI with some of the people that were actually using it, I got some input and tried to see if I could possibly improve upon my abomination of a webpage.  Now here's where I get into my UI design. I assume everyone has pretty much heard all of these before, but this seemed to really hit home for me this past week - so I'm putting them up anyways!</p>
<p><strong>Simplicity!</strong>  You'll hear this time and time again about making things <em>easier</em> for the user.  And most of the time, they're probably going to be right. My first iteration had a real classy whiz-bang multiple selection drag and drop interface, when this clearly was not even needed in the end-user interface.  It was just going to be a new thing to learn, and a new widget full of potential bugs.  So that got scrapped and replaced with a table layout using divs.  This way the user can just focus on one element at a time, and it makes handling the data <em>immensely</em> easier on the programming side.</p>
<p>Dialogs are also an amazingly easy way to make things simpler.  Everyone has seen them, everyone knows how to use them and it's no surprise when one pops up.  Using dialogs completely changes how a page can be viewed.  Instead of displaying <em>all</em> information <em>all</em> the time, just display <em>a lot</em> of very specific information when a user requests it.  This not only makes your layout a lot cleaner, but also allows you to separate functionality from various sections of the page.</p>
<p><strong>Consistency!</strong> Granted, with a lot of the new javascript libraries such as <a href="http://dojotoolkit.org" title="Dojo Toolkit" target="_blank">dojo</a> an <a href="http://developer.yahoo.com/yui/" title="Yahoo User Interface Library" target="_blank">YUI</a>, there are lots of awesome widgets at your disposal.  The problem is - is that if <em>the user</em> doesn't know how they're supposed to work, how is that actually helping them?  This was pretty apparent with my drag and drop widget that I mentioned above, but simple things like common layouts as well as how the data is presented also have a <em>huge</em> impact on how well the UI is received.  So in keeping with the above comment, simple and consistent seemed to be the way to go.</p>
<p><strong>Quick and Verbose!</strong>  So obviously with the newly (re)discovered <a href="http://en.wikipedia.org/wiki/XHR">XMLHttpRequest</a> techniques, this gives an opportunity to make people not have to navigate from page to page - like it was 1995.  Using XHR's to speed up saving or loading data in the background makes pages appear to be loading faster as well as makes the user happy.  Win-Win!  The only problem is - is that you still need to let the user know what's going on.  In most cases a simple <a href="http://en.wikipedia.org/wiki/Throbber">throbber</a> will do.  So along with the verboseness, some helpful messages are always nice as well.  If creating a pdf is going to take a few minutes on the server, maybe you should let the user know that.  This way, hopefully, they'll think twice before actually calling in and complaining about how your site is slow.</p>
<p>So all in all, I cranked out my re-designed tool over the weekend and Monday morning it was getting put to use.  Everyone that's using it seems to be <em>a lot</em> happier and more comfortable with the tool, which makes me <em>a lot</em> happier because now I no longer have to be diving through SQL to make minor changes.  Obviously no UI is going to satisfy everyone, but following the above will at least get me started on the right track from now on.  I also find myself drawing about 10 to 15 drafts of what I think the <a href="http://en.wikipedia.org/wiki/Website_wireframe" target="_blank" title="Wire-frame wikipedia link">wire-frame</a> should look like before I even start coding.  This is a pretty big step from where I was 2 years ago and so far it seems to be working well.</p>
<p>I apologize for the lazyness in posting, but I have been somewhat busy between work, <a href="http://aaronstaves.com/2008/01/02/problem-10-more-prime-numbers/" title="Link for Side Projects" target="_blank">side projects</a> and <a href="http://en.wikipedia.org/wiki/Advance_Wars:_Days_of_Ruin" title="Advance Wars" target="_blank">other things</a>.  So hopefully I can get back into the habit of posting.</p>
]]></content:encoded>
			<wfw:commentRss>http://aaronstaves.com/2008/02/06/all-hail-the-user/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

