<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>Everything - chilts.org</title>
 
 <link href="http://chilts.org" />
 <updated>2012-05-22T13:37:04-07:00</updated>
 <id>http://chilts.org</id>
 <author>
   <name>Andrew Chilton</name>
   <email>andychilton@gmail.com</email>
 </author>


 <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/ChiltsOrg" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="chiltsorg" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
   <title>Using Queues in a State Machine</title>
   <link href="http://chilts.org/blog/using-async-queue-as-a-state-machine.html" />
   <updated>2012-05-07T00:00:00-07:00</updated>
   <id>http://chilts.org/blog/using-async-queue-as-a-state-machine</id>
   <content type="html">&lt;p&gt;Earlier today I finished a small little project which is an example program for &lt;a href='https://github.com/appsattic/node-awssum/'&gt;AwsSum&lt;/a&gt;. It&amp;#8217;s a program called &lt;a href='https://github.com/appsattic/node-awssum-scripts/blob/master/bin/amazon-s3-sync.js'&gt;amazon-s3-sync.js&lt;/a&gt; and it lives in my &lt;a href='https://github.com/appsattic/node-awssum-scripts/'&gt;node-awssum-scripts&lt;/a&gt; repo.&lt;/p&gt;

&lt;p&gt;Firstly, let me tell you what it does, then I&amp;#8217;ll tell you how it does it and after that what the next thing it will do is.&lt;/p&gt;

&lt;h2 id='syncing_your_buckets'&gt;Syncing your Buckets&lt;/h2&gt;

&lt;p&gt;Ok, imagine you have a bucket in Amazon S3 called &amp;#8216;my-photos&amp;#8217;. And on your laptop you have a directory called &amp;#8216;my-photos&amp;#8217;. What you want to do is sync those photos up to each other so that you have them on your laptop and in the cloud (using 99.9999% reliability). So let&amp;#8217;s run a command to do that:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ cd my-photos
$ amazon-s3-sync.js -b my-photos&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The program does two things and only two things (currently it only does one, but we&amp;#8217;ll come on to the 2nd thing later).&lt;/p&gt;

&lt;p&gt;The first thing it does is download any files you have in your bucket which you don&amp;#8217;t have on disk and saves them into your &amp;#8216;my-photos&amp;#8217; directory.&lt;/p&gt;

&lt;p&gt;The second thing it will do in the future is to upload any files you have on disk which you don&amp;#8217;t already have in S3.&lt;/p&gt;

&lt;p&gt;One thing it doesn&amp;#8217;t do is delete data, either in your bucket or on disk. That&amp;#8217;s a no-no and that&amp;#8217;s for you to do yourself.&lt;/p&gt;

&lt;p&gt;And there is one final thing which it explicitely does not do. If a file exists on disk AND in S3 and they are not the same (ie. different length or different MD5) the program tells you about it and DOES NOTHING AT ALL to fix it. That&amp;#8217;s your job! ;)&lt;/p&gt;

&lt;h2 id='how_does_it_do_it'&gt;How does it do it&lt;/h2&gt;

&lt;p&gt;The program consists only of an initial step and then five queues. The first step is to query S3 for all of the items it knows about in the bucket. This may consist of one or more requests since you only get items back in batches of 1000.&lt;/p&gt;

&lt;p&gt;Once we have the entire list we start shuffling those items around in queues. As I said, there are five queues:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&amp;quot;Check Item is Local&amp;quot; Queue - checks to see if the item has a corresponding file on disk
    &lt;ul&gt;
      &lt;li&gt;if so, then the item is pushed onto the &amp;quot;Check MD5s are the Same&amp;quot; Queue&lt;/li&gt;
      &lt;li&gt;if not, then push the item onto the &amp;quot;Check Local Dir Exists&amp;quot; Queue&lt;/li&gt;
      &lt;li&gt;Note: if it does exist but is of the wrong length, a message is given to a user to resolve the conflict&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&amp;quot;Check Local Dir Exists&amp;quot; Queue - just checks that directories exist for keys such as 'path/to/file.txt'
    &lt;ul&gt;
      &lt;li&gt;if it does exist, the item is pushed onto the &amp;quot;Check MD5's are the Same&amp;quot; Queue&lt;/li&gt;
      &lt;li&gt;if it doesn't the dir is created and the item pushed onto the &amp;quot;Create Tmp File&amp;quot; Queue&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&amp;quot;Check MD5s are the Same&amp;quot; Queue - checks that the MD5s are the same for the Key and the File
    &lt;ul&gt;
      &lt;li&gt;if so, then do nothing with the item (the item and file mirror each other)&lt;/li&gt;
      &lt;li&gt;if not, then inform the user to resolve the conflict&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&amp;quot;Create Tmp File&amp;quot; Queue - just create a tmp file in /tmp/ so that we can write to it when downloading the file
    &lt;ul&gt;
      &lt;li&gt;once created, the item is pushed onto the &amp;quot;For Download&amp;quot; Queue&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&amp;quot;For Download&amp;quot; Queue - downloads the item to a temporary file and renames it into place in your directory&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This may all sound a bit crazy, but there are a couple of reasons for all this.&lt;/p&gt;

&lt;p&gt;By using queues, we can push items onto different queues from a number of places. Remember that all of this is asynchronous and generally there are also multiple items in every queue being concurrently processed. Each item may traverse the queues in different ways but this gives us a highly flexible system to be able to skip code and/or move from any state to any other state.&lt;/p&gt;

&lt;p&gt;Finally, even though we have a lot of queues, the most complicated part is the state diagram. The code on the other hand is really simple. When downloading a file, the first version of the program created a directory (if not there), created a tmp file, downloaded the file, wrote the file to disk, closed the file and finally renamed it to it&amp;#8217;s final destination. By doing all of this in one function I ended up with 5 levels of callbacks within callbacks.&lt;/p&gt;

&lt;p&gt;By using queues, each queue only has one response function and each one does only one thing. By keeping each bit of processing separate, each function is small and only one or two levels of callback deep! :)&lt;/p&gt;

&lt;p&gt;It also means that to increase or decrease the concurrency of any parts of the system, I can just pass in a concurrency value on the command line, such as checking for 5 existing files, checking 5 MD5s or downloading 5 things at once:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ amazon-s3-sync.js -b my-photos -c 5&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Easy as pie!&lt;/p&gt;

&lt;h2 id='why_i_wrote_this_program'&gt;Why I wrote this Program&lt;/h2&gt;

&lt;p&gt;Usually I write stuff to expand on what I know but in this case there were three reasons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;playing with &lt;a href='https://github.com/caolan/async'&gt;async&lt;/a&gt; has been awesome and very enlightening&lt;/li&gt;

&lt;li&gt;it shows off what you can do with &lt;a href='http://github.com/appsattic/node-awssum/'&gt;AwsSum&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;it is one step further along the road in my quest to &lt;a href='awssums-overall-plan.html'&gt;conquer to world&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Anyway, have fun and happy hacking. :)&lt;/p&gt;

&lt;p&gt;Chilts&lt;/p&gt;

&lt;p&gt;(Ends)&lt;/p&gt;</content>
 </entry>

 <entry>
   <title>AwsSum's Overall Plan</title>
   <link href="http://chilts.org/blog/awssums-overall-plan.html" />
   <updated>2012-05-04T00:00:00-07:00</updated>
   <id>http://chilts.org/blog/awssums-overall-plan</id>
   <content type="html">&lt;p&gt;In my &lt;a href='node-awssum.html'&gt;previous article&lt;/a&gt;, I introduced AwsSum even though it&amp;#8217;s been around for about 6 months now. It&amp;#8217;s maturing nicely, let&amp;#8217;s put it that way. But apart from adding more and more Web APIs to AwsSum, what plans do I have in mind for it in general.&lt;/p&gt;

&lt;h2 id='the_overall_plan'&gt;The Overall Plan&lt;/h2&gt;

&lt;p&gt;There are two main purposes of the AwsSum library. Firstly is so that you can talk to all of these Web APIs in a simple, clean and consistent manner (this will be the subject of an upcoming blog post).&lt;/p&gt;

&lt;p&gt;The 2nd is less obvious but very important, so listen carefully.&lt;/p&gt;

&lt;h2 id='data_liberation'&gt;Data Liberation&lt;/h2&gt;

&lt;p&gt;I want to produce a tool - a magical tool - which gets you all of YOUR data from any and all of these services. Obviously it&amp;#8217;s limited to what the vendor allows via the API but it should be able to get you everything available.&lt;/p&gt;

&lt;p&gt;It won&amp;#8217;t prescribe what you do with that data afterwards, but it will be intended so that at least you &lt;strong&gt;can&lt;/strong&gt; do something with it and it won&amp;#8217;t be hiding in the cloud.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m not sure what it&amp;#8217;ll be called yet, but something like &amp;#8216;liberate-my-data&amp;#8217; would be appropriate. :)&lt;/p&gt;

&lt;h2 id='example_using_amazon_s3'&gt;Example using Amazon S3&lt;/h2&gt;

&lt;p&gt;So, if I&amp;#8217;m lucky I&amp;#8217;ll just run a command like:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ liberate-my-data Amazon:S3&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It it&amp;#8217;ll go off and get everything you have from there. It&amp;#8217;ll create directories for your buckets and download all of your files into each of these directories. It&amp;#8217;ll tell you if there is information there it can&amp;#8217;t get or represent and it&amp;#8217;ll also be re-runnable at any stage in the future.&lt;/p&gt;

&lt;p&gt;So you may end up with a set of directories and files such as this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;+ mydata
  + amazon
    + s3
      + bucket1
        - file.txt
        - image.jpg
        - index.html
      + my-other-bucket
        - cat.jpg
        - lolcat.jpg
        - .jpg&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;So essentially every service has a &amp;#8216;provider/service&amp;#8217; pair much like the AwsSum libraries (in the case of Twitter it would be &amp;#8216;twitter/twitter&amp;#8217;) and then each data liberation script would organise it&amp;#8217;s own backup directory in the appropriate way for each service. In some cases it might be directories and files (as above), in others it might be a JSON, CSV or XML file (or more). Think &amp;#8216;tweets.json&amp;#8217;, &amp;#8216;friends.json&amp;#8217;, &amp;#8216;direct_messages.json&amp;#8217;, &amp;#8216;images/*&amp;#8217; and various other created files.&lt;/p&gt;

