<?xml version="1.0" encoding="utf-8"?>
<!-- If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/ -->
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:lj="http://www.livejournal.com">
  <id>urn:lj:livejournal.com:atom1:jkakar</id>
  <title>jkakar</title>
  <subtitle>jkakar</subtitle>
  <author>
    <name>jkakar</name>
  </author>
  <link rel="alternate" type="text/html" href="http://jkakar.livejournal.com/"/>
  <link rel="self" type="text/xml" href="http://jkakar.livejournal.com/data/atom"/>
  <updated>2008-12-09T02:50:37Z</updated>
  <lj:journal userid="9812331" username="jkakar" type="personal"/>
  <link rel="service.feed" type="application/x.atom+xml" href="http://jkakar.livejournal.com/data/atom" title="jkakar"/>
  <link rel="hub" href="http://pubsubhubbub.appspot.com/"/>
  <entry>
    <id>urn:lj:livejournal.com:atom1:jkakar:4130</id>
    <link rel="alternate" type="text/html" href="http://jkakar.livejournal.com/4130.html"/>
    <link rel="self" type="text/xml" href="http://jkakar.livejournal.com/data/atom/?itemid=4130"/>
    <title>Open source goodness!</title>
    <published>2008-12-09T02:50:37Z</published>
    <updated>2008-12-09T02:50:37Z</updated>
    <category term="launchpad open-source"/>
    <content type="html">Launchpad will be released under the AGPL on July 21st, 2009, yo!&lt;br /&gt;Exciting times ahead!</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:jkakar:3940</id>
    <link rel="alternate" type="text/html" href="http://jkakar.livejournal.com/3940.html"/>
    <link rel="self" type="text/xml" href="http://jkakar.livejournal.com/data/atom/?itemid=3940"/>
    <title>identi.ca</title>
    <published>2008-11-20T02:07:18Z</published>
    <updated>2008-11-20T02:07:18Z</updated>
    <category term="microblogging identi.ca"/>
    <content type="html">I've created an identi.ca account.  My username is jkakar.  I'm not&lt;br /&gt;sure I'll actually use it, as this is my first time trying&lt;br /&gt;microblogging of any kind.  I often have ideas I think I should post&lt;br /&gt;about and end up not doing so because writing well tends to take&lt;br /&gt;more time than I think I have.  Maybe identi.ca will be light-weight&lt;br /&gt;enough that I'll actually use it.&lt;br /&gt;&lt;br /&gt;One of the obvious things I could do instead of posting more things&lt;br /&gt;here is write on my Facebook wall or update my status, but I&lt;br /&gt;generally find Facebook very boring to use.  I'm not interested in&lt;br /&gt;logging in a hundred times a day to see if anything has changed and&lt;br /&gt;I also don't want to be bombarded by notification emails with&lt;br /&gt;nothing in them but a link that invites me to login to Facebook.&lt;br /&gt;&lt;br /&gt;From what I can tell, identi.ca is more about real-time&lt;br /&gt;conversations than random status updates.  There does seem to be a&lt;br /&gt;lot of useless "Bob is just about to go to bed" tweets, but&lt;br /&gt;hopefully subscription will make it possible to filter out people&lt;br /&gt;that don't actually have anything interesting to say.  I'm also&lt;br /&gt;attracted to the fact that it's integrated with Jabber, which means&lt;br /&gt;I can use the chat tools I'm familiar with to interact with it.&lt;br /&gt;&lt;br /&gt;We'll see how it goes!</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:jkakar:3797</id>
    <link rel="alternate" type="text/html" href="http://jkakar.livejournal.com/3797.html"/>
    <link rel="self" type="text/xml" href="http://jkakar.livejournal.com/data/atom/?itemid=3797"/>
    <title>Secret languages</title>
    <published>2008-11-17T20:40:37Z</published>
    <updated>2008-11-17T20:40:37Z</updated>
    <category term="culture manners"/>
    <content type="html">I often go to the Subway up the street to eat lunch.  Most of the&lt;br /&gt;employees there are Indian women that appear to be native Urdu&lt;br /&gt;speakers.  They all speak pretty good English, but most of the time&lt;br /&gt;they talk to each other in Urdu, even while they're serving&lt;br /&gt;customers.&lt;br /&gt;&lt;br /&gt;I have a rudimentary understanding of Urdu--not good enough to&lt;br /&gt;speak, but good enough to get the basic gist of a conversation going&lt;br /&gt;on around me.  Most of the time they chat about mundane things, but&lt;br /&gt;every now and then they talk about the customers they're serving,&lt;br /&gt;and typically in unfriendly ways.  I get that it's more comfortable&lt;br /&gt;for them to communicate with each other in their mother tongue, but&lt;br /&gt;I find this behaviour, even without the unfriendly comments, to be&lt;br /&gt;very rude.  It probably doesn't help that they don't do any of the&lt;br /&gt;social things I associate with being friendly, like smile or make&lt;br /&gt;eye contact.&lt;br /&gt;&lt;br /&gt;Am I being too harsh?  Should people working with the public speak&lt;br /&gt;whatever language they want with their colleagues?  Does it matter&lt;br /&gt;what the content of the conversations are?</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:jkakar:3498</id>
    <link rel="alternate" type="text/html" href="http://jkakar.livejournal.com/3498.html"/>
    <link rel="self" type="text/xml" href="http://jkakar.livejournal.com/data/atom/?itemid=3498"/>
    <title>Those special moments!</title>
    <published>2008-11-15T00:42:57Z</published>
    <updated>2008-11-15T00:43:24Z</updated>
    <category term="nerd patterns"/>
    <content type="html">Yesterday I noticed something flicker on the dashboard while&lt;br /&gt;driving.  I looked down and noticed that the odometer read 111111.&lt;br /&gt;It was a special moment.&lt;br /&gt;&lt;br /&gt;I often notice when the time is 11:11 or 12:34 or 4:32.  I don't&lt;br /&gt;know why, but for some reason times or sequences of numbers with&lt;br /&gt;patterns always make me smile.  I feel like I've been part of&lt;br /&gt;something, a little secret.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:jkakar:3287</id>
    <link rel="alternate" type="text/html" href="http://jkakar.livejournal.com/3287.html"/>
    <link rel="self" type="text/xml" href="http://jkakar.livejournal.com/data/atom/?itemid=3287"/>
    <title>Wed designer companies</title>
    <published>2008-07-04T00:20:03Z</published>
    <updated>2008-07-04T00:20:03Z</updated>
    <content type="html">I'm looking for a local (to Vancouver) web design company to work&lt;br /&gt;with me to improve the look and feel of Landscape.  Do you have any&lt;br /&gt;recommendations?</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:jkakar:2937</id>
    <link rel="alternate" type="text/html" href="http://jkakar.livejournal.com/2937.html"/>
    <link rel="self" type="text/xml" href="http://jkakar.livejournal.com/data/atom/?itemid=2937"/>
    <title>Time of day</title>
    <published>2008-02-13T17:25:28Z</published>
    <updated>2008-02-13T17:25:28Z</updated>
    <category term="meme"/>
    <content type="html">The part about moving slowly like a relaxed cat sounds about right.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.the-n.com/games/quiz/3321"&gt;&lt;img src="http://www.the-n.com/media/quiz/badges/timeofday_quiz/649.gif" border="0" /&gt;&lt;/a&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:jkakar:2605</id>
    <link rel="alternate" type="text/html" href="http://jkakar.livejournal.com/2605.html"/>
    <link rel="self" type="text/xml" href="http://jkakar.livejournal.com/data/atom/?itemid=2605"/>
    <title>Analysis is hard</title>
    <published>2008-01-14T02:11:48Z</published>
    <updated>2008-01-14T02:11:48Z</updated>
    <category term="postgres database"/>
    <content type="html">After even further analysis, it turns out that using or not using ON&lt;br /&gt;DELETE CASCADE isn't the thing that really affects the time it takes&lt;br /&gt;to delete the data.  The speed-up is gained by using 3 separate&lt;br /&gt;statements to delete rows from child tables first followed by the&lt;br /&gt;parent table.  The same speed-up is present when ON DELETE CASCADE&lt;br /&gt;rules are present.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:jkakar:2487</id>
    <link rel="alternate" type="text/html" href="http://jkakar.livejournal.com/2487.html"/>
    <link rel="self" type="text/xml" href="http://jkakar.livejournal.com/data/atom/?itemid=2487"/>
    <title>Database performance</title>
    <published>2008-01-05T22:48:32Z</published>
    <updated>2008-01-05T22:48:32Z</updated>
    <category term="postgres database"/>
    <content type="html">A couple of days ago I debugged a performance issue that was coming up&lt;br /&gt;when trying to remove rows from tables in a PostgreSQL database.&lt;br /&gt;There were three tables involved:&lt;br /&gt;&lt;pre&gt;
