<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Jonathan's Pancheria: Category technical</title>
    <link>http://blog.dotbot.net/articles/category/technical</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>dotcom Thousandaire</description>
    <item>
      <title>100x100 Challenge: January 30, Day 2-150 lines</title>
      <description>&lt;h3&gt; Summary&lt;/h3&gt;


	&lt;p&gt;I did not think I would actually make today one of the 100 days, but I pushed through.  I guess the incentive of challenging myself is working ;-)&lt;/p&gt;


	&lt;h3&gt; Accomplishments&lt;/h3&gt;


	&lt;ul&gt;
	&lt;li&gt;Finished debugging the last part of adding the second controlled list admin table.  Add and remove working&lt;/li&gt;
		&lt;li&gt;Added the third and final admin table&lt;/li&gt;
		&lt;li&gt;Committed&lt;/li&gt;
	&lt;/ul&gt;


	&lt;h3&gt; Issues&lt;/h3&gt;


	&lt;p&gt;Ready to move on past admin page.  Data for the main part of the application can now be entered and things are ready to move to building the main part of the app now.&lt;/p&gt;


	&lt;p&gt;&lt;span class="caps"&gt;LOC&lt;/span&gt; counts are harder if you don&amp;#8217;t commit your code every day.  I will have to figure out how I can reconcile committing the done LOCs versus not breaking the build, as it were.  I believe using git&amp;#8217;s staging capability will be important for doing that, or I might have to go to trunk and a stable branch, or I can use git clone and keep unstable local and my remote repos stable.  Any way will teach me more about git, but it will be easier to manage the tasks of this challenge &lt;em&gt;and&lt;/em&gt; the requirements of good codebase hygiene to figure one of them out.&lt;/p&gt;</description>
      <pubDate>Sat, 31 Jan 2009 06:32:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:4b136014-4714-4f7c-9bfd-9f845225ab0a</guid>
      <author>Jonathan Altman</author>
      <link>http://blog.dotbot.net/articles/2009/01/31/100x100-challenge-january-30-day-2-150-lines</link>
      <category>technical</category>
      <category>coding</category>
      <category>challenge</category>
      <category>100x100</category>
    </item>
    <item>
      <title>100x100 Challenge: January 29, Day 1-119 lines</title>
      <description>&lt;h3&gt;Summary&lt;/h3&gt;


	&lt;p&gt;After having to make the day I thought up the idea be my Prologue, January 29 turned out to be fairly easy to make 100 lines of code.  Not every day will be this easy, I bet.  I also know that I opted for &lt;em&gt;get things done&lt;/em&gt; over &lt;em&gt;polish things to perfection&lt;/em&gt;.  There is definitely some code that should be factored out and made common, but the pattern hasn&amp;#8217;t emerged to my brain yet.  But the functionality has definitely moved forward&lt;/p&gt;


	&lt;h3&gt; Accomplishments&lt;/h3&gt;


So here are the accomplishments today:
	&lt;ul&gt;
	&lt;li&gt;Moved a little forward on getting Google App Engine &lt;span class="caps"&gt;SDK&lt;/span&gt; debuggable in NetBeans.  I&amp;#8217;m pretty sure what I&amp;#8217;ve done is leading me down a blind alley and will end up being scrapped, but I can now start up my app in the Google App Engine &lt;span class="caps"&gt;SDK&lt;/span&gt; from inside NetBeans.   But breakpoints clearly don&amp;#8217;t work, and I am pretty sure it has to do with the execution model of Google App Engine and so the only way to get it working right would be to delve into the internals of the &lt;span class="caps"&gt;SDK&lt;/span&gt; to fix&lt;/li&gt;
		&lt;li&gt;Got the major admin page for my app moving significantly forward.  There are 3 &amp;#8220;control table&amp;#8221; models that provide the inventory in this application, and there&amp;#8217;s what I hope is a nice &lt;span class="caps"&gt;AJAX&lt;/span&gt;-y admin page from which I want users to be able to manage those lists.  First of 3 lists is done, so you can add and remove items.  Made good progress on the second list supporting add and remove&lt;/li&gt;
	&lt;/ul&gt;


	&lt;h3&gt; Issues&lt;/h3&gt;


	&lt;p&gt;Code is not in a completely stable state: second list&amp;#8217;s table for add/remove is not adding quite correctly yet. That will be tomorrow&amp;#8217;s work.  I should probably put a bit of effort into understanding more about how to debug Google App Engine &lt;span class="caps"&gt;SDK&lt;/span&gt; by either getting it in an interpreter/debugger where I can see breakpoints, or learning how to do printf/stderr/console type logging in it.  I am sure it can be done, and answer is probably a google search away.  But I&amp;#8217;m making progress without it, so it is not the biggest issue.&lt;/p&gt;</description>
      <pubDate>Fri, 30 Jan 2009 05:11:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:eafe5c73-6e0a-457a-becf-77dcc0fa8185</guid>
      <author>Jonathan Altman</author>
      <link>http://blog.dotbot.net/articles/2009/01/30/100x100-challenge-january-29-day-1-119-lines</link>
      <category>technical</category>
      <category>coding</category>
      <category>challenge</category>
      <category>100x100</category>
    </item>
    <item>
      <title>100x100 Challenge: January 28, Prologue-25 lines</title>
      <description>&lt;p&gt;So I decided to start blogging my experience the day after I started actually doing the 100&amp;#215;100 challenge.  Therefore, I get the benefit of hindsight, especially since I ended up well short of the mark.  However, I would have to say the prologue was still fruitful.&lt;/p&gt;


	&lt;h3&gt;Accomplishments&lt;/h3&gt;


