<?xml version='1.0' encoding='utf-8' ?>
<rss version='2.0'>
<channel>
<title>ATOM von Fugal [programming]</title>
<link>http://von.fugal.net/blog/list/programming</link>
<language>en-us</language>
<description>Happenings and enlightenments in the life of Von Fugal</description>
<item>
<title>Mysterious strftime segfault</title>
<author>von@fugal.net (Von Fugal)</author>
<link>http://von.fugal.net/blog/show/Mysterious_Strftime_Segfault/78</link>
<description>&lt;p&gt;Say you're working on a big project. Then at some point you call &lt;code&gt;strftime&lt;/code&gt; or maybe &lt;code&gt;ctime&lt;/code&gt; and what do you get but a nasty and mysterious &lt;code&gt;SEGFAULT&lt;/code&gt;?? What's more you are absolutely &lt;em&gt;sure&lt;/em&gt; you have no memory leaks, nothing is wrong with the arguments to the call. Then &lt;code&gt;gdb&lt;/code&gt; tells you only that the segfault is happening somewhere deep inside the library call. Furthermore, it works on some platforms but not others, indicating again that memory leak you are &lt;em&gt;sure&lt;/em&gt; you don't have. So what do you do but spend three hours tracking down your much doubted memory leak? Well hopefully you find this very post and save those three hours. You see, if &lt;code&gt;time.h&lt;/code&gt; is included in another source file, you may have forgotten to include it where you use it. The compiler won't blink an eye. The linker doesn't even complain. Yet somehow it all works dandy until you try it on the TA's computer. So long story short, check your includes.&lt;/p&gt;

&lt;a href=&quot;/blog/show/78#comment&quot;&gt;0 comments&lt;/a&gt;
</description>
<pubDate>Sat, 19 Sep 2009 09:49:23 +0000</pubDate>
<guid>http://von.fugal.net/blog/show/78</guid>
<category>programming</category>
<category>c</category>
<category>troubleshooting</category>
<category>annoyances</category>
<category>computers</category>
<category>linux</category>
</item>
<item>
<title>CSApprox</title>
<author>von@fugal.net (Von Fugal)</author>
<link>http://von.fugal.net/blog/show/Csapprox/73</link>
<description>&lt;p&gt;Probably the coolest VIm plugin since netrw, welcome &lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=2390&quot;&gt;CSApprox&lt;/a&gt;! Just put this in your .vim/plugin and away you go with completely transparent and automatic 256 color themes for your terminal vim that look amazingly not unlike the &lt;span class=&quot;caps&quot;&gt;GUI&lt;/span&gt; versions of those themes. Just make sure your terminal properly reports 256 colors, and that your vim binary is compiled with gui support (debian flavors do this, but apparently not red hat flavors). If either of these are missing it will give you a little message and delay opening vim, if this is a problem you might want to suppress that output.&lt;/p&gt;
&lt;p&gt;I also highly recommend enabling 256 colors via Xresources rather than setting &lt;code&gt;TERM=xterm-256color&lt;/code&gt;, this will save headache when sshing in from a less fine terminal or when logging in at the console. A quick google turns up plenty of info on how o set your Xresources with one caveat; if you use uxterm like any sane person would, you need &lt;code&gt;s/Xterm/UXterm/&lt;/code&gt;. I&amp;#8217;ve also found cases where I need &lt;code&gt;xterm&lt;/code&gt; as well, so I simply put all three in there to be safe.&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;
Xterm*termName: xterm-256color
UXterm*termName: xterm-256color
xterm*termName: xterm-256color&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;a href=&quot;/blog/show/73#comment&quot;&gt;2 comments&lt;/a&gt;
</description>
<pubDate>Tue, 25 Nov 2008 09:22:10 +0000</pubDate>
<guid>http://von.fugal.net/blog/show/73</guid>
<category>linux</category>
<category>programming</category>
<category>computers</category>
<category>cool</category>
<category>vim</category>
<category>colors</category>
<category>terminal</category>
<category>xterm</category>
<category>uxterm</category>
<category>gvim</category>
<category>256</category>
</item>
<item>
<title>Tricking Darcs, or How to Make a Common Branch</title>
<author>von@fugal.net (Von Fugal)</author>
<link>http://von.fugal.net/blog/show/Tricking_Darcs_Or_How_To_Make_A_Common_Branch/66</link>
<description>&lt;p&gt;Imagine you have a repository. At time t&lt;sub style=&quot;font-size: 70%;&quot;&gt;0&lt;/sub&gt; someone copies the &lt;em&gt;code&lt;/em&gt; from the repository, starts another repository from there, and commences development. You also continue development. At time t you want to pull in the changes the other guy has made.&lt;/p&gt;
&lt;p&gt;One approach could be you simply merge other guys code into yours with one big commit calculated from time t&lt;sub style=&quot;font-size: 70%;&quot;&gt;0&lt;/sub&gt;. Now suppose you want to keep other guy&amp;#8217;s history from t&lt;sub style=&quot;font-size: 70%&quot;&gt;0&lt;/sub&gt; on, or even worse, you want to pull only &lt;em&gt;some&lt;/em&gt; changes &lt;em&gt;and&lt;/em&gt; you want to push some of your changes to other guy.&lt;/p&gt;
&lt;p&gt;This is a true story. It all started with &lt;acronym title=&quot;Crappy Version System&quot;&gt;&lt;span class=&quot;caps&quot;&gt;CVS&lt;/span&gt;&lt;/acronym&gt;. A webapp was developed, cloned and branched. Now there are 4 of them, mostly the same, but subtly different, and each with it&amp;#8217;s own &lt;span class=&quot;caps&quot;&gt;CVS&lt;/span&gt; repo. Each one at some point in time is identical to another, but the history behind those points in time are different, thanks to copy and commit cloning.&lt;/p&gt;
&lt;p&gt;So after converting the &lt;span class=&quot;caps&quot;&gt;CVS&lt;/span&gt; to Darcs, I came up with a way of tricking darcs into treating time t&lt;sub style=&quot;font-size: 70%&quot;&gt;0&lt;/sub&gt; in each repository as the same t&lt;sub style=&quot;font-size: 70%;&quot;&gt;0&lt;/sub&gt;, thus enabling cross-pollination, and here I describe that method.&lt;/p&gt;
&lt;p&gt;First you find t&lt;sub style=&quot;font-size: 70%&quot;&gt;0&lt;/sub&gt;, and tag liberally. By liberally I mean twice. I&amp;#8217;ll explain why later. Of course you put the same two tags on both repos, both at the same point in time. Then you do a &lt;code&gt;darcs opt --checkpoint&lt;/code&gt; on each so you can do a partial get on them.&lt;/p&gt;
&lt;p&gt;Now you have to decide which repo you&amp;#8217;re going to keep, and which one you are bringing in. You probably want to keep the one with past history, and bring in the one that did copy and commit cloning. Do a &lt;code&gt;darcs get --partial&lt;/code&gt; on each repo, keeping track of which is what. I like to use &lt;code&gt;a&lt;/code&gt; for the destination, and &lt;code&gt;b&lt;/code&gt; for the bad repo.&lt;/p&gt;
&lt;p&gt;&lt;ins&gt;&lt;strong&gt;Edit&lt;/strong&gt;: The below paragraph is a bit confusing. Keep in mind that to make &lt;code&gt;b&lt;/code&gt; think it&amp;#8217;s &lt;code&gt;a&lt;/code&gt;, you just replace @b@&amp;#8217;s guts with those of &lt;code&gt;a&lt;/code&gt;, but this only works for the partial &lt;em&gt;at&lt;/em&gt; time t&lt;sub style=&quot;font-size: 70%&quot;&gt;0&lt;/sub&gt;. So we make a snapshot for reference, and then pull in @b@&amp;#8217;s downstream stuff (because we can&amp;#8217;t do this after &lt;code&gt;b&lt;/code&gt; thinks it&amp;#8217;s &lt;code&gt;a&lt;/code&gt;).&lt;/ins&gt;&lt;/p&gt;
&lt;p&gt;Now go into &lt;code&gt;b/_darcs&lt;/code&gt; and we&amp;#8217;ll play around with these guts to make it think it&amp;#8217;s &lt;code&gt;a&lt;/code&gt;, &lt;strong&gt;but&lt;/strong&gt; we want it to have it&amp;#8217;s future patches first. So we take a snapshot before pulling the other stuff. I just made a &lt;code&gt;temp&lt;/code&gt; directory and did &lt;code&gt;cp -r inv* patches temp&lt;/code&gt;, these are the three things in the &lt;code&gt;_darcs&lt;/code&gt; directory we care about. Here&amp;#8217;s where the liberal tagging comes in, the partial at the later tag only depends on the first tag, so that makes your inventory and patches much simpler. Now you&amp;#8217;re ready to pull in all the subsequent patches from the cloned branch.&lt;/p&gt;
&lt;p&gt;Once that&amp;#8217;s done, you go back into &lt;code&gt;b/_darcs&lt;/code&gt;, this time you take anything in &lt;code&gt;temp/patches&lt;/code&gt; and &lt;code&gt;temp/inventories&lt;/code&gt; and remove the corresponding files from &lt;code&gt;patches&lt;/code&gt; and &lt;code&gt;inventories&lt;/code&gt;. Then you replace those files with the files from &lt;code&gt;a/_darcs/{inventories,patches}&lt;/code&gt;. These two steps I accomplish like so:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ls temp/inventories | while read i; do rm inventories/$i; done&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ls temp/patches | while read i; do rm patches/$i; done&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;for f in inventories patches; do cp ../../a/_darcs/$f/* $f; done&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;One last step remains. Now you edit &lt;code&gt;inventory&lt;/code&gt; and replace that very first patch number, the one that&amp;#8217;s a tag, with the one that&amp;#8217;s in the inventory file from &lt;code&gt;a&lt;/code&gt;. Now &lt;code&gt;b&lt;/code&gt; effectively has the exact same past history as &lt;code&gt;a&lt;/code&gt;, and has all it&amp;#8217;s future patches, and now you can share between your repo and other guy&amp;#8217;s repo freely.&lt;/p&gt;
&lt;p&gt;One might think this is an uncommon situation, but I can&amp;#8217;t help but think it&amp;#8217;s more common than I think&amp;#8230; Hopefully this guide will save others the headache of trying to wrap their minds around the darcs inner guts, as well as save me some headache should I ever encounter this again (which I&amp;#8217;m pretty sure I will, in only a few weeks!).&lt;/p&gt;