&lt;p&gt;As I said, it wouldn&amp;#8217;t prescribe what you do with that data, but just that you can get it. After that, moving to more open services would make more sense. Oh, and ones that subscribe to the &lt;a href='http://autonomo.us/2008/07/franklin-street-statement/'&gt;Franklin Street Statement&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What a wonderful world that would be!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;(Ends)&lt;/p&gt;</content>
 </entry>

 <entry>
   <title>The Classic Unix Horror Story</title>
   <link href="http://chilts.org/geek-classics/the-classic-unix-horror-story.html" />
   <updated>2012-04-30T00:00:00-07:00</updated>
   <id>http://chilts.org/geek-classics/the-classic-unix-horror-story</id>
   <content type="html">&lt;h2 id='unix_recovery_legend'&gt;Unix Recovery Legend&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;This classic article from Mario Wolczko first appeared on Usenet in 1986.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Have you ever left your terminal logged in, only to find when you came back to it that a (supposed) friend had typed &amp;#8220;rm -rf ~/&lt;em&gt;&amp;#8221; and was hovering over the keyboard with threats along the lines of &amp;#8220;lend me a fiver &amp;#8216;til Thursday, or I hit return&amp;#8221;? Undoubtedly the person in question would not have had the nerve to inflict such a trauma upon you, and was doing it in jest. So you&amp;#8217;ve probably never experienced the worst of such disasters&amp;#8230;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It was a quiet Wednesday afternoon. Wednesday, 1st October, 15:15 BST, to be precise, when Peter, an office-mate of mine, leaned away from his terminal and said to me, &amp;#8220;Mario, I&amp;#8217;m having a little trouble sending mail.&amp;#8221; Knowing that msg was capable of confusing even the most capable of people, I sauntered over to his terminal to see what was wrong. A strange error message of the form (I forget the exact details) &amp;#8220;cannot access /foo/bar for userid 147&amp;#8221; had been issued by msg. My first thought was &amp;#8220;Who&amp;#8217;s userid 147?; the sender of the message, the destination, or what?&amp;#8221; So I leant over to another terminal, already logged in, and typed&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;grep 147 /etc/passwd&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;only to receive the response&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;/etc/passwd: No such file or directory.&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Instantly, I guessed that something was amiss. This was confirmed when in response to&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ls /etc&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I got&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ls: not found.&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I suggested to Peter that it would be a good idea not to try anything for a while, and went off to find our system manager.&lt;/p&gt;

&lt;p&gt;When I arrived at his office, his door was ajar, and within ten seconds I realised what the problem was. James, our manager, was sat down, head in hands, hands between knees, as one whose world has just come to an end. Our newly-appointed system programmer, Neil, was beside him, gazing listlessly at the screen of his terminal. And at the top of the screen I spied the following lines:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# cd 
# rm -rf *&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Oh, shit, I thought. That would just about explain it.&lt;/p&gt;

&lt;p&gt;I can&amp;#8217;t remember what happened in the succeeding minutes; my memory is just a blur. I do remember trying ls (again), ps, who and maybe a few other commands beside, all to no avail. The next thing I remember was being at my terminal again (a multi-window graphics terminal), and typing&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd /
echo *&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I owe a debt of thanks to David Korn for making echo a built-in of his shell; needless to say, /bin, together with /bin/echo, had been deleted. What transpired in the next few minutes was that /dev, /etc and /lib had also gone in their entirety; fortunately Neil had interrupted rm while it was somewhere down below /news, and /tmp, /usr and /users were all untouched.&lt;/p&gt;

&lt;p&gt;Meanwhile James had made for our tape cupboard and had retrieved what claimed to be a dump tape of the root filesystem, taken four weeks earlier. The pressing question was, &amp;#8220;How do we recover the contents of the tape?&amp;#8221;. Not only had we lost /etc/restore, but all of the device entries for the tape deck had vanished. And where does mknod live? You guessed it, /etc. How about recovery across Ethernet of any of this from another VAX? Well, /bin/tar had gone, and thoughtfully the Berkeley people had put rcp in /bin in the 4.3 distribution. What&amp;#8217;s more, none of the Ether stuff wanted to know&lt;span&gt;work?&lt;/span&gt; without /etc/hosts at least. We found a version of cpio in /usr/local, but that was unlikely to do us any good without a tape deck.&lt;/p&gt;

&lt;p&gt;Alternatively, we could get the boot tape out and rebuild the root filesystem, but neither James nor Neil had done that before, and we weren&amp;#8217;t sure that the first thing to happen would be that the whole disk would be re-formatted, losing all our user files. (We take dumps of the user files every Thursday; by Murphy&amp;#8217;s Law this had to happen on a Wednesday). Another solution might be to borrow a disk from another VAX, boot off that, and tidy up later, but that would have entailed calling the DEC engineer out, at the very least. We had a number of users in the final throes of writing up PhD theses and the loss of a maybe a weeks&amp;#8217; work (not to mention the machine down time) was unthinkable.&lt;/p&gt;

&lt;p&gt;So, what to do? The next idea was to write a program to make a device descriptor for the tape deck, but we all know where cc, as and ld live. Or maybe make skeletal entries for /etc/passwd, /etc/hosts and so on, so that /usr/bin/ftp would work. By sheer luck, I had a gnuemacs still running in one of my windows, which we could use to create passwd, etc., but the first step was to create a directory to put them in. Of course /bin/mkdir had gone, and so had /bin/mv, so we couldn&amp;#8217;t rename /tmp to /etc. However, this looked like a reasonable line of attack.&lt;/p&gt;

&lt;p&gt;By now we had been joined by Alasdair, our resident UNIX guru, and as luck would have it, someone who knows VAX assembler. So our plan became this: write a program in assembler which would either rename /tmp to /etc, or make /etc, assemble it on another VAX, uuencode it, type in the uuencoded file using my gnu, uudecode it (some bright spark had thought to put uudecode in /usr/bin), run it, and hey presto, it would all be plain sailing from there. By yet another miracle of good fortune, the terminal from which the damage had been done was still su&amp;#8217;d to root (su is in /bin, remember?), so at least we stood a chance of all this working.&lt;/p&gt;

&lt;p&gt;Off we set on our merry way, and within only an hour we had managed to concoct the dozen or so lines of assembler to create /etc. The stripped binary was only 76 bytes long, so we converted it to hex (slightly more readable than the output of uuencode), and typed it in using my editor. If any of you ever have the same problem, here&amp;#8217;s the hex for future reference:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;070100002c000000000000000000000000000000000000000000000000000000
0000dd8fff010000dd8f27000000fb02ef07000000fb01ef070000000000bc8f
8800040000bc012f65746300&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I had a handy program around (doesn&amp;#8217;t everybody?) for converting ASCII hex to binary, and the output of /usr/bin/sum tallied with our original binary. But hang on&amp;#8212;how do you set execute permission without /bin/chmod? A few seconds thought (which as usual, lasted a couple of minutes) suggested that we write the binary on top of an already existing binary, owned by me&amp;#8230;problem solved.&lt;/p&gt;

&lt;p&gt;So along we trotted to the terminal with the root login, carefully remembered to set the umask to 0 (so that I could create files in it using my gnu), and ran the binary. So now we had a /etc, writable by all. From there it was but a few easy steps to creating passwd, hosts, services, protocols, (etc), and then ftp was willing to play ball. Then we recovered the contents of /bin across the ether (it&amp;#8217;s amazing how much you come to miss ls after just a few, short hours), and selected files from /etc. The key file was /etc/rrestore, with which we recovered /dev from the dump tape, and the rest is history.&lt;/p&gt;

&lt;p&gt;Now, you&amp;#8217;re asking yourself (as I am), what&amp;#8217;s the moral of this story? Well, for one thing, you must always remember the immortal words, DON&amp;#8217;T PANIC. Our initial reaction was to reboot the machine and try everything as single user, but it&amp;#8217;s unlikely it would have come up without /etc/init and /bin/sh. Rational thought saved us from this one.&lt;/p&gt;

&lt;p&gt;The next thing to remember is that UNIX tools really can be put to unusual purposes. Even without my gnuemacs, we could have survived by using, say, /usr/bin/grep as a substitute for /bin/cat.&lt;/p&gt;

&lt;p&gt;And the final thing is, it&amp;#8217;s amazing how much of the system you can delete without it falling apart completely. Apart from the fact that nobody could login (/bin/login?), and most of the useful commands had gone, everything else seemed normal. Of course, some things can&amp;#8217;t stand life without say /etc/termcap, or /dev/kmem, or /etc/utmp, but by and large it all hangs together.&lt;/p&gt;

&lt;p&gt;I shall leave you with this question: if you were placed in the same situation, and had the presence of mind that always comes with hindsight, could you have got out of it in a simpler or easier way? Answers on a postage stamp to:&lt;/p&gt;

&lt;p&gt;Mario Wolczko&lt;/p&gt;
&lt;pre&gt;
------------------------------------------------------------------------
Dept. of Computer Science       ARPA:   miw%uk.ac.man.cs.ux@cs.ucl.ac.uk
The University                  USENET: mcvax!ukc!man.cs.ux!miw
Manchester M13 9PL              JANET:  miw@uk.ac.man.cs.ux
U.K.                            061-273 7121 x 5699
------------------------------------------------------------------------
&lt;/pre&gt;</content>
 </entry>

 <entry>
   <title>Hacker Demigods</title>
   <link href="http://chilts.org/geek-classics/hacker-demigods.html" />
   <updated>2012-04-29T00:00:00-07:00</updated>
   <id>http://chilts.org/geek-classics/hacker-demigods</id>
   <content type="html">&lt;h2 id='stallman_torvalds_and_knuth_chatting_'&gt;Stallman, Torvalds and Knuth chatting &amp;#8230;&lt;/h2&gt;

&lt;p&gt;Richard M. Stallman, Linus Thorvalds &lt;span&gt;sic&lt;/span&gt;, and Donald E. Knuth engage in a discussion on whose impact on the computerized world was the greatest.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stallman&lt;/strong&gt;: &amp;#8220;God told me I have programmed the best editor in the world!&amp;#8221;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Torvalds&lt;/strong&gt;: &amp;#8220;Well, God told &lt;em&gt;me&lt;/em&gt; that I have programmed the best operating system in the world!&amp;#8221;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Knuth&lt;/strong&gt;: &amp;#8220;Wait, wait - I never said that.&amp;#8221;&lt;/p&gt;

&lt;p&gt;— Erik Meltzer, rec.humor.funny&lt;/p&gt;</content>
 </entry>

 <entry>
   <title>just a hobby, won't be big and professional like gnu</title>
   <link href="http://chilts.org/geek-classics/just-a-hobby-wont-be-big-and-professional-like-gnu.html" />
   <updated>2012-04-28T00:00:00-07:00</updated>
   <id>http://chilts.org/geek-classics/just-a-hobby-wont-be-big-and-professional-like-gnu</id>
   <content type="html">&lt;h2 id='linus_torvalds_announcement_of_linux'&gt;Linus Torvalds Announcement of Linux&lt;/h2&gt;
&lt;pre&gt;
Path: gmdzi!unido!fauern!ira.uka.de!sol.ctr.columbia.edu!zaphod.mps.ohio-state.edu!wupost!uunet!mcsun!news.funet.fi!hydra!klaava!torvalds
From: torva...@klaava.Helsinki.FI (Linus Benedict Torvalds)
Newsgroups: comp.os.minix
Subject: What would you like to see most in minix?
Summary: small poll for my new operating system
Keywords: 386, preferences
Message-ID: &amp;lt;1991Aug25.205708.9541@klaava.Helsinki.FI&amp;gt;
Date: 25 Aug 91 20:57:08 GMT
Organization: University of Helsinki
Lines: 20

Hello everybody out there using minix -

I'm doing a (free) operating system (just a hobby, won't be big and
professional like gnu) for 386(486) AT clones.  This has been brewing
since april, and is starting to get ready.  I'd like any feedback on
things people like/dislike in minix, as my OS resembles it somewhat
(same physical layout of the file-system (due to practical reasons)
among other things). 

I've currently ported bash(1.08) and gcc(1.40), and things seem to work. 
This implies that I'll get something practical within a few months, and
I'd like to know what features most people would want.  Any suggestions
are welcome, but I won't promise I'll implement them :-)

		Linus (torva...@kruuna.helsinki.fi)