Here&amp;#8217;s the accomplishments for the day:
	&lt;ul&gt;
	&lt;li&gt;Automated mounting of the truecrypt drive I keep most of my data on on my laptop (I&amp;#8217;ve had a laptop stolen, the idea somebody had my data even though I knew the thieves would wipe the drive bothered me more than I thought).  5 lines of code&lt;/li&gt;
		&lt;li&gt;Installed Google App Engine &lt;span class="caps"&gt;SDK&lt;/span&gt; on my new laptop.  Since I last touched my Google App Engine app, I got a new laptop and still hadn&amp;#8217;t put the &lt;span class="caps"&gt;SDK&lt;/span&gt; on it&lt;/li&gt;
		&lt;li&gt;Got gitosis running on my re-imaged Joyent Accelerator.  I beta-tested their latest image so I&amp;#8217;ve installed it about 6 times now: I&amp;#8217;m fast at it, but it still needed to be done.  5 lines of code&lt;/li&gt;
		&lt;li&gt;&lt;em&gt;git clone&lt;/em&gt;-ed the repository from my home server to the Joyent Accelerator and to the new laptop&lt;/li&gt;
		&lt;li&gt;Installed KomodoEdit and NetBeans 6.5 with jvi and python environment.  Decided to try NetBeans as my programming environment&lt;/li&gt;
		&lt;li&gt;Got past the roadblock that arose over 6 months ago when I put this app aside! 15 lines of code&lt;/li&gt;
	&lt;/ul&gt;


	&lt;h3&gt; Issues&lt;/h3&gt;


	&lt;p&gt;Not too many really.  I should probably figure out how to run Google App Engine in the NetBeans debugger.&lt;/p&gt;


	&lt;h3&gt;Thoughts&lt;/h3&gt;


	&lt;p&gt;NetBeans is pretty good.  The python environment works fairly well.  Like I said, it would be interesting to see if I can debug Google App Engine from inside it.&lt;/p&gt;</description>
      <pubDate>Wed, 28 Jan 2009 23:56:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:5f12db01-f1c3-4d96-868e-d6412db2c4cb</guid>
      <author>Jonathan Altman</author>
      <link>http://blog.dotbot.net/articles/2009/01/28/100x100-challenge-january-28-prologue-25-lines</link>
      <category>technical</category>
      <category>coding</category>
      <category>challenge</category>
      <category>100x100</category>
    </item>
    <item>
      <title>100x100 Challenge</title>
      <description>&lt;p&gt;So I am going to set myself out a hopefully fun little challenge: 100 lines of code in 100 coding days.  It&amp;#8217;s my challenge (and if this catches on, my meme ;-)), so I get to define my groundrules.  Of course, someone else who wants to quibble with these is free to come up with their own groundrules for their own challenge, publish them, and see how they do on their own ground rules.  Point of this, however, isn&amp;#8217;t to have a flame war on the ground rules.  It&amp;#8217;s to write code, have fun, and see where doing something this regimented leads.&lt;/p&gt;


	&lt;h3&gt;Ground Rules&lt;/h3&gt;


	&lt;ul&gt;
	&lt;li&gt;There will be 100 coding days.  I am going to exclude certain days from the 100 day count like:
	&lt;ul&gt;
	&lt;li&gt;Any day I&amp;#8217;m away skiing&lt;/li&gt;
		&lt;li&gt;Vacation by default, although if I feel like coding on a vacation day I reserve the right to make it a coding day&lt;/li&gt;
		&lt;li&gt;Operational crises at work, although hopefully those are going to be at a comparative minimum these days&lt;/li&gt;
		&lt;li&gt;Sick days, with the same caveat as vacation days&lt;/li&gt;
		&lt;li&gt;One weekend day a week, choice of which one each week&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
		&lt;li&gt;For each of the 100 coding days, either:
	&lt;ul&gt;
	&lt;li&gt;Write 100 lines of code&lt;/li&gt;
		&lt;li&gt;Remove 100 lines of code by refactoring&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
		&lt;li&gt;Lines of code are counted as any non-comment, non-blank code that has any alphanumeric symbol, constant, value, etc.  Here are some things I will or wll not count as a line of code:
	&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Do not count&lt;/strong&gt;: comments&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;Do not count&lt;/strong&gt;: blank lines (zero or more whitespace characters)&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;Do not count&lt;/strong&gt;: closing lexical scope symbols like } in C/C++/Ruby etc&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;Count&lt;/strong&gt;: closing &lt;span class="caps"&gt;HTML&lt;/span&gt;/XML tags.  They have identifiers on them, so I&amp;#8217;m counting them.  And remember, these are my rules&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
		&lt;li&gt;Blog about each day&amp;#8217;s experience: how many lines, what was accomplished, what issues were resolved or came up; any other thoughts about the day&amp;#8217;s effort&lt;/li&gt;
		&lt;li&gt;Publish the code: put the code out there for people to see at some point when it gets done.  I will probably use my github account&lt;/li&gt;
	&lt;/ul&gt;


	&lt;h3&gt;Why I Am Doing It&lt;/h3&gt;


	&lt;p&gt;I have a whole pile of interesting hobby projects that have been sitting around, not getting very far.  There is some tangential work application to some of them, but some of them are just brain stretchers: play with something new, learn it, figure out some paradigms and programming models.&lt;/p&gt;


	&lt;p&gt;I am tired of not forcing myself past roadblocks in these hobby projects and letting them just languish.  So this is a way to force myself to work on finishing at least one of them up.  It is also an experiment in writing things that are just good enough.  By pushing to finish them, I am hoping I won&amp;#8217;t get into bouts of perfectionism of making sure every single artifact in my code utilizes the cleanest, most elegant paradigm in the toolkit I&amp;#8217;m working on, since a major part of the goal of this is intellectual mastery of the subject matter.  Going back to refactor, I may clean things up and make them more elegant.  But this may force me to &lt;em&gt;get things done&lt;/em&gt; instead of &lt;em&gt;polish them to perfection&lt;/em&gt;.  If I want to clean something up, I&amp;#8217;ll go back and do it after I&amp;#8217;m done with a first cut.&lt;/p&gt;


	&lt;h3&gt;What Am I Coding?&lt;/h3&gt;


	&lt;p&gt;I have been playing with a Google App Engine application since right after their initial limited beta got expanded the first time and I got my invite.  The app has been sitting stuck on a particular error for over 6 months now.  So I am going to finish the application.&lt;/p&gt;


	&lt;p&gt;One goal with the app, besides learning Google App Engine, is to build myself a modern, ajax-y web application using new shiny toolkits on the server and browser.  As of right now I am using Google App Engine on the back end, and &lt;span class="caps"&gt;YUI&lt;/span&gt; for the &lt;span class="caps"&gt;DHTML&lt;/span&gt;/Ajax stuff.&lt;/p&gt;


	&lt;p&gt;I may post more about the actual experiences with the toolkits as additional posts when there is a longer topic.  &lt;span class="caps"&gt;DHTML&lt;/span&gt; toolkits is a very possible start.  &lt;span class="caps"&gt;YUI&lt;/span&gt; is definitely an &amp;#8220;accomodation&amp;#8221; choice: there are reasons I&amp;#8217;m using it here that are very specific to this project&amp;#8217;s situation that I&amp;#8217;d like to explore.&lt;/p&gt;


	&lt;h3&gt;After Google App Engine?&lt;/h3&gt;


	&lt;p&gt;Another goal is to play with &amp;#8220;cloud&amp;#8221;-type apps.  That was the interest in Google App Engine when it came out.  Given that, if I actually finish the Google App Engine app, some other things I&amp;#8217;d like to attack would be to see what challenges I face trying to port the app to different platforms, for example:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Heroku, where I also have a beta account languishing&lt;/li&gt;
		&lt;li&gt;A different python framework like TurboGears2 or Django, running on my Joyent Accelerator and maybe even Amazon &lt;span class="caps"&gt;EC2&lt;/span&gt;&lt;/li&gt;
		&lt;li&gt;The Nitrogen Erlang framework, again hosted on my Joyent Accelerator or Amazon &lt;span class="caps"&gt;EC2&lt;/span&gt; (or both!)&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;There has been lots of discussion about portability, vendor lock-in, OSGi stack-level mismatches between various cloud offerings.  By taking a sample app that is small enough to be written reasonably easily, but has enough breadth of functionality to tickle enough parts of a modern &lt;span class="caps"&gt;AJAX&lt;/span&gt; web app, maybe I&amp;#8217;ll provide some interesting data points about writing for the cloud.&lt;/p&gt;</description>
      <pubDate>Wed, 28 Jan 2009 23:41:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:2864cef5-eaf6-4f50-9ed8-c05a6ea3638a</guid>
      <author>Jonathan Altman</author>
      <link>http://blog.dotbot.net/articles/2009/01/28/100x100-challenge</link>
      <category>technical</category>
      <category>personal</category>
      <category>coding</category>
      <category>challenge</category>
      <category>100x100</category>
    </item>
    <item>
      <title>The Mainstream realizes SOA is going the way of WS-*</title>
      <description>&lt;p&gt;So I disagree with the way the argument in &lt;a href="http://www.informationweek.com/news/software/soa/showArticle.jhtml?articleID=209904293"&gt;this post&lt;/a&gt; is framed, but I am glad to see the &amp;#8220;mainstream&amp;#8221; tech press realizing there&amp;#8217;s a better way to get to &lt;span class="caps"&gt;SOA&lt;/span&gt;:&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;A growing number of companies are finding that lower-visibility Web-oriented architecture (WOA) developments, spawned through grassroots movements, are a better route to the service-oriented architecture. &lt;span class="caps"&gt;WOA&lt;/span&gt;, like &lt;span class="caps"&gt;SOA&lt;/span&gt;, is an architectural approach to system design, though &lt;span class="caps"&gt;WOA&lt;/span&gt; is resource-oriented rather than service-oriented. What&amp;#8217;s the difference? While the core &lt;span class="caps"&gt;SOA&lt;/span&gt; design unit is a reusable service that fulfills a distinct business function, resource-oriented services are more limited and data-focused.&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;blockquote&gt;
		&lt;p&gt;&lt;span class="caps"&gt;SOA&lt;/span&gt; and &lt;span class="caps"&gt;WOA&lt;/span&gt; work at different layers of abstraction. &lt;span class="caps"&gt;SOA&lt;/span&gt; is a system-level architectural style that tries to implement new business capabilities so that they can be consumed by many applications. &lt;span class="caps"&gt;WOA&lt;/span&gt; is an interface-level architectural style that focuses on the means by which these service capabilities are exposed to consumers. Governance, quality of service, security, and management are of equal importance, whether the functionality is being delivered via &lt;span class="caps"&gt;SOA&lt;/span&gt; or &lt;span class="caps"&gt;WOA&lt;/span&gt;.&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;I think the delineation between &lt;span class="caps"&gt;SOA&lt;/span&gt; design units as a service fulfilling a distinct business function and &lt;span class="caps"&gt;WOA&lt;/span&gt; as a resource-oriented service being more limited and data-focused is so much dissembling for &lt;span class="caps"&gt;SOA&lt;/span&gt; being an attempt to force a top-down, waterfall-based model on what services you offer in your architecture versus an iterative or even agile strategy of building the individual services and then gluing them together.&lt;/p&gt;


	&lt;p&gt;I think &lt;span class="caps"&gt;SOA&lt;/span&gt; was also overblown in the framework for tying them together, which is the root of this problem, and leads to the conclusion I made up above.  Put a bunch of webservices out there that handle orthogonal responsibilities, make it easy to access them (personally, preferably with easy &lt;span class="caps"&gt;HTTP&lt;/span&gt;/POX or a light &lt;span class="caps"&gt;SOAP&lt;/span&gt; layer), rather than a huge management stack that services have to a priori fit into, with the up-front design and overhead that comes with it.&lt;/p&gt;</description>
      <pubDate>Mon, 11 Aug 2008 19:21:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:0be58bb4-7eda-489b-8b75-6d4ee2ba536f</guid>
      <author>Jonathan Altman</author>
      <link>http://blog.dotbot.net/articles/2008/08/11/the-mainstream-realizes-soa-is-going-the-way-of-ws</link>
      <category>technical</category>
      <category>webservices</category>
      <category>SOAP</category>
      <category>web</category>
      <category>services</category>
      <category>SOA</category>
      <category>POX</category>
      <category>advocacy</category>
    </item>
    <item>
      <title>Good point about *any* Web Services != RPC</title>
      <description>&lt;p&gt;So ordinarily, &lt;a href="http://www.bloglines.com/blog/sanjiva?id=227"&gt;this post&lt;/a&gt; would have gone up as a link in del.icio.us, but the interesting part of it is actually a single quote that flows in the article but is not the main point.  So I will just crib the interesting part here.  It is worth reading the entire post as it is interesting, but what I want to call out is:&lt;/p&gt;


	&lt;p&gt;bq.IMO the real underlying problem is that as long as programmers expect to write a class and flip a switch to get a service or one or more RESTful resources then we have nothing really but &lt;span class="caps"&gt;RPC&lt;/span&gt; masquerading as something else. Both resource and service advocates would be well-off in trying to move the developer community to get past the &amp;#8220;class is all I need&amp;#8221; stage. If &lt;span class="caps"&gt;REST&lt;/span&gt; is successful in getting developers to get their hands dirty more power to it.&lt;/p&gt;</description>
      <pubDate>Fri, 25 Jul 2008 15:44:34 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:28e70a2e-5033-4862-ab92-071169c3eedb</guid>
      <author>Jonathan Altman</author>
      <link>http://blog.dotbot.net/articles/2008/07/25/good-point-about-any-web-services-rpc</link>
      <category>technical</category>
    </item>
    <item>
      <title>...And we shall call it NetBlub</title>
      <description>&lt;p&gt;Paul Graham first wrote about a strawman hypothetical programming language &lt;a href="http://www.paulgraham.com/avg.html"&gt;blub&lt;/a&gt; that examined the constraints that people who choose to stay firmly embedded in only one language seem to impose upon themselves and their programming capabilities and creativity.&lt;/p&gt;


	&lt;p&gt;Steve Vinoski, who has been writing a bunch about some of the failures of &lt;span class="caps"&gt;RPC&lt;/span&gt;-style distributed systems technologies (and should know, having been involved in &lt;span class="caps"&gt;CORBA&lt;/span&gt;), I think just extended the theme to distributed systems programming &lt;a href="http://steve.vinoski.net/blog/2008/07/01/convenience-over-correctness/"&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Wed, 02 Jul 2008 06:07:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:67d9b5ff-7d64-4c10-89d4-15b5a83afd83</guid>
      <author>Jonathan Altman</author>
      <link>http://blog.dotbot.net/articles/2008/07/02/and-we-shall-call-it-netblub</link>
      <category>technical</category>
      <category>webservices</category>
      <category>web</category>
      <category>services</category>
      <category>RPC</category>
      <category>advocacy</category>
      <category>blub</category>
    </item>
    <item>
      <title>Running Rails Apps on a Nokia N810</title>
      <description>&lt;p&gt;Goaded on by &lt;a href="http://tieguy.org/blog/2008/01/29/n810-in-a-nutshell/#comment-26286"&gt;requests for screenshots of Tracks running on my n810&lt;/a&gt;, I decided to instead document to the best of my recollection what I did to get Tracks and Instiki running on my n810.&lt;/p&gt;


	&lt;h3&gt;Table of Contents&lt;/h3&gt;


	&lt;h4&gt;1. &lt;a href="#Preface"&gt;Preface: Why?&lt;/a&gt;&lt;/h4&gt;


	&lt;h4&gt;2. &lt;a href="#Screenshots"&gt;Screenshots&lt;/a&gt;&lt;/h4&gt;


	&lt;h4&gt;3. &lt;a href="#Prerequisites"&gt;Prerequisites&lt;/a&gt;&lt;/h4&gt;


	&lt;h4&gt;4. &lt;a href="#TracksAndInstiki"&gt;Tracks and Instiki&lt;/a&gt;&lt;/h4&gt;


	&lt;h4&gt;5. &lt;a href="#WrappingUp"&gt;Wrapping Up&lt;/a&gt;&lt;/h4&gt;


	&lt;p&gt;&lt;strong&gt;&lt;span class="caps"&gt;DISCLAIMER&lt;/span&gt;&lt;/strong&gt;: I am going to show you how to do some things that can probably badly mess up your device if you get them wrong, and maybe even if you follow these instructions to the letter.  I do not promise that these instructions are even complete or accurate anymore; I am nearly positive the instructions below are incomplete regarding what to install.  You follow these instructions at your &lt;strong&gt;&lt;span class="caps"&gt;OWN RISK&lt;/span&gt;&lt;/strong&gt;.  This worked for me, it may or may not work for you, with or without additional steps.  I did this about 3 months ago and was not taking good notes because I figured over time apt packages would catch up and this would not be necessary to repeat.  If you follow and you get warnings you need to install additional stuff to continue, you should probably assume that is correct.&lt;/p&gt;


	&lt;h3 id="Preface"&gt;Preface: Why?&lt;/h3&gt;


