<?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>2008-11-28T20:33:57Z</updated>
    
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Publishing Platform 4.01</generator>

<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>2008-11-28T20:33:57Z</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-US" 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; EDIs 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 your code 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 coders 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; Others 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-US" 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-US" 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-US" 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-US" 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-US" 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-US" 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-US" 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>

<entry>
    <title>Celtx will make you a rock star screenwriter</title>
    <link rel="alternate" type="text/html" href="http://spencerchristensen.com/blog/2007/09/celtx-will-make-you-a-rock-sta.html" />
    <id>tag:spencerchristensen.com,2007:/blog//1.4</id>

    <published>2007-09-09T23:15:44Z</published>
    <updated>2008-01-07T00:19:32Z</updated>

    <summary><![CDATA[If you are going to write a screenplay, then you really should look into Celtx (http://www.celtx.com ).&nbsp; Hands down, this is the best tool you can have to begin your creative process.&nbsp; There are many ways you can write a...]]></summary>
    <author>
        <name>Spencer</name>
        
    </author>
    
        <category term="Filmmaking" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en-US" xml:base="http://spencerchristensen.com/blog/">
        <![CDATA[<p>If you are going to write a screenplay, then you really should look into Celtx (<a href="http://www.celtx.com/" mce_href="http://www.celtx.com">http://www.celtx.com</a> ).&nbsp; Hands<img src="http://spencerchristensen.com/images/stories/celtx.png" mce_src="/images/stories/celtx.png" alt="Celtx" align="right" height="128" width="128" />
down, this is the best tool you can have to begin your creative
process.&nbsp; There are many ways you can write a screenplay, and many
tools to help you do so.&nbsp; But Celtx combines all the best features, and
many that others don't have, into one product.&nbsp; And one of the best
things about it- it is Open Source!</p><p>It is based on Mozilla's FireFox web browser, and works on WIndows, Linux, and Mac OS X. <br /></p>]]>
        <![CDATA[<p>I learned a great lesson a few years ago from one of my film
instructors which helped me understand a very important princile of
filmmaking- technology doesn't make your film great, you make your film
great.</p><p>This holds true with screenwriting software as much as it
does with any other technology for filmmaking.&nbsp; A great screenplay can
be written in just a simple word processor like Word or WordPerfct or
Open Office Writer.&nbsp; Thousands of great screenplays were written even
before computers were invented!&nbsp; So don't think that your screenplay
will suck because you don't own a copy of this software or that
software.&nbsp; That is a bunch of crap.</p><p>So, why am I seemingly
contradicting myself?&nbsp; I just sadi that Celtx is the best screenwriting
software and will make you a rock star, but that you don't need it to
be great.&nbsp; Well, I want to set the stage that if you are looking for
something to make you a great filmmaker, that is call film school my
friend.&nbsp; You can't just buy and start using a piece of software and
expect your work to be good.&nbsp; You need to be at a certain level already
in your skills, expectations, and creativity such that you could create
a good idea for a story on your own.&nbsp; Only then will the tools you use
matter, and even then only to the degree of how you use them to make a
difference.&nbsp; So, bottome line: once you are comfortable with yourself
as a story teller, then leverage tools to help you do that better.&nbsp; The
tools wont tell your story for you, you still need to do that.</p><p><img src="http://spencerchristensen.com/images/stories/Screenshot_celtx_editing_script.png" mce_src="/images/stories/Screenshot_celtx_editing_script.png" alt="screen shot of editing a script with Celtx" height="288" hspace="10" width="400" />Ok. enough lecturing.</p><p>Reasons why Celtx is the best screenplay software out there:</p><p>1. It is free.</p><p>2.
It has all the nice features of commercial screenwriting software:
auto-formatting and indenting, scene breakdowns, character breakdowns,
reports, etc.</p><p>3. It has built-in scheduling and calendaring.&nbsp;
This really is cool if you are a writer/director who is going to
produce and actaully shoot the film that you write.&nbsp; You can map things
out in a timeline and schedule everything in one place.&nbsp; Very cool.</p><p>4.&nbsp;
It is very easy to learn and use.&nbsp; It has a very natural layout and
functions as you would expect.&nbsp; User interface is designed well.</p><p>5.
It has a large and growing community around it.&nbsp; There are furoms,
script sharing servers, FAQs, and lots of online help.&nbsp; Celtx helps you
feel connected with other writers.</p><p>6. Try it, and you'll like it.</p><p>&nbsp;</p>]]>
    </content>
</entry>

<entry>
    <title>Linux Server Hacks by Rob Flickenger (O&apos;Reilly)</title>
    <link rel="alternate" type="text/html" href="http://spencerchristensen.com/blog/2007/09/linux-server-hacks-by-rob-flic.html" />
    <id>tag:spencerchristensen.com,2007:/blog//1.6</id>

    <published>2007-09-02T23:41:42Z</published>
    <updated>2008-01-07T00:43:03Z</updated>

    <summary><![CDATA[This book is awesome.&nbsp; I learned so much from it that I have placed it second on my list of books every software engineer should read.&nbsp; There are so many great topics covered in such a easy to read and...]]></summary>
    <author>
        <name>Spencer</name>
        
    </author>
    
        <category term="Book reviews" 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-US" xml:base="http://spencerchristensen.com/blog/">
        <![CDATA[<p><img src="http://spencerchristensen.com/images/stories/linux_server_hacks.jpg" mce_src="/images/stories/linux_server_hacks.jpg" alt="book cover image" align="left" height="200" width="200" />This
book is awesome.&nbsp; I learned so much from it that I have placed it
second on my list of books every software engineer should read.&nbsp; There
are so many great topics covered in such a easy to read and understand
way that you can't help but want to try them out.&nbsp; And after trying a
few out, you start to wonder how on earth did you live without some of
these things.&nbsp;&nbsp; </p><p>There are a few books I have read that I really
got a lot out of, and this was one of them.&nbsp; I was familiar with a lot
of the things discussed in here, but not at any great detail (at least
with some of them).&nbsp; I even learned a thing or two with perl (imagine
that!). <br /></p> ]]>
        <![CDATA[<p>Many of the basics are covered in the book, but not all.&nbsp; I don't
pretend to think that this is meant to be indepth or span all needed
sys admin knowledge.&nbsp; It is a list of some good tips and guides for
day-to-day sesrver admin work.&nbsp; But there are things in here that I
didn't know about and have come to really appreciate.</p><p>One thing-
I have never really been a solid bash scriptor until I read this book.&nbsp;
I felt much more comfortable in perl rather than bash.&nbsp; But there are a
few hacks in here that show some very simple and elegant command line
trickery that impressed me.&nbsp; Like the hack fo finding users on a system
who are hogging up all the disk space.&nbsp; Also, the one about IP address
failover from one machine to another was an impressive one.</p><p>If
you are not using SSH public keys or aren't familiar with public keys,
then you need this book.&nbsp; There is a whole chapter dedicated to SSH and
all the lovely things you can do with public keys (automate just about
anything, securly).&nbsp; Also, if you aren't familiar with CVS or other
version control systems, there are some great summaries to get you
started.</p><p>Don't plan on learning from scratch with this book.&nbsp; It
is not for the novice.&nbsp; You need to be familiar with the command line
and with some basic utilities.&nbsp; But this will help you move from
intermediate to a more&nbsp; advanced systems administrator.</p><p>I was a
little disappointed that they spent so many hacks talking about MySQL
and no mention at all about Postgres.&nbsp; That is a real shame.&nbsp; Postgres
really should be in more sys admin's set of tools for things.&nbsp; But I
won't rant about that here.&nbsp; :-)</p><p>This book is well written and
covers a nice variety of topics.&nbsp; Not all of it will be new to you, but
there will be a nice gem to make your day if you look for it. <br /></p>]]>
    </content>
</entry>

<entry>
    <title>new site</title>
    <link rel="alternate" type="text/html" href="http://spencerchristensen.com/blog/2007/09/new-site.html" />
    <id>tag:spencerchristensen.com,2007:/blog//1.5</id>

    <published>2007-09-02T23:38:34Z</published>
    <updated>2008-01-07T00:41:13Z</updated>

    <summary><![CDATA[So I finally was able to get the domain spencerchristensen.com.&nbsp; It was taken for a while by someone else, but when I check just a couple of weeks ago, it was available.&nbsp; So I am setting up my personal site.I...]]></summary>
    <author>
        <name>Spencer</name>
        
    </author>
    
        <category term="News" 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-US" xml:base="http://spencerchristensen.com/blog/">
        <![CDATA[<p>So I finally was able to get the domain spencerchristensen.com.&nbsp; It
was taken for a while by someone else, but when I check just a couple
of weeks ago, it was available.&nbsp; So I am setting up my personal site.</p><p>I have had a personal site for years at&nbsp; <a href="http://www.mecworks.com/%7Espencer" mce_href="http://www.mecworks.com/~spencer">http://www.mecworks.com/~spencer</a>
, but this has fallen dormant for a long time.&nbsp; I hope to get back into
maintaining a personal site with this one.&nbsp; I still don't have a lot of
free time to give to this, but hopefully I can at least give more that
what I have been doing. </p> ]]>
        <![CDATA[<p>On my old site, which is hosted on my brother's server, I had
references to my various projects and interests in independent film and
also web development.&nbsp; I will be carrying a lot of those things over to
this site and updating them.&nbsp; I am also expanding the areas of interest
that my personal site covers.&nbsp; I have several interests beyond those,
and many experiences that I haven't written about yet and hope to
include a wider range of stuff here.</p><p>This is about it for my first post.&nbsp; I'll be working on several other posts soon, including my resume.</p><p>&nbsp;</p>]]>
    </content>
</entry>

</feed>