PS.  Yes - it's free of any minix code, and it has a multi-threaded fs. 
It is NOT protable (uses 386 task switching etc), and it probably never
will support anything other than AT-harddisks, as that's all I have :-(. 
&lt;/pre&gt;</content>
 </entry>

 <entry>
   <title>A New World with an Old Topic</title>
   <link href="http://chilts.org/simplicity/a-new-world-with-an-old-topic.html" />
   <updated>2012-04-28T00:00:00-07:00</updated>
   <id>http://chilts.org/simplicity/a-new-world-with-an-old-topic</id>
   <content type="html">&lt;h2 id='getting_the_right_amount_of_sleep'&gt;Getting the Right Amount of Sleep&lt;/h2&gt;

&lt;p&gt;Since the last time I wrote on &amp;#8216;Simplicity&amp;#8217;, I have had quite a few changes in my life &amp;#8230; but in some ways, it doesn&amp;#8217;t mean they are. The fact is, no matter where we are in life, what we are doing, who we are with or what we plan to do, there is always scope for making things more simple.&lt;/p&gt;

&lt;p&gt;And what is the latest thing I want to do, well, it&amp;#8217;s an age-old subject that I&amp;#8217;ve already spoken about once on this blog, and that is &lt;a href='my-new-sleeping-regime.html'&gt;my sleeping regime&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;However, that post was a long time ago and many things have changed, so instead, let&amp;#8217;s look at what hasn&amp;#8217;t - and this is where it starts to become clear - I still need to sleep every night! Ta dah, and there&amp;#8217;s the magic.&lt;/p&gt;

&lt;p&gt;So, re-reading that post, I&amp;#8217;ve realised that I got half of it right. I said that I was going to go to bed at the same time every day, and get up at the same time every day. I think the latter is much more important and that&amp;#8217;s where it wins.&lt;/p&gt;

&lt;p&gt;I also found an older three part post regarding all of this on Steve Pavlina&amp;#8217;s site:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://www.stevepavlina.com/blog/2005/05/how-to-become-an-early-riser/'&gt;How to Become an Early Riser&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.stevepavlina.com/blog/2005/05/how-to-become-an-early-riser-part-ii/'&gt;How to Become an Early Riser - Part II&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://www.stevepavlina.com/blog/2006/04/how-to-get-up-right-away-when-your-alarm-goes-off/'&gt;How to Get Up Right Away When Your Alarm Goes Off&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So put those on your reading list and let&amp;#8217;s take it from here. :)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And the all-important getting up time &amp;#8230; mine is 6am? What&amp;#8217;s yours?&lt;/strong&gt; (Email me, see below.)&lt;/p&gt;</content>
 </entry>

 <entry>
   <title>A bike shed (any colour will do) on greener grass...</title>
   <link href="http://chilts.org/geek-classics/a-bike-shed-any-colour-will-do-on-greener-grass.html" />
   <updated>2012-04-27T00:00:00-07:00</updated>
   <id>http://chilts.org/geek-classics/a-bike-shed-any-colour-will-do-on-greener-grass</id>
   <content type="html">&lt;h2 id='poulhenning_kamps_bike_shedding_essay'&gt;Poul-Henning Kamp&amp;#8217;s &amp;#8216;Bike Shedding&amp;#8217; Essay&lt;/h2&gt;
&lt;pre&gt;
Subject: A bike shed (any colour will do) on greener grass...
From: Poul-Henning Kamp &amp;lt;phk@freebsd.org&amp;gt;
Date: Sat, 02 Oct 1999 16:14:10 +0200
Message-ID: &amp;lt;18238.938873650@critter.freebsd.dk&amp;gt;
Sender: phk@critter.freebsd.dk
Bcc: Blind Distribution List: ;
MIME-Version: 1.0


[bcc'ed to committers, hackers]

My last pamphlet was sufficiently well received that I was not
scared away from sending another one, and today I have the time
and inclination to do so.

I've had a little trouble with deciding on the right distribution
of this kind of stuff, this time it is bcc'ed to committers and
hackers, that is probably the best I can do.  I'm not subscribed
to hackers myself but more on that later.

The thing which have triggered me this time is the "sleep(1) should
do fractional seconds" thread, which have pestered our lives for
many days now, it's probably already a couple of weeks, I can't
even be bothered to check.

To those of you who have missed this particular thread: Congratulations.

It was a proposal to make sleep(1) DTRT if given a non-integer
argument that set this particular grass-fire off.  I'm not going
to say anymore about it than that, because it is a much smaller
item than one would expect from the length of the thread, and it
has already received far more attention than some of the *problems*
we have around here.

The sleep(1) saga is the most blatant example of a bike shed
discussion we have had ever in FreeBSD.  The proposal was well
thought out, we would gain compatibility with OpenBSD and NetBSD,
and still be fully compatible with any code anyone ever wrote.

Yet so many objections, proposals and changes were raised and
launched that one would think the change would have plugged all
the holes in swiss cheese or changed the taste of Coca Cola or
something similar serious.

"What is it about this bike shed ?" Some of you have asked me.

It's a long story, or rather it's an old story, but it is quite
short actually.  C. Northcote Parkinson wrote a book in the early
1960'ies, called "Parkinson's Law", which contains a lot of insight
into the dynamics of management.

You can find it on Amazon, and maybe also in your dads book-shelf,
it is well worth its price and the time to read it either way,
if you like Dilbert, you'll like Parkinson.

Somebody recently told me that he had read it and found that only
about 50% of it applied these days.  That is pretty darn good I
would say, many of the modern management books have hit-rates a
lot lower than that, and this one is 35+ years old.

In the specific example involving the bike shed, the other vital
component is an atomic power-plant, I guess that illustrates the
age of the book.

Parkinson shows how you can go in to the board of directors and
get approval for building a multi-million or even billion dollar
atomic power plant, but if you want to build a bike shed you will
be tangled up in endless discussions.

Parkinson explains that this is because an atomic plant is so vast,
so expensive and so complicated that people cannot grasp it, and
rather than try, they fall back on the assumption that somebody
else checked all the details before it got this far.   Richard P.
Feynmann gives a couple of interesting, and very much to the point,
examples relating to Los Alamos in his books.

A bike shed on the other hand.  Anyone can build one of those over
a weekend, and still have time to watch the game on TV.  So no
matter how well prepared, no matter how reasonable you are with
your proposal, somebody will seize the chance to show that he is
doing his job, that he is paying attention, that he is *here*.

In Denmark we call it "setting your fingerprint".  It is about
personal pride and prestige, it is about being able to point
somewhere and say "There!  *I* did that."  It is a strong trait in
politicians, but present in most people given the chance.  Just
think about footsteps in wet cement.

I bow my head in respect to the original proposer because he stuck
to his guns through this carpet blanking from the peanut gallery,
and the change is in our tree today.  I would have turned my back
and walked away after less than a handful of messages in that
thread.

And that brings me, as I promised earlier, to why I am not subscribed
to -hackers:

I un-subscribed from -hackers several years ago, because I could
not keep up with the email load.  Since then I have dropped off
several other lists as well for the very same reason.

And I still get a lot of email.  A lot of it gets routed to /dev/null
by filters:  People like Brett Glass will never make it onto my
screen, commits to documents in languages I don't understand
likewise, commits to ports as such.  All these things and more go
the winter way without me ever even knowing about it.

But despite these sharp teeth under my mailbox I still get too much
email.

This is where the greener grass comes into the picture:

I wish we could reduce the amount of noise in our lists and I wish
we could let people build a bike shed every so often, and I don't
really care what colour they paint it.

The first of these wishes is about being civil, sensitive and 
intelligent in our use of email.

If I could concisely and precisely define a set of criteria for
when one should and when one should not reply to an email so that
everybody would agree and abide by it, I would be a happy man, but
I am too wise to even attempt that.

But let me suggest a few pop-up windows I would like to see
mail-programs implement whenever people send or reply to email
to the lists they want me to subscribe to:

      +------------------------------------------------------------+
      | Your email is about to be sent to several hundred thousand |
      | people, who will have to spend at least 10 seconds reading |
      | it before they can decide if it is interesting.  At least  |
      | two man-weeks will be spent reading your email.  Many of   |
      | the recipients will have to pay to download your email.    |
      |								   |
      | Are you absolutely sure that your email is of sufficient   |
      | importance to bother all these people ?                    |
      |								   |
      |                  [YES]  [REVISE]  [CANCEL]                 |
      +------------------------------------------------------------+

      +------------------------------------------------------------+
      |	Warning:  You have not read all emails in this thread yet. |
      |	Somebody else may already have said what you are about to  |
      |	say in your reply.  Please read the entire thread before   |
      |	replying to any email in it.                               |
      |								   |
      |			     [CANCEL]                              |
      +------------------------------------------------------------+

      +------------------------------------------------------------+
      |	Warning:  Your mail program have not even shown you the    |
      |	entire message yet.  Logically it follows that you cannot  |
      |	possibly have read it all and understood it.               |
      |								   |
      |	It is not polite to reply to an email until you have       |
      |	read it all and thought about it.			   |
      |								   |
      | A cool off timer for this thread will prevent you from     |
      | replying to any email in this thread for the next one hour |
      |								   |
      |			      [Cancel]				   |
      +------------------------------------------------------------+

      +------------------------------------------------------------+
      | You composed this email at a rate of more than N.NN cps    |
      | It is generally not possible to think and type at a rate   |
      | faster than A.AA cps, and therefore you reply is likely to |
      | incoherent, badly thought out and/or emotional.            |
      |								   |
      | A cool off timer will prevent you from sending any email   |
      | for the next one hour.			 		   |
      |								   |
      |			      [Cancel]				   |
      +------------------------------------------------------------+

The second part of my wish is more emotional.  Obviously, the
capacities we had manning the unfriendly fire in the sleep(1)
thread, despite their many years with the project, never cared
enough to do this tiny deed, so why are they suddenly so enflamed
by somebody else so much their junior doing it ?

I wish I knew.

I do know that reasoning will have no power to stop such "reactionaire
conservatism".  It may be that these people are frustrated about
their own lack of tangible contribution lately or it may be a bad
case of "we're old and grumpy, WE know how youth should behave".

Either way it is very unproductive for the project, but I have no
suggestions for how to stop it.  The best I can suggest is to refrain
from fuelling the monsters that lurk in the mailing lists:  Ignore
them, don't answer them, forget they're there.

I hope we can get a stronger and broader base of contributors in
FreeBSD, and I hope we together can prevent the grumpy old men
and the Brett Glasses of the world from chewing them up, spitting
them out and scaring them away before they ever get a leg to the 
ground.

For the people who have been lurking out there, scared away from
participating by the gargoyles:  I can only apologise and encourage
you to try anyway, this is not the way I want the environment in
the project to be.

Poul-Henning
&lt;/pre&gt;</content>
 </entry>

 <entry>
   <title>Oven Baked Red Capsicum Risotto</title>
   <link href="http://chilts.org/recipe/oven-baked-red-capsicum-risotto.html" />
   <updated>2012-04-13T00:00:00-07:00</updated>
   <id>http://chilts.org/recipe/oven-baked-red-capsicum-risotto</id>
   <content type="html">&lt;p&gt;Original recipe from &lt;em&gt;GoodFood, 101 More low-fat feasts&lt;/em&gt;, BBC Books.&lt;/p&gt;

&lt;h2 id='method'&gt;Method&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Preheat oven to 200&amp;#176;C.&lt;/li&gt;

&lt;li&gt;Chop onion and capsicum and stir-fry with oil in a frying pan.&lt;/li&gt;

&lt;li&gt;Tip the rice in to soak up the flavours followed by the stock for half a minute. Transfer everything into an ovenproof dish.&lt;/li&gt;

&lt;li&gt;Add the chopped tomatoes and mix well.&lt;/li&gt;

&lt;li&gt;Cover and bake for 40 mins until there is no liquid left and the rice is sticky and creamy.&lt;/li&gt;

&lt;li&gt;Mix in parsley or basil. Grate cheese on top. Replace lid and leave for a few minutes on top of the oven just to melt the cheese.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id='notes'&gt;Notes&lt;/h2&gt;

&lt;p&gt;Instead of plain oil, I usually use a Thai chilli sauce (not sweet chilli) to give it more flavour.&lt;/p&gt;</content>
 </entry>

 <entry>
   <title>Flower on Napier Waterfront</title>
   <link href="http://chilts.org/photo/flower-on-napier-waterfront.html" />
   <updated>2012-04-13T00:00:00-07:00</updated>
   <id>http://chilts.org/photo/flower-on-napier-waterfront</id>
   <content type="html">&lt;p&gt;
    And over two years later, my second photo. This time it's a close-up of a flower I saw on Napier waterfront.
&lt;/p&gt;

&lt;p class="c"&gt;&lt;img src="s/flower-close-up.jpg" title="Flower, Close Up" alt="Flower, Close Up" /&gt;&lt;/p&gt;

&lt;p&gt;
    I'm not sure what it's called, but it was featured
    in &lt;a href="http://flickr.com/photos/67872334@N00/2336923636/"&gt;Flickr's 4th birthday celebrations&lt;/a&gt;.  It's
    location is on the left panel, column 6, 14 down (or 3rd left, 5 up). :) Yay me!