&lt;a href=&quot;/blog/show/66#comment&quot;&gt;0 comments&lt;/a&gt;
</description>
<pubDate>Wed, 27 Feb 2008 11:06:26 +0000</pubDate>
<guid>http://von.fugal.net/blog/show/66</guid>
<category>darcs</category>
<category>programming</category>
<category>annoyances</category>
<category>work</category>
<category>tricks</category>
<category>hacks</category>
</item>
<item>
<title>Some _Times_ You Just Want _Things_</title>
<author>von@fugal.net (Von Fugal)</author>
<link>http://von.fugal.net/blog/show/Some__times__You_Just_Want__things_/56</link>
<description>&lt;p&gt;Working on an &lt;span class=&quot;caps&quot;&gt;AES&lt;/span&gt; implementation in ruby, I&amp;#8217;ve had many occasion to do:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;n.times {|i| some calculations based on i}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m sure many of you have used the &lt;code&gt;Integer#times&lt;/code&gt; method much to your glee. I&amp;#8217;m sure many of you have also had  the occasion where you realize that you want those resultant calculations to end up in an array of some sort. At this point you have two options: create an array before hand and &lt;code&gt;&amp;lt;&amp;lt;&lt;/code&gt; those results in, or change your iterator to &lt;code&gt;(0...n).map {|i| ...}&lt;/code&gt;. Both options are severely lacking in taste, &lt;span class=&quot;caps&quot;&gt;IMO&lt;/span&gt;. So I came up with a third option. Enter &lt;code&gt;Integer#things&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ary = n.things {|i| ...}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Notice how the syntax here remains consistent with the semantics. Before you wanted to do something n times. Here you want the same, but you want to store the results, you want n results, or n things.&lt;/p&gt;
&lt;p&gt;Don&amp;#8217;t get me wrong, I love &lt;code&gt;Range&lt;/code&gt; and it certainly has it&amp;#8217;s place. I would never argue that &lt;code&gt;26.things { make a letter }&lt;/code&gt; is a better approach than &lt;code&gt;('a'..'z') { just have your letter already }&lt;/code&gt;. Like I said, it&amp;#8217;s about semantics, do you really want that range or is it more about the number of things? And as we all know deep down, the syntactics should match the semantics wherever possible.&lt;/p&gt;
&lt;p&gt;So here is my implementation for &lt;code&gt;Integer#things&lt;/code&gt; and I really hope something like this becomes included in future ruby.&lt;/p&gt;
@&lt;pre&gt;
class Integer
def things &amp;amp;b
b ||= proc {|i| i}
ary = []
times do |i|
ary &amp;lt;&amp;lt; yield(i)
end
ary
end
end
&lt;/pre&gt;@