So one of the main reasons I actually got a Nokia n810 internet table (Linux/gnome-based tablet) was because:
	&lt;ul&gt;
	&lt;li&gt;It had a keyboard&lt;/li&gt;
		&lt;li&gt;It ran Linux and was reasonably powerful enough to possibly run some interesting things&lt;/li&gt;
		&lt;li&gt;It might let me replace my horrible system of &amp;#8220;engineering notebook&amp;#8221; plus wiki on my personal laptop plus complete lack of organizational system for keeping track of tasks with a single device that could provide all of that in a small, portable package&lt;/li&gt;
	&lt;/ul&gt;


To get this, however, I was going to have to be able to install 2 Rails apps that I liked:
	&lt;ul&gt;
	&lt;li&gt;Instiki, for wiki&lt;/li&gt;
		&lt;li&gt;Tracks, for &lt;span class="caps"&gt;GTD&lt;/span&gt; (Getting Things Done) task management&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;I pre-ordered my n810 directly from Nokia (with a very nice discount) before it was available, and received mine I think within the first week of its being generally available in the United States.  So to preface this description of how I got things working, I did all this in late November, 2007.  Some packages may have moved around, and there may be better ways to do things than what I had to do.  But Chinook (OS2008) ported packages were fairly slim at that time.&lt;/p&gt;