&lt;/p&gt;
</content>
 </entry>

 <entry>
   <title>Introducing Node AwsSum</title>
   <link href="http://chilts.org/blog/node-awssum.html" />
   <updated>2012-04-11T00:00:00-07:00</updated>
   <id>http://chilts.org/blog/node-awssum</id>
   <content type="html">&lt;p&gt;Over on my &lt;a href='http://search.npmjs.org/#/_author/Andrew%20Chilton'&gt;author page on NPM&lt;/a&gt; I now have 7 packages available to download and install. However, the one I&amp;#8217;ve put the most time into is the &lt;a href='https://github.com/appsattic/node-awssum/'&gt;AwsSum&lt;/a&gt; package. It is a set of modules to talk to lots of Web Service APIs.&lt;/p&gt;

&lt;p&gt;At the moment, it mainly talks to many of the Amazon Web Services APIs but I have an &lt;a href='https://github.com/appsattic/node-awssum/tree/oauth'&gt;OAuth branch&lt;/a&gt; which is nearing completion. Whilst this won&amp;#8217;t be feature complete for all of the services I&amp;#8217;m trailing (Yahoo! OAuth/ContactsAPI, Twitter OAuth/API, Xero OAuth/API and Tumblr OAuth/API) it will give a very good idea how to talk to any OAuth service out there with AwsSum.&lt;/p&gt;

&lt;p&gt;It also helps with the situation where the OAuth provider and a OAuth enabled service it provides are completely different. For example, you use the Twitter OAuth enpoints to authorise data from Twitter - this is straighforward. But in the case of Yahoo! Contacts, you need to use a central Yahoo! OAuth endpoint. This will also be the case for Google and all of their APIs as well as other large providers where the number of APIs they provide are greater than one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The future&amp;#8217;s bright, the future&amp;#8217;s AwsSum!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;(Ends)&lt;/p&gt;</content>
 </entry>

 <entry>
   <title>Things to Remember about Amazon EC2</title>
   <link href="http://chilts.org/blog/things-to-remember-about-amazon-ec2.html" />
   <updated>2011-05-27T00:00:00-07:00</updated>
   <id>http://chilts.org/blog/things-to-remember-about-amazon-ec2</id>
   <content type="html">&lt;p&gt;I&amp;#8217;ve been knocking around with Amazon EC2 again over the past few months and am learning a few tricks which I need to write down so I don&amp;#8217;t forget them. Using my &lt;a href='https://github.com/appsattic/awssum'&gt;AwsSum&lt;/a&gt; library, here&amp;#8217;s a few bits and pieces:&lt;/p&gt;