&lt;a href=&quot;/blog/show/56#comment&quot;&gt;0 comments&lt;/a&gt;
</description>
<pubDate>Wed, 16 Jan 2008 10:39:32 +0000</pubDate>
<guid>http://von.fugal.net/blog/show/56</guid>
<category>ruby</category>
<category>annoyances</category>
<category>programming</category>
<category>fun</category>
</item>
<item>
<title>Rails :memory: revisited</title>
<author>von@fugal.net (Von Fugal)</author>
<link>http://von.fugal.net/blog/show/Rails_Memory_Revisited/53</link>
<description>&lt;p&gt;As I was creating a new rails app, I used &lt;a href=&quot;http://von.fugal.net/blog/show/Rails_Memory_Testing_In_Sqlite/48&quot;&gt;this&lt;/a&gt; previous post of mine to set up the in memory database. Well it&amp;#8217;s time for an update. Apparently now the rails &lt;code&gt;config/environments/*.rb&lt;/code&gt; are run in the context of &lt;code&gt;Rails::Initializer&lt;/code&gt;. So instead of creating that context as in the previous post, you simply do:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;pre&amp;gt;
alias initialize_database_old initialize_database
def initialize_database *args
  initialize_database_old
  load &quot;#{RAILS_ROOT}/db/schema.rb&quot;
end&amp;lt;/pre&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;a href=&quot;/blog/show/53#comment&quot;&gt;0 comments&lt;/a&gt;
</description>
<pubDate>Sun, 02 Dec 2007 22:14:22 +0000</pubDate>
<guid>http://von.fugal.net/blog/show/53</guid>
<category>programming</category>
<category>ruby</category>
<category>annoyances</category>
<category>rails</category>
</item>
<item>
<title>Walls and Blocks and Beasts! Oh My!</title>
<author>von@fugal.net (Von Fugal)</author>
<link>http://von.fugal.net/blog/show/Walls_And_Blocks_And_Beasts_Oh_My/52</link>
<description>&lt;p&gt;Some people were poking around for the beast game on #utah today. So I dug up &lt;a href=&quot;http://von.fugal.net/code/beast&quot;&gt;ye olde code&lt;/a&gt; and got it to compile without so much as installing some libs and adding a #include. That&amp;#8217;s promising, I haven&amp;#8217;t touched that code in 4+ years. Anyway it compiles but when you run it the screen is all garbage. #utah says it probably has to do with &lt;acronym title=&quot;Screen Font Map&quot;&gt;sfm&lt;/acronym&gt;s. I don&amp;#8217;t have a hint of time to do anything with it right now, but here I post it anyway in a darcs repo for the whole world to enjoy.&lt;/p&gt;
&lt;p&gt;Some history on the project, you can stop reading now if you hate history. This was the first major thing I ever worked on. Before this it was writing a few graphics routines in &lt;span class=&quot;caps&quot;&gt;BASIC&lt;/span&gt; for my friends game &amp;#8220;Target&amp;#8221;. It was then I drew the best ever 8&amp;#215;8 pixel rendition of an angry green blob. Wish I still had that&amp;#8230; Prodding the time machine along&amp;#8230; My brother &lt;a href=&quot;http://jacob.fugal.net&quot;&gt;Jacob&lt;/a&gt; and I set out to clone our good friend beast around 1997-8 in C++. He did all the work at first, with me watching intently and asking such questions as &amp;#8220;what does that do?&amp;#8221; and &amp;#8220;why do it like that?&amp;#8221;. Before the end I was writing as much code as he (or at least so I remember it). We had a good ol&amp;#8217; time playing it. When I returned from my mission in 2003 I did a rewrite to port it to linux using ncurses. At some point I also added some fancy self-preservation AI to the beasts. I&amp;#8217;m really not sure if the AI stuff is in this version of the code I dug up; I hope it is.&lt;/p&gt;

&lt;a href=&quot;/blog/show/52#comment&quot;&gt;1 comment&lt;/a&gt;
</description>
<pubDate>Fri, 05 Oct 2007 19:42:55 +0000</pubDate>
<guid>http://von.fugal.net/blog/show/52</guid>
<category>programming</category>
<category>darcs</category>
<category>linux</category>
<category>C++</category>
<category>cool</category>
<category>beast</category>
</item>
<item>
<title>Rails and SQLite3: Default Values</title>
<author>von@fugal.net (Von Fugal)</author>
<link>http://von.fugal.net/blog/show/Rails_And_Sqlite3_Default_Values/49</link>
<description>&lt;p&gt;Here&amp;#8217;s another rails fix. This one is for SQLite3 &amp;gt;= 3.3.8. SQLite decided to return sql strings for the default values shown in table definitions. This broke rails, the rails people got mad and won&amp;#8217;t introduce a workaround. Well here&amp;#8217;s my workaround.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sqlite_fix.rb&lt;/code&gt;:&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;module ActiveRecord
  module ConnectionAdapters
    class SQLiteAdapter &amp;lt; AbstractAdapter
      def columns table_name, name=nil
        table_structure(table_name).map do |field|
          /^'?(.*)'?$/.match field['dflt_value']
          field['dflt_value'] = $1
          SQLiteColumn.new(field['name'], field['dflt_value'], field['type'], field['notnull'] == &quot;0&quot;)
        end
      end
    end
  end