I should also point out that I was not interested in developing Rails apps on this machine, just installing and using them.  Once I got things to an acceptable level of &amp;#8220;done&amp;#8221; for me, I did not investigate some pecularities further.  So some things that you will not have after this are:
	&lt;ul&gt;
	&lt;li&gt;The ruby gem system is not installed.  I did get it installed, but could not get it to actually read the gem catalog, so I see no reason to describe how to install it.  Could it be made to work?  Don&amp;#8217;t know and I don&amp;#8217;t care for my purposes &lt;em&gt;on this box&lt;/em&gt;.  I have gem working lots of other places on different chip architectures, but the n810 was not a target I needed it working on &lt;em&gt;at this time&lt;/em&gt;&lt;/li&gt;
		&lt;li&gt;I did absolutely no investigation on how to have Rails apps start when you boot up the n810.  I have a shell script I use to start my apps, and anybody who wants to take that to the next level and get this autostarted, please document it and I will gladly use it.  But my shell script works for me since I reboot the thing maybe once every 3 weeks&lt;/li&gt;
		&lt;li&gt;This does not get you the Rails gem installed anywhere in your site_ruby, nor ActiveRecord, nor anything else.  Most packaged Rails apps seem to freeze their Rails install into &lt;em&gt;railsapp&lt;/em&gt;/vendor anyway these days, so installing a pre-packaged app works just fine.  So my instructions may not work for some Rails apps, and it certainly won&amp;#8217;t work for you to start making your own new Rails app on your n810&lt;/li&gt;
	&lt;/ul&gt;


	&lt;h3 id="Screenshots"&gt;Screenshots&lt;/h3&gt;


	&lt;p&gt;So without further ado, as a tease, here are screenshots of Tracks running on my n810.  As you can see by the lateness of many actions, I have been better about getting Tracks set up than in actually having it improve my personal organization!&lt;/p&gt;


