<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Thoughts</title>
    <link rel="alternate" type="text/html" href="http://spencerchristensen.com/blog/" />
    <link rel="self" type="application/atom+xml" href="http://spencerchristensen.com/blog/atom.xml" />
    <id>tag:spencerchristensen.com,2008-01-03:/blog//1</id>
    <updated>2010-06-16T04:47:40Z</updated>
    <subtitle>Bit and pieces of my thoughts and goings on</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Publishing Platform 4.01</generator>

<entry>
    <title>Ubuntu 10.04 upgrade</title>
    <link rel="alternate" type="text/html" href="http://spencerchristensen.com/blog/2010/06/ubuntu-1004-upgrade.html" />
    <id>tag:spencerchristensen.com,2010:/blog//1.19</id>

    <published>2010-06-16T04:22:17Z</published>
    <updated>2010-06-16T04:47:40Z</updated>

    <summary>I&apos;ve been using Ubuntu for a few years now and quite like it. And when I saw they had released 10.04 I was excited to upgrade. The last two releases I did an upgrade-in-place with their upgrade tool and I...</summary>
    <author>
        <name>Spencer</name>
        
    </author>
    
        <category term="Grumblings" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="News" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Project Ideas" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="how-to" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="linux" label="Linux" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ubuntu" label="Ubuntu" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="upgrade" label="upgrade" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://spencerchristensen.com/blog/">
        <![CDATA[<p>I've been using Ubuntu for a few years now and quite like it. And when I saw they had released 10.04 I was excited to upgrade. The last two releases I did an upgrade-in-place with their upgrade tool and I didn't run into any major problems. So I did the same thing for this release. But that's where this story begins. </p>

<p>First I noticed that I was getting warnings and errors related to my X.org config. This was very alarming since I've never seen that before and I don't run any thing unusual in my x.org config. I tried a few different things to address it but could never really solve the problem. Then I noticed that rhythmbox was always crashing on me. Like all the time. Oh and my startup applications would never start up as they were supposed to. And compiz wouldn't work due to complaints about in correct driver even though I did install the correct one.  </p>

<p>So after complaining about it for a week to my coworkers they suggested that I back up all my important stuff and then do a fresh install. Complety wipe it and install from scratch with 10.04. So I bought an external hard drive (500G) and did that.  The fresh install was soooo easy and quick. I then carefully restored data back to my home folder. If you are doing this be careful not to copy back .gnome2 or .gvfs or anything .g* or at least be very cautious in doing so. Those could break things on an upgrade like this. </p>

<p>Conclusion- the fresh install worked beatifully. Ubuntu 10.04 works great and i'm not seeing any of the problems I had earlier. In fact it also fixed a completely separate issue I was having with my wireless card. So I'm definately still an Ubuntu fan. </p>]]>
        
    </content>
</entry>