end&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;
Include it at the end of &lt;code&gt;environment.rb&lt;/code&gt;. That&amp;#8217;s it!

&lt;a href=&quot;/blog/show/49#comment&quot;&gt;0 comments&lt;/a&gt;
</description>
<pubDate>Fri, 10 Aug 2007 16:30:52 +0000</pubDate>
<guid>http://von.fugal.net/blog/show/49</guid>
<category>programming</category>
<category>annoyances</category>
<category>troubleshooting</category>
<category>sqlite3</category>
<category>ruby</category>
<category>rails</category>
</item>
<item>
<title>Rails :memory: testing in SqLite</title>
<author>von@fugal.net (Von Fugal)</author>
<link>http://von.fugal.net/blog/show/Rails_Memory_Testing_In_Sqlite/48</link>
<description>&lt;p&gt;I wanted to get that nifty :memory: db thing working for the test database in Rails. There are a sparse few articles floating around telling you how to do this. All of them, &lt;span class=&quot;caps&quot;&gt;IMHO&lt;/span&gt;, are kinda ugly, or at least not-so-elegant. Here&amp;#8217;s my answer, which took a lot of digging around in the inner workings of rails to come by.&lt;/p&gt;
&lt;p&gt;First, do what everyone else tells you, put this in your &lt;code&gt;config/database.yml&lt;/code&gt;:&lt;br /&gt;
&lt;code&gt;
&amp;lt;pre&amp;gt;
test:
  adapter: sqlite3
  database: &quot;:memory:&quot;
&amp;lt;/pre&amp;gt;
&lt;/code&gt;&lt;br /&gt;
Once you got that, you have to have some way of loading the schema into your memory db every time you run the test. I found that the best place to do this is in &lt;code&gt;config/environments/test.rb&lt;/code&gt;. If you have an even better place, please let me know.&lt;/p&gt;
&lt;p&gt;At first I thought I could just &lt;code&gt;load &quot;#{RAILS_ROOT}/db/schema.rb&quot;&lt;/code&gt; and be done with it. Alas, at this point there is no established connection to the db. So we have to modify things in such a way that this cute little command will get run just after establishing the db connection, but before the db is accessed. I did it like so:&lt;br /&gt;
&lt;code&gt;
&amp;lt;pre&amp;gt;
module Rails
  class Initializer
    alias initialize_database_old initialize_database
    def initialize_database
      initialize_database_old
      load &quot;#{RAILS_ROOT}/db/schema.rb&quot;
    end
  end
end
&amp;lt;/pre&amp;gt;
&lt;/code&gt;&lt;br /&gt;
Then don&amp;#8217;t forget to &lt;code&gt;rake db:schema:dump&lt;/code&gt; before running &lt;code&gt;rake test&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;There&amp;#8217;s probably other things you could do, like use &lt;code&gt;ActiveRecord::Base.establish_connection&lt;/code&gt; instead of &lt;code&gt;Initializer.initialize_database&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I break the above code block into &lt;code&gt;lib/memdb.rb&lt;/code&gt; and simply require that inside of &lt;code&gt;config/environments/test.rb&lt;/code&gt;. I tried to just add a metaclass to the &lt;code&gt;config&lt;/code&gt; variable you see in &lt;code&gt;test.rb&lt;/code&gt; but that is apparently some kind of impostor, because it didn&amp;#8217;t work. Anyway, armed with this knowledge someone could probably make a pretty sane plugin to cleanly bring you :memory: testing.&lt;/p&gt;

&lt;a href=&quot;/blog/show/48#comment&quot;&gt;0 comments&lt;/a&gt;
</description>
<pubDate>Sat, 04 Aug 2007 21:58:37 +0000</pubDate>
<guid>http://von.fugal.net/blog/show/48</guid>
<category>annoyances</category>
<category>ruby</category>
<category>programming</category>
<category>rails</category>
</item>
<item>
<title>Acts as Dead?</title>
<author>von@fugal.net (Von Fugal)</author>
<link>http://von.fugal.net/blog/show/Acts_As_Dead/45</link>
<description>&lt;p&gt;Been a while&amp;#8230; So my blog was broken just now, not sure for how long. Not more than a month I think. The problem was in the acts_as_taggable plugin, which rumor has it is dead. For now I will still use it, and describe the fix in case it also is broken for you.&lt;br /&gt;
The problem is in the join table. The geniuses decided to make the join table &amp;lt;tag class&amp;gt;&lt;em&gt;&amp;lt;taggable class&amp;gt;. This is backwards from the regular has_and_belongs_to_many convention in activerecord. Somewhere, somehow, this backwardsness was reversed. I had it using it&amp;#8217;s default join table before (tags_posts) and it broke as now it&amp;#8217;s looking for posts&lt;/em&gt;tags. So I add an option to the call:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;acts_as_taggable :join_table =&amp;gt; :tags_posts&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I suppose I could have changed the table name, but at least this way it will never (hopefully) break again. I&amp;#8217;m not quite sure how this default behavior changed in the first place.&lt;/p&gt;

&lt;a href=&quot;/blog/show/45#comment&quot;&gt;0 comments&lt;/a&gt;
</description>
<pubDate>Wed, 04 Jul 2007 13:25:41 +0000</pubDate>
<guid>http://von.fugal.net/blog/show/45</guid>
<category>annoyances</category>
<category>blog</category>
<category>rails</category>
<category>programming</category>
</item>
<item>
<title>Stick it to 'The Man'</title>
<author>von@fugal.net (Von Fugal)</author>
<link>http://von.fugal.net/blog/show/Stick_It_To_The_Man/43</link>
<description>&lt;p&gt;In a world frought with restrictive employment agreements how is a prospective employee to protect himself? I believe the reason there are so many undesirable terms is because job seekers are too eager for that next big break or that shiny big company they can put on their resumé. If the companies couldn&amp;#8217;t get any bites on these contracts then they would stop mandating them. It&amp;#8217;s up to us as the fresh meat on the market to take a stand and decline oppressive agreements. Patience is key. There are plenty of jobs out there and with enough searching and patience I believe you can find a mode of employ that&amp;#8217;s not only unrestrictive but that&amp;#8217;s mutually beneficial. Seek out that employer you can build a symbiotic relationship with. Work with someone whose goals and values you can make your own. You will be much happier. As such you will be more productive and make your employer happier as well. Dare to love your job, not just what you do, but how you do it and under what terms as well.&lt;/p&gt;

