<?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>The Cranky Sysadmin &#187; Programming</title>
	<atom:link href="http://blog.2gn.com/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.2gn.com</link>
	<description>A world of technology, fun, and ignorant rants.</description>
	<lastBuildDate>Mon, 26 Jul 2010 13:30:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Hadoop? What kind of a name is Hadoop?</title>
		<link>http://blog.2gn.com/programming/hadoop-what-kind-of-a-name-is-hadoop/</link>
		<comments>http://blog.2gn.com/programming/hadoop-what-kind-of-a-name-is-hadoop/#comments</comments>
		<pubDate>Fri, 19 Mar 2010 12:03:55 +0000</pubDate>
		<dc:creator>John Jorgensen</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[System Administration]]></category>

		<guid isPermaLink="false">http://blog.2gn.com/?p=438</guid>
		<description><![CDATA[Briefly, as I understand it, hadoop is a distributed program which allows one to aggregate data by processing across a bunch (more than 2) of computers. The name apparently comes from the name the lead developer&#8217;s son gave to his stuffed toy elephant. It&#8217;s not just the name that I dislike though. I&#8217;ve read that [...]]]></description>
			<content:encoded><![CDATA[<p>Briefly, as I understand it, hadoop is a distributed program which allows one to aggregate data by processing across a bunch (more than 2) of computers. The name apparently comes from the name the lead developer&#8217;s son gave to his stuffed toy elephant. It&#8217;s not just the name that I dislike though.<br />
<span id="more-438"></span><br />
I&#8217;ve read that hadoop was inspired by google&#8217;s map-reduce architecture. <a href="http://www.youtube.com/results?search_query=cluster+computing+and+mapreduce&amp;search_type=&amp;aq=f">Here</a> is a youtube search. The first five hits are a google class on how map-reduce works. So what is hadoop? It seems to be a collection of java processes which implement map reduce across many servers. The components seem to include a distributed job scheduler, a distributed file system, and a framework for running generic jobs.</p>
<p>Why don&#8217;t I like hadoop? I state for the record that I only have a passing familiarity with hadoop from reviewing the docs and some modest amount of administration. My opinions are mostly uninformed.</p>
<p>Hadoop includes a distributed filesystem&#8230; written in java&#8230; This sends up a big red flag in my head. Filesystems are an OS level concern in my experience. Writing a distributed filesystem in java with no OS hooks seems on its face to start with an inefficient model. It&#8217;s also not a general purpose filesystem, so the usual unix (or windows) tools for dealing with filesystems can&#8217;t be used on <a href="http://hadoop.apache.org/hdfs/">HDFS</a>. Many current super computers use the <a href="http://wiki.lustre.org/manual/LustreManual18_HTML/IntroductionToLustre.html">Lustre</a> filesystem. Lustre has been around for more then a decade and is a very mature product. I&#8217;m not suggesting that Lustre is right for hadoop, but the list of claimed features for both is pretty similar. Since Lustre uses a POSIX filesystem interface, I can use all of my unix tools on it.</p>
<p>Job scheduling is another well traveled path that Hadoop developers decided to walk again. The hadoop developers have arguments against MPI and PVM schemes which are used in most Beowulf clusters. Maybe the arguments are valid, but I don&#8217;t see a reason why one couldn&#8217;t build on such a mature technology to produce an adequate scheduler. In fact people have built built such a <a href="http://www.cs.wisc.edu/condor/">scheduler</a>.</p>
<p>On the other hand, HBase and the actual MapReduce components are novel. My main problem with hadoop is that they decided to build components which are readily available elsewhere, are probably more efficiently written, are certainly more mature, and integrate well into the OS. One of the advantages of open source projects is that one can borrow from other good projects. I think the interesting parts of hadoop would have advanced farther if they had used the well studied portions of beowulf clusters and other technologies as a base instead of building them.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.2gn.com/programming/hadoop-what-kind-of-a-name-is-hadoop/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Steps Closer to mod_js for Apache</title>
		<link>http://blog.2gn.com/programming/steps-closer-to-mod_js-for-apache/</link>
		<comments>http://blog.2gn.com/programming/steps-closer-to-mod_js-for-apache/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 00:35:01 +0000</pubDate>
		<dc:creator>John Jorgensen</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.2gn.com/?p=409</guid>
		<description><![CDATA[I started out thinking that I&#8217;d learn JavaScript so that I could make AJAX games. I am ending up in the land of C programming while trying to get a functional mod_js running. To be useful, JavaScript needs access to server-side resources which are either missing or disabled in the usual build. I downloaded the [...]]]></description>
			<content:encoded><![CDATA[<p>I started out thinking that I&#8217;d learn JavaScript so that I could make AJAX games. I am ending up in the land of C programming while trying to get a functional mod_js running.<br />
<span id="more-409"></span><br />
To be useful, JavaScript needs access to server-side resources which are either missing or disabled in the usual build. I downloaded the latest SpiderMonkey (C based JavaScript engine), and <a href="https://developer.mozilla.org/En/SpiderMonkey/Build_Documentation">built</a> it. After a few hours of work, I produced a <a href="http://blog.2gn.com/~jjorgens/js.patch">patch</a> to enable the file handling module. I also had to install the nspr4-dev package. If you manage to use this patch on a recent SpiderMonkey, you may want to look at <a href="http://wiki.freeswitch.org/wiki/FreeSwitch_Javascript_File">this page</a>. It seems to be a fairly complete description of the File object API.</p>
<p>Once I got SpiderMonkey running, I plopped the js shell binary and the libjs.so library where the OS can reach them and started looking for a mod_js. I didn&#8217;t hold out  much hope of finding one since I&#8217;ve looked for this in the past. Lo and behold though, someone had done some <a href="http://www.modjs.org/">work in this area</a>. It looks like active work stopped in mid 2007. There is a checkin which changed the license to a dual GPL/Apache license. I checked out the source and got it running after several more hours of work. I produced a <a href="http://blog.2gn.com/~jjorgens/mod_js.patch">patch</a> to keep it from crashing on my Ubuntu system.</p>
<p>I ended up with a minimal mod_js which can handle files. I have a lot of work to make it really useful. Short term goals include setting up some system where tags set off the JavaScript from the content. PHP uses &lt;? and ?&gt; to delimit code. I&#8217;ll probably do something similar. There are the beginnings of SQLLite support in the mod_js code. I have no idea how complete the support is, but I&#8217;d like to get that running. I&#8217;d also like to add bindings for MySQL and PostgreSQL. If possible, I&#8217;ll try to build a set of modules which attach to the SpiderMonkey engine instead of attaching to mod_js. That way, the extended SpiderMonkey can be used for other projects easily.</p>
<p>As I move forward, I&#8217;d like to offer thanks to the folks at Mozilla for writting a nice C based JavaScript engine. I&#8217;d like to also thank the folks at <a href="http://www.modjs.org/">modjs.org</a> for writting something which functions and looks easy to extend. If either of the authors listed are around and happen to read this, I&#8217;d be happy to pass along any patches. If I don&#8217;t hear from them, I&#8217;ll build a repository and make it accessible. The folks at <a href="http://wiki.freeswitch.org/wiki/Main_Page">FreeSWITCH</a> seem to have well written docs on the File object. I&#8217;ll probably look at their rendition of the SpiderMonkey engine and see if I can avoid some work.</p>
<p>In a future article, I&#8217;ll try to write up some docs for building SpiderMonkey and mod_js from a Ubuntu user&#8217;s perspective.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.2gn.com/programming/steps-closer-to-mod_js-for-apache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Toward Server-side JavaScript in Apache.</title>
		<link>http://blog.2gn.com/programming/toward-server-side-javascript-in-apache/</link>
		<comments>http://blog.2gn.com/programming/toward-server-side-javascript-in-apache/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 13:10:35 +0000</pubDate>
		<dc:creator>John Jorgensen</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.2gn.com/?p=405</guid>
		<description><![CDATA[I&#8217;ve always wondered why no one ever created a JavaScript module for apache. Many other languages have apache bindings, but not JavaScript. Being able to program in the same language client-side and server-side would seem to be desirable. There are some projects which make JavaScript available on the server. Whitebeam is one. Appweb is another. [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve always wondered why no one ever created a JavaScript module for apache. Many other languages have apache bindings, but not JavaScript. Being able to program in the same language client-side and server-side would seem to be desirable.<br />
<span id="more-405"></span><br />
There are some projects which make JavaScript available on the server. <a href="http://www.whitebeam.org/">Whitebeam</a> is one. <a href="http://www.appwebserver.org/">Appweb</a> is another. These are not Apache though (some folks consider that a blessing). I don&#8217;t want to learn a whole new paradigm of programming. I just want to mash some JavaScript into my Apache server! I want bindings to databases which are similar to what I see in perl or php. I want easy file access.</p>
<p>The next few articles will describe my adventures in trying to get a mod_perl like (though less ambitious) set of bindings for JavaScript. I&#8217;ll also be working on some missing bits of javascript functionality which will make it more useful on the server-side. I&#8217;m not the best programmer in the world, so I&#8217;ll use ugly hacks, borrowed code (attributed to its authors of course), and prayer to get it all working. I&#8217;ll be happy for any help coding or testing since I&#8217;m lazy.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.2gn.com/programming/toward-server-side-javascript-in-apache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I don&#8217;t have ADD, I really don&#8217;t!</title>
		<link>http://blog.2gn.com/programming/i-dont-have-add-i-really-dont/</link>
		<comments>http://blog.2gn.com/programming/i-dont-have-add-i-really-dont/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 00:00:58 +0000</pubDate>
		<dc:creator>John Jorgensen</dc:creator>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.2gn.com/?p=401</guid>
		<description><![CDATA[The other day I got home, finished dinner, and rushed to my office to play either Perfect World or Runes of Magic. After sitting there for a few minutes, I couldn&#8217;t log in. There was no problem with my account. My brain was refusing to allow me to play. I haven&#8217;t logged in for more [...]]]></description>
			<content:encoded><![CDATA[<p>The other day I got home, finished dinner, and rushed to my office to play either Perfect World or Runes of Magic. After sitting there for a few minutes, I couldn&#8217;t log in. There was no problem with my account. My brain was refusing to allow me to play. I haven&#8217;t logged in for more then 2 minutes since then. I now seem to have some spare time. Some will be used for my wife and some, I&#8217;ll use to finally learn javascript and maybe finish that mod_js project I started working on before I got lost in MMO-land. Some day (maybe soon) I&#8217;ll probably get back to MMO&#8217;s, but for now, I&#8217;m burned out on them and I should do something else. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.2gn.com/programming/i-dont-have-add-i-really-dont/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Cost of Checks</title>
		<link>http://blog.2gn.com/programming/the-cost-of-checks/</link>
		<comments>http://blog.2gn.com/programming/the-cost-of-checks/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 14:14:11 +0000</pubDate>
		<dc:creator>John Jorgensen</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[System Administration]]></category>

		<guid isPermaLink="false">http://blog.2gn.com/?p=106</guid>
		<description><![CDATA[I read an interesting article by Paul Graham about the cost of checks in an organization. Checks in this case refer to things like comprehensive QA of a product or feature before release. Paul&#8217;s premise is that all checks have a cost and some of the costs are surprisingly high. I tend to agree, but [...]]]></description>
			<content:encoded><![CDATA[<p>I read an interesting <a href="http://www.paulgraham.com/artistsship.html">article</a> by Paul Graham about the cost of checks in an organization. Checks in this case refer to things like comprehensive QA of a product or feature before release. Paul&#8217;s premise is that all checks have a cost and some of the costs are surprisingly high. I tend to agree, but I also see things through the lens of an operations guy. When I release a product that has gone through no checks (I have been told to do this), there is a high probability that something will break. In many cases, the breakage can be crippling. I think there is a good chance that some checks will actually make a company more nimble, especially as a code base grows in complexity and more people depend on your product.</p>
<p>If a company spends as much or more time fixing the problems caused by a release as they spent on the release, maybe some checks need to be put in place to cut down that wasted effort. The problem is finding a balance where the check costs less then this extra effort and pain.</p>
<p>Maybe unit tests help. People who do unit tests seem to have different opinions about how effective they are. Some say that it causes them to take twice as long to write the code. Others say it helps them write the code faster since they have a codified requirement.</p>
<p>Automated testing is another thing that can make the release process better. There is a large cost associated with this in many cases though. You need a highly qualified QA guy who knows how to program and knows the product to write the tests. If he&#8217;s that good, maybe his time is better spent helping build the product (if this is a small organization). Could the automated tests be written by the group who develops the software? Sure, but it will slow down &#8220;real&#8221; development work.</p>
<p>I think the real problem is that as complexity increases, the need for checks increases. Eventually, one gets to a point where progress is ponderously slow. What do you do about this? Well, all of the solutions that I know of are bad in some way. One has to make a choice between pain and searing pain.</p>
<ul>
<li>Keep it simple. Simple systems are easier to check and there is less risk in changing them since they&#8217;re easily understood.</li>
<li>Keep it small. This is really a subset of simple. If you have 5 simple systems (like web servers), you&#8217;ll have an easier time managing them then if you have 100 simple systems.</li>
<li>If you can&#8217;t keep it simple, only make it as complex as it has to be. This means managing customer expectations (which no one wants to do in my experience). Make sure the system isn&#8217;t more complex then your developers and operations staff can manage.</li>
<li>Don&#8217;t let complexity creep up on you. Know that it&#8217;s coming and plan for it. Know that your costs will rise as the complexity rises. Find ways to make the cost rise as slowly as possible.</li>
<li>If you have to have complexity, automate the heck out of everything you can find. This is easy to say, but if the system has grown so complex that all you do is fight fires, then you won&#8217;t have time to automate unless you are willing to accept a lower level of service for the time it takes to automate.</li>
</ul>
<p>I am learning these things the hard way, so I don&#8217;t know of any elegant solutions to the problem of complexity which go beyond what I&#8217;ve already mentioned. Maybe after a few more startups I&#8217;ll have more useful advice then, &#8220;Watch out! You&#8217;re headed for a big bucket o&#8217; misery!&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.2gn.com/programming/the-cost-of-checks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>That Which is Measured&#8230;</title>
		<link>http://blog.2gn.com/programming/that-which-is-measured/</link>
		<comments>http://blog.2gn.com/programming/that-which-is-measured/#comments</comments>
		<pubDate>Sun, 08 Jun 2008 15:59:12 +0000</pubDate>
		<dc:creator>John Jorgensen</dc:creator>
				<category><![CDATA[Navel Gazing]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[System Administration]]></category>
		<category><![CDATA[World of Warcraft]]></category>

		<guid isPermaLink="false">http://blog.2gn.com/?p=65</guid>
		<description><![CDATA[Lately I&#8217;ve been doing a lot of pickup groups in World of Warcraft. If we&#8217;re doing something hard, those that ask what my healing bonus is seem to do the best. If no one asks me about it, the outing almost always ends in disaster. In my work experience, small companies which measure their performance [...]]]></description>
			<content:encoded><![CDATA[<p>Lately I&#8217;ve been doing a lot of pickup groups in World of Warcraft. If we&#8217;re doing something hard, those that ask what my healing bonus is seem to do the best. If no one asks me about it, the outing almost always ends in disaster. In my work experience, small companies which measure their performance and their team&#8217;s performance seem to do better then those which are fast and loose with metrics.</p>
<p>The <a href="http://en.wikipedia.org/wiki/Hawthorne_effect">Hawthorne Effect</a> describes a situation where merely measuring workers improves their performance for a short period of time. I think something similar, but better is going on with WoW pickup groups and small companies. If you&#8217;re willing to measure yourself, you&#8217;re more willing to learn to perform better in fundamental and permanent ways. Can measurements be gamed? Maybe they can. In WoW, I will forgo other stats to bring my healing bonus up. This is probably not great for my long term raiding viability, but it is the one thing that other non-healers know how to measure. Fortunately, in WoW, there are ways to cover up the slack in some of my stats. I can eat buff foods, and drink elixirs to cover up my woefully low stamina for instance. For me, this leaves a guilty voice in my head that says I&#8217;m not measuring all of the stuff I need to, so yes I&#8217;m beginning to look for gear with more stamina and mp5 so I can stay alive and contribute longer.</p>
<p>In real life, I hate being measured and measuring myself. I&#8217;m a fat-body because I don&#8217;t like to get on the scale. I&#8217;m not a great programmer because (among other reasons) I&#8217;m not willing to profile my work and measure it against the good works out there, or against any performance goal. I just want to slam in the code and pray that it works. As a sysadmin, the idea of measuring my work by the number of warnings and alarms that nagios produces annoys me, but if I make good alarms, they are actually a passable measure of how stable the system is.</p>
<p>So what do I have to do? I have to think briefly about whether I&#8217;m measuring the right things about myself and then start measuring.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.2gn.com/programming/that-which-is-measured/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Analysing Apache Web server response times</title>
		<link>http://blog.2gn.com/programming/analysing-apache-web-server-response-times/</link>
		<comments>http://blog.2gn.com/programming/analysing-apache-web-server-response-times/#comments</comments>
		<pubDate>Wed, 28 Nov 2007 15:51:00 +0000</pubDate>
		<dc:creator>John Jorgensen</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[System Administration]]></category>

		<guid isPermaLink="false">http://blog.2gn.com/?p=9</guid>
		<description><![CDATA[Apache logs a lot of useful information about each request in the access logs. By default, it doesn&#8217;t include response times for each request, but that&#8217;s easy to remedy. In your httpd.conf, find the line that looks like this: LogFormat &#8220;%h %l %u %t \&#8221;%r\&#8221; %&#62;s %b \&#8221;%{Referer}i\&#8221; \&#8221;%{User-Agent}i\&#8221;" combined and replace it with: LogFormat [...]]]></description>
			<content:encoded><![CDATA[<p>Apache logs a lot of useful information about each request in the access logs. By default, it doesn&#8217;t include response times for each request, but that&#8217;s easy to remedy. In your httpd.conf, find the line that looks like this:</p>
<p>LogFormat &#8220;%h %l %u %t \&#8221;%r\&#8221; %&gt;s %b \&#8221;%{Referer}i\&#8221; \&#8221;%{User-Agent}i\&#8221;" combined</p>
<p>and replace it with:</p>
<p>LogFormat &#8220;%h %l %u %t \&#8221;%r\&#8221; %&gt;s %b \&#8221;%{Referer}i\&#8221; \&#8221;%{User-Agent}i\&#8221; %D&#8221; combined</p>
<p>The %D appends the response time to the end of the log line. After you have collected some hits with response times, you can use a perl one-liner to look at timestamps and response times like so:</p>
<p>tail -1000 access_log|perl -ne &#8216;chomp; split; $_[3] =~ s/^\[//; print "$_[3] $_[$#_]\n&#8221;;&#8217;</p>
<p>replace tail -1000 with whatever number of log lines you want to look at. I use some GNU date magic,  perl&#8217;s GD:Graph, and some shell programming to build a graph of average and high response times over the last hour. For now, I leave this as an exercise for the reader. GD::Graph is a great tool for visualizing all kinds of data where rrdtool may not suffice.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.2gn.com/programming/analysing-apache-web-server-response-times/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tools for web programming</title>
		<link>http://blog.2gn.com/programming/tools-for-web-programming/</link>
		<comments>http://blog.2gn.com/programming/tools-for-web-programming/#comments</comments>
		<pubDate>Thu, 25 Oct 2007 18:10:16 +0000</pubDate>
		<dc:creator>John Jorgensen</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.2gn.com/?p=5</guid>
		<description><![CDATA[I&#8217;ve been thinking about web startups lately. My aim is to build a successful one someday. That got me thinking about all of the tools out there that can give a potential founder a leg up. Let&#8217;s narrow the field arbitrarily. I want to use free tools to minimize financial risk, should the startup tank. [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been thinking about web startups lately. My aim is to build a successful one someday. That got me thinking about all of the tools out there that can give a potential founder a leg up. Let&#8217;s narrow the field arbitrarily. I want to use free tools to minimize financial risk, should the startup tank. If I can&#8217;t have free, then I want cheap and widely available. I also want tools that are flexible and those which I can look at the inner workings. You guessed it, I&#8217;ll be looking at a lot of open source software.</p>
<p>Let&#8217;s take a look at some stacks that I would choose:</p>
<ul>
<li>Linux, Apache, mod_perl, PostgreSQL.</li>
<li>Linux, Apache, php, PostgreSQL (or mySQL).</li>
<li>Linux, Lisp, and some database&#8230; or none.</li>
</ul>
<p>Why Linux? Well, Linux is sufficient. Of the free unices, Linux is the most popular and widespread. Linux has good driver support.</p>
<p>Why Apache? Apache is the most featureful open source web server out there. Apache has a great API if you want to build components in C. Most popular languages in the open source world have an Apache API.</p>
<p>If I have to use a database, I prefer to use PostgreSQL. MySQL has come a long way in recent versions, but PostgreSQL still has some features that I think I need for web programming. One example is the network types. I can do somthing like this, select * from networks where &#8220;10.10.0.0/16&#8243; &gt;&gt; ip_address; . The &gt;&gt; means &#8220;contains&#8221;. In mySQL, or Oracle, I have to build a table of networks and/or IP addresses, iterate through them, and perform the network math myself. PostgreSQL also has a mature procedural language, and if I don&#8217;t like pgpl, I can use perl&#8230; or tcl&#8230; or python as my procedural language.</p>
<p>For familiarity, I would probably choose perl as my language of choice. PHP is also a strong candidate, but for reasons that I will detail in a later article, I probably would shy away from PHP. Perl has very tight integration with Apache. You can perform amazing gymnastics with the life cycle of an http request in mod_perl. Perl also has the advantage of CPAN, a repository of perl modules that do almost everything under the sun. One has to be careful about using CPAN as the quality of the modules vary.</p>
<p>I&#8217;d love to use lisp someday in a web application, but only if I have all of the time I need to learn its advanced features. I can imagine a lot of uses for continuations for instance, but I don&#8217;t understand them well enough to make effective use of them. So, I&#8217;ll keep plugging away at my lisp books and some day, I&#8217;ll write a web app in lisp.</p>
<p>Obviously, other people will make different choices based on their experience. Are there technologies that I wouldn&#8217;t use if I could avoid them? Yes, there are.</p>
<ul>
<li><strong>Windows: </strong>Everything you need to use with windows costs extra: office tools, dev tools, database, mail server&#8230; For reliability, I&#8217;ve never had good experiences with Windows. The company I work for has had production linux servers for 9 months and none of them have ever been rebooted. It&#8217;s rare that I find a windows admin that can say that&#8230; In fact, I&#8217;ve never heard a windows admin say that.</li>
<li><strong>Java/Jboss:</strong> From a sysadmin perspective, I&#8217;ve had bad experiences with Java/Jboss. It has a tendency to crash. Application startup is long to &#8220;holy crap, that&#8217;s long&#8221;.  The performance is variable due to garbage collection. Configuring a JBOSS instance requires a lot of specialized knowledge. Jboss programmers tell me that it has a lot of conveniences, but I&#8217;ve seen a lot of work go into fixing some of the problems caused by the Jboss infrastructure. As far as Java goes, I&#8217;m just not a big fan of the language. It feels like I have to type way too much to get anything done.</li>
<li><strong>Oracle: </strong>It&#8217;s a very featureful database, but it&#8217;s also very expensive to put into production, and it doesn&#8217;t perform significantly better for general database tasks then PostgreSQL or MySQL. Oracle also *requires* an Oracle DBA if you want a smooth running system in a fast changing environment like a startup. PostgreSQL and MySQL don&#8217;t require this kind of attention.</li>
</ul>
<p>Well, that&#8217;s my navel gazing for the day. Next time, I&#8217;ll talk about my World of Warcraft adventures and the fact that my wife thinks (probably correctly) that I&#8217;m addicted.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.2gn.com/programming/tools-for-web-programming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hello World</title>
		<link>http://blog.2gn.com/programming/hello-world-2/</link>
		<comments>http://blog.2gn.com/programming/hello-world-2/#comments</comments>
		<pubDate>Mon, 22 Oct 2007 14:29:37 +0000</pubDate>
		<dc:creator>John Jorgensen</dc:creator>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[Navel Gazing]]></category>
		<category><![CDATA[Politics]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[System Administration]]></category>

		<guid isPermaLink="false">http://yeti.2gn.com/~jjorgens/wordpress/?p=3</guid>
		<description><![CDATA[Welcome to my corner of the world. I&#8217;ll try to add fresh content once in a while on topics that interest me. If you&#8217;re fortunate, some of the topics may interest you. If they don&#8217;t, there is always google (my interests are subject to change and may shift without notice). Currently the interests that I [...]]]></description>
			<content:encoded><![CDATA[<p>Welcome to my corner of the world. I&#8217;ll try to add fresh content once in a while on topics that interest me. If you&#8217;re fortunate, some of the topics may interest you. If they don&#8217;t, there is always <a href="http://google.com">google</a> (my interests are subject to change and may shift without notice).</p>
<p>Currently the interests that I am willing to rant about include; Computer Programming, System Administration,  Computer Games, Politics (or meta politics), and some random philosophical navel gazing.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.2gn.com/programming/hello-world-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