<entry>
    <title>ideas for blog posts</title>
    <link rel="alternate" type="text/html" href="http://spencerchristensen.com/blog/2010/06/ideas-for-blog-posts.html" />
    <id>tag:spencerchristensen.com,2010:/blog//1.18</id>

    <published>2010-06-06T07:25:09Z</published>
    <updated>2010-06-06T07:36:39Z</updated>

    <summary><![CDATA[I haven't written for a while, but I have gathered several ideas to write about.&nbsp; Here are a few of them:My SageTV setup, and why I chose to go with SageTV versus MythTV, or TiVo or others.Controltier.&nbsp; This is an...]]></summary>
    <author>
        <name>Spencer</name>
        
    </author>
    
        <category term="News" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Project Ideas" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="ideas" label="ideas" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://spencerchristensen.com/blog/">
        <![CDATA[I haven't written for a while, but I have gathered several ideas to write about.&nbsp; Here are a few of them:<br /><br /><ul><li>My SageTV setup, and why I chose to go with SageTV versus MythTV, or TiVo or others.</li><li>Controltier.&nbsp; This is an automation framework for deploying and managing software.&nbsp; It is a bit complex but can be very powerful.&nbsp; I use this at work.</li><li>My presentation at Postgresql Conference East, entitled "Postgres Administration for Sysadmins".&nbsp; This presentation covers basics of configuration and running Postgres and monitoring your database.</li><li>An updated how-to for Virtual Box- setting up several servers and getting them to talk to each other.</li><li>How-to on getting CUPC (cisco's chat/video thingy app) working in Virtual box vm.</li><li>Snippets of some of my screenplays (works in progress).</li></ul>As you can see, I actually do have things to write about, now if I could only make the time.....<br /><br /> ]]>
        
    </content>
</entry>

<entry>
    <title>Music covers are interesting</title>
    <link rel="alternate" type="text/html" href="http://spencerchristensen.com/blog/2010/02/music-covers-are-interesting.html" />
    <id>tag:spencerchristensen.com,2010:/blog//1.17</id>

    <published>2010-02-19T16:27:05Z</published>
    <updated>2010-02-19T16:39:26Z</updated>

    <summary><![CDATA[For some reason I'm drawn to music covers.&nbsp; I like to hear new versions of the same song be different artists and compare styles and interpretations.&nbsp; I have another blog post from a long time ago that mentions an idea...]]></summary>
    <author>
        <name>Spencer</name>
        
    </author>
    
        <category term="Project Ideas" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="mp3player" label="mp3 player" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="music" label="music" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="plugins" label="plugins" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="songcovers" label="song covers" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://spencerchristensen.com/blog/">
        <![CDATA[For some reason I'm drawn to music covers.&nbsp; I like to hear new versions of the same song be different artists and compare styles and interpretations.&nbsp; I have another blog post from a long time ago that mentions an idea for a mp3 player plugin that would connect to <a href="http://www.secondhandcongs.com/">SecondHandSongs</a> to query their database of song covers and provide information on the current song and related covers if any.<br /><br />Well, I actually have renewed the desire for such a plugin and have a few links of resources to help be get started on this:<br /><ul><li>http://www.secondhandcongs.com (of course)</li><li>http://code.google.com/p/rhythmtoweb/</li><li>http://live.gnome.org/RhythmboxPlugins/ThirdParty</li><li>http://live.gnome.org/RhythmboxPlugins/WritingGuide</li><li>http://www.grooveshark.com</li><li>http://apidocs.tinysong.com/</li></ul><br />My current idea is to ping SecondHandSongs with the song info and retrieve:<br />1. if this is a cover<br />2. if this is an original, with other artists covering it<br />3. if this is not found at all in their database<br /><br />for 1 and 2, I'll get the list of all covers and artists, and then query TinySong.com to see if they have that song in their database.&nbsp; If so, they will provide a URL to listen to that song in a browser.<br /><br />So you can listen to a song and say, "Hmm, I wonder if anyone has redone this song...", then right click on it, or something, and choose "Find Song Cover Info...", and then a list of songs and artists get displayed, and when you click on any one of them, it pauses your current music player, launches a web browser with the URL for that song cover and you get to listen to it right there.<br /><br />Coolness.<br /><br />]]>
        
    </content>
</entry>

<entry>
    <title>Blogging is hard if you don&apos;t do it</title>
    <link rel="alternate" type="text/html" href="http://spencerchristensen.com/blog/2010/02/blogging-is-hard-if-you-dont-d.html" />
    <id>tag:spencerchristensen.com,2010:/blog//1.16</id>

    <published>2010-02-19T16:24:31Z</published>
    <updated>2010-02-19T16:26:52Z</updated>

    <summary><![CDATA[I've found that is it hard to keep up your blog if you don't keep up your blog.&nbsp; Sounds silly when I write it out like that, but it's true.&nbsp; If you don't make time for something, then it probably...]]></summary>
    <author>
        <name>Spencer</name>
        
    </author>
    
        <category term="Grumblings" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="News" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="blogging" label="blogging" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="selfmotivation" label="self motivation" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://spencerchristensen.com/blog/">
        <![CDATA[I've found that is it hard to keep up your blog if you don't keep up your blog.&nbsp; Sounds silly when I write it out like that, but it's true.&nbsp; If you don't make time for something, then it probably won't happen on its own.&nbsp; Enough said.&nbsp; ]]>
        
    </content>
</entry>

<entry>
    <title>learning something new</title>
    <link rel="alternate" type="text/html" href="http://spencerchristensen.com/blog/2009/08/learning-something-new.html" />
    <id>tag:spencerchristensen.com,2009:/blog//1.15</id>

    <published>2009-08-31T21:44:57Z</published>
    <updated>2009-08-31T22:01:06Z</updated>

    <summary><![CDATA[So I'm spending a little time to learn something new.&nbsp; I've been working on www.todocycle.net for a while now (actual hours spent are still pretty low, but with the little free time I have it's been a long time)... any...]]></summary>
    <author>
        <name>Spencer</name>
        
    </author>
    
        <category term="Project Ideas" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Web Development" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="learning" label="learning" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="programming" label="programming" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="projects" label="projects" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://spencerchristensen.com/blog/">
        <![CDATA[So I'm spending a little time to learn something new.&nbsp; I've been working on www.todocycle.net for a while now (actual hours spent are still pretty low, but with the little free time I have it's been a long time)... any hoo.&nbsp; I purposely chose to use some technologies with this site that I have never used before but had heard about and wanted to learn.<br /><br />I started out with a few things that I am very familiar with, so that this project wouldn't take for freaking ever to get off the ground as I learn.&nbsp; I only spend about 3-4 hours a month on it, so my time better be well spent in order to see any visible progress.&nbsp; I started out with Postgres for the database, perl as the coding language, and CGI::Application as the MVC framework.&nbsp; All of which I'm quite comfotable with.<br /><br />Then I chose a few things to work with to force me to learn.&nbsp; Template Toolkit for templating (I've been using HTML::Template for most other things), DBIx::Class for ORM (I've never really given and ORM a chance), and jQuery for a Javascript toolkit. <br /><br />So far things have been a mixed bag.&nbsp; Picking up Template Toolkit was no problem at all and I am quite impressed by it.&nbsp; DBIx::Class has been another story.&nbsp; It has been a struggle for me to embrace it, and another one to try to get it to do what I want.&nbsp; I'm not giving up on it yet though.&nbsp; I want to give it a fair shot, but it was not a "learn it in one sitting and go to town" sort of thing like Template Toolkit was.<br /><br />And then there's jQuery.&nbsp; I actually have been putting that one off becuase I was so focussed on the backend of things until now.&nbsp; I just started reading the docs on jQuery and have to say I am mightily impressed.&nbsp; I used Prototype before and disliked it.&nbsp; At my work, they use Yahoo's YUI toolkit, which seems big and bloated to me.&nbsp; jQuery is tiight, lightweight, and very easy to pick up.<br /><br />So far: <br />&nbsp;&nbsp; jQuery &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; A<br />&nbsp; DBIx::Class&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; B-<br />&nbsp; Template Toolkit&nbsp;&nbsp; A<br /><br /> ]]>
        
    </content>
</entry>

<entry>
    <title>How to: Set up a few virtual servers on your desktop</title>
    <link rel="alternate" type="text/html" href="http://spencerchristensen.com/blog/2009/01/how-to-set-up-a-few-virtual-se.html" />
    <id>tag:spencerchristensen.com,2009:/blog//1.14</id>

    <published>2009-01-12T06:22:34Z</published>
    <updated>2009-01-12T07:22:19Z</updated>

    <summary><![CDATA[This is an attempt at a how-to for getting a few servers up and running that can talk to each other as well as with your host desktop machine all with vitrtualization.&nbsp; This has been a personal desire for some...]]></summary>
    <author>
        <name>Spencer</name>
        
    </author>
    
        <category term="Project Ideas" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Systems" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Web Development" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="how-to" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="howto" label="how-to" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="networking" label="networking" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="servers" label="servers" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="virtualization" label="virtualization" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://spencerchristensen.com/blog/">
        <![CDATA[This is an attempt at a how-to for getting a few servers up and running that can talk to each other as well as with your host desktop machine all with vitrtualization.&nbsp; This has been a personal desire for some time and I have read documentation about how to do this and have tried multiple times, and every time it seems that the job is complex and error prone.&nbsp; So this how-to will describe how I finally was able to get it working with almost no effort!&nbsp; Yeah!<br /><br />First of all, let's set the scene and give ourselves a goal:&nbsp; We want to have a VM web server and a VM database server running on our desktop that runs a simple web application.&nbsp; The two machines need to talk to each other.&nbsp; And we want to be able to open our desktop web browser and access the web application running on these VMs.&nbsp; And do all that without any complex configuration or breaking your desktop's network settings.<br /><br />The first thing we will use in this setup is VirtualBox (<a href="http://www.virtualbox.org/">http://www.virtualbox.org/</a>)<br />]]>
        <![CDATA[There are packages of VirtualBox for many linux distrobutions, or you can download it from their site.&nbsp; The key to this how-to is to make sure you get the latest version.&nbsp; The latest at the time of this writing, and which I am using is 2.1.0.&nbsp; This version "fixes" the complexities of virtual networking.<br /><br />Once that is downloaded and installed, fire it up.&nbsp; Next we'll need to create 2 virtual machines.&nbsp; This process is pretty simple.&nbsp; You will need the install disc(s) for your desired OS.&nbsp; I like <a href="http://centos.org/">CentOS</a> for servers because I am used to administering RHEL at work.&nbsp; You can use real CDs or DVDs through your computer's CDROM drive, or you can use ISO images on your hard drive.&nbsp; Either will work.&nbsp; As you go through the wizard for creating the virtual machine, it will ask mainly about the OS and have you set up a virtual hard drive.&nbsp; After you've done all that, select the machine in the list and click on Settings.<br /><br />Select "Network" in the list on the left.<br /><br /><span class="mt-enclosure mt-enclosure-image"><a href="http://spencerchristensen.com/blog/Screenshot-settings-network-thumb-260x209.html" onclick="window.open('http://spencerchristensen.com/blog/Screenshot-settings-network-thumb-260x209.html','popup','width=260,height=209,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://spencerchristensen.com/blog/assets_c/2009/01/Screenshot-settings-network-thumb-260x209-thumb-260x209.png" alt="Thumbnail image for Screenshot-settings-network.png" class="mt-image-left" style="margin: 0pt 20px 20px 0pt; float: left;" width="260" height="209" /></a></span><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />For the drop down "Attatched to", select <b>Host Interface</b>.&nbsp; You should see at least one of your desktop's interfaces in the list below.&nbsp; Mine says wlan0, because I am only on wireless at the moment- so my virtual servers share my wireless network interface.<br /><br />Go through the rest of the setup and save your VM's coinfig.&nbsp; Make sure that you either mount the ISO for your install or that you enable the CDROM to access your install disc.&nbsp; Now boot up your machine and go through the install process using your OS' install process.&nbsp; This shouldn't be too tough for you.<br /><br />That's pretty much it.&nbsp; When it comes time in your OS' install for you to configure the networking for your server, leave them set for DHCP, they will go out to the same DHCP server that your desktop uses,&nbsp; Cool eh?<br /><br />Now after all these steps, you should have a completed VM with the OS installed.&nbsp; When it boots for the first time after all the install stuff is done, log into the VM and find out what the VM's ip address is.&nbsp; Usually <b>ifconfig</b> will do the trick.<br /><br />Now, from your desktop open up a terminal and ping that IP.&nbsp; Bingo!&nbsp; One thing to remember- your VM is like any other machine on your network now and just was freshly installed.&nbsp; There maybe a default firewall or SE linux setup that will need some adjustment to allow access to it.&nbsp; I generally turn off both SE linux and&nbsp; iptables on my VMs since they are playgrounds anyway and I'm not too concerned with them.<br /><br />You should be able to ssh to root@ your VM's ip address from your desktop and get in.&nbsp; Once you have installed and configured your web server you should be able to point your desktop's web browser to your VM's ip address too!&nbsp; Cool huh?<br /><br />Now go through the process of creating another VM and get it up and running like the other one.&nbsp; Yes, you can have more than one running at a time.&nbsp; And yes, they can all use Host Interface networking.&nbsp; Once you've got 2 machines up and running, find out what each one's ip address is and see if they can ping each other.<br /><br />They should be able to see and talk to each other as well as see and talk to your desktop all as if they were each separate real machines all on the same DHCP network!<br /><br />I also keep things a little simplified by hacking at my desktop's /etc/hosts and manually add enties for my VM's and give them names.&nbsp; That way I can use names for my VM's in ssh and in my browser.&nbsp; The only problem with this is that I have to check the ip addresses each time I start everything up again.&nbsp; But that's not that big a deal.<br /><br />]]>
    </content>
</entry>

<entry>
    <title>Time management</title>
    <link rel="alternate" type="text/html" href="http://spencerchristensen.com/blog/2009/01/time-management.html" />
    <id>tag:spencerchristensen.com,2009:/blog//1.13</id>

    <published>2009-01-12T06:02:29Z</published>
    <updated>2009-01-12T06:19:09Z</updated>

    <summary><![CDATA[For a long time I've suffered under the illusion that I was doing ok in managing my time and all that I was working on.&nbsp; I assumed that all other programmers, software engineers, system administrators, etc. all had lives similar...]]></summary>
    <author>
        <name>Spencer</name>
        
    </author>
    
        <category term="Book reviews" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="goodbooks" label="good books" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="timemanagement" label="time management" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="todolists" label="todo lists" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://spencerchristensen.com/blog/">
        <![CDATA[<span class="mt-enclosure mt-enclosure-image"><a href="http://spencerchristensen.com/blog/time_management.gif"><img alt="time_management.gif" src="http://spencerchristensen.com/blog/assets_c/2009/01/time_management-thumb-180x270.gif" class="mt-image-left" style="margin: 0pt 20px 20px 0pt; float: left;" width="180" height="270" /></a></span>For a long time I've suffered under the illusion that I was doing ok in managing my time and all that I was working on.&nbsp; I assumed that all other programmers, software engineers, system administrators, etc. all had lives similar to mine and that we all barely keep our heads above water and at any moment we could drown.<br /><br />Well the truth is different from that, and it took a book to help me understand that.&nbsp; Please, please, please- if you are at all in the IT industry and work with code, or systems, or networks, or stuff like that- then please buy and read "<a href="http://oreilly.com/catalog/9780596007836/index.html">Time Management for System Administrators</a>" by Thomas A. Limonecelli (O'Reilley).<span style="white-space: nowrap;"></span>&nbsp; This book is not magic, don't get me wrong- but if you feel that being burried by tasks and projects is normal and that you have to work more hours a week than a "normal person" becuase your job is just that demanding- then you need this book to help you see differently!<br /><br /><br />]]>
        
    </content>
</entry>

<entry>
    <title>Light reading over the Holidays</title>
    <link rel="alternate" type="text/html" href="http://spencerchristensen.com/blog/2008/11/light-reading-over-the-holiday.html" />
    <id>tag:spencerchristensen.com,2008:/blog//1.12</id>

    <published>2008-11-28T19:44:23Z</published>
    <updated>2010-07-13T15:50:22Z</updated>

    <summary><![CDATA[So, it's Thanksgiving weekend and I find myself online reading a few articles and blog posts.&nbsp; One of note that I wanted to comment on and point out:The benefits of vanilla CGI vs FastCGI for Perl apps &nbsp;&nbsp; Interesting read...]]></summary>
    <author>
        <name>Spencer</name>
        
    </author>
    
        <category term="News" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Web Development" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="cgi" label="CGI" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="webdevelopment" label="web development" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://spencerchristensen.com/blog/">
        <![CDATA[So, it's Thanksgiving weekend and I find myself online reading a few articles and blog posts.&nbsp; One of note that I wanted to comment on and point out:<br /><br /><a href="http://mark.stosberg.com/blog/2008/11/the-benefits-of-vanilla-cgi-vs-fastcgi-for-perl-apps.html">The benefits of vanilla CGI vs FastCGI for Perl apps</a><br /> <div>&nbsp;&nbsp; Interesting read from Mark Stosberg.&nbsp; I'm quite familiar with Mark from his work with CGI::Application,l as I've been a fan of that perl module for many years now.&nbsp; I think there is a bias here that I need to mention, and that I think Mark and I share.<br /><br />&nbsp;&nbsp; What people value in a web development process/toolkit is significantly weighted by the process and tools that web developer a) first learned, and b) is most confortable using.&nbsp; Meaning that a developer whose first experience programming web applications was with Catalyst and has since found Mojo more comfortable and uses it regularly, will have a different set of "values" (or criteria by which other things are compared) than a developer who started web development with straight CGI.pm and is now a Jifty user.&nbsp; (this bias should extend itself to any and all programmers, but I find it more appearant in web developers where there is more contention about which toolkit is better than another).<br /><br />&nbsp;&nbsp; Whew.&nbsp; OK, after all that, I have to say that I agree with Mark and feel that "vanilla CGI" is a great way to get things rolling as a developer without having (usually) to change a thing to a web server.&nbsp; Just write your code and go.&nbsp; I also feel that if people expect things to run slow in CGI and not in mod_perl or FastCGI because that is their biased environment of choice, then they will program accordingly.&nbsp; Meaning that they will write code that is slower, heavier, etc.&nbsp; because "oh, mod_perl will take care of it and it will be fast enough,"&nbsp; or something similar.<br /><br />&nbsp;&nbsp; I've never actualy heard anyone say that, but I hear things close to it from other developers (Java web developers mostly) who feel like everything is perfectly normal when you have to rely on huge complex tools and frameworks and middleware and dedicated containers and separation of tiers and abstracted everything and this and that and the kitchen sink too just to develop web applications.&nbsp; This "normal bloat" I'll call it, is where that bias I mentioned earlier really comes out.&nbsp; If people can't even see that their tools and process is overly complex, burdensome, and has a moderate to high degree of dependencies for normal development and opperation, than how can you persuade them that it is perfectly fine to live without that?&nbsp; How can you make them see that that is not "normal" for many, many other web developers?<br /><br />&nbsp;&nbsp; Living without FastCGI???&nbsp; Shudder.&nbsp; You're still using <b>perl</b> for web development?!?!?!?&nbsp; How can you live without Hibernate for data access (or replace with your favorite language specific tool here)?!?!&nbsp; Running perl CGI without mod_perl??? Are you stupid??<br /><br />&nbsp; Yes, stupid like a fox. Err... I mean, doh.<br /><br /></div>]]>
        <![CDATA[My bias for web development leads me to value these aspects for web development tools and processes:<br /><br /><ul><li>Lightweight code, lightweight framework, lightweight resource consumption- don't add things that I don't need, don't load a bunch of libraries and extras that I didn't ask to be laoded.</li><li>Allow me as a developer to control everything (or as close to that as possible)- I want to control error messages, logging, database connections, access to templates, what's in those templates, code flow, etc.</li><li>No dependencies on editors.&nbsp; IDEs can be nice, but they should not be required to write/edit normal code (whatever normal means to you).&nbsp; You should be able to chose an editor for you that has nothing to do with your code.<br /></li><li>No dependencies on system administration.&nbsp; This is a tough one for me to admit to because I do so much sys admin work every day, but for a web development standpoint there should be no reason for a coder to manage/deal with configs and restarting system services like a web server.&nbsp; The web server should be configured once and be able to run a coder's code without restarting.</li></ul><br /><br />Ok.&nbsp; I think I've rambled enough, but I hope my view point has been laid out.&nbsp; I agree that web development using perl and straight CGI is perfectly normal, fast, and reasonable.&nbsp; Those who scoff otherwise need to check their biases.<br /><br /><br />]]>
    </content>
</entry>

<entry>
    <title>Sleep and the art of staying awake</title>
    <link rel="alternate" type="text/html" href="http://spencerchristensen.com/blog/2008/11/sleep-and-the-art-of-staying-a.html" />
    <id>tag:spencerchristensen.com,2008:/blog//1.11</id>

    <published>2008-11-13T18:28:35Z</published>
    <updated>2008-11-13T18:35:35Z</updated>

    <summary><![CDATA[It has been far too long since my last post, so... here's one now.&nbsp; I recently had a new baby boy.&nbsp; That has&nbsp; been really cool, but my 2 year old daughter has been more difficult, at least when it...]]></summary>
    <author>
        <name>Spencer</name>
        
    </author>
    
        <category term="Grumblings" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="News" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="sleep" label="sleep" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://spencerchristensen.com/blog/">
        <![CDATA[It has been far too long since my last post, so... here's one now.&nbsp; I recently had a new baby boy.&nbsp; That has&nbsp; been really cool, but my 2 year old daughter has been more difficult, at least when it comes to sleeping.<br /><br />Sleep is an interesting thing.&nbsp; For some people it is an absolute necessity for basic functioning from day to day.&nbsp; For others it is just a nice-to-have optional sort of thing.&nbsp; However, when you go for long periods of little-to-no sleep, anyone will feel the effects.<br /><br />I'm trying my best to keep my lack of sleep from affecting my day to day behavior and general happiness, but it's hard.&nbsp; One of the main things that helps is good food and a good shower.<br /> ]]>
        
    </content>
</entry>

<entry>
    <title>Software design patterns and excess</title>
    <link rel="alternate" type="text/html" href="http://spencerchristensen.com/blog/2008/05/software-design-patterns-and-e.html" />
    <id>tag:spencerchristensen.com,2008:/blog//1.10</id>

    <published>2008-05-04T16:05:59Z</published>
    <updated>2008-05-04T16:54:43Z</updated>

    <summary><![CDATA[So this will probably be a first in a series of posts related to software design patterns and all my inner strugglings regarding what is hype and what is real.&nbsp; There are probably lot of other people out there that...]]></summary>
    <author>
        <name>Spencer</name>
        
    </author>
    
        <category term="Grumblings" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Systems" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Web Development" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="orm" label="ORM" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="softwaredesign" label="software design" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://spencerchristensen.com/blog/">
        <![CDATA[So this will probably be a first in a series of posts related to software design patterns and all my inner strugglings regarding what is hype and what is real.&nbsp; There are probably lot of other people out there that may have similar strugglings, and more than likely there are some out there that are blissfully unaware of the concerns.&nbsp; So what am I talking about?&nbsp; Well let's start where I started a while ago, with ORMs.<br /><br />ORMs (Object Relational Mappers) are a basically a way to have a OO layer between your application code and your RMDBS.&nbsp; There are some basic "features" of an ORM, but not all ORMs support all of these.&nbsp; In any case here is a list of common features:<br /><br /><ol><li>OO interface to tables, rows, functions, etc, in your database.&nbsp; So you can use native application code and OOP to interact with your data.</li><li>A more elegant/simpler API to interact with your database.&nbsp; Many ORMs use some other database API under the hood, but add routines and interfaces (or simplifies calls) that the normal API lacks.</li><li>Object (data object) persistence.&nbsp; So that you can create an instance of some data you are modeling and then be able to store that object and revive it later with state preserved.</li><li>Abstract the interaction between your application code and your database such that in the future if/when you need to move to a different database you application code will require as little change as possible.&nbsp; Ultimately, changing databases should be a matter of configuration files, or perhaps even less work.&nbsp; And your app code wouldn't even know the difference between Postgres, MySQL, SQLite, or something else.</li></ol><br /> ]]>
        <![CDATA[All those things sound great don't they?&nbsp; So what is the concern?&nbsp; What is the inner struggle?&nbsp; Well, I think it boils down to a couple of things:<br /><br /><ol><li>ORMs are slow.&nbsp; For all their nifty-hood, ORMs add more abstraction, more layers of code, and therefore more overhead with interactions with your data.&nbsp; For performance critical apps, ORMs are yet another thing to be concerned about.&nbsp; How many times do application designers have to chose between portability and performance?&nbsp; This comes up often.</li><li>Do they really make your app code better?&nbsp; Or more portable?&nbsp; Or easier to maintain?&nbsp; Or is there a lot of work just to get an ORM configured just for the theoretical chance you app will run on a different database?&nbsp; If you spent some time making standard SQL that should work across databases, isn't that 95% of the job already?</li><li>Is forcing your database into app code objects a good thing in the first place?</li><li>Is there an design weakness with too much OOP?&nbsp; When your code crosses a threshold of complexity due to so much abstraction that no one is really able to know what does what and what the execution code path really looks like, is there a problem with obfuscation by code bloat?&nbsp; This one doesn't so much speak to ORMs directly, but in the general direction of software design that ORMs can point to.</li><li>ORMs are in style at the moment, but in reality many of their features have been in use in some other form for quite some time.&nbsp; Is there really much benefit in going "all the way" with them?</li></ol><br />So, as you can see I have more questions than answers here.&nbsp; Not really having a lot of experience using any ORM, I may be just simply a noob and not really get it yet.&nbsp; But there are other factors going on in my life that support concern number 4 above in regard to other aspects of software design.&nbsp; And so I don't think that my concerns with ORMs are simply noob-ish.<br /><br />I'll post again with more another time.<br />]]>
    </content>
</entry>

<entry>
    <title>Where&apos;s your cube again?</title>
    <link rel="alternate" type="text/html" href="http://spencerchristensen.com/blog/2008/03/wheres-your-cube-again.html" />
    <id>tag:spencerchristensen.com,2008:/blog//1.9</id>

    <published>2008-03-20T18:03:33Z</published>
    <updated>2008-03-20T18:11:55Z</updated>

    <summary><![CDATA[So, I had an idea and wanted to capture it before I forget.&nbsp; A relatively simple tool to graph a floor plan map of office cubicles with info about each cube- person who sits there, department, extension, and any other...]]></summary>
    <author>
        <name>Spencer</name>
        
    </author>
    
        <category term="Project Ideas" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Web Development" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://spencerchristensen.com/blog/">
        <![CDATA[So, I had an idea and wanted to capture it before I forget.&nbsp; A relatively simple tool to graph a floor plan map of office cubicles with info about each cube- person who sits there, department, extension, and any other info about them.&nbsp; It could be done really easily with the right database structure and using the Javascript graphing library wz_jsgraphics.js (<a href="http://www.walterzorn.com/jsgraphics/jsgraphics_e.htm">http://www.walterzorn.com/jsgraphics/jsgraphics_e.htm</a>).<br /><br />That way, all you would need is to maintain the data through an easy management tool, then your map is updated realtime online.&nbsp; And anyone can go to the map in their browser and mouse over a cube and get info, or do a search and get a highlighted cube within the map of what they are looking for.<br /><br /> ]]>
        
    </content>
</entry>

<entry>
    <title>Microsoft Exchange problems</title>
    <link rel="alternate" type="text/html" href="http://spencerchristensen.com/blog/2008/03/microsoft-exchange-problems.html" />
    <id>tag:spencerchristensen.com,2008:/blog//1.8</id>

    <published>2008-03-03T07:05:17Z</published>
    <updated>2008-03-03T07:23:56Z</updated>

    <summary><![CDATA[So a while ago at my work, "they" decided to move away from Zimbra and go with Microsoft Exchange.&nbsp; The main points that made them want to switch were: 1) the calendaring/booking conference rooms/scheduling/sharing calendars didn't work very well in...]]></summary>
    <author>
        <name>Spencer</name>
        
    </author>
    
        <category term="Grumblings" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Systems" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://spencerchristensen.com/blog/">
        <![CDATA[So a while ago at my work, "they" decided to move away from <a href="http://www.zimbra.com/">Zimbra</a> and go with Microsoft Exchange.&nbsp; The main points that made them want to switch were: 1) the calendaring/booking conference rooms/scheduling/sharing calendars didn't work very well in Zimbra and is "known to work in Exchange", and 2) email and calendaring for a large organization just needs to work.&nbsp; Now- I must admit that this is my take on what has been going on, and I may be wrong here.&nbsp; But, with that- my experience with Exchange has really sucked.&nbsp; The points for moving to exchange are one-sided.<br /><br />Exchange doesn't work well with free software.&nbsp; Exchange is designed to work with Outlook, and no other client is even considered important.&nbsp; They do claim to have IMAP support for other email clients, but Microsoft's IMAP seems to be unstable.&nbsp; It continually has problems freezing up.&nbsp; About 3-5 times per day the IMAP service on the Exchange server hangs and needs to be restarted!&nbsp; Lame!&nbsp; And so all Thunderbird users are stuck playing this "is my email working now?" game all the time.<br /><br />The other thing is calendaring only works with Outlook clients.&nbsp; Exchange doesn't support iCal/WebDAV or any other open standard.&nbsp; So for calendaring we pretty much are forced to use the web interface for Exchange.&nbsp; And the web interface for Exchange has two versions- a full featured one that only works on IE, and then a crippled one that is served to all other browsers.&nbsp; LAME again!&nbsp; So all the "features" of switching to Exchange are really only features for Windows users who use Outlook and IE.&nbsp; If you use anything else, then your email and calendaring just got a whole lot worse!!<br /><br />Zimbra did have some known bugs in their calendaring, especially in booking conference rooms for meetings.&nbsp; However, I believe the folks at Zimbra have been working on that for their next release.&nbsp; Email never was a problem with Zimbra for any user that I could tell- Outlook or Thunderbird or whatever.<br /><br />But I'm not bitter.... yet.<br /><br /> ]]>
        
    </content>
</entry>

<entry>
    <title>Cover your bases (musically)</title>
    <link rel="alternate" type="text/html" href="http://spencerchristensen.com/blog/2008/01/cover-your-bases-musically.html" />
    <id>tag:spencerchristensen.com,2008:/blog//1.3</id>

    <published>2008-01-04T19:12:18Z</published>
    <updated>2008-01-04T19:54:46Z</updated>

    <summary><![CDATA[So I have an idea that I think would be really interesting.&nbsp; I like music.&nbsp; I like to listen to music.&nbsp; I like hearing new songs and discovering new artists.&nbsp; I also have a weird desire to hear the same...]]></summary>
    <author>
        <name>Spencer</name>
        
    </author>
    
        <category term="Project Ideas" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://spencerchristensen.com/blog/">
        <![CDATA[So I have an idea that I think would be really interesting.&nbsp; I like music.&nbsp; I like to listen to music.&nbsp; I like hearing new songs and discovering new artists.&nbsp; I also have a weird desire to hear the same song done in different ways by different people- covers.<br /><br />I stumbled across <a href="http://www.secondhandsongs.com/">SecondHandSongs.com</a> and found that there is a database of cover songs (it only lists covers that were recorded and put out by a record label, no do-it-yourself or amateur covers allowed).&nbsp; Fascinating.<br /><br />Now I come to the idea part.&nbsp; I think it would be cool to have a plugin for your favorite music player (Banshee, iTunes, WInamp, etc) that looks up the song from your play list and lists covers of that song, with other info perhaps or links to find more info.&nbsp; It would be really cool to see a list of others that did that song and be able to click on them to hear a sample of their version, or a link to a music service (or store) to buy/download the other version(s).&nbsp; And perhaps a way to rate them too?&nbsp; Not sure about that one.<br /><br />Finally a way to build my own collection of nothing but covers of the song "Moon River"! (this is a joke, I actually hate that song).<br /> ]]>
        
    </content>
</entry>

<entry>
    <title>Hot Dang.</title>
    <link rel="alternate" type="text/html" href="http://spencerchristensen.com/blog/2008/01/hot-dang.html" />
    <id>tag:spencerchristensen.com,2008:/blog//1.2</id>

    <published>2008-01-03T15:21:52Z</published>
    <updated>2008-01-03T15:29:34Z</updated>

    <summary><![CDATA[Well, I finally got Movable Type installed here and working.&nbsp; I'm using Postgres as my backend.&nbsp; I just wish my hosting service used a recent version (they are still on 7.4.x!).&nbsp; But Postrges is still the best open source RMDB...]]></summary>
    <author>
        <name>Spencer</name>
        
    </author>
    
        <category term="Systems" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://spencerchristensen.com/blog/">
        <![CDATA[Well, I finally got Movable Type installed here and working.&nbsp; I'm using Postgres as my backend.&nbsp; I just wish my hosting service used a recent version (they are still on 7.4.x!).&nbsp; But Postrges is still the best open source RMDB so there you go.&nbsp; I would have probably chosen SQLite if I could just get the perl module installed (yet another issue with my hosting service).&nbsp; I think for any small - mid size database work SQLite is a better choice than MySQL, and for anything larger than that chose Postgres.<br /><br />I like Movable Type a lot.&nbsp; It seems to be more intuitive than a lot of the other ones I have looked at and tried.&nbsp; I will be moving my posts from my other blog to this one over the next little bit.<br /> ]]>
        
    </content>
</entry>

<entry>
    <title>Minimal AJAX toolkit</title>
    <link rel="alternate" type="text/html" href="http://spencerchristensen.com/blog/2007/11/minimal-ajax-toolkit.html" />
    <id>tag:spencerchristensen.com,2007:/blog//1.7</id>

    <published>2007-11-15T00:45:21Z</published>
    <updated>2008-01-07T00:49:21Z</updated>

    <summary><![CDATA[So there is a wide world of tools and methods for "web 2.0", and for developers it is hard to know which one to chose to use and support.&nbsp; I have tinkered with two AJAX toolkits and found things that...]]></summary>
    <author>
        <name>Spencer</name>
        
    </author>
    
        <category term="Project Ideas" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Web Development" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://spencerchristensen.com/blog/">
        <![CDATA[<p>So there is a wide world of tools and methods for "web 2.0", and for
developers it is hard to know which one to chose to use and support.&nbsp; I
have tinkered with two AJAX toolkits and found things that I liked and
disliked with them.&nbsp; But overall I found that they were both too big
and too feature rich for simple use.</p><p>So it occured to me that for
some of my simple projects all I needed was bare-bone functionality,
meaning the ability to fetch the contents of a given url.&nbsp; Beyond that
I can do what I need in small simple javascript.&nbsp; I didn't need fancy
event handling, or animation, or auto-complete drop downs, or such.&nbsp;
And if I did, then I could probably do that my self later, as long as I
had the ability to easily fetch a URL.</p><p>&nbsp; <br /></p> ]]>
        <![CDATA[<p>Thus I started putting together a new AJAX toolkit named oddly
enough AJAXMinimal.&nbsp; This is comprised of a single .js file that
provides an object with one method call, fetch_url().&nbsp; That's it.&nbsp;
Simple, easy to use.&nbsp; Does the job.</p><p>Let's dive into an example of how to use AJAXMinimal, as I think that is a good way to explain the hows and whys and such.</p><p>I
have an HTML page with three buttons, each of which I want to fetch a
given URL and then load the contents of that dynamically into a
certain&nbsp; DIV within my&nbsp; page.&nbsp; Thus dynamically changing my page
without refreshing the whole thing.&nbsp; Here is body of the HTML:</p><p><span class="code">&lt;body&gt;<br />&lt;h1&gt;Test page index&lt;/h1&gt;<br /><br />&lt;form name="main_form" action="" onsubmit="return false"&gt;<br />&lt;input type="button" name="button1" id="button1" value="Button 1" onclick="load_html(this);"/&gt;<br />&lt;input type="button" name="button2" id="button2" value="Button 2" onclick="load_html(this);"/&gt;<br />&lt;input type="button" name="button3" id="button3" value="Button 3" onclick="load_html(this);"/&gt;<br />&lt;/form&gt;<br /><br />&lt;div id="outer_div"&gt;<br />Outer Div<br />&lt;div id="inner_div"&gt;<br />Inner Div<br />&lt;/div&gt;<br />&lt;/div&gt;<br /><br />&lt;/body&gt;<br /></span>&nbsp;</p><p>Now to jump back, let's look at the javascript at the top of this file:</p><p><span class="code">&lt;script type="text/javascript" src="/js/ajax-minimal.js"&gt;&lt;/script&gt;<br />&lt;script type="text/javascript"&gt;<br />function set_inner_html(am) {<br />&nbsp;&nbsp;&nbsp; var inner_obj = document.getElementById('inner_div');<br />&nbsp;&nbsp;&nbsp; if (! inner_obj) return;<br />&nbsp;&nbsp;&nbsp; inner_obj.innerHTML = am.content;<br />}<br /><br />function load_html(button) {<br />&nbsp;&nbsp;&nbsp; var am = new AJAXMinimal();<br />&nbsp;&nbsp;&nbsp; var button_number = button.id.substr(-1);<br />&nbsp;&nbsp;&nbsp; var url = '/cgi-bin/blah';</span></p><p><span class="code"><br />&nbsp;&nbsp;&nbsp; var args = new Array();<br />&nbsp;&nbsp;&nbsp; args['button_id'] = button_number;<br />&nbsp;&nbsp;&nbsp; args['blahblah'] = 4444;<br />&nbsp;&nbsp;&nbsp; args['string'] = 'this is a string argument';</span></p><p><span class="code"><br />&nbsp;&nbsp;&nbsp; am.fetch_url( 'GET', url, args, set_inner_html );<br />&nbsp;&nbsp;&nbsp; return;<br />}<br />&lt;/script&gt;<br /></span>&nbsp;</p><p>As
you can see, we call load_html() on a click to the buttons which
creates an AJAXMinimal object.&nbsp; The fetch_url() method takes 4
arguments:</p><p><b>am.fetch_url( request_method, url, args_assoc_array, function_to_callback );</b></p><ul><li>&nbsp;request_method is GET, POST, HEAD, or whatever.</li><li>url
is the url to fetch.&nbsp; This may already have query string args or not.&nbsp;
And can be relative or absolute, but keep in mind the restrictions of
using AJAX calls- you can't fetch someting outside of the original
domain.</li><li>args_assoc_array is an associative array of arguments
to send with the request.&nbsp; With the GET method, these are turned into
query string args that are then appended to the url.&nbsp; With POST these
are sent as the contents of the POST request.&nbsp; This arrary should be
set up as arr['key'] = value.</li><li>function_to_callback is a
function that will be called when the URL requested has loaded.&nbsp; This
function will be passed one argument only, the AJAXMinimal object
itself.&nbsp; It is within this function that you define and pass in that
you do your own thing.</li></ul><p>&nbsp;</p><p>In the example above, set_inner_html() is the callback that simply sets the innerHTML of our DIV with the contents of the URL.</p><p>That's it!&nbsp; Simple.&nbsp; Easy to use.&nbsp; Easy to understand.</p><p>To see this example in action, try it out here:</p><p><a href="http://spencerchristensen.com/test_html/index.html" mce_href="test_html/index.html">http://spencerchristensen.com/test_html/index.html</a> </p><p>&nbsp;</p><p>&nbsp;</p>]]>
    </content>
</entry>

</feed>