&lt;a href=&quot;/blog/show/43#comment&quot;&gt;0 comments&lt;/a&gt;
</description>
<pubDate>Fri, 15 Dec 2006 00:22:37 +0000</pubDate>
<guid>http://von.fugal.net/blog/show/43</guid>
<category>computers</category>
<category>programming</category>
<category>cs404</category>
</item>
<item>
<title>Why Software Businesses Fail</title>
<author>von@fugal.net (Von Fugal)</author>
<link>http://von.fugal.net/blog/show/Why_Software_Businesses_Fail/42</link>
<description>&lt;p&gt;The economics of software and all things digital are fiercely different from standard physical economics. The new economy is radically different because of the radically different nature of the commodities. In the physical economy even the most abundant commodities can only be sold once by a particular entity. If I have a truckload of dirt and sell it to a landfill, my dirt is gone. If I have a software product I can sell it time and time again and still have the product. This sounds great, right? What a wonderful and magical thing I have! There&amp;#8217;s a problem. Before when I sold my dirt it was gone. I had to get more dirt to sell to someone else. The buyer of my first load could sell it to my next customer and undermine my market, but I&amp;#8217;m not worried about that because that consumer &amp;#8216;consumes&amp;#8217; the dirt and can no longer reuse it. However, when I sell my software the customer can use, reuse, and even redistribute the software indefinately. We have producers but nothing is consumed!  This notion of consumers is so fundemental to the physical economy it&amp;#8217;s no wonder the ramifications have continued to baffle business. Instead of trying to understand the fundemental differences, business has tried with only limited success to apply artificial barriers and rules to make the new system behave like the old. The fathers of Free software and &lt;span class=&quot;caps&quot;&gt;OSS&lt;/span&gt; understood these differences early on and see the artificial modifications as a gross perversion of a wonderful new thing. There&amp;#8217;s only one missing piece to this new economy. In an economy, work is performed, things traded, and both yourself and society are benefited. Again imagine I have dirt, this time it&amp;#8217;s magical digital dirt. Once I have the dirt everyone potentially has the dirt also. I cannot sell the dirt, everyone has it! Some have tried making new dirt to turn a profit. So I make some green dirt in hopes of making some money from it. But again, I can&amp;#8217;t sell the dirt because once I make it, everyone has it already! Society advances but leaves me behind. If I am to help myself in this brave new world I must abandon the idea that the dirt has any value in and of itself. If I make new dirt it&amp;#8217;s because I &lt;em&gt;need&lt;/em&gt; it, not because it can be sold. Some companies partially embrace the idea and take red dirt and blue dirt made by others and combine it to make purple dirt. But the same fallacy holds, they cannot sell the dirt! The only thing to do is to &lt;em&gt;use&lt;/em&gt; the dirt. Let&amp;#8217;s shift gears now and imagine paint is free and there&amp;#8217;s an unlimited supply. To sell the paint would be silly, but professional painters can still make money putting logos on buildings and signs, applying the paint to roadways and fences. Say I&amp;#8217;m a painter and a customer wants her fence to glow in the dark. There is no glow in the dark paint. I can develop the paint myself or I can pay a developer to get me the paint. The only catch is I must abandon all sense of ownership of the new glowing paint, as must the developer if I hired one. Whether I&amp;#8217;m the developer or the painter (or both) I put in the effort to make glow in the dark paint to please my customers, &lt;em&gt;not&lt;/em&gt; to have the paint. This is the fundemental ideal that must be applied to this magical world of 1&amp;#8217;s and 0&amp;#8217;s in order to have lasting success. You must use, modify, and create software for the sole purpose of pleasing your customers. If you try to make and sell one product you will be left behind in the blink of an eye.&lt;/p&gt;