&lt;a href="/files/tracks-n810.png" target="_blank"&gt;&lt;img src="/files/tracks-n810.png" title="&amp;quot;Home&amp;quot; screen in Tracks: Click for full size" alt="&amp;quot;Home&amp;quot; screen in Tracks" height="240" width="400"/&gt;&amp;#8221; 
	&lt;h4&gt;The Tracks &amp;#8220;Home&amp;#8221; view.  David Allen would be appalled!&lt;/a&gt;&lt;/h4&gt;


&lt;a href="/files/tracks_add-n810.png" target="_blank"&gt;&lt;img src="/files/tracks_add-n810.png" title="Adding a next action: Click for full size" alt="Adding a next action" height="240" width="400"/&gt;
	&lt;h4&gt;Adding an action.  Notice that the Ajax calendar works just fine.&lt;/a&gt;&lt;/h4&gt;


	&lt;h3 id="Prerequisites"&gt;Prerequisites&lt;/h3&gt;


	&lt;p&gt;These are the steps to take to get the basics set up on your n810 to even put a Rails app like Tracks or Instiki on it.&lt;/p&gt;


	&lt;h5&gt;Turn on Red Pill Mode&lt;/h5&gt;


	&lt;p&gt;I am not sure this is strictly necessary, but I had it on while I was doing this,and I suspect it&amp;#8217;s necessary.  This is the first but not the last dangerous part of these instructions.  Instructions on doing so, and what it does for you, are &lt;a href="http://maemo.org/community/wiki/ApplicationManagerRedPillMode"&gt;on the Maemo wiki here&lt;/a&gt;&lt;/p&gt;


	&lt;h5&gt;Libsqlite3-0&lt;/h5&gt;


	&lt;p&gt;libsqlite3-0 appears to already be installed, so there is nothing to do.  But you might want to confirm in the Application manager that it is already installed.&lt;/p&gt;


	&lt;h5&gt;Install Ruby and Ruby Sqlite3 Bindings&lt;/h5&gt;


	&lt;p&gt;&lt;del&gt;-I got the packages from &lt;a href="http://maemo.rubyx.co.uk/ruby-maemo/"&gt;http://maemo.rubyx.co.uk/ruby-maemo/&lt;/a&gt; however the site appears to have been down for a while now.&lt;/del&gt;- The ruby packages I installed appear to now live at &lt;a href="http://gplsystems.com/apt/dists/chinook/main/binary-armel/Packages"&gt;http://gplsystems.com/apt/dists/chinook/main/binary-armel/Packages&lt;/a&gt;   (thank you friend and coworker who wishes to remain anonymous).  The packages I installed, which I recall all coming from there, were:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;libruby1.8&lt;/li&gt;
		&lt;li&gt;libruby1.8-dev (not sure it&amp;#8217;s necessary, but I grabbed it)&lt;/li&gt;
		&lt;li&gt;ruby1.8 (1.8.6-p110-1)&lt;/li&gt;
		&lt;li&gt;ruby1.8-libxml (I don&amp;#8217;t think it&amp;#8217;s necessary, but I do a lot of stuff with &lt;span class="caps"&gt;XML&lt;/span&gt;)&lt;/li&gt;
		&lt;li&gt;ruby1.8-maemo (again, not sure it&amp;#8217;s necessary)&lt;/li&gt;
		&lt;li&gt;ruby1.8-sdl (nearly positive I did not need this)&lt;/li&gt;
		&lt;li&gt;ruby1.8-sqlite3 &amp;#8211; definitely required&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;I found and installed rubygems from somewhere, but I could never get it to do anything but hang trying to update catalog.  Both Instiki and Tracks releases ship &amp;#8220;complete&amp;#8221; so there&amp;#8217;s no gems needed, so I skipped this.&lt;/p&gt;


	&lt;h5&gt;Add the Maemo Repository to Application Manager&lt;/h5&gt;


	&lt;p&gt;Add the maemo stable repository at &lt;a href="http://repository.maemo.org/"&gt;http://repository.maemo.org/&lt;/a&gt;.  When you are done, the apt.sources line ends up looking like &amp;#8220;deb http://repository.maemo.org/ chinook free non-free&amp;#8221; for those of you that like to look at the raw apt package configuration files.&lt;/p&gt;


	&lt;p&gt;I also added the Maemo extras repository and maemo-hackers.org repository&lt;/p&gt;


	&lt;h5&gt;Install p7Zip, gcc, make and some needed Libs&lt;/h5&gt;


	&lt;p&gt;Since rubygems didn&amp;#8217;t work for me, I decided to install mongrel from source.  You need gcc, and I think make.  You also need something to unpack tar/zip archives, and at the time the only maemo package I could find was p7zip.  These are in the maemo repository/repositories you added earlier.  I have&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;p7zip 4.42.maemo-1&lt;/li&gt;
		&lt;li&gt;make 3.80-9osso&lt;/li&gt;
		&lt;li&gt;gcc 3.4.4&lt;/li&gt;
		&lt;li&gt;libc6-dev if you don&amp;#8217;t already have it&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;There may have been some other pieces needed too.&lt;/p&gt;


	&lt;h5&gt;Download and Install Mongrel&lt;/h5&gt;


	&lt;p&gt;Webrick runs on the n810, for values of run equal to a geriatric snail.  You will not be happy with a Rails app running under webrick.  Mongrel is, while not exactly &lt;em&gt;instantaneous&lt;/em&gt;, at least responsive enough to run an &lt;span class="caps"&gt;AJAX&lt;/span&gt;-y Rails app.&lt;/p&gt;


	&lt;p&gt;Download the mongrel source tarball from http://mongrel.rubyforge.org/.  1.1.1 was the latest at the time but they are on 1.1.3 as of February 5, 2008.  Untar to a directory (using p7zip).  Then do ruby setup.rb which should configure, build, and install mongrel.  You should now have /usr/bin/mongrel_rails.&lt;/p&gt;


	&lt;h3 id="TracksAndInstiki"&gt;Tracks and Instiki&lt;/h3&gt;


	&lt;h5&gt;Where to Install&lt;/h5&gt;


	&lt;p&gt;You will be installing Tracks and Instiki from source tarballs or zipfiles.  After you download them, you will need to unpack them somewhere, using p7zip.  I put them on my removable media card, which is /media/mmc1 because I was concerned about the &lt;span class="caps"&gt;GPS&lt;/span&gt;/mapping software filling up the fixed 2GB memory card /media/mmc2.  If you plan to swap out memory cards often that might be a bad decision for you, but I am happy with it.&lt;/p&gt;


	&lt;h5&gt;Tracks&lt;/h5&gt;


	&lt;ul&gt;
	&lt;li&gt;Download a Tracks tarball/zipfile.  I used Tracks 1.043 which was the latest &amp;#8220;release&amp;#8221; drop on their site, but I am sure you could grab trunk out of the Tracks source repository and turn that into a tarball too&lt;/li&gt;
		&lt;li&gt;Untar/unzip the source archive and cd to the top directory of Tracks.  In my case that was /media/mmc1/tracks-1.043.  You may lay it down differently, but if so remember to alter your paths throughout the rest of these instructions appropriately.&lt;/li&gt;
		&lt;li&gt;cd into the tracks directory you just unpacked&lt;/li&gt;
		&lt;li&gt;Make sure that the database.yml in the config subdir is set up the way you like.  I left mine using db/&lt;em&gt;filename&lt;/em&gt;.db as it shipped&lt;/li&gt;
		&lt;li&gt;Now the moment of truth: start up Tracks.  From the main directory you could do ruby script/server just to test (it might start up webrick instead of mongrel, for values of might equal to probably).  If it starts up without error, point your web browser at your Tracks instance: http://localhost:3000/&lt;/li&gt;
		&lt;li&gt;Once you have it up and running, you can stop Tracks with ctrl-c&lt;/li&gt;
		&lt;li&gt;Now try mongrel.  /usr/bin/ruby /usr/bin/mongrel_rails start -c /media/mmc1/tracks-1.043 -e production -a 127.0.0.1 -p 3000 is what I use in my environment.  You might need to adjust the path after -c to match how you laid down Tracks.  It should start up, and you should be able to point your web browser at it.  If so, go ahead and stop Tracks by typing ctrl-c.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Congratulations, you&amp;#8217;ve installed Tracks on your n810!&lt;/p&gt;


	&lt;h3&gt;Instiki&lt;/h3&gt;


	&lt;ul&gt;
	&lt;li&gt;Download Instiki 0.12.0 (or newer if it exists and you want it).  I would avoid earlier versions of Instiki that use Madeleine for persistence.  0.12.0 uses sqlite3 for persistence, and that seems safer than using Madeleine on the n810&lt;/li&gt;
		&lt;li&gt;Untar the source archive and cd to the top directory of Tracks.  In my case that was /media/mmc1/instiki-0.12.0.  You may lay it down differently, but if so remember to alter your paths throughout the rest of these instructions appropriately.&lt;/li&gt;
		&lt;li&gt;cd into the instiki directory you just unpacked&lt;/li&gt;
		&lt;li&gt;Make sure that the database.yml in the config subdir is set up the way you like.  I left mine using db/&lt;em&gt;filename&lt;/em&gt;.db as it shipped&lt;/li&gt;
		&lt;li&gt;Now the moment of truth: start up Instiki.  From the main directory you could do ruby script/server just to test (it might start up webrick instead of mongrel, for values of might equal to probably).  If it starts up without error, point your web browser at your Instiki instance: http://localhost:2500/&lt;/li&gt;
		&lt;li&gt;Once you have it up and running, you can stop Tracks with ctrl-c&lt;/li&gt;
		&lt;li&gt;Now try mongrel.  /usr/bin/ruby /usr/bin/mongrel_rails start -c /media/mmc1/instiki-0.12.0 -e production -a 127.0.0.1 -p 2500 is what I use in my environment.  You might need to adjust the path after -c to match how you laid down Instiki.  It should start up, and you should be able to point your web browser at it.  If so, go ahead and stop Instiki by typing ctrl-c.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Congratulations, you have installed Instiki on your n810.&lt;/p&gt;


	&lt;h3 id="WrappingUp"&gt;Wrapping Up&lt;/h3&gt;


	&lt;p&gt;Now that you have Tracks and/or Instiki up and running, what next?  I left my apps running on their default ports of 3000 and 2500, but you could run them on different ports if you chose.  I saw no reason to do that, nor to find a webserver to proxy them to so they are off the &amp;#8220;main&amp;#8221; webserver.  That&amp;#8217;s just overhead the n810 really does not need.&lt;/p&gt;


	&lt;h5&gt; Starting up Rails Apps&lt;/h5&gt;


	&lt;p&gt;Once I was happy with my install, I made myself a little shell script to fire them both off.  When I boot up, I start up an XTerm and fire off the script.  Here are its contents (sorry for the iframe, it was easier):&lt;/p&gt;


&lt;iframe src="/files/startweb.html" width="400" height="500" scrolling="auto" frameborder="1"&gt;&lt;/iframe&gt;

	&lt;h5&gt; Stopping Rails Apps&lt;/h5&gt;


	&lt;p&gt;The easiest way I stop both my apps if I need to, like if I want to hook up the &lt;span class="caps"&gt;USB&lt;/span&gt; cable or otherwise want to make sure the Rails apps shut down cleanly, I just issue a &lt;em&gt;killall ruby&lt;/em&gt; and that kills the mongrel processes given how I start them.  Before you just do that, make sure you know what ruby processes are running on your n810 and that you&amp;#8217;re ok to kill them all.&lt;/p&gt;


	&lt;p&gt;Note that it can take a good few seconds, from 15-20 up to maybe 30, for all the Rails apps to respond to the kill signal.  Just be patient.  I also highly recommend aliasing ps -ef | grep in the shell to pgrep because inputting the pipe symbol on an n810 is fairly cumbersome.&lt;/p&gt;</description>
      <pubDate>Wed, 13 Feb 2008 05:28:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:05edbe97-e42d-4f6a-94e0-65db3ff8a164</guid>
      <author>Jonathan Altman</author>
      <link>http://blog.dotbot.net/articles/2008/02/13/running-rails-apps-on-a-nokia-n810</link>
      <category>technical</category>
      <category>rails</category>
      <category>ruby</category>
      <category>n810</category>
      <category>maemo</category>
      <category>instiki</category>
      <category>tracks</category>
      <category>install</category>
      <enclosure type="image/png" url="http://blog.dotbot.net/files/tracks_add-n810.png" length="80669"/>
    </item>
    <item>
      <title>Switch (back)</title>
      <description>&lt;p&gt;Well, after 12 years I have switched (back) to Macs.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://www.flickr.com/photos/jonathan/2063419638/" title="Switch (back) by AgentQueue, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2366/2063419638_deba45fe4e_m.jpg" width="240" height="180" alt="Switch (back)" /&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;My first computer was an original 128k Mac, one of the very first ones.  My mouse actually had a 5-digit serial number, &lt;span class="caps"&gt;IIRC&lt;/span&gt;.  I gave up in 1995 swearing I would never buy another Mac:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;I bought a Powerbook Duo 210-possibly the worst Mac ever engineered- right when it came out, shortly before Steve Jobs cut the price in half, and then shortly after that discontinued it.  And no, he didn&amp;#8217;t give me any funny money to go spend in his stores after he did it&lt;/li&gt;
		&lt;li&gt;The various unixes, which is how I made my living at the time, all had reasonable PC-based implementations that were free and open source.  Linux was viable, and FreeBSD 2.2 was a really nice, stable OS&lt;/li&gt;
		&lt;li&gt;The Mac just did not have interesting software that I wanted to play with, and I could run systems I could get paid to play with on x86 pc hardware&lt;/li&gt;
		&lt;li&gt;Oh yeah, did I mention the turd of a computer that the Powerbook Duo 210 was?&lt;/li&gt;
	&lt;/ul&gt;


	&lt;h2&gt; The Good&lt;/h2&gt;


	&lt;p&gt;So why the switch back?   It comes down to things Just Working.  I&amp;#8217;ve been using various Linux distros, most recently Ubuntu, at home for a while.  I will continue to run Ubuntu on my home laptop.  But for a computer for the rest of the family to use, and for certain things for me, the Mac is just easier:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;It is just about as easy to manage software on the Mac as on Ubuntu.  I am convinced that the debian apt system (or possibly similar like yum or rpms) are the way to go for maintaining systems.  But Apple&amp;#8217;s installation system has so far been very easy to work with to get things on here.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;ul&gt;
	&lt;li&gt;Most importantly, once software and drivers are installed, the hardware and software &lt;em&gt;Just Works&lt;/em&gt;&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;As a quick example, I installed the iSync plugin for my Nokia &lt;span class="caps"&gt;N95&lt;/span&gt;.  I then used the iMac&amp;#8217;s bluetooth wizard to connect to the phone, it found it and paired properly (no extra credit, most things do these days), but then iSync popped up and within 10 minutes of starting I had downloaded the plugin, installed it, connected my phone, and synced my phone into iCal and the address book&lt;/p&gt;


	&lt;p&gt;*Unix-y goodness.  I like being able to pop into a shell and do things, and having rsync and friends around is nice&lt;/p&gt;


	&lt;h2&gt; The Bad&lt;/h2&gt;


	&lt;p&gt;So everybody touts the awesome &lt;span class="caps"&gt;OSX GUI&lt;/span&gt;.  But here&amp;#8217;s the deal, much of it is still the best that 1983 has to offer.&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;The single menu bar at the top of the screen that switches as you change apps has got to go.  I have had the computer running less than a day and I&amp;#8217;ve already thought I&amp;#8217;ve closed an app about 20 times only to remember that closing the last window&amp;#8230;closes the last window.  It is too hard to get into and out of apps&lt;/li&gt;
		&lt;li&gt;I&amp;#8217;m not thrilled about the dock showing both open and available apps.  I would prefer one list of open apps and another of apps I frequently use to click on.  I know there is a visual indicator of what&amp;#8217;s open or not, but my dock is cluttered because I am used to using a strip of icons for apps I start frequently&lt;/li&gt;
	&lt;/ul&gt;


	&lt;h2&gt;Overall&lt;/h2&gt;


	&lt;p&gt;Overall, I am happy with the switch back, but I think I&amp;#8217;m jaded enough not to become too much of an Apple fan boy.  There are too many usability nits left in the OS from 20 years ago.&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;m using firefox and thunderbird for mail because at the base of it I want an OS to run my apps on top off, and I like that I have the same apps on Windows, linux, and &lt;span class="caps"&gt;OSX&lt;/span&gt;.&lt;/p&gt;


	&lt;p&gt;Finally, I am sure I have said something in here to anger Mac, Windows, and Linux/Debian/Ubuntu fans everywhere.  Remember, this is &lt;em&gt;my&lt;/em&gt; choice.  I use all 3 OSes now every day (Windows at work, Ubuntu on my personal machine, and &lt;span class="caps"&gt;OSX&lt;/span&gt; on the family computer).  I use what works for me out of each of them, and none of them does exactly what I want for every single thing.  Linux-&amp;gt;Debian-&amp;gt;Ubuntu and &lt;span class="caps"&gt;OSX&lt;/span&gt; each have their strong points, and I like each for what they can do.  But each has downsides too.  Remember, this is all &lt;span class="caps"&gt;IMHO&lt;/span&gt;, with the emphasis on &lt;em&gt;my&lt;/em&gt; and &lt;em&gt;opinion&lt;/em&gt;.  You are free to have yours, and have them not be the same as mine.&lt;/p&gt;</description>
      <pubDate>Sun, 25 Nov 2007 19:20:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:2a788e6d-b023-4bdd-823a-5289adb583f5</guid>
      <author>Jonathan Altman</author>
      <link>http://blog.dotbot.net/articles/2007/11/25/switch-back</link>
      <category>technical</category>
      <category>personal</category>
      <category>Apple</category>
      <category>mac</category>
      <category>iMac</category>
      <category>osx</category>
      <category>switch</category>
    </item>
    <item>
      <title>Initial Lockdown of a Joyent Accelerator</title>
      <description>&lt;p&gt;Here are some quick steps I did to do initial lockdown of a freshly created Joyent Accelerator:&lt;/p&gt;


	&lt;h2&gt;Change passwords&lt;/h2&gt;


	&lt;ul&gt;
	&lt;li&gt;Sign in as admin via secure shell to the default account, change its password&lt;/li&gt;
		&lt;li&gt;&lt;em&gt;su&lt;/em&gt; to root and change the root password&lt;/li&gt;
		&lt;li&gt;Go into virtualmin-&amp;gt;webmin-&amp;gt;Webmin Users-&amp;gt;Click on the admin user.  Then set Password Authentication to Unix Authentication in the dropdown box, like in this screenshot: &lt;img src="http://blog.dotbot.net/files/CropperCapture_2_.Png" alt="" /&gt; Hit the Save button at the bottom of the page.  After you do this, you will have to log back in to webmin.  Alternately, you could just set the password to be the same as the one you used for the admin user you secure shell&amp;#8217;ed in, if you are worried about webmin having access to the Solaris password authentication system. But then you also have to worry about keeping the passwords in sync.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;h2&gt;Shut off unnecessary services&lt;/h2&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Disable apache&lt;/strong&gt;: I am not ready to run a webserver yet, so I shut off apache by su&amp;#8217;ing to root and running &lt;em&gt;# svcadm disable cswapache2&lt;/em&gt;&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;Make postfix only accept mail from localhost&lt;/strong&gt;: Webmin-&amp;gt;Server-&amp;gt;Postfix Configuration-&amp;gt;General.  Set the text box on &amp;#8220;Network interfaces for receiving mail&amp;#8221; to localhost, like in this image:&lt;img src="http://blog.dotbot.net/files/CropperCapture_1_.Png" alt="" /&gt; then save.  Then stop and restart postfix&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;When I was done, my &lt;em&gt;netstat -a -f inet&lt;/em&gt; display showed only the following listening ports:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&amp;#042;.s s h: s s h daemon&lt;/li&gt;
		&lt;li&gt;&amp;#042;.10000: webmin&lt;/li&gt;
		&lt;li&gt;localhost.smtp: smtp, but can only be accessed via localhost&lt;/li&gt;
		&lt;li&gt;localhost.3306: mysql daemon&lt;/li&gt;
	&lt;/ul&gt;</description>
      <pubDate>Fri, 25 May 2007 04:37:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:81fb19fc-964d-49b9-be63-a914ce09e5f2</guid>
      <author>Jonathan Altman</author>
      <link>http://blog.dotbot.net/articles/2007/05/25/initial-lockdown-of-a-joyent-accelerator</link>
      <category>technical</category>
      <category>security</category>
      <category>joyent</category>
      <category>textdrive</category>
      <category>accelerator</category>
      <category>container</category>
      <category>solaris</category>
      <category>opensolaris</category>
      <category>howto</category>
    </item>
  </channel>
</rss>