parent:
    id SERIAL PRIMARY KEY

child_a:
    id SERIAL PRIMARY KEY
    parent_id INTEGER NOT NULL ON DELETE CASCADE

child_b:
    id SERIAL PRIMARY KEY
    parent_id INTEGER NOT NULL ON DELETE CASCADE
&lt;/pre&gt;&lt;br /&gt;The parent table contained about 1400 rows, 700 of which I wanted to&lt;br /&gt;delete.  The child_a and child_b tables contained 5 million and 2&lt;br /&gt;million rows, respectively, related to the 700 parent rows I wanted to&lt;br /&gt;delete.  The first thing I did was run a delete query without changing&lt;br /&gt;anything about the schema.  The query took 198 minutes to run.&lt;br /&gt;&lt;br /&gt;The first obvious problem, exposed by PostgreSQL's EXPLAIN statement,&lt;br /&gt;was that the foreign key columns in the child tables weren't indexed.&lt;br /&gt;Running the same delete query took 97 minutes after adding indexes for&lt;br /&gt;the parent_id columns in the child_a and child_b tables.  A&lt;br /&gt;significant win, but still far too long.  It's not acceptable to run a&lt;br /&gt;query on our production servers that would effectively make the&lt;br /&gt;database unusable for 97 minutes.&lt;br /&gt;&lt;br /&gt;I dug further into PostgreSQL's EXPLAIN documentation and discovered&lt;br /&gt;EXPLAIN ANALYZE.  When the ANALYZE keyword is provided the query is&lt;br /&gt;executed to help produce a more detailed query plan.  Running the&lt;br /&gt;query with ANALYZE showed that a significant portion of the time was&lt;br /&gt;taken up with foreign key triggers.  I wondered if the issue was&lt;br /&gt;related to foreign key constraints.  I removed the constraints&lt;br /&gt;entirely and ran queries to remove the same set of data.  They ran in&lt;br /&gt;77 seconds.  What a huge performance gain!  I then wondered if the&lt;br /&gt;issue wasn't really with the foreign key constraints themselves but&lt;br /&gt;with the ON CASCADE DELETE rules.  I added the constraints back&lt;br /&gt;without the ON CASCADE DELETE rules and the delete query ran in 148&lt;br /&gt;seconds.  That's still fast enough without giving up the safety&lt;br /&gt;provided by foreign key checks.&lt;br /&gt;&lt;br /&gt;The conclusion is that ON CASCADE DELETE is not suitable for anything&lt;br /&gt;beyond very small datasets.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:jkakar:2144</id>
    <link rel="alternate" type="text/html" href="http://jkakar.livejournal.com/2144.html"/>
    <link rel="self" type="text/xml" href="http://jkakar.livejournal.com/data/atom/?itemid=2144"/>
    <title>Quality is a habit</title>
    <published>2007-11-25T21:01:04Z</published>
    <updated>2007-11-25T21:01:04Z</updated>
    <content type="html">The way I write software has evolved over time.  Over the years I've&lt;br /&gt;learned a series of practices that are now core parts of the way I&lt;br /&gt;work.  I do branch-based development, which means I make small changes&lt;br /&gt;in short iterations so that I can start and complete a task in a&lt;br /&gt;matter of hours or days.  This keeps me motivated because I'm&lt;br /&gt;constantly accomplishing little goals.  I do test-driven development,&lt;br /&gt;which means I write tests that my software has to pass before I&lt;br /&gt;consider it complete.  This builds self-validation into the software&lt;br /&gt;and helps me focus on the behaviour the software must implement to&lt;br /&gt;solve the problem I'm tackling.  I participate in code reviews, which&lt;br /&gt;means other people look at the changes I've made and give me feedback&lt;br /&gt;soon after I complete a task.  I'm constantly learning from the people&lt;br /&gt;around me and am continually growing my overall knowledge of the&lt;br /&gt;software we work on.&lt;br /&gt;&lt;br /&gt;I have a theory that "the things that contribute to quality need to be&lt;br /&gt;part of your daily work flow."  One of the key aspects of the&lt;br /&gt;practices I described above is that I apply them daily.  In software,&lt;br /&gt;and in life, problems tend to be harder to fix the longer we leave&lt;br /&gt;them unfixed.  As time goes on the problems become more and more&lt;br /&gt;deeply ingrained.  The practices above cause problems to be caught&lt;br /&gt;before they're hard to fix and a focus on quality encourages us to fix&lt;br /&gt;them before we move on.  I think this applies to most of the things&lt;br /&gt;people do.  You don't improve your health by eating a really healthy&lt;br /&gt;meal once-a-week.  Neither do you improve your fitness by exercising&lt;br /&gt;for several hours only on the weekend.  Learning anything is very&lt;br /&gt;difficult if you don't practice regularly.  Maintaining a friendship&lt;br /&gt;is hard if you don't have frequent contact.  I think that good habits,&lt;br /&gt;those that contribute to quality, are about course correction.  If you&lt;br /&gt;apply them frequently you stay on course because you are constantly&lt;br /&gt;correcting.  If you apply them infrequently you get some benefit but&lt;br /&gt;it's easier to veer off over time and end up on the wrong path.&lt;br /&gt;&lt;br /&gt;When I reflect on my life and identify things that I want to change&lt;br /&gt;I'm increasingly asking myself the question, "What do I need to change&lt;br /&gt;in my daily routine to realize the results I desire?"</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:jkakar:1877</id>
    <link rel="alternate" type="text/html" href="http://jkakar.livejournal.com/1877.html"/>
    <link rel="self" type="text/xml" href="http://jkakar.livejournal.com/data/atom/?itemid=1877"/>
    <title>Facebook</title>
    <published>2007-09-08T01:06:01Z</published>
    <updated>2007-09-08T01:06:01Z</updated>
    <category term="facebook"/>
    <content type="html">Only a few hours after deactivating my Facebook account I've gone and&lt;br /&gt;reactivated it.  I was walking to the studio today to play some drums&lt;br /&gt;and thinking about the whole thing when I realized that my decision to&lt;br /&gt;deactivate the account goes against my basic principles.  That is, I&lt;br /&gt;don't believe in making decisions based on fear of the unknown.  If&lt;br /&gt;you know something is dangerous, then sure, weigh the risks and make a&lt;br /&gt;decision about whether you want to go further.&lt;br /&gt;&lt;br /&gt;I think that making decisions based on the fear that some unknown bad&lt;br /&gt;thing might happen is a very negative way to live.  That kind of&lt;br /&gt;behaviour excludes a whole range of positive things that could happen.&lt;br /&gt;It also excludes bad things from happening.  No one wants bad things&lt;br /&gt;to happen, but on the other hand the only way you grow is to&lt;br /&gt;experience adversity and learn how to deal with it.  If you're&lt;br /&gt;comfortable you're probably not growing.  I want a positive attitude&lt;br /&gt;that treats adversity as an opportunity for growth.&lt;br /&gt;&lt;br /&gt;I believe an important part of this is having a soft mind.  By that I&lt;br /&gt;mean that it's important to have a mind able change when it discovers&lt;br /&gt;a better way to do things.  In this particular case the change is very&lt;br /&gt;trivial and easy.  Nonetheless, part of the reactivation is about,&lt;br /&gt;given that I realized my behaviour is not in line with the way I want&lt;br /&gt;to live, changing myself to be in line with how I want to be.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:jkakar:1718</id>
    <link rel="alternate" type="text/html" href="http://jkakar.livejournal.com/1718.html"/>
    <link rel="self" type="text/xml" href="http://jkakar.livejournal.com/data/atom/?itemid=1718"/>
    <title>Facebook</title>
    <published>2007-09-07T03:50:22Z</published>
    <updated>2007-09-07T03:50:22Z</updated>
    <category term="facebook"/>
    <content type="html">I've deactivated my Facebook account after less than two weeks of&lt;br /&gt;using it.  I'm disappointed that it's deactivated and not removed.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:jkakar:1335</id>
    <link rel="alternate" type="text/html" href="http://jkakar.livejournal.com/1335.html"/>
    <link rel="self" type="text/xml" href="http://jkakar.livejournal.com/data/atom/?itemid=1335"/>
    <title>Discovering Ubuntu</title>
    <published>2007-09-05T17:23:41Z</published>
    <updated>2007-09-05T17:23:41Z</updated>
    <category term="ubuntu"/>
    <content type="html">hsifyppah recently wrote about switching to Ubuntu and a few other&lt;br /&gt;people chimed in about running it.  The Ubuntu Screencast Team is&lt;br /&gt;doing cool stuff to try to make discovering Ubuntu easier,&lt;br /&gt;particularly this month.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://screencasts.ubuntu.com/"&gt;http://screencasts.ubuntu.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Another good way to discover the going on in Ubuntu-land is to read&lt;br /&gt;Planet Ubuntu.  Planet Ubuntu aggregates blog posts from a variety of&lt;br /&gt;people involved in Ubuntu.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://planet.ubuntu.com/"&gt;http://planet.ubuntu.com/&lt;/a&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:jkakar:1062</id>
    <link rel="alternate" type="text/html" href="http://jkakar.livejournal.com/1062.html"/>
    <link rel="self" type="text/xml" href="http://jkakar.livejournal.com/data/atom/?itemid=1062"/>
    <title>Storm 0.10</title>
    <published>2007-08-08T22:20:43Z</published>
    <updated>2007-08-08T22:20:43Z</updated>
    <category term="canonical storm python work"/>
    <content type="html">Storm is a Python ORM developed to satisfy the needs of the project I&lt;br /&gt;work on at Canonical.  It was recently released under the LGPL.  Those&lt;br /&gt;of you I've been chatting up about it might be interested to know that&lt;br /&gt;the 0.10 release is available!&lt;br /&gt;&lt;br /&gt;Web site: &lt;a href="http://storm.canonical.com/"&gt;http://storm.canonical.com/&lt;/a&gt;&lt;br /&gt;Downloads: &lt;a href="https://launchpad.net/storm/+download"&gt;https://launchpad.net/storm/+download&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is the second release since the project was open sourced.  A&lt;br /&gt;community is already forming and submitting changesets!</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:jkakar:946</id>
    <link rel="alternate" type="text/html" href="http://jkakar.livejournal.com/946.html"/>
    <link rel="self" type="text/xml" href="http://jkakar.livejournal.com/data/atom/?itemid=946"/>
    <title>Landscape!</title>
    <published>2007-07-24T05:32:43Z</published>
    <updated>2007-07-24T05:32:43Z</updated>
    <category term="canonical work"/>
    <content type="html">I've been working on a "secret" project at Canonical for the last 14&lt;br /&gt;months or so.  It's called Landscape.  It's a web-based system that&lt;br /&gt;allows administrators to manage networks of Ubuntu machines.  One of&lt;br /&gt;the cool things about it is that every operation is the same whether&lt;br /&gt;you want affect one machine or a hundred machines.  It was publicly&lt;br /&gt;announced yesterday at Ubuntu Live! in Portland and has been receiving&lt;br /&gt;some fanfare in the press:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://linux-watch.com/news/NS5288220442.html"&gt;http://linux-watch.com/news/NS5288220442.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Yay!</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:jkakar:706</id>
    <link rel="alternate" type="text/html" href="http://jkakar.livejournal.com/706.html"/>
    <link rel="self" type="text/xml" href="http://jkakar.livejournal.com/data/atom/?itemid=706"/>
    <title>Björk!</title>
    <published>2007-05-24T16:29:46Z</published>
    <updated>2007-05-24T16:29:46Z</updated>
    <content type="html">Björk dances like a crazy voodoo lady.  It's kind of scary.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:jkakar:502</id>
    <link rel="alternate" type="text/html" href="http://jkakar.livejournal.com/502.html"/>
    <link rel="self" type="text/xml" href="http://jkakar.livejournal.com/data/atom/?itemid=502"/>
    <title>Hiccups</title>
    <published>2007-05-11T06:11:46Z</published>
    <updated>2007-05-11T06:11:46Z</updated>
    <category term="hiccups"/>
    <content type="html">I've had a harrowing episode of the hiccups today.  They were non-stop&lt;br /&gt;for six hours.  They came in spurts after that for several more hours.&lt;br /&gt;I think they're gone now.&lt;br /&gt;&lt;br /&gt;I hate hiccups.</content>
  </entry>
</feed>