&lt;p&gt;Starting a new server (Ubuntu Lucid AMD64 in region &amp;#8216;us-east&amp;#8217;, availability zone &amp;#8216;us-east-1a&amp;#8217;):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;KEYFILE=$HOME/.ssh/id_rsa.pub
REGION=us-east-1
AZ=us-east-1a
AMI=ami-3202f25b # Ubuntu Lucid LTS, 64-bit, EBS Boot (from http://alestic.com/)
TYPE=t1.micro

./bin/awssum Amazon:EC2 RunInstances \
    --Region $REGION \
    --ImageId $AMI \
    --MinCount 1 \
    --MaxCount 1 \
    --KeyName $KEYNAME \
    --InstanceType $TYPE \
    --Placement.AvailabilityZone $AZ \
    --DisableApiTermination true \
    --InstanceInitiatedShutdownBehavior stop \
    --BlockDeviceMapping.0.DeviceName /dev/sda1 \
    --BlockDeviceMapping.0.Ebs.VolumeSize 20 \
    --BlockDeviceMapping.0.Ebs.DeleteOnTermination false&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;What we&amp;#8217;re saying here is to create an Elastic Block Store backed micro instance. We&amp;#8217;ve actually asked for 20GB worth of storage on the root filesystem.&lt;/p&gt;

&lt;p&gt;However, when we log on to that new instance, you can see that there only seems to be about 10G on /dev/sda1. Hmm, what&amp;#8217;s going on here?&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ df -kh
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             7.9G  1.1G  6.5G  15% /
none                  285M  108K  284M   1% /dev
none                  318M     0  318M   0% /dev/shm
none                  318M   56K  318M   1% /var/run
none                  318M     0  318M   0% /var/lock
none                  318M     0  318M   0% /lib/init/rw&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;What&amp;#8217;s happening is that the Amazon Machine Image (AMI) has been set up to use 10G worth of storage, so that&amp;#8217;s all that we can see here. However, if you look at your list of EBS volumes, you can see that&amp;#8217; you&amp;#8217;re being charged for 20G (which is what you asked for in the first place)!&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ ./bin/awssum Amazon:EC2 DescribeVolumes
{
   &amp;quot;xmlns&amp;quot; : &amp;quot;http://ec2.amazonaws.com/doc/2010-08-31/&amp;quot;,
   &amp;quot;_awssum&amp;quot; : {
      &amp;quot;ok&amp;quot; : 1
   },
   &amp;quot;requestId&amp;quot; : &amp;quot;c569ff82-9ad5-4e39-9313-22f7079fe5da&amp;quot;,
   &amp;quot;volumeSet&amp;quot; : [
      {
         &amp;quot;volumeId&amp;quot; : &amp;quot;vol-xxxxxxxx&amp;quot;,
         &amp;quot;status&amp;quot; : &amp;quot;in-use&amp;quot;,
         &amp;quot;attachmentSet&amp;quot; : [
            {
               &amp;quot;volumeId&amp;quot; : &amp;quot;vol-xxxxxxxx&amp;quot;,
               &amp;quot;instanceId&amp;quot; : &amp;quot;i-xxxxxxxx&amp;quot;,
               &amp;quot;status&amp;quot; : &amp;quot;attached&amp;quot;,
               &amp;quot;deleteOnTermination&amp;quot; : &amp;quot;false&amp;quot;,
               &amp;quot;attachTime&amp;quot; : &amp;quot;2011-05-21T08:13:39.000Z&amp;quot;,
               &amp;quot;device&amp;quot; : &amp;quot;/dev/sda1&amp;quot;
            }
         ],
         &amp;quot;availabilityZone&amp;quot; : &amp;quot;us-east-1a&amp;quot;,
         &amp;quot;createTime&amp;quot; : &amp;quot;2011-05-21T08:13:21.000Z&amp;quot;,
         &amp;quot;snapshotId&amp;quot; : &amp;quot;snap-xxxxxxxx&amp;quot;,
         &amp;quot;size&amp;quot; : &amp;quot;20&amp;quot;
      }
   ]
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Ok, let&amp;#8217;s make sure you&amp;#8217;re making full use of that 20G you&amp;#8217;re paying for. Log back onto your instance and perform the following command:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ sudo resize2fs /dev/sda1
resize2fs 1.41.11 (14-Mar-2010)
Filesystem at /dev/sda1 is mounted on /; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 2
Performing an on-line resize of /dev/sda1 to 5242880 (4k) blocks.
The filesystem on /dev/sda1 is now 5242880 blocks long.&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Cool, it seems to have worked. Let&amp;#8217;s just check:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ df -kh
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              20G  1.1G   18G   6% /
none                  285M  108K  284M   1% /dev
none                  318M     0  318M   0% /dev/shm
none                  318M   56K  318M   1% /var/run
none                  318M     0  318M   0% /var/lock
none                  318M     0  318M   0% /lib/init/rw&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Excellent, we&amp;#8217;ve got our other 10G that we&amp;#8217;re paying for. Until next time.&lt;/p&gt;</content>
 </entry>

 <entry>
   <title>Enjoying Kiva</title>
   <link href="http://chilts.org/blog/enjoying-kiva.html" />
   <updated>2010-10-18T00:00:00-07:00</updated>
   <id>http://chilts.org/blog/enjoying-kiva</id>
   <content type="html">&lt;p&gt;Just thought I&amp;#8217;d post a short entry saying how much I am enjoying microloaning on &lt;a href="http://www.kiva.org/"&gt;Kiva&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.kiva.org/lender/ranginui"&gt;Chris&lt;/a&gt; told me about Kiva a couple of years ago and I have seen &lt;a href="http://www.kiva.org/lender/Shiny"&gt;Brenda and Callum&lt;/a&gt; and &lt;a href="http://www.kiva.org/lender/bwooce"&gt;Bruce&lt;/a&gt; (all in Wgtn) on Kiva too. (&lt;a href="http://www.kiva.org/lender/chilts"&gt;My profile.&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;By the way, if you want to join up then give me a shout and I&amp;#8217;ll invite you (I&amp;#8217;ll need your email address). You can just go and sign up yourself, but at the moment if I get 5 invitees and they make a successful loan each, then I&amp;#8217;ll get an extra $25 to be able to loan out :)&lt;/p&gt;
&lt;p&gt;Am up to 15 loans now (Kiva Avg = 6.4) and it seems that every month I get some money back, put a little more in and then make another loan or two.&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Update1: forgot to mention that I&amp;#8217;m a part of the &lt;a href="http://www.kiva.org/team/kivakiwis"&gt;KivaKiwis&lt;/a&gt; and &lt;a href="http://www.kiva.org/team/koha"&gt;Koha&lt;/a&gt; teams&lt;/li&gt;
	&lt;li&gt;Update2: sent out one invite to a friend.&lt;/li&gt;
	&lt;li&gt;Update3: to get the $25 I need the 5 invitees to make at least one loan each before the end of October&lt;/li&gt;
&lt;/ul&gt;</content>
 </entry>

 <entry>
   <title>What Programs Are</title>
   <link href="http://chilts.org/blog/what-programs-are.html" />
   <updated>2010-10-14T00:00:00-07:00</updated>
   <id>http://chilts.org/blog/what-programs-are</id>
   <content type="html">&lt;p&gt;I&amp;#8217;m on a lot of mailing lists, some of which I read religiously, others I dip into when the need arises and others still I just read the topics that look interesting. The &lt;a href="http://groups.google.com/group/nodejs"&gt;NodeJS&lt;/a&gt; is one such list in that I just read the thread whose subjects stand out to me.&lt;/p&gt;
&lt;p&gt;And luckily for me I clicked a fairly mundane thread this morning but then read what I thought was a &lt;a href="http://groups.google.com/group/nodejs/msg/16b93876a125192e"&gt;fantastic description of programs&lt;/a&gt; and therefore the kind of emotions you get when programming. Written by &lt;a href="http://blog.izs.me/"&gt;Isaac Schlueter&lt;/a&gt; and reproduced here:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Some programs are community centers, and you want to entice people to come inside.&lt;/li&gt;
	&lt;li&gt;Some programs are factories, and you want to make sure the workers don&amp;#8217;t hurt themselves.&lt;/li&gt;
	&lt;li&gt;Some programs are shops, and you want people to visit, but only a few go in the back.&lt;/li&gt;
	&lt;li&gt;And then some programs are art, and while you might hope that some people find them beautiful or perhaps even useful, and contributions may be accepted and feedback always welcome, the real purpose is just to hang it in your house and let it bring you joy.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I like it. Thanks Isaac.&lt;/p&gt;</content>
 </entry>

 <entry>
   <title>Roti</title>
   <link href="http://chilts.org/recipe/roti.html" />
   <updated>2010-10-13T00:00:00-07:00</updated>
   <id>http://chilts.org/recipe/roti</id>
   <content type="html">&lt;p&gt;An unleavened Indian bread that can be enjoyed with any vegetable or curry. Original recipe at &lt;a href='http://showmethecurry.com/breads/rotli-roti-indian-bread-recipe.html'&gt;Show Me the Curry&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id='method'&gt;Method&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Mix flour and salt well in a large bowl. Add oil and mix until lumps are gone.&lt;/li&gt;

&lt;li&gt;Add warm water a little at a time which will form a medium soft dough ball. Do not overwork the dough.&lt;/li&gt;

&lt;li&gt;Drizzle a few drops of oil over dough and let it rest for 15 mins.&lt;/li&gt;

&lt;li&gt;Heat skillet/frying pan on medium heat.&lt;/li&gt;

&lt;li&gt;Knead the dough once more and divide into golf ball size portions.&lt;/li&gt;

&lt;li&gt;Dip one ball in all-purpose flour to roll out into a thin disc. Use more flour as necessary to stop it sticking.&lt;/li&gt;

&lt;li&gt;Place into skillet and cook allowing slight bubbles to form, flip over for a further 15 secs.&lt;/li&gt;

&lt;li&gt;To expand the roti (optional) pick up with tongs and place over the open flame (assuming a gas cooker) until it balloons up. Flip over and cook on the other side.&lt;/li&gt;

&lt;li&gt;Place into insulated container and smear with Ghee or (clarified) butter and repeat for remaining dough&lt;/li&gt;
&lt;/ol&gt;</content>
 </entry>

 <entry>
   <title>Dear Mr Key</title>
   <link href="http://chilts.org/blog/dear-mr-key.html" />
   <updated>2010-09-30T00:00:00-07:00</updated>
   <id>http://chilts.org/blog/dear-mr-key</id>
   <content type="html">&lt;p&gt;I just decided to fill in one of those e-cards on the Greens website. It&amp;#8217;s about &lt;a href="http://www.greens.org.nz/ecards/keep-it-kiwi-e-card"&gt;keeping KiwiBank 100% Kiwi-owned&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s a copy and I&amp;#8217;m happy for any comments or recommendations.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Dear Mr Key,&lt;/p&gt;
&lt;p&gt;Keeping KiwiBank and other national assets Kiwi owned is a must. As a recent citizen of NZ (4 years ago) I choose to live here because I think it is the best place in the world. By keeping our money local and our assets locally owned means for a better NZ. If that were to change, then I&amp;#8217;d have to reconsider where I want to live. Since being here I recognise how important it is to buy kiwi-made and shop local which was never in my mind when I was in Britain. At first I thought it was almost insular but now I see how important it is so we don&amp;#8217;t disappear within the global economy.&lt;/p&gt;
&lt;p&gt;Also, having recently started a business &amp;#8211; a web-based IT services company &amp;#8211; most of my sales will be coming from other countries, bringing money into our economy and helping grow from exports. It&amp;#8217;s very keenly the kind of company you want here. I could have quite easily set up my business in Australia or the UK so if I&amp;#8217;m doing my bit for New Zealand, why can&amp;#8217;t you do yours.&lt;/p&gt;
&lt;p&gt;Keep KiwiBank and other nationally treasured entities locally owned by the NZ public!&lt;/p&gt;
&lt;p&gt;Many thanks for your understanding.&lt;/p&gt;
&lt;p&gt;Cheers,&lt;br /&gt;
Andy&lt;/p&gt;</content>
 </entry>

 <entry>
   <title>32 Commits Today</title>
   <link href="http://chilts.org/blog/32-commits-today.html" />
   <updated>2010-09-02T00:00:00-07:00</updated>
   <id>http://chilts.org/blog/32-commits-today</id>
   <content type="html">&lt;p&gt;Yes, I know &amp;#8220;commits&amp;#8221; are about as informative as &amp;#8220;Lines of Code&amp;#8221; but it does sometimes help you see where you are in comparison to other days.&lt;/p&gt;
&lt;p&gt;Thanks to the terrible Wellington weather I stayed home all day and hacked. It was awesome. It turns out I did 32 commits today to my current project. Correction, I have two projects on the go (one at home and one at the office). This is for the one I&amp;#8217;m doing at home. After all that I am (1) tired, (2) chuffed I was so productive and (3) happy!&lt;/p&gt;
&lt;p&gt;The most interesting of these of course is (2). I have found that since I quit my job and am doing my own thing, I am almost infinitely more productive. Firstly, I know the ins and outs of the system, secondly I have no interruptions (irc, email, phone, in-person, clients) and finally, all my projects are just so much more interesting than previous things I&amp;#8217;ve worked on. And yep, that includes a satellite control system! :)&lt;/p&gt;</content>
 </entry>

 <entry>
   <title>That Friday Feeling</title>
   <link href="http://chilts.org/blog/that-friday-feeling.html" />
   <updated>2010-08-13T00:00:00-07:00</updated>
   <id>http://chilts.org/blog/that-friday-feeling</id>
   <content type="html">&lt;p&gt;Today was the first Friday in a very long time that I haven&amp;#8217;t had that Friday Feeling. It only hit me at about 4pm when I realised that my old work (&lt;a href="http://www.catalyst.net.nz/"&gt;Catalyst&lt;/a&gt;) would be starting their beer o&amp;#8217;clock.&lt;/p&gt;
&lt;p&gt;For years I&amp;#8217;ve had that Friday Feeling and I have usually found Friday afternoons to be less productive than other parts of the week. However, whilst still beavering away at 6pm I realised that I&amp;#8217;m so mad busy doing things that I don&amp;#8217;t really think of what day it is, or even what time it is. It&amp;#8217;s also because the things I&amp;#8217;m busy with actually interest me and whilst I&amp;#8217;d say I&amp;#8217;ve always had an interesting job, doing the things you want to do and how you want to do them make it infinitely more enjoyable.&lt;/p&gt;
&lt;p&gt;Going back to weekends. For me now, the weekends are just extensions to the week for two reasons.&lt;/p&gt;
&lt;p&gt;Firstly, I don&amp;#8217;t have to do housekeeping chores like my washing at the weekend since I&amp;#8217;m able to do it when I like through the week. This even means I choose a beautiful day so that my clothes actually have a chance to dry. This is definitely an advantage of the time being your own.&lt;/p&gt;
&lt;p&gt;And secondly, I&amp;#8217;ll be heading into the office both days of a weekend anyway so it doesn&amp;#8217;t mean much to me anymore. Currently I work at home in the early morning, head in to the office for a long afternoon (which broadly covers lunch and tea), then back home for some more late night hacking.&lt;/p&gt;
&lt;p&gt;Weekends now just means that the probability of seeing certain friends is higher than on other days of the week. Obviously these are friends who have day jobs and have less ability to mould their own time. However, I also have a number of friends who are self-employed and the probability of me seeing them is higher on every single day :) This is definitely a perk of being self-employed and one I intend to take full advantage of.&lt;/p&gt;
&lt;p&gt;Finally, this entry is a kind of &amp;#8220;Yep, I&amp;#8217;ve quit and the business is up and going&amp;#8221; introduction and I promise to keep you more up to date as things progress.&lt;/p&gt;</content>
 </entry>

 <entry>
   <title>Why Google Wave was a Failure</title>
   <link href="http://chilts.org/blog/why-google-wave-was-a-failure.html" />
   <updated>2010-08-07T00:00:00-07:00</updated>
   <id>http://chilts.org/blog/why-google-wave-was-a-failure</id>
   <content type="html">&lt;p&gt;Dear Mr Schmidt,&lt;/p&gt;
&lt;p&gt;Your quote on the &lt;span class="caps"&gt;BBC&lt;/span&gt; News article about &lt;a href="http://www.bbc.co.uk/news/technology-10877768"&gt;Google drops Wave because of lack of users&lt;/a&gt; was interesting. You said &amp;#8220;It&amp;#8217;s a very clever product. You never know why it didn&amp;#8217;t work&amp;#8221;. Obviously you&amp;#8217;re not as clever as you think your product is.&lt;/p&gt;
&lt;p&gt;When Google Wave launched, the crowd stood up, applauded and the YouTube videos that were released made Wave look awesome. Instant view of what other people were typing, the ability to change your previous comments (and indeed, other peoples), the slider to see the history, being able to upload images and the ability to make lots of bots to run inside the thing.&lt;/p&gt;
&lt;p&gt;The problem is, no-one wanted any of these features. Clever &amp;#8211; yes. Useful &amp;#8211; no.&lt;/p&gt;
&lt;p&gt;The slider is only there since the complexity of the conversation was far too great. The complexity was far too great since you could reply to anyone anywhere as well as changing previous messages. This in itself is fairly horrible since the conversation then isn&amp;#8217;t linear. Ever heard of why people don&amp;#8217;t like top-posting on email? Uploading images are ho-hum, email already does previews for image attachments (and why do we need any more than that). All &amp;#8216;Chat&amp;#8217; protocols out there &lt;em&gt;don&amp;#8217;t&lt;/em&gt; do the &amp;#8216;show as you type&amp;#8217; thing &amp;#8211; mainly because no-one wants it (how often do you type something and then delete it &amp;#8230; lots). Finally, bots &amp;#8230; more annoying than the ability to change anyone&amp;#8217;s message &amp;#8230; you get my drift.&lt;/p&gt;
&lt;p&gt;Add to the fact that all the features you guys trumpeted as amazing, ambitious and new, was the slowness of actually making it work. And yes, even in Chrome it was slow. Painfully slow. Your whole company is based on speed, decreasing page load times, minimising JavaScript and &lt;span class="caps"&gt;CSS&lt;/span&gt;, having a minimal search page, updating old (&lt;span class="caps"&gt;HTTP&lt;/span&gt;) protocols for new ones (&lt;span class="caps"&gt;SPDY&lt;/span&gt;), making JavaScript go faster and deferring loads of content until after page ready &amp;#8230; so why oh why oh why would you think a painfully slow application &amp;#8211; such as Wave &amp;#8211; should be any different to &lt;span class="caps"&gt;EVERYTHING&lt;/span&gt; your company stands for and yet be sucessful.&lt;/p&gt;
&lt;p&gt;As for the things it was hyped up to do: Productivity &amp;#8211; nope, it was too slow. Wiki(ish) &amp;#8211; nope, it was too complicated. Conversation &amp;#8211; nope, it was too surreal (after all, when have you been able to edit other people&amp;#8217;s past conversation?).&lt;/p&gt;
&lt;p&gt;Finally, it was immediately obvious to myself and the majority of my friends (that is, only two thought Wave was any good) that Wave wasn&amp;#8217;t what Google trumpeted it as. It was in fact, a gimmick. A fun game that kept us occupied for exactly one afternoon, after which people said &amp;#8220;Now I&amp;#8217;m done, don&amp;#8217;t think I&amp;#8217;ll do that again&amp;#8221;. Kind of like playing a new game only to realise that it has no longevity. No usefulness. No future.&lt;/p&gt;
&lt;p&gt;So if it was painfully obvious to the rest of the world (ok, 98% of Wave users) that it was annoying, why wasn&amp;#8217;t it obvious to you and your team. After all, you do champion measuring what your users are doing. If 98% aren&amp;#8217;t logging in much after the first day, surely that&amp;#8217;s a sign it&amp;#8217;s not going well. I&amp;#8217;m surprised it took you a year to figure that out.&lt;/p&gt;
&lt;p&gt;All the best,&lt;br /&gt;
Andy&lt;/p&gt;</content>
 </entry>

 <entry>
   <title>Opening Up Cloud Services</title>
   <link href="http://chilts.org/blog/opening-up-cloud-services.html" />
   <updated>2010-07-19T00:00:00-07:00</updated>
   <id>http://chilts.org/blog/opening-up-cloud-services</id>
   <content type="html">&lt;p&gt;It&amp;#8217;s been a while since I posted but this particular news item today has definitely made my ears prick up. Of course, I&amp;#8217;m presuming what this also means for the future and I hope I&amp;#8217;m right.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.rackspacecloud.com/blog/2010/07/19/open-stack/"&gt;RackspaceCloud&lt;/a&gt; and &lt;a href="http://www.nasa.gov/"&gt;&lt;span class="caps"&gt;NASA&lt;/span&gt;&lt;/a&gt; (of all people) have started a joint initiative called &lt;a href="http://openstack.org/"&gt;OpenStack&lt;/a&gt;. Basically it means that there will be an open source solution to cloud servers and other web services. Yes, I know about &lt;a href="http://www.ubuntu.com/cloud"&gt;Eucalyptus&lt;/a&gt; but I think this means much more than that.&lt;/p&gt;
&lt;p&gt;From what I understand, they will be open sourcing the code that powers their &lt;a href="http://www.rackspacecloud.com/cloud_hosting_products/servers"&gt;Cloud Servers&lt;/a&gt; &lt;span class="caps"&gt;API&lt;/span&gt; and in the not too distant future, the code that powers their &lt;a href="http://www.rackspacecloud.com/cloud_hosting_products/files"&gt;Cloud Files&lt;/a&gt; service too.&lt;/p&gt;
&lt;p&gt;If I extrapolate with hope, then I can only imagine that they will also be adding more services in the future, such as a queuing system, a notification service and possibly a distributed DB service! Yes, these are all examples of the wonderful (but proprietary) services that &lt;a href="http://aws.amazon.com/"&gt;Amazon Web Services&lt;/a&gt; already provide.&lt;/p&gt;
&lt;p&gt;Anyway, today is looking like it could be a good day for the future of cloud computing. Being able to run a free and open source operating system inside a virtual machine which is running a &lt;span class="caps"&gt;FOSS&lt;/span&gt; OS, using &lt;span class="caps"&gt;FOSS&lt;/span&gt; services for your own &lt;span class="caps"&gt;FOSS&lt;/span&gt; software can only be a good thing. If I didn&amp;#8217;t say &lt;span class="caps"&gt;FOSS&lt;/span&gt; enough in this paragraph, let me say it one more time &amp;#8211; &lt;span class="caps"&gt;FOSS&lt;/span&gt;!&lt;/p&gt;
&lt;p&gt;Oh, and the other great thing about this is that it opens up competition and freedom to move providers. If you don&amp;#8217;t like the provider you&amp;#8217;re using, then due to the nature of the services being open source, you&amp;#8217;ll be able to switch to other providers you &lt;em&gt;do&lt;/em&gt; like! This is very much in contrast with the Amazon model where you get locked in using their services.&lt;/p&gt;
&lt;p&gt;Finally, it seems that today also marks the first day of &lt;a href="http://www.oscon.com/oscon2010"&gt;&lt;span class="caps"&gt;OSCON&lt;/span&gt;&lt;/a&gt;, and seeing as how RackspaceCloud&amp;#8217;s &lt;span class="caps"&gt;API&lt;/span&gt; is much more RESTful than Amazon&amp;#8217;s, and how they seem to say they&amp;#8217;re an open source company, I can only assume that they doing the right thing and doing it well. Let&amp;#8217;s hope they keep to their promise and deliver.&lt;/p&gt;
&lt;p&gt;Of course, with Rackspace being a far 2nd in terms of numbers of servers to Amazon&amp;#8217;s own EC2 offering I can only say that even if they didn&amp;#8217;t make this decision because of those stats, it can only help it along :)&lt;/p&gt;
&lt;p&gt;Well done Rackspace!&lt;/p&gt;</content>
 </entry>

 <entry>
   <title>Lemon Frosted Lemon Cake</title>
   <link href="http://chilts.org/recipe/lemon-frosted-lemon-cake.html" />
   <updated>2010-06-19T00:00:00-07:00</updated>
   <id>http://chilts.org/recipe/lemon-frosted-lemon-cake</id>
   <content type="html">&lt;p&gt;For the lemon cake:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;225g unsalted butter, room temperature&lt;/li&gt;

&lt;li&gt;1 cup granulated white sugar&lt;/li&gt;

&lt;li&gt;4 large eggs&lt;/li&gt;

&lt;li&gt;1 tsp pure vanilla extract&lt;/li&gt;

&lt;li&gt;zest of 1 large lemon&lt;/li&gt;

&lt;li&gt;2 cups all purpose flour&lt;/li&gt;

&lt;li&gt;2 tsps baking powder&lt;/li&gt;

&lt;li&gt;1/4 tsp salt&lt;/li&gt;

&lt;li&gt;1/4 cup (60 ml) fresh lemon juice&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the lemon frosting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1 cup icing sugar, sifted&lt;/li&gt;

&lt;li&gt;2 Tbsp fresh lemon juice&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='method'&gt;Method&lt;/h2&gt;

&lt;p&gt;Lemon Cake:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Preheat oven to 180°C with rack in centre of oven.&lt;/li&gt;

&lt;li&gt;Oil or Butter a 9&amp;#8221; cake pan.&lt;/li&gt;

&lt;li&gt;Beat butter and sugar until light, fluffy and pale in colour. Use of electric mixer is preferred but can be done manually.&lt;/li&gt;

&lt;li&gt;Add each egg mixing well in between. Beat in vanilla extract and lemon zest.&lt;/li&gt;

&lt;li&gt;Sift together flour, baking powder and salt then add to batter along with lemon juice. Mix only until incorporated.&lt;/li&gt;

&lt;li&gt;Pour batter into pan, smoothing the top.&lt;/li&gt;

&lt;li&gt;Bake about 40 - 45 minutes and place on wire rack to cool.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Lemon Frosting:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Place icing sugar in a bowl and combine with the lemon juice.&lt;/li&gt;

&lt;li&gt;Drizzle over cooled cake so the frosting drips down the side.&lt;/li&gt;

&lt;li&gt;Let the icing set before covering.&lt;/li&gt;
&lt;/ol&gt;</content>
 </entry>

 <entry>
   <title>Reasons to Not Make up your Own Open Source License</title>
   <link href="http://chilts.org/blog/reasons-to-not-make-up-your-own-open-source-license.html" />
   <updated>2010-06-04T00:00:00-07:00</updated>
   <id>http://chilts.org/blog/reasons-to-not-make-up-your-own-open-source-license</id>
   <content type="html">&lt;p&gt;If Google can&amp;#8217;t get their &lt;a href="http://webmproject.org/license/"&gt;WebM license&lt;/a&gt; right, then who can:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://webmproject.blogspot.com/2010/06/changes-to-webm-open-source-license.html"&gt;Changes to the WebM Open Source License&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I did wonder why they didn&amp;#8217;t just go with &lt;a href="http://www.gnu.org/licenses/gpl-3.0.html"&gt;GPLv3&lt;/a&gt; but I figured that Google usually like the &lt;span class="caps"&gt;BSD&lt;/span&gt;-style licenses. They have answers on their &lt;a href="http://www.webmproject.org/about/faq/#licensing"&gt;Licensing &lt;span class="caps"&gt;FAQ&lt;/span&gt;&lt;/a&gt; but still, it makes you wonder.&lt;/p&gt;
&lt;p&gt;For example, I wonder if this is essentially the &lt;span class="caps"&gt;BSD&lt;/span&gt; license with the patent clauses from the GPLv3. That would be both interesting and cool, though I&amp;#8217;d still prefer &lt;span class="caps"&gt;GPL&lt;/span&gt; over &lt;span class="caps"&gt;BSD&lt;/span&gt;.&lt;/p&gt;</content>
 </entry>

 <entry>
   <title>Roasted Tomato Soup</title>
   <link href="http://chilts.org/recipe/roasted-tomato-soup.html" />
   <updated>2010-05-25T00:00:00-07:00</updated>
   <id>http://chilts.org/recipe/roasted-tomato-soup</id>
   <content type="html">&lt;p&gt;Originally from &lt;a href='http://www.101cookbooks.com/archives/roasted-tomato-soup-recipe.html'&gt;101 Cookbooks&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id='method'&gt;Method&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Preheat oven to 190°C.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Rub down one or two baking sheets with olive oil (or use parchment paper).&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Arrange chopped tomatoes, capsicum, onion and garlic onto trays - skin side down. Lightly salt both trays.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Bake for 45 mins (tomatoes should collapse and onions brown). Turn any onions if they get brown. Remove garlic if too brown.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Make up the stock.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Either:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Place all roasted veggies into a large bowl and puree with a hand blender.&lt;/li&gt;

&lt;li&gt;Alternatively, blend batches at a a time in a traditional blender with some of the stock.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Leave as chunky or smooth as you like. Mix up all ingredients along with the rest of the stock and the paprika.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id='notes'&gt;Notes&lt;/h2&gt;

&lt;p&gt;Instead of the smoked paprika (which I didn&amp;#8217;t have), I used a half teaspoon of hot chilli powder, which gave the soup a good kick.&lt;/p&gt;

&lt;p&gt;Also, once the roasted veggies are out of the oven and you&amp;#8217;re ready to blend, pop some bread into the oven to warm up so you can have nice hot bread along with the soup. I used some Turkish bread, slightly buttered.&lt;/p&gt;</content>
 </entry>

 <entry>
   <title>Two Reasons Why I'll Never Install Flash Again</title>
   <link href="http://chilts.org/blog/two-reasons-why-ill-never-install-flash-again.html" />
   <updated>2010-05-21T00:00:00-07:00</updated>
   <id>http://chilts.org/blog/two-reasons-why-ill-never-install-flash-again</id>
   <content type="html">&lt;p&gt;The first is pretty obvious. Now that I can watch YouTube using HTML5 features that means Flash is one step away from being chucked out forever.&lt;/p&gt;
&lt;p&gt;And after reading this blog entry about the Google Maps &lt;span class="caps"&gt;API&lt;/span&gt; v3, Flash &amp;#8211; as far as I&amp;#8217;m concerned &amp;#8211; is now out of the window. I didn&amp;#8217;t realise but hidden in amongst a lot of other text are the words &lt;a href="http://googlegeodevelopers.blogspot.com/2010/05/they-grow-up-so-fast.html"&gt;The most significant change is that Street View is entirely implemented in &lt;span class="caps"&gt;HTML&lt;/span&gt;&amp;#8230;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I thought &amp;#8220;No, surely not&amp;#8221;, so I kept double clicking the map until I was sufficiently zoomed in to see &amp;#8216;Pegman&amp;#8217; and I moved him onto the road. Sure enough, in my non-Flash versions of both Chrome and Firefox I could see Street View. After twisting the view around, clicking up and down the street I was wondering to myself &amp;#8220;I have no freakin&amp;#8217; idea how they did this, but I&amp;#8217;m glad they did&amp;#8221;. If you haven&amp;#8217;t noticed already, I think the Flash version of Street View had two levels of zoom, well this one seems to have 5 or 6.&lt;/p&gt;
&lt;p&gt;So yes, I&amp;#8217;m a happy bunny tonight. Add this to the fact that GitHub also reimplemented their &lt;a href="http://github.com/blog/621-bye-bye-flash-network-graph-is-now-canvas"&gt;network graph&lt;/a&gt; a few months ago using the Canvas element, the future is looking decidedly bright (and very HTML5-CSS3-like).&lt;/p&gt;</content>
 </entry>

 <entry>
   <title>ismyblogworking.com doesn't really work</title>
   <link href="http://chilts.org/blog/ismyblogworking-com-doesnt-really-work.html" />
   <updated>2010-05-21T00:00:00-07:00</updated>
   <id>http://chilts.org/blog/ismyblogworking-com-doesnt-really-work</id>
   <content type="html">&lt;p&gt;I got an item in my &lt;span class="caps"&gt;RSS&lt;/span&gt; feed the other day. It was for my old (hardly used, one careful owner) site www.pie.geek.nz. I have let it lapse since I never really used it, hence &lt;span class="caps"&gt;DNS&lt;/span&gt; broke.&lt;/p&gt;
&lt;p&gt;It read:&lt;/p&gt;
&lt;pre&gt;Your blog is broken:
DNS failure.
Last change in status was Sun, 02 May 2010 11:28:00 +0000
&lt;/pre&gt;
&lt;p&gt;Great, except it gave me this update on the 19th May. That means it took 17 days for the ismyblogworking.com service to tell me. Hardly a recommendation for you to use it.&lt;/p&gt;
&lt;p&gt;For some reason I expect that if I sign up to a service which tells you if your blog is broken, it would notify you a little quicker than 17 days. All good fun.&lt;/p&gt;</content>
 </entry>

 <entry>
   <title>New Release of Cil v0.07</title>
   <link href="http://chilts.org/blog/new-release-of-cil-v0-07.html" />
   <updated>2010-05-17T00:00:00-07:00</updated>
   <id>http://chilts.org/blog/new-release-of-cil-v0-07</id>
   <content type="html">&lt;p&gt;I&amp;#8217;d just like to mention that cil v0.07 has had a belated release. It had a bit of work done to it (6 issues) back in January and February and since it&amp;#8217;s been working fine for me since then, I thought it about time to release.&lt;/p&gt;
&lt;p&gt;Please see the &lt;a href="/project/cil/"&gt;project page for cil&lt;/a&gt; for the download link and other information.&lt;/p&gt;
&lt;p&gt;Note, the six issues that have been completed are (generated by `cil summary &amp;#8212;is-closed &amp;#8212;label=Milestone-v0.07`:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;03c93e82 Remove the whole &lt;span class="caps"&gt;VCS&lt;/span&gt;.pm stuff, just have a Git.pm at the top level&lt;/li&gt;
	&lt;li&gt;1111d724 Make sure libfile-homedir-perl is in Debian packaging&lt;/li&gt;
	&lt;li&gt;1a5fb257 Make sure depends-on and precedes can &amp;#8212;add and &amp;#8212;commit&lt;/li&gt;
	&lt;li&gt;52d702df The StatusOpenList and StatusClosedList should fully describe what is allowed&lt;/li&gt;
	&lt;li&gt;c77fae7c Make commit messages nicer when multiple issues are updated&lt;/li&gt;
	&lt;li&gt;f7ce705b Check for duplicate DependsOn and Precedes&lt;/li&gt;
&lt;/ul&gt;</content>
 </entry>

 <entry>
   <title>Birmingham Balti</title>
   <link href="http://chilts.org/recipe/birmingham-balti.html" />
   <updated>2010-05-11T00:00:00-07:00</updated>
   <id>http://chilts.org/recipe/birmingham-balti</id>
   <content type="html">&lt;p&gt;I really liked this recipe. Originally from the &lt;a href='http://www.vegsoc.org/nvw/2006/recipes/aubbalti.html'&gt;Vegetarian Society&lt;/a&gt; website. Otherwise known as &amp;#8220;Aubergine, Potato and Chick Pea Balti&amp;#8221; but I like the name &amp;#8220;Birmingham Balti&amp;#8221; better.&lt;/p&gt;

&lt;p&gt;For the vegetables:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;2 tbs vegetable oil&lt;/li&gt;

&lt;li&gt;1 onion, peeled and finely sliced&lt;/li&gt;

&lt;li&gt;½ tsp cumin seeds&lt;/li&gt;

&lt;li&gt;1 potato, peeled and cut into 1 cm cubes&lt;/li&gt;

&lt;li&gt;1 aubergine, cut into 1 cm cubes&lt;/li&gt;

&lt;li&gt;410g tin chickpeas, rinsed &amp;amp; drained&lt;/li&gt;

&lt;li&gt;1 tsp ground coriander&lt;/li&gt;

&lt;li&gt;½ tsp ground cumin&lt;/li&gt;

&lt;li&gt;¼ tsp ground turmeric&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the sauce:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;2 tbs vegetable oil&lt;/li&gt;

&lt;li&gt;1 onion, peeled and finely sliced&lt;/li&gt;

&lt;li&gt;2 cloves garlic, crushed&lt;/li&gt;

&lt;li&gt;2 tsp root ginger, peeled and grated&lt;/li&gt;

&lt;li&gt;4 cm cassia bark (optional)&lt;/li&gt;

&lt;li&gt;6 whole cloves&lt;/li&gt;

&lt;li&gt;450g tin chopped plum tomatoes&lt;/li&gt;

&lt;li&gt;¼ tsp ground turmeric&lt;/li&gt;

&lt;li&gt;½ tsp ground coriander&lt;/li&gt;

&lt;li&gt;½ tsp ground cumin&lt;/li&gt;

&lt;li&gt;1½ tsp salt&lt;/li&gt;

&lt;li&gt;1 tsp sugar&lt;/li&gt;

&lt;li&gt;1 tsp red chilli powder to taste&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To finish:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;4 tbs fresh coriander, finely chopped&lt;/li&gt;

&lt;li&gt;200ml water&lt;/li&gt;

&lt;li&gt;½ tsp garam masala&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='method'&gt;Method&lt;/h2&gt;

&lt;p&gt;For the vegetables:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Heat the oil in a large saucepan and add the sliced onions and cumin seeds. Cook for 3 minutes&lt;/li&gt;

&lt;li&gt;Add the chopped potato, aubergine, chickpeas, ground coriander, cumin and turmeric. Stir to coat vegetables evenly and then cook over a high heat for 3 minutes stirring occasionally. Remove from pan and set aside.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For the sauce:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Heat the oil in the pan. Add the onion, crushed garlic, grated ginger, cassia bark and whole cloves. Cook for 3 minutes.&lt;/li&gt;

&lt;li&gt;Add the rest of the sauce ingredients: chopped plum tomotoes, turmeric, coriander, cumin, salt, sugar and chilli to taste. Cook on a high heat for 2 minutes.&lt;/li&gt;

&lt;li&gt;Lower to a medium heat and cook for a further 3 minutes stirring occasionally.&lt;/li&gt;

&lt;li&gt;Remove the cassia bark and blend the sauce roughly with a hand blender. Add the vegetables to the sauce along with the finishing ingredients: chopped coriander, the water and the garam masala.&lt;/li&gt;

&lt;li&gt;Cook over a low heat for 20 minutes, stirring occasionally. Serve with Basmati rice and/or naan bread.&lt;/li&gt;
&lt;/ol&gt;</content>
 </entry>

 <entry>
   <title>Other Income Streams</title>
   <link href="http://chilts.org/retire-at-40/other-income-streams.html" />
   <updated>2010-05-08T00:00:00-07:00</updated>
   <id>http://chilts.org/retire-at-40/other-income-streams</id>
   <content type="html">&lt;p&gt;One thing I have been doing recently (and of course, not posting very much here) has been to start getting together a small business plan to get myself a third income stream.&lt;/p&gt;
&lt;p&gt;Currently I am working in a 40 hr salaried position which is of course my first and main income stream.&lt;/p&gt;
&lt;p&gt;Secondly, I have a house up the coast which I am renting out. Even though it has been rented out for 4.5 years, I have battled through paying the extra interest and this year will (I think and hope) be the first year that renting it out will turn a profit. It&amp;#8217;ll be small to start off with but hopefully progress as the years go on.&lt;/p&gt;
&lt;p&gt;But something has been niggling me recently and I have decided that it was about time to start getting another income from somewhere else. After racking my brains, I have decided to go into business for myself and keep it as a part-time project which I can do in the evenings and weekends. I think I&amp;#8217;m lucky that my day-job allows this since there are a number of others who also earn money in their non-(normal-)work time.&lt;/p&gt;
&lt;p&gt;I won&amp;#8217;t quite say what it is yet but it will tap into my IT knowledge and knowledge of systems around the world which I can also tap into. Suffice to say it will be a &lt;a href="/retire-at-40/what-is-passive-income-and-why-you-need.html"&gt;passive stream&lt;/a&gt; though that doesn&amp;#8217;t mean it is without work, it just means that the income from it should be non-proportional to the time I put in.&lt;/p&gt;
&lt;p&gt;ie. it is not my time I am selling, but a product independent of my time.&lt;/p&gt;
&lt;p&gt;This is very important, especially for someone who still has a day job.&lt;/p&gt;</content>
 </entry>

 <entry>
   <title>Making a new Free Software Project</title>
   <link href="http://chilts.org/blog/making-a-new-free-software-project.html" />
   <updated>2010-05-08T00:00:00-07:00</updated>
   <id>http://chilts.org/blog/making-a-new-free-software-project</id>
   <content type="html">&lt;p&gt;Over the past few days I&amp;#8217;ve been playing with &lt;a href="http://nodejs.org/"&gt;NodeJS&lt;/a&gt;. It&amp;#8217;s been an eye opener to see how JavaScript would work out on the server (notice I didn&amp;#8217;t say server-side JavaScript, which I don&amp;#8217;t yet think it is suitable for, in liue of a nice templating system).&lt;/p&gt;
&lt;p&gt;My initial plan was to write a small queue system, much like &lt;a href="http://aws.amazon.com/sqs/"&gt;AWS&amp;#8217;s &lt;span class="caps"&gt;SQS&lt;/span&gt;&lt;/a&gt;. In the end, I created one in less than 130 lines of JavaScript though I know that can also get smaller.&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s been a good eye-opener to see what NodeJS can already do, added to the fact that it&amp;#8217;s an event driven language &amp;#8211; much like JS in the browser is &amp;#8211; so it&amp;#8217;s pretty fast. Even though it is an interpreted language, the V8 engine it is using (the one from Google) is heavily optimised and the main developer of NodeJS, &lt;a href="http://four.livejournal.com/"&gt;Ryan Dahl&lt;/a&gt;, is always careful to write non-blocking C code when developing Node itself, or it&amp;#8217;s modules.&lt;/p&gt;
&lt;p&gt;For my future plan, I intend on writing a couple more infrastructure services. A queue system which is distributed and uses the above simple queue would come in very useful, as would a publish/subscribe system much like the new &lt;a href="http://aws.amazon.com/sns/"&gt;&lt;span class="caps"&gt;AWS&lt;/span&gt; &lt;span class="caps"&gt;SNS&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Maybe in the future, I&amp;#8217;ll also try out some other things too.&lt;/p&gt;
&lt;p&gt;But the purpose of this blog entry is to describe what I&amp;#8217;m doing to make sure that the project starts out the Open Source way from the beginning. Usually I add copyrights and suchlike later, but hopefully will do it all properly from the start.&lt;/p&gt;
&lt;p&gt;I have (so far) been following two articles, one from my good friend &lt;a href="http://feeding.cloud.geek.nz/"&gt;Francois&lt;/a&gt; and one from the &lt;a href="http://www.gnu.org/"&gt;Gnu&lt;/a&gt; site:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.gnu.org/licenses/gpl-howto.html"&gt;How to Use the Gnu Licenses for your Own Software&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://feeding.cloud.geek.nz/2008/05/choosing-right-license-for-your-new.html"&gt;Choosing the Right License for your Free Software/Open Source Project&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To see the result of this, go and have a look at the GitHub repo I have pushed to. The project will be called &amp;#8216;sensi&amp;#8217; and will expand in the near future.&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://github.com/appsattic/sensi"&gt;Sensi @ GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One final point to mention is how I figured the name &amp;#8216;sensi&amp;#8217; was ok. I trawled through the searches of all of the following sites to make sure it wasn&amp;#8217;t already used:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://github.com/"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://sourceforge.net/"&gt;SourceForge&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://code.google.com/projecthosting/"&gt;Google Project Hosting&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://www.ohloh.net/"&gt;Ohloh&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://freshmeat.net/"&gt;FreshMeat&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Anything else I should do now whilst the project is still young? Any other code related or repository websites I should have checked to see if the name was unique? Any other ideas for (&lt;span class="caps"&gt;FOSS&lt;/span&gt;) &amp;#8216;Infrastucture as a Service&amp;#8217;?&lt;/p&gt;</content>
 </entry>

 <entry>
   <title>Spiced Pilau Rice</title>
   <link href="http://chilts.org/recipe/spiced-pilau-rice.html" />
   <updated>2010-04-27T00:00:00-07:00</updated>
   <id>http://chilts.org/recipe/spiced-pilau-rice</id>
   <content type="html">&lt;p&gt;This fragrant rice dish is lovely served with curries and spiced dishes.&lt;/p&gt;

&lt;h2 id='method'&gt;Method&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;heat oil in thick-based saucepan and soften onion for three mins&lt;/li&gt;

&lt;li&gt;Stir in all the spices, bay leaf and salt for one minute&lt;/li&gt;

&lt;li&gt;Stir in the rice until well coated&lt;/li&gt;

&lt;li&gt;Pour in boiling water and stir once&lt;/li&gt;

&lt;li&gt;Put a snug lid on and simmer gently for 15 mins or until rice is tender&lt;/li&gt;

&lt;li&gt;Tip into serving dish and remove cinnamon stick, bay leaf and cardamom pods&lt;/li&gt;

&lt;li&gt;Fluff with a fork and serve (cover with a tea-towel to keep warm if longer than 5 mins)&lt;/li&gt;
&lt;/ol&gt;</content>
 </entry>

 <entry>
   <title>Curried Nut Roast</title>
   <link href="http://chilts.org/recipe/curried-nut-roast.html" />
   <updated>2010-04-27T00:00:00-07:00</updated>
   <id>http://chilts.org/recipe/curried-nut-roast</id>
   <content type="html">&lt;p&gt;This has been a great find and I love it. Thanks Delia! (From her &amp;#8216;Complete Cooking Course&amp;#8217;.)&lt;/p&gt;

&lt;h2 id='method'&gt;Method&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Pre-heat over to 220℃&lt;/li&gt;

&lt;li&gt;Grease an 18cm square cake tin&lt;/li&gt;

&lt;li&gt;Gently fry onions and capsicum in the oil until soft (10 mins)&lt;/li&gt;

&lt;li&gt;Mix nuts, breadcrumbs, garlic, herbs and curry powder in a large bowl&lt;/li&gt;

&lt;li&gt;Stir into this the onions, capsicum and tomatoes. Mix thoroughly.&lt;/li&gt;

&lt;li&gt;Beat egg, add to mixture and bind together&lt;/li&gt;

&lt;li&gt;Pack mixture into cake tin and bake for 30-40 mins or until golden&lt;/li&gt;
&lt;/ol&gt;</content>
 </entry>

 
</feed>