&lt;a href=&quot;/blog/show/42#comment&quot;&gt;2 comments&lt;/a&gt;
</description>
<pubDate>Thu, 30 Nov 2006 10:24:48 +0000</pubDate>
<guid>http://von.fugal.net/blog/show/42</guid>
<category>cs404</category>
<category>programming</category>
<category>open source</category>
<category>computers</category>
</item>
<item>
<title>Ruby GTK Blocks</title>
<author>von@fugal.net (Von Fugal)</author>
<link>http://von.fugal.net/blog/show/Ruby_Gtk_Blocks/41</link>
<description>&lt;p&gt;As I was exploring gtk in ruby I found myself frustrated with the inability to create nested widgets in equally nested code. Such as:&lt;br /&gt;
&lt;pre&gt;&lt;br /&gt;
$main = Gtk::Window.new&lt;br /&gt;
$main &amp;lt;&amp;lt; Gtk::HBox.new do |b|&lt;br /&gt;
  b &amp;lt;&amp;lt; Gtk::Button.new(&amp;#8220;click me&amp;#8221;)&lt;br /&gt;
  b &amp;lt;&amp;lt; Gtk::VBox.new do |v|&lt;br /&gt;
    &amp;#8230; etc etc&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;No problem, eigenclasses to the rescue! I just add this simple thing (to a lib or just the beginning of my file):&lt;br /&gt;
&lt;pre&gt;&lt;br /&gt;
class &amp;lt;&amp;lt; Gtk::Widget&lt;br /&gt;
  def new *args, &amp;amp;block&lt;br /&gt;
    x = super&lt;br /&gt;
    yield x if block&lt;br /&gt;
    x&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;/pre&gt;&lt;br /&gt;
That&amp;#8217;s all, now you can use good ol&amp;#8217; ruby blocks to make &lt;span class=&quot;caps&quot;&gt;GUI&lt;/span&gt; programming less obscene.&lt;/p&gt;

&lt;a href=&quot;/blog/show/41#comment&quot;&gt;1 comment&lt;/a&gt;
</description>
<pubDate>Tue, 07 Nov 2006 01:51:29 +0000</pubDate>
<guid>http://von.fugal.net/blog/show/41</guid>
<category>programming</category>
<category>annoyances</category>
<category>ruby</category>
</item>
<item>
<title>To ad or not to ad</title>
<author>von@fugal.net (Von Fugal)</author>
<link>http://von.fugal.net/blog/show/To_Ad_Or_Not_To_Ad/38</link>
<description>&lt;p&gt;I&amp;#8217;ve often thought about building some killer web app and using advertising and/or affiliate programs to make money off of it. As a user I know how annoying ad-driven applications tend to be. What if the add&amp;#8217;s were only relevent to the content of the application? What if they were only presented in a contextual, non-pervasive way? There seems to be a thin line between acceptable ads and annoyances. Unfortunately it&amp;#8217;s hard to tell where that line lies. I should think that I could do better than the blatently annoying, but judging by the very small number of not annoying ad-revenue sites perhaps it&amp;#8217;s a tough egg to crack. So do you go with a subscription based plan instead? Would people rather pay a fee or see some adds? On the one hand I like the idea of a free service, even if free means a few ads. On the other hand &amp;#8216;spam&amp;#8217; gives me the willies and I&amp;#8217;m not always sure how much better I feel about pay-per-click. Fortunately at the moment I have no killer web app and so the problem lies dormant. Maybe someday there will be a better business model that won&amp;#8217;t divide me so.&lt;/p&gt;

&lt;a href=&quot;/blog/show/38#comment&quot;&gt;0 comments&lt;/a&gt;
</description>
<pubDate>Thu, 14 Sep 2006 23:55:03 +0000</pubDate>
<guid>http://von.fugal.net/blog/show/38</guid>
<category>cs404</category>
<category>web</category>
<category>programming</category>
</item>
<item>
<title>IMMS Once More</title>
<author>von@fugal.net (Von Fugal)</author>
<link>http://von.fugal.net/blog/show/Imms_Once_More/33</link>
<description>&lt;p&gt;I once again have a working &lt;a href=&quot;http://www.luminal.org/wiki/index.php/IMMS/IMMS&quot;&gt;&lt;span class=&quot;caps&quot;&gt;IMMS&lt;/span&gt;&lt;/a&gt; system. (Finally!) I&amp;#8217;m using &lt;a href=&quot;http://www.musicpd.org/&quot;&gt;&lt;span class=&quot;caps&quot;&gt;MPD&lt;/span&gt;&lt;/a&gt; for the player, my own &lt;a href=&quot;http://von.fugal.net/code/imms/imms.rb&quot;&gt;imms.rb&lt;/a&gt; to talk to &lt;span class=&quot;caps&quot;&gt;IMMS&lt;/span&gt;, and a history/queue wrapper client to turn MPD&amp;#8217;s playlist into&amp;#8212;you guessed it&amp;#8212;a history (before current song) and queue (after current song).&lt;/p&gt;
&lt;p&gt;This has the downside that your playlist isn&amp;#8217;t a comprehensive playlist. So if you use a client where you would select a song you wanted to hear from a playlist you might not find it. Not to mention that would also mess up the &lt;span class=&quot;caps&quot;&gt;IMMS&lt;/span&gt; behaviour.&lt;/p&gt;
&lt;p&gt;My solution is &lt;a href=&quot;http://von.fugal.net/code/mpremote/mpremote.rb&quot;&gt;mpremote.rb&lt;/a&gt; (which also needs &lt;a href=&quot;http://von.fugal.net/code/livesearch/livesearch.rb&quot;&gt;livesearch.rb&lt;/a&gt;) to quickly find songs from the &lt;em&gt;library&lt;/em&gt; and enqueue (enter) or jump-to (&lt;span class=&quot;caps&quot;&gt;END&lt;/span&gt;) any song or group of songs I feel like listening to.&lt;/p&gt;
&lt;p&gt;Eventually I&amp;#8217;ll make a qt or gtk version of mpremote to be more like xmmsfind_remote (if you still use xmms I highly recommend it). Hans and I are also currently conspiring to make an even better &lt;span class=&quot;caps&quot;&gt;MPD&lt;/span&gt; that will queue and possibly talk to imms itself.&lt;/p&gt;

&lt;a href=&quot;/blog/show/33#comment&quot;&gt;4 comments&lt;/a&gt;
</description>
<pubDate>Sat, 15 Jul 2006 12:22:10 +0000</pubDate>
<guid>http://von.fugal.net/blog/show/33</guid>
<category>ruby</category>
<category>entertainment</category>
<category>computers</category>
<category>programming</category>
<category>music</category>
<category>imms</category>
</item>
<item>
<title>SVWow</title>
<author>von@fugal.net (Von Fugal)</author>
<link>http://von.fugal.net/blog/show/Svwow/30</link>
<description>&lt;p&gt;I was doing some research into &lt;acronym title=&quot;Scalable Vector Graphics&quot;&gt;&lt;span class=&quot;caps&quot;&gt;SVG&lt;/span&gt;&lt;/acronym&gt; when I stumbled across &lt;a href=&quot;http://www.croczilla.com/svg/samples/svgtetris/svgtetris.svg&quot;&gt;this&lt;/a&gt;. Pretty darn cool. I had no idea &lt;span class=&quot;caps&quot;&gt;SVG&lt;/span&gt; was that powerful.&lt;/p&gt;

&lt;a href=&quot;/blog/show/30#comment&quot;&gt;0 comments&lt;/a&gt;
</description>
<pubDate>Thu, 01 Jun 2006 18:25:04 +0000</pubDate>
<guid>http://von.fugal.net/blog/show/30</guid>
<category>computers</category>
<category>entertainment</category>
<category>programming</category>
</item>
<item>
<title>no such file to load -- mkmf</title>
<author>von@fugal.net (Von Fugal)</author>
<link>http://von.fugal.net/blog/show/No_Such_File_To_Load__Mkmf/28</link>
<description>&lt;p&gt;Argh, for probably the 3rd time now I found myself trying in vain for some time to hunt down that blasted &lt;code&gt;mkmf.rb&lt;/code&gt;. For future reference, and for anyone else searching, here it is.&lt;/p&gt;
&lt;p&gt;On debian and debian based distros (ubuntu, demudi, etc) to get mkmf.rb for building those neato goodies, just &lt;code&gt;apt-get install ruby-dev&lt;/code&gt;.&lt;/p&gt;

&lt;a href=&quot;/blog/show/28#comment&quot;&gt;0 comments&lt;/a&gt;
</description>
<pubDate>Tue, 16 May 2006 00:37:00 +0000</pubDate>
<guid>http://von.fugal.net/blog/show/28</guid>
<category>ruby</category>
<category>programming</category>
<category>debian</category>
<category>computers</category>
</item>
<item>
<title>Rails Ajax Slideshow</title>
<author>von@fugal.net (Von Fugal)</author>
<link>http://von.fugal.net/blog/show/Rails_Ajax_Slideshow/27</link>
<description>&lt;p&gt;I was looking for something else, but stumbled across &lt;a href=&quot;http://mir.aculo.us/stuff/COR_20060413_RailsAjax.pdf&quot; title=&quot;Rails Ajax&quot; alt=&quot;something cool&quot;&gt;this&lt;/a&gt;. (praise google!) It&amp;#8217;s pdf slides for a pretty awesome looking presentation on rails and ajax. Just looking through the slides opened my eyes to some pretty neat stuff I had no clue about. It&amp;#8217;s got some funny pictures, too. It would be nice to see the actual presentation that went with the slides.&lt;/p&gt;
&lt;p&gt;My favorite lesson from it: I didn&amp;#8217;t have a clue about rjs templates and returning javascript for ajax calls. I&amp;#8217;m excited to put these to use.&lt;/p&gt;

&lt;a href=&quot;/blog/show/27#comment&quot;&gt;0 comments&lt;/a&gt;
</description>
<pubDate>Wed, 03 May 2006 10:07:43 +0000</pubDate>
<guid>http://von.fugal.net/blog/show/27</guid>
<category>rails</category>
<category>web</category>
<category>programming</category>
<category>ruby</category>
<category>ajax</category>
</item>
<item>
<title>Darcs and Rails</title>
<author>von@fugal.net (Von Fugal)</author>
<link>http://von.fugal.net/blog/show/Darcs_And_Rails/15</link>
<description>&lt;p&gt;I use &lt;a href=&quot;http://darcs.net&quot; alt=&quot;Darcs homepage&quot;&gt;darcs&lt;/a&gt; in my rails apps. The combination of the generator creating several files at a time and not including the logs in the repo makes adding the new files cumbersome after a generate.&lt;/p&gt;
&lt;p&gt;No worries! Just add &lt;code&gt;^log(/|$)&lt;/code&gt; to the &lt;code&gt;_darcs/prefs/boring&lt;/code&gt; file. Now you can &lt;code&gt;darcs add -r *&lt;/code&gt; after generates and rest easy.&lt;/p&gt;

&lt;a href=&quot;/blog/show/15#comment&quot;&gt;0 comments&lt;/a&gt;
</description>
<pubDate>Thu, 20 Apr 2006 14:50:41 +0000</pubDate>
<guid>http://von.fugal.net/blog/show/15</guid>
<category>ruby</category>
<category>darcs</category>
<category>programming</category>
<category>blog</category>
<category>web</category>
</item>
<item>
<title>Quodlibet idiosyncrasies</title>
<author>von@fugal.net (Von Fugal)</author>
<link>http://von.fugal.net/blog/show/Quodlibet_Idiosyncrasies/14</link>
<description>&lt;p&gt;I&amp;#8217;ve been using quodlibet for a couple weeks now. I actually was introduced to it by my brother Hans some time ago, but it lacked an imms interface so I clung to xmms. Subsequently, xmms managed, in it&amp;#8217;s awesome ability to annoy, to drive me away once and for all.&lt;/p&gt;
&lt;p&gt;Using quodlibet I now have a couple fun projects ahead of me. First is writing an imms plugin for it. Next is fixing some quirky behaviour involving the play queue. Queue is probably the most awesome media player feature since random/shuffle. It allows you to add specific songs to come next without muddling around with the playlist itself&amp;#8212;the playlist can happily remain in random mode or any other mode you can fathom.&lt;/p&gt;
&lt;p&gt;Now I describe those queue quirks. If someone wants to tackle them before I get to it, go ahead. Just let me know so I don&amp;#8217;t duplicate a work in progress. ;) Both issues seem to arise from the fact that a song in queue is a seperate instance that != the same song in list. This causes problem 1) the playlist doesn&amp;#8217;t show the current song as playing or jump to it. Problem 2) likewise, when quiting quodlibet, the queue state, the playlist state, and the current playing song are all saved. However, upon resuming the current song, if derived from queue, fails to register as anything and doesn&amp;#8217;t play. I assume this is because song_from_queue != anything_in_list.&lt;/p&gt;

&lt;a href=&quot;/blog/show/14#comment&quot;&gt;0 comments&lt;/a&gt;
</description>
<pubDate>Mon, 17 Apr 2006 12:02:00 +0000</pubDate>
<guid>http://von.fugal.net/blog/show/14</guid>
<category>programming</category>
<category>entertainment</category>
<category>troubleshooting</category>
<category>linux</category>
<category>computers</category>
<category>music</category>
</item>
<item>
<title>RSS!</title>
<author>von@fugal.net (Von Fugal)</author>
<link>http://von.fugal.net/blog/show/Rss/12</link>
<description>&lt;p&gt;There it is! I got the rss up and running. http://von.fugal.net/blog/rss gives you a nice feed of the 10 most recent entries. You can also get a topic-wise feed by simply adding /&lt;topic&gt; to the end, or even a list of topics seperated by comma. e.g. von.fugal.net/blog/rss/linux,web&lt;/p&gt;
&lt;p&gt;Next task, fix the design!&lt;/p&gt;

&lt;a href=&quot;/blog/show/12#comment&quot;&gt;0 comments&lt;/a&gt;
</description>
<pubDate>Wed, 28 Sep 2005 15:03:00 +0000</pubDate>
<guid>http://von.fugal.net/blog/show/12</guid>
<category>blog</category>
<category>ruby</category>
<category>web</category>
<category>programming</category>
</item>
<item>
<title>BYU Wireless Authentication</title>
<author>von@fugal.net (Von Fugal)</author>
<link>http://von.fugal.net/blog/show/Byu_Wireless_Authentication/4</link>
<description>&lt;p&gt;The &lt;span class=&quot;caps&quot;&gt;BYU&lt;/span&gt; Wireless networks require authentication through a website everytime you connect and then some. This can be pretty annoying and slightly less than trivial to automate. So I took a quiet evening and wrote &lt;a href=&quot;http://von.fugal.net/linux/byuwireless.rb&quot; title=&quot;BYU Wireless Auth Script&quot;&gt;this script&lt;/a&gt; to handle authentication without the point-and-click hassle.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;byuwireless.rb&lt;/code&gt; reads in a &lt;a href=&quot;http://www.yaml.org&quot; title=&quot;YAML Home&quot;&gt;yaml&lt;/a&gt; configuration file that contains two elements and looks something like this:&lt;br /&gt;
&lt;pre&gt;&lt;br /&gt;
username: your username&lt;br /&gt;
password: your password&lt;br /&gt;
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;You can edit where it looks for this file in the script, but the default is &lt;code&gt;byuwireless.passwd&lt;/code&gt; in the current directory.&lt;/p&gt;
&lt;p&gt;The script is really only a shell of a ruby script. Most stuff is done through other tools like grep and wget invoked through backticks.&lt;/p&gt;

&lt;a href=&quot;/blog/show/4#comment&quot;&gt;0 comments&lt;/a&gt;
</description>
<pubDate>Thu, 26 May 2005 20:49:00 +0000</pubDate>
<guid>http://von.fugal.net/blog/show/4</guid>
<category>byu</category>
<category>linux</category>
<category>programming</category>
</item>
<item>
<title>Turning to the Dark Side</title>
<author>von@fugal.net (Von Fugal)</author>
<link>http://von.fugal.net/blog/show/Turning_To_The_Dark_Side/6</link>
<description>&lt;p&gt;I decided to give evilwm a try. It&amp;#8217;s a decent little manager. There were some things that I just couldn&amp;#8217;t live with and some I couldn&amp;#8217;t live without. Fortunately, evliwm is so small it lent itself readily to my hacking out the worst offenses. These included:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Raising a window anytime you move or resize it&amp;#8212;I love to be able to move windows underneath other windows.&lt;/li&gt;
	&lt;li&gt;Resizing behaviour&amp;#8212;It would jump the cursor to the corner of the window when resizing.&lt;/li&gt;
	&lt;li&gt;Directional and restrained resizement&amp;#8212;or lack thereof&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The foremost was fixed just by wraping the offending function call in my own &lt;code&gt;#ifdef RAISE_MOVE&lt;/code&gt; (two occurences). Whilst fixing the second, I took it a step further to fix the third, one I might not have thought feasable had I not been dipping in that code already. This direction resizing, for the curious, works by dividing the window into nine squares. Each square on the edge will resize in only that direction, including diagonal for corner boxes. My only remaining complaint is that it doesn&amp;#8217;t tile windows. &lt;strong&gt;Update: I have come to appreciate the more organic feeling of windows placed unprecisely&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Using evilwm has necesitated using a slough of auxilliary programs to do what my old wm (icewm) used to do for me&amp;#8212;shortcut keys being one&amp;#8212;and I&amp;#8217;ve come to think that auxilliary programs is really the way to go. &lt;code&gt;xbindkeys&lt;/code&gt; has handled shortcut keys nicely and even works with funky layouts like Khmer!&lt;/p&gt;
&lt;p&gt;Anyway, here is the &lt;a title=&quot;Evilwm Diff&quot; href=&quot;/linux/resize.diff&quot;&gt;diff&lt;/a&gt; to get windows that stay down and directional resizemennt with evilwm.&lt;/p&gt;

&lt;a href=&quot;/blog/show/6#comment&quot;&gt;0 comments&lt;/a&gt;
</description>
<pubDate>Thu, 28 Apr 2005 14:47:00 +0000</pubDate>
<guid>http://von.fugal.net/blog/show/6</guid>
<category>programming</category>
<category>linux</category>
</item>
<item>
<title>Java on Debian quick</title>
<author>von@fugal.net (Von Fugal)</author>
<link>http://von.fugal.net/blog/show/Java_On_Debian_Quick/2</link>
<description>&lt;ol&gt;
	&lt;li&gt;Download the &amp;#8220;Linux Binary&amp;#8221; j2se jdk from java.sun.org&lt;/li&gt;
	&lt;li&gt;Run the binary&lt;/li&gt;
	&lt;li&gt;mv the resulting jdk directory (e.g. jdk1.5.0) to /usr/local/lib (or /usr/lib if you prefer)&lt;/li&gt;
	&lt;li&gt;`ln -s /usr/local/lib/jdk1.5.0 /usr/local/lib/jdk`&lt;/li&gt;
	&lt;li&gt;Install java-virtual-machine-dummy and make /etc/java-vm look like this (3 lines): `/usr/local/lib/jdk/bin/java` `&lt;span class=&quot;caps&quot;&gt;COMPLIANT&lt;/span&gt;`&lt;/li&gt;
	&lt;li&gt;`update-alternatives &amp;#8212;config java`&lt;/li&gt;
	&lt;li&gt;`update-alternatives &amp;#8212;install javac javac /usr/local/lib/bin/javac 1 &amp;#8212;slave javac.1.gz javac.1.gz /usr/local/lib/jdk/man/man1/javac.1`&lt;/li&gt;
	&lt;li&gt;`update-alternatives &amp;#8212;config javac`&lt;/li&gt;
	&lt;li&gt;You might need to `ln -s /etc/alternatives/javac /usr/bin/javac`&lt;/li&gt;
&lt;/ol&gt;

&lt;a href=&quot;/blog/show/2#comment&quot;&gt;0 comments&lt;/a&gt;
</description>
<pubDate>Mon, 04 Oct 2004 09:58:00 +0000</pubDate>
<guid>http://von.fugal.net/blog/show/2</guid>
<category>linux</category>
<category>debian</category>
<category>programming</category>
</item>
</channel>
</rss>
