<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2969337488622138192</id><updated>2012-01-19T12:15:22.290-08:00</updated><category term='completion'/><category term='django1.2'/><category term='installing'/><category term='display'/><category term='ferry'/><category term='relationship'/><category term='bug'/><category term='books'/><category term='development'/><category term='parenthesis'/><category term='class-based views'/><category term='lamson'/><category term='self'/><category term='parsing'/><category term='splashers'/><category term='ebnf'/><category term='tax'/><category term='psychology'/><category term='travel'/><category term='lagos'/><category term='chained-select'/><category term='extend monitor'/><category term='nginx'/><category term='cx_Oracle'/><category term='hg'/><category term='strings'/><category term='cron'/><category term='wget'/><category term='pybluez'/><category term='backup'/><category term='humor'/><category term='business'/><category term='mathematics for fun'/><category term='pinax'/><category term='mysql'/><category term='google maps'/><category term='rock'/><category term='nigeria'/><category term='holiday'/><category term='information'/><category term='bluez'/><category term='bauchi'/><category term='dream'/><category term='accident'/><category term='bash'/><category term='django'/><category term='rebranding'/><category term='virgin nigeria'/><category term='python django programming coding web framework code'/><category term='intrepid'/><category term='oracle'/><category term='rest'/><category term='personal development'/><category term='permissions'/><category term='filesystem'/><category term='lexical-scoping'/><category term='software'/><category term='jos'/><category term='coding'/><category term='optimization'/><category term='prostitution'/><category term='restructured text'/><category term='ubuntu'/><category term='chess'/><category term='intellect'/><category term='devfest'/><category term='randomness'/><category term='django dash python competition'/><category term='mind'/><category term='media'/><category term='javascript'/><category term='sea'/><category term='online booking'/><category term='restview'/><category term='apple'/><category term='PyZ3950'/><category term='perl'/><category term='lists'/><category term='dbsettings'/><category term='ideas web communities projects software'/><category term='conference'/><category term='automated backup'/><category term='airport'/><category term='evince'/><category term='file copy'/><category term='developers'/><category term='shell'/><category term='python'/><category term='steve jobs'/><category term='ply'/><category term='windows'/><category term='polymorphism'/><category term='physics'/><category term='chmod'/><category term='code'/><category term='csv'/><category term='abuja'/><category term='non-default python'/><category term='rdesktop'/><category term='database'/><category term='car'/><category term='apache'/><category term='linux'/><category term='alias'/><category term='user experience'/><category term='obex'/><category term='birthday'/><category term='vacation'/><category term='cpan'/><category term='politics'/><category term='programming'/><category term='random'/><category term='network proxy'/><category term='sketch'/><category term='flesh-trade'/><category term='ssh'/><category term='games'/><category term='prime numbers'/><category term='web framework'/><category term='income'/><category term='lightblue'/><category term='mercurial-server'/><category term='alien'/><category term='openssh'/><category term='life'/><category term='jquery'/><category term='bluetooth'/><category term='mail server'/><category term='terminal'/><category term='xlrd'/><category term='appengine'/><category term='url params'/><category term='numbers'/><category term='mercurial'/><category term='i think this is when time flies'/><title type='text'>fewerwords</title><subtitle type='html'>life, sketches, love, django, python, programming, linux, web</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>72</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-3538055806247600611</id><published>2011-12-31T01:54:00.000-08:00</published><updated>2011-12-31T01:54:04.525-08:00</updated><title type='text'>Using your rooted kindle fire through a proxy (part 1)</title><content type='html'>I rooted my kindle fire a few weeks ago. It was a rather painless process thanks to the guys at &lt;a href="http://www.xda-developers.com/"&gt;www.xda-developers.com&lt;/a&gt;&lt;br /&gt;But as you know there is no setting for proxies and so it is basically a not-very-useful toy at work. I can just imagine doing ssh from my kindle to check processes on servers and ... (salivating)&lt;br /&gt;&lt;br /&gt;I downloaded ProxyDroid from the android market (main reason for rooting the kindle fire is to have access to the android market, since amazon is not very useful to people outside the US.)&lt;br /&gt;ProxyDroid requires your kindle fire to be rooted and as I discovered, the 6.2.1 update from Amazon had unrooted my kindle (although the android market as well as other applications still work.)&lt;br /&gt;&lt;br /&gt;I rooted it again using the new technique for post-6.2.1 update firmware&lt;br /&gt;&lt;a href="http://rootkindlefire.com/kindle-fire-root/kindle-fire-root-new6-2-1windowsmaclinux/"&gt;http://rootkindlefire.com/kindle-fire-root/kindle-fire-root-new6-2-1windowsmaclinux/&lt;/a&gt;&lt;br /&gt;, and have set my office http proxy values. Now to go to the office (ostensibly to do a last check on some servers and applications) to check if it works!&lt;br /&gt;&lt;br /&gt;Part 2 will be a yes/no, and if I tried anything special to get it to work.&lt;br /&gt;&lt;br /&gt;Btw, I have installed firefox on the kindle as well and changed the proxy settings (using about:config in the address bar and then searching for 'proxy') to see if it will work on its own.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-3538055806247600611?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/3538055806247600611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2011/12/using-your-rooted-kindle-fire-through.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/3538055806247600611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/3538055806247600611'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2011/12/using-your-rooted-kindle-fire-through.html' title='Using your rooted kindle fire through a proxy (part 1)'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-8477758585742301306</id><published>2011-12-31T00:12:00.000-08:00</published><updated>2011-12-31T01:39:55.519-08:00</updated><title type='text'>Rooting your kindle fire (again...)</title><content type='html'>If you want to root your kindle fire, there are wonderful tutorials online that can show you how, like:&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=AoXYmOjJWvE"&gt;http://www.youtube.com/watch?v=AoXYmOjJWvE&lt;/a&gt;&lt;br /&gt;if you have not yet been updated to the 6.2.1 or higher firmware.&lt;br /&gt;&lt;br /&gt;If you have, you will need to follow this tutorial instead as the former won't work for you:&lt;br /&gt;&lt;a href="http://rootkindlefire.com/kindle-fire-root/kindle-fire-root-new6-2-1windowsmaclinux/"&gt;http://rootkindlefire.com/kindle-fire-root/kindle-fire-root-new6-2-1windowsmaclinux/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;How do you find out what firmware version you are using?&lt;br /&gt;Swipe down from the top of the kindle (where the battery indicator is) and select "More..." from the menu options you find.&lt;br /&gt;Then click on Device and you can find it under "System Version"&lt;br /&gt;&lt;br /&gt;Worked like a charm for me!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-8477758585742301306?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/8477758585742301306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2011/12/rooting-your-kindle-fire-again.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/8477758585742301306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/8477758585742301306'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2011/12/rooting-your-kindle-fire-again.html' title='Rooting your kindle fire (again...)'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-9196844921559196051</id><published>2011-11-27T02:11:00.001-08:00</published><updated>2011-11-27T02:19:19.679-08:00</updated><title type='text'>Installing cx_Oracle on 64-bit ubuntu</title><content type='html'>I made an earlier &lt;a href="http://boyombo.blogspot.com/2011/07/setting-up-cxoracle-on-ubuntu-1104.html" target="_blank"&gt;post&lt;/a&gt; on installing&amp;nbsp; cx_Oracle on ubuntu. I experienced some differences when installing the 64-bit version.&lt;br /&gt;&lt;br /&gt;I just installed 11.10 64bit, the 64-bit version of the oracle instantclient basic and got this error when I imported cx_Oracle:&lt;br /&gt;&lt;br /&gt;ImportError: /usr/lib/python2.7/dist-packages/cx_Oracle.so: undefined symbol: PyUnicodeUCS2_AsEncodedString&lt;br /&gt;&lt;br /&gt;Thanks to the heads-up by&lt;a href="http://www.len.ro/2009/08/cx_oracle-on-ubuntu-9-04-jaunty/" target="_blank"&gt; len in his blog post&lt;/a&gt; I figured it had to do with unicode support, so I went on to download the unicode version of cx_Oracle 5.04 (the most recent unicode version I could find) from &lt;a href="http://cx-oracle.sourceforge.net/" target="_blank"&gt;sourceforge&lt;/a&gt;.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;i&gt;Particularly CentOS 5 x86_64 RPM (Oracle 11g, UNICODE, Python 2.7).&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Next I did&lt;br /&gt;&lt;br /&gt;sudo alien -d cx_Oracle-5.0.4-11g-unicode-py27-1.x86_64.rpm&lt;br /&gt;(converts the .rpm to a .deb, generating cx-oracle_5.0.4-2_amd64.deb)&lt;br /&gt;&lt;br /&gt;sudo dpkg -i cx-oracle_5.0.4-2_amd64.deb&lt;br /&gt;(installs the package, then)&lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; import cx_Oracle&lt;br /&gt;&lt;br /&gt;(works like a charm)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-9196844921559196051?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/9196844921559196051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2011/11/installing-cxoracle-on-64-bit-ubuntu.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/9196844921559196051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/9196844921559196051'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2011/11/installing-cxoracle-on-64-bit-ubuntu.html' title='Installing cx_Oracle on 64-bit ubuntu'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-4930081287131108207</id><published>2011-11-19T08:31:00.001-08:00</published><updated>2011-11-19T08:31:39.183-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='network proxy'/><category scheme='http://www.blogger.com/atom/ns#' term='wget'/><title type='text'>wget with or without proxy</title><content type='html'>I used to get frustrated in the past with wget using my office proxy even when I have switched to my proxy-less home settings.&lt;br /&gt;Well, no more problems as I just checked the man pages for wget and found the option --proxy=on/off.&lt;br /&gt;So, I now do wget url --proxy=off when wget forgets that I no longer labour under a proxy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-4930081287131108207?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/4930081287131108207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2011/11/wget-with-or-without-proxy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/4930081287131108207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/4930081287131108207'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2011/11/wget-with-or-without-proxy.html' title='wget with or without proxy'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-2004347100025002530</id><published>2011-11-07T22:33:00.000-08:00</published><updated>2011-11-07T22:33:06.189-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><category scheme='http://www.blogger.com/atom/ns#' term='information'/><title type='text'>Fast information</title><content type='html'>I read books very slowly.&lt;br /&gt;When I read a book I paint pictures in my head, not only of what happens but also other possible scenarios and stories that could have happened. Or perhaps pull in past experiences that are similar, funny or pleasant.&lt;br /&gt;All these make my reading a particularly rich and pleasurable activity, and a very slow one.&lt;br /&gt;I used to be envious of people who went through a good-sized book in a couple of hours.&lt;br /&gt;But now I realize we are reading different books. I am reading a very large tome that I am writing along the way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-2004347100025002530?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/2004347100025002530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2011/11/fast-information.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/2004347100025002530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/2004347100025002530'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2011/11/fast-information.html' title='Fast information'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-178104057506811331</id><published>2011-10-05T22:35:00.000-07:00</published><updated>2011-10-05T22:35:25.380-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='steve jobs'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Crazy ones - RIP Steve Jobs</title><content type='html'>Here's to the crazy ones. The misfits. The rebels. The trouble-makers. The round pegs in the square holes. The ones who see things differently. They're not fond of rules, and they have no respect for the status-quo. You can quote them, disagree with them, glorify, or vilify them. But the only thing you can't do is ignore them. Because they change things. They push the human race forward. And while some may see them as the crazy ones, we see genius. Because the people who are crazy enough to think they can change the world, are the ones who do. -- Apple 1997&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-178104057506811331?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/178104057506811331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2011/10/crazy-ones-rip-steve-jobs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/178104057506811331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/178104057506811331'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2011/10/crazy-ones-rip-steve-jobs.html' title='Crazy ones - RIP Steve Jobs'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-1970177671211234888</id><published>2011-09-25T09:03:00.000-07:00</published><updated>2011-09-25T09:03:53.452-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='random'/><category scheme='http://www.blogger.com/atom/ns#' term='mathematics for fun'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='randomness'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>more or less random</title><content type='html'>A few weeks ago, I was writing a raffle draw application for a client and something curious happened. It wasn't a very "big" application, and I wrote it in a few days. This was the core of it:&lt;br /&gt;&lt;br /&gt;I want to pick a phone number from a bucket of qualifying numbers.&lt;br /&gt;&lt;br /&gt;Unfortunately pre-qualifying all the numbers is a rather expensive task, and we are looking at over a half million numbers, maybe much more. So, I decided on a post-qualification step instead, and it works like this:&lt;br /&gt;&lt;br /&gt;Pick a winner from a bucket of numbers and check if it qualifies for the draw. If not, discard and pick another, etc...&lt;br /&gt;&lt;br /&gt;This would potentially mean doing much less qualification steps and thus cost much less. And better still, everyone thought it was a good idea. Well, everyone except me. You see I have this principle that the obvious solution to a problem is usually a mistake; the second one a product of better but usually inadequate understanding of the issues at stake; the third idea however, is usually the correct one. (don't ask me about the ones after that)&lt;br /&gt;Now I think of what I still believe is a better solution:&lt;br /&gt;&lt;br /&gt;Randomly pick a small group of potential winners, check if they qualify, in one step. If one or more qualify, pick a winner randomly from them; else lather, rinse, repeat.&lt;br /&gt;&lt;br /&gt;Now most people did NOT like this idea. I heard things like: "It is not as random as the other one", "It is not as transparent..." so it was more or less dead-on-arrival.&lt;br /&gt;But I will really like to know what people feel about the whole randomness of it (and maybe some general idea of things being more or less random than each other)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-1970177671211234888?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/1970177671211234888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2011/09/more-or-less-random.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/1970177671211234888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/1970177671211234888'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2011/09/more-or-less-random.html' title='more or less random'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-7776722543049343559</id><published>2011-08-08T03:54:00.000-07:00</published><updated>2011-08-08T03:54:31.600-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='installing'/><category scheme='http://www.blogger.com/atom/ns#' term='non-default python'/><title type='text'>Installing non-default python</title><content type='html'>Most Linux systems already have python installed and a lot of tools depend on the system python. If you want to install another version of python without damaging the existing one, use &lt;br /&gt;&lt;b&gt;make altinstall&lt;/b&gt; instead of &lt;b&gt;make install&lt;/b&gt; (which will replace the system python)&lt;br /&gt;&lt;blockquote&gt;wget http://www.python.org/ftp/python/2.7/Python-2.7.tgz&lt;br /&gt;tar xvfz Python-2.7.tgz&lt;br /&gt;cd Python-2.7&lt;br /&gt;./configure&lt;br /&gt;make&lt;br /&gt;su&lt;br /&gt;make altinstall&lt;/blockquote&gt;&lt;br /&gt;Props to &lt;a href="http://stackoverflow.com/questions/4149361/on-linux-suse-or-redhat-how-do-i-load-python-2-7"&gt;this&lt;/a&gt; question from stackoverflow&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-7776722543049343559?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/7776722543049343559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2011/08/installing-non-default-python.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/7776722543049343559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/7776722543049343559'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2011/08/installing-non-default-python.html' title='Installing non-default python'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-4803270044583344958</id><published>2011-07-31T14:29:00.000-07:00</published><updated>2011-07-31T14:29:10.695-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='terminal'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><title type='text'>Execute recent command from history by its number</title><content type='html'>This nugget I just found from &lt;a href="http://www.ubuntuka.com/ubuntu-command-line-tricks-set-4/"&gt;ubuntuka's blog&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I have almost worn my up/down keys when trying to redo past commands. Now I just check the history and !&lt;number&gt;&lt;br /&gt;&lt;br /&gt;I believe you already know about handy shell command history that displays recent commands you typed in current shell session. If not here it is its sample output:&lt;br /&gt;&lt;br /&gt;user@user-laptop:~$ history &lt;br /&gt;    1  ping 4.2.2.4&lt;br /&gt;    2  mtr 8.8.8.8&lt;br /&gt;    3  ping 8.8.8.8 -c 1&lt;br /&gt;    4  vi /etc/resolv.conf &lt;br /&gt;    5  sudo vi /etc/crontab &lt;br /&gt;    6  history&lt;br /&gt;As all of recent commands are numbered you can execute any of them by its number:&lt;br /&gt;&lt;br /&gt;user@user-laptop:~$ !1&lt;br /&gt;ping 4.2.2.4&lt;br /&gt;PING 4.2.2.4 (4.2.2.4) 56(84) bytes of data.&lt;br /&gt;64 bytes from 4.2.2.4: icmp_seq=1 ttl=248 time=84.4 ms&lt;br /&gt;64 bytes from 4.2.2.4: icmp_seq=2 ttl=248 time=82.5 ms&lt;br /&gt;64 bytes from 4.2.2.4: icmp_seq=3 ttl=248 time=81.6 ms&lt;br /&gt;or&lt;br /&gt;&lt;br /&gt;user@user-laptop:~$ !3&lt;br /&gt;ping 8.8.8.8 -c 1&lt;br /&gt;PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.&lt;br /&gt;64 bytes from 8.8.8.8: icmp_seq=1 ttl=55 time=94.6 ms&lt;br /&gt; &lt;br /&gt;--- 8.8.8.8 ping statistics ---&lt;br /&gt;1 packets transmitted, 1 received, 0% packet loss, time 0ms&lt;br /&gt;rtt min/avg/max/mdev = 94.692/94.692/94.692/0.000 ms&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-4803270044583344958?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/4803270044583344958/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2011/07/execute-recent-command-from-history-by.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/4803270044583344958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/4803270044583344958'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2011/07/execute-recent-command-from-history-by.html' title='Execute recent command from history by its number'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-4832894171266005827</id><published>2011-07-28T08:44:00.000-07:00</published><updated>2011-07-28T08:44:33.086-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='chained-select'/><title type='text'>Guerilla guide to django-chained-select</title><content type='html'>This is how I do a django chained select since I am too lazy to write some generic utility (or whatever they call it)&lt;br /&gt;The problem is this:&lt;br /&gt;I want to select a state from a drop-down list and make the local government areas (LGAs) in a related drop-down list be filtered to contain only the LGAs in the selected state.&lt;br /&gt;I have a model for states and another model for LGAs.&lt;br /&gt;&lt;br /&gt;#views.py&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def chainselect(request):&lt;br /&gt;&amp;nbsp; &amp;nbsp; state = request.GET.get('state')&lt;br /&gt;&amp;nbsp; &amp;nbsp; out = '\n'.join([lga.name for lga in&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; LGA.objects.filter(state__name__istartswith=state)])&lt;br /&gt;&amp;nbsp; &amp;nbsp; return HttpResponse(out)&lt;br /&gt;&lt;br /&gt;#template.html&lt;br /&gt;&lt;br /&gt;$(function(){&lt;br /&gt;$('#id_state').change(function(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;$.get('/chainselect/',{'state': $('#id_state').val()},function(lgas){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var lga_list = lgas.split('\n');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var html = '';&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (lga in lga_list){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html += '&lt;option value="'+lga_list[lga]+'"&gt;'+lga_list[lga]+'&lt;/option&gt;';&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$('#id_lga').html(html);&lt;br /&gt;&amp;nbsp;&amp;nbsp;})&lt;br /&gt;});&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;You will notice that I use the name of the LGA as both label and value for the LGA drop-down list&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-4832894171266005827?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/4832894171266005827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2011/07/guerilla-guide-to-django-chained-select.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/4832894171266005827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/4832894171266005827'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2011/07/guerilla-guide-to-django-chained-select.html' title='Guerilla guide to django-chained-select'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-2569441816244214375</id><published>2011-07-16T23:47:00.000-07:00</published><updated>2011-07-16T23:48:01.587-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='nginx'/><title type='text'>Playing with nginx and django</title><content type='html'>Anyone following me on google+ will see how +essien harrassed me about switching from apache to nginx for deployment of my django projects.&lt;br /&gt;I had shown using nginx to serve static files in a previous &lt;a href="http://boyombo.blogspot.com/2011/01/serving-django-static-media-using-nginx.html"&gt;post&lt;/a&gt;&amp;nbsp;in january, and it was crazy simple.&lt;br /&gt;I cannot pretend that I have only just began to understand the whole concept of deploying web applications, and this is an account of my forays (if it can be pluralized as such).&lt;br /&gt;I have a confession to make: I tried serving my django app with uWSGI and fastcgi, but the configurations and settings and what-not have been so crazy for my big-but-empty head that I ended up just trying nginx on a static/php site. It worked just fine.&lt;br /&gt;Next I tried it to serve my django site passing the whole dynamic content stuff to the django development server, it worked as well.&lt;br /&gt;This is my nginx.conf setup:&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;#user &amp;nbsp;nobody;&lt;/blockquote&gt;&lt;blockquote&gt;user &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;www-data;&lt;/blockquote&gt;&lt;blockquote&gt;worker_processes &amp;nbsp;1;&lt;/blockquote&gt;&lt;blockquote&gt;error_log &amp;nbsp;/usr/local/nginx/logs/error.log;&lt;/blockquote&gt;&lt;blockquote&gt;pid &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/usr/local/nginx/logs/nginx.pid;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;events {&lt;/blockquote&gt;&lt;blockquote&gt;&amp;nbsp; &amp;nbsp; worker_connections &amp;nbsp;1024;&lt;/blockquote&gt;&lt;blockquote&gt;&amp;nbsp; &amp;nbsp; use epoll;&lt;/blockquote&gt;&lt;blockquote&gt;}&lt;/blockquote&gt;&lt;blockquote&gt;http {&lt;/blockquote&gt;&lt;blockquote&gt;&amp;nbsp; &amp;nbsp; include &amp;nbsp; &amp;nbsp; &amp;nbsp; mime.types;&lt;/blockquote&gt;&lt;blockquote&gt;&amp;nbsp; &amp;nbsp; default_type &amp;nbsp;application/octet-stream;&lt;/blockquote&gt;&lt;blockquote&gt;&amp;nbsp; &amp;nbsp; access_log &amp;nbsp;/usr/local/nginx/logs/access.log &amp;nbsp;main;&lt;/blockquote&gt;&lt;blockquote&gt;&amp;nbsp; &amp;nbsp; sendfile &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;on;&lt;/blockquote&gt;&lt;blockquote&gt;&amp;nbsp; &amp;nbsp; #tcp_nopush &amp;nbsp; &amp;nbsp; on;&lt;/blockquote&gt;&lt;blockquote&gt;&amp;nbsp; &amp;nbsp; keepalive_timeout &amp;nbsp;65;&lt;/blockquote&gt;&lt;blockquote&gt;&amp;nbsp; &amp;nbsp; #gzip &amp;nbsp;on;&lt;/blockquote&gt;&lt;blockquote&gt;&amp;nbsp; &amp;nbsp; server {&lt;/blockquote&gt;&lt;blockquote&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; listen &amp;nbsp; &amp;nbsp; &amp;nbsp; 8080;&lt;/blockquote&gt;&lt;blockquote&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; server_name &amp;nbsp;localhost;&lt;/blockquote&gt;&lt;blockquote&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; charset utf-8;&lt;/blockquote&gt;&lt;blockquote&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #access_log &amp;nbsp;logs/host.access.log &amp;nbsp;main;&lt;/blockquote&gt;&lt;blockquote&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;location / {&lt;/blockquote&gt;&lt;blockquote&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; proxy_pass http://127.0.0.1:8000;&lt;/blockquote&gt;&lt;blockquote&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/blockquote&gt;&lt;blockquote&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; error_page &amp;nbsp; 500 502 503 504 &amp;nbsp;/50x.html;&lt;/blockquote&gt;&lt;blockquote&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; location = /50x.html {&lt;/blockquote&gt;&lt;blockquote&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; root &amp;nbsp; html;&lt;/blockquote&gt;&lt;blockquote&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/blockquote&gt;&lt;blockquote&gt;}&lt;/blockquote&gt;&lt;/blockquote&gt;&amp;nbsp;Note:&lt;br /&gt;* I listened on port 8080 instead of 80 so I can leave apache alone to do his/her thing&lt;br /&gt;* I use the proxy_pass directive to tell nginx to allow all the django development server to handle all my requests&lt;br /&gt;&lt;br /&gt;After this (or before in my case), I start my django server with:&lt;br /&gt;&lt;blockquote&gt;python manage.py runserver&lt;/blockquote&gt;&amp;nbsp;Now to test this with the tornado web server instead... ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-2569441816244214375?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/2569441816244214375/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2011/07/playing-with-nginx-and-django.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/2569441816244214375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/2569441816244214375'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2011/07/playing-with-nginx-and-django.html' title='Playing with nginx and django'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-7047405817707079063</id><published>2011-07-13T00:44:00.000-07:00</published><updated>2011-07-13T00:44:54.419-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='prostitution'/><category scheme='http://www.blogger.com/atom/ns#' term='flesh-trade'/><title type='text'>Cynthia</title><content type='html'>It was a green 3-storey building a bus stop from mile 12 on Ikorodu road.&lt;br /&gt;I bought a star and waited for the wares to be put on display..&lt;br /&gt;First the old ones were brought out; and the scarred ones; and the stretch-marked ones.&lt;br /&gt;But I wait patiently...&lt;br /&gt;The temptress breezes past, cute yes, but I'm still patient.&lt;br /&gt;She walks back in and strikes a pose by the main entrance.&lt;br /&gt;Another comes in, a part-timer I guessed, blue jerseys, track down, white foamy slippers.&lt;br /&gt;I decide that if I see three like her I'll make a choice.&lt;br /&gt;One is no option; two is either-or; three is a choice.&lt;br /&gt;Waiting... and listening to biggie on my phone's music player, my ears plugged with earphones.&lt;br /&gt;Requirement specs? Slim, young, pretty.&lt;br /&gt;Whoah! the whole harem comes out for marketing, about 5 altogether...&lt;br /&gt;Ummmm, the temptress still takes the cake.&lt;br /&gt;What do I do? call for her? or wait? It's almost 6 in the evening and I don't want to stay in this sort of place till dark, I just left the bank.&lt;br /&gt;But I wait anyway.&lt;br /&gt;My first bottle is coming to a close, I really should conclude my business and shove outta here.&lt;br /&gt;In the meantime, I find that a Jeffrey Archer novel is quite an insect-killer, those annoying specks of pain a.k.a sand flies.&lt;br /&gt;Another beauty comes in and sits not too far away... the first still takes the cake. And takes it in style: in a multicolored tight-fitting (of course) blouse and three-quarter blue jeans, displaying just enough leg.&lt;br /&gt;I made a move and tried to catch her eye, but she walks on. Not looking left nor right.&lt;br /&gt;One in a short black dress sits a table away, but by now I'm fixated on the multicolored butterfly...&lt;br /&gt;... she drinks star as well and her trade name is&amp;nbsp;Cynthia&lt;br /&gt;PS: She also does house-calls&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-7047405817707079063?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/7047405817707079063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2011/07/cynthia.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/7047405817707079063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/7047405817707079063'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2011/07/cynthia.html' title='Cynthia'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-4234855765582670430</id><published>2011-07-04T14:08:00.000-07:00</published><updated>2011-11-27T01:58:29.815-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='alien'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='cx_Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Setting up cx_Oracle on ubuntu 11.04/11.10</title><content type='html'>[Edit: I have some comments about installing cx_Oracle 64-bit version in the comments]&lt;br /&gt; &lt;br /&gt;A few years ago I made this &lt;a href="http://boyombo.blogspot.com/2009/05/django-on-oracle-experience.html"&gt;post&lt;/a&gt;&amp;nbsp;about setting up python to talk to oracle via cx_Oracle.&lt;br /&gt;Now I have to do something similar and it seems this time I have better resources to fall back on.&lt;br /&gt;&lt;a href="http://maxolasersquad.blogspot.com/2011/04/cxoracle-on-ubuntu-1104-natty.html"&gt;This post&lt;/a&gt;&amp;nbsp;by &lt;a href="http://maxolasersquad.com/"&gt;Maxo&lt;/a&gt;&amp;nbsp;was really useful, and my post is just another way to present it:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Install alien so we can convert the oracle instantclient rpm to a deb &lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Courier New',Courier,monospace; font-size: 13px; line-height: 16px;"&gt;sudo apt-get install alien libaio1 python2.7 libpython2.7&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #333333; line-height: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: Times,'Times New Roman',serif;"&gt;Download and install the instantclient basic from the oracle &lt;a href="http://www.oracle.com/technetwork/topics/linuxsoft-082809.html"&gt;site&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #333333; line-height: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Convert the rpm to deb&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Courier New',Courier,monospace; font-size: 13px; line-height: 16px;"&gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Courier New',Courier,monospace; font-size: 13px; line-height: 16px;"&gt;sudo alien -d&amp;nbsp;oracle-instantclient11.2-sqlplus-11.2.0.2.0.i386.rpm&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; line-height: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;--ymmv due to the version of instant client you are using&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #333333; line-height: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Install the deb&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace; font-size: 13px;"&gt;sudo dpkg -i oracle-instantclient11.2-basic_11.2.0.2.0-2_i386.deb&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;Create the oracle configuration file&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace; font-size: 13px;"&gt;sudo vi /etc/ld.so.conf.d/oracle.conf&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana,Arial,sans-serif;"&gt;and add this as the first (and it seems only) line: "/usr/lib/oracle/11.2/client/lib"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;Define $ORACLE_HOME&lt;br /&gt;create file:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; line-height: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace; font-size: 13px;"&gt;sudo vi /etc/profile.d/oracle.sh&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Times,'Times New Roman',serif;"&gt;add line&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Courier New',Courier,monospace; font-size: 13px; line-height: 16px;"&gt;:&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Courier New',Courier,monospace; font-size: 13px; line-height: 16px;"&gt;&lt;span style="background-color: transparent; background-image: none; border-collapse: collapse; border-width: 0px; clear: none; color: inherit; cursor: auto; display: inline; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; letter-spacing: inherit; line-height: inherit; margin: 0px; outline-style: none; padding: 0px; position: relative; text-decoration: inherit; text-indent: 0px; text-transform: inherit; vertical-align: baseline; white-space: inherit; word-spacing: inherit;"&gt;&lt;span class=" aptureTMMSelection" style="background-color: transparent; background-image: none; border-collapse: collapse; border-width: 0px; clear: none; color: inherit; cursor: auto; display: inline; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; letter-spacing: inherit; line-height: inherit; margin: 0px; outline-style: none; padding: 0px; position: relative; text-decoration: inherit; text-indent: 0px; text-transform: inherit; vertical-align: baseline; white-space: inherit; word-spacing: inherit;"&gt;&lt;span style="background-color: transparent; background-image: none; border-collapse: collapse; border-width: 0px; clear: none; color: inherit; cursor: auto; display: inline; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; letter-spacing: inherit; line-height: inherit; margin: 0px; outline-style: none; padding: 0px; position: relative; text-decoration: inherit; text-indent: 0px; text-transform: inherit; vertical-align: baseline; white-space: inherit; word-spacing: inherit;"&gt;&lt;span style="background-color: transparent; background-image: none; border-collapse: collapse; border-width: 0px; clear: none; color: inherit; cursor: auto; display: inline; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; letter-spacing: inherit; line-height: inherit; margin: 0px; outline-style: none; padding: 0px; position: relative; text-decoration: inherit; text-indent: 0px; text-transform: inherit; vertical-align: baseline; white-space: inherit; word-spacing: inherit;"&gt;export ORACLE_HOME=/usr/lib/oracle/11.2/client&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;Install cx_Oracle&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace; font-size: x-small;"&gt;download it &lt;a href="http://cx-oracle.sourceforge.net/"&gt;here&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;div style="font-family: Verdana, Arial, sans-serif; line-height: 1.3em; margin-bottom: 0.75em; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;"&gt;sudo alien -d cx_Oracle-5.1-11g-py32-1.i386.rpm&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana, Arial, sans-serif; line-height: 1.3em; margin-bottom: 0.75em; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;"&gt;sudo dpkg -i cx-oracle_5.1-2_i386.deb&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;Tweak configuration&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana,Arial,sans-serif; font-size: 13px;"&gt;&lt;div style="line-height: 1.3em; margin-bottom: 0.75em; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;"&gt;cd /usr/lib/python2.7&lt;/span&gt;&lt;/div&gt;&lt;div style="line-height: 1.3em; margin-bottom: 0.75em; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;"&gt;sudo mv site-packages/cx_Oracle* dist-packages/&lt;/span&gt;&lt;/div&gt;&lt;div style="line-height: 1.3em; margin-bottom: 0.75em; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;"&gt;sudo rmdir site-packages/&lt;/span&gt;&lt;/div&gt;&lt;div style="line-height: 1.3em; margin-bottom: 0.75em; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;"&gt;sudo ln -s dist-packages site-packages&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;load configuration&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace; font-size: x-small;"&gt;sudo ldconfig&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;Now &amp;gt;&amp;gt;&amp;gt; import cx_Oracle works&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;Not too difficult is it? ;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-4234855765582670430?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/4234855765582670430/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2011/07/setting-up-cxoracle-on-ubuntu-1104.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/4234855765582670430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/4234855765582670430'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2011/07/setting-up-cxoracle-on-ubuntu-1104.html' title='Setting up cx_Oracle on ubuntu 11.04/11.10'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-1257218630453379816</id><published>2011-06-29T05:19:00.000-07:00</published><updated>2011-06-29T05:20:05.450-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rdesktop'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='file copy'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Copy files between a linux and windows box via rdesktop</title><content type='html'>I use ubuntu and need to use a test server which runs windows 2003 (not by choice).&lt;br /&gt;Now I want to setup my development environment which means python, django, virtualenv and perhaps mysql.&lt;br /&gt;I have some of the setup files on my linux machine and wanted to just copy them over to the test server.&lt;br /&gt;Luckily I found this is not difficult to do using rdesktop:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;create a directory on your linux box (let's say "/home/bayo/store")&lt;/li&gt;&lt;li&gt;let us assume the directory you want to access your files from on the windows box is called "share"&lt;/li&gt;&lt;li&gt;connect to the server via rdesktop using the -r disk flag &lt;b&gt;[rdesktop (ip) -r disk:share=/home/bayo/store]&lt;/b&gt;&lt;/li&gt;&lt;li&gt;when you login to the windows box and check your network places/entire network/microsoft terminal services/tsclient, true enough you find a folder called "share" (or whatever you named it in step 3) and this folder maps directly to the "/home/bayo/store/" directory on your linux box.&lt;/li&gt;&lt;li&gt;that's all!&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-1257218630453379816?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/1257218630453379816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2011/06/copy-files-between-linux-and-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/1257218630453379816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/1257218630453379816'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2011/06/copy-files-between-linux-and-windows.html' title='Copy files between a linux and windows box via rdesktop'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-7420696763084128800</id><published>2011-06-28T03:41:00.000-07:00</published><updated>2011-06-28T03:41:35.825-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cpan'/><category scheme='http://www.blogger.com/atom/ns#' term='network proxy'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Setting CPAN up to use proxies</title><content type='html'>I was trying to install the oracle connector for perl today and was working off some tutorials.&lt;br /&gt;The problem was when I tried to connect to CPAN, I got lots of errors like this:&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Tahoma; font-size: 12px;"&gt;Local directory now /home/bayo/.cpan/sources/authors&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Tahoma; font-size: 12px;"&gt;Not connected.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Tahoma; font-size: 12px;"&gt;Not connected.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Tahoma; font-size: 12px;"&gt;Not connected.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Tahoma; font-size: 12px;"&gt;Not connected.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Tahoma; font-size: 12px;"&gt;Not connected.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Tahoma; font-size: 12px;"&gt;Bad luck... Still failed!&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Tahoma; font-size: 12px;"&gt;Can't access URL&amp;nbsp;&lt;a href="ftp://archive.progeny.com/CPAN/authors/01mailrc.txt.gz" style="color: #444444; text-decoration: underline;" target="_blank"&gt;ftp://archive.progeny.com/CPAN/authors/01mailrc.txt.gz&lt;/a&gt;.&lt;/span&gt;&lt;/blockquote&gt;It didn't take me long to suspect that it was the network proxy that was screwing me (again).&lt;br /&gt;I looked up this &lt;a href="http://abhijit.name/setting_cpan_for_proxy.html"&gt;site&lt;/a&gt; and found that I could do:&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Helvetica, sans-serif; font-size: 12px; line-height: 18px;"&gt;cpan[2]&amp;gt; o conf init /proxy/&lt;br /&gt;&lt;br /&gt;If you're accessing the net via proxies, you can specify them in the&lt;br /&gt;CPAN configuration or via environment variables. The variable in&lt;br /&gt;the $CPAN::Config takes precedence.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;ftp_proxy&gt;&lt;br /&gt;Your ftp_proxy? [a.b.c.d] a.b.c.d:port&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;http_proxy&gt;&lt;br /&gt;Your http_proxy? [a.b.c.d] a.b.c.d:port&lt;/http_proxy&gt;&lt;/ftp_proxy&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;I entered my proxy information and everything worked perfectly!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-7420696763084128800?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/7420696763084128800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2011/06/setting-cpan-up-to-use-proxies.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/7420696763084128800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/7420696763084128800'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2011/06/setting-cpan-up-to-use-proxies.html' title='Setting CPAN up to use proxies'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-3062630215934449708</id><published>2011-05-23T04:16:00.000-07:00</published><updated>2011-05-23T04:16:16.877-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='restview'/><category scheme='http://www.blogger.com/atom/ns#' term='restructured text'/><title type='text'>Learning RestructuredText</title><content type='html'>===================&lt;br /&gt;Learning RestructuredText&lt;br /&gt;===================&lt;br /&gt;&lt;br /&gt;Have to write some documentation, and as usual, I feel like tearing out my hair.&lt;br /&gt;At least I can use the opportunity to learn *RestructuredText* to reduce the annoyance.&lt;br /&gt;Result: fun.&lt;br /&gt;&lt;br /&gt;These are the tools I used to manage the process:&lt;br /&gt;&lt;br /&gt;1. vim: of course, that's my default text-editor&lt;br /&gt;2. online tutorials:&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;a href="http://docutils.sourceforge.net/docs/user/rst/quickstart.html"&gt;http://docutils.sourceforge.net/docs/user/rst/quickstart.html&lt;/a&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;a href="http://sphinx.pocoo.org/rest.html"&gt;http://sphinx.pocoo.org/rest.html&lt;/a&gt;&lt;br /&gt;3. restview:&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;a href="http://linux.softpedia.com/get/Text-Editing-Processing/Markup/restview-49214.shtml"&gt;http://linux.softpedia.com/get/Text-Editing-Processing/Markup/restview-49214.shtml&lt;/a&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; A restructuredText viewer that allows me to preview the document in a browser&lt;br /&gt;&amp;nbsp; &amp;nbsp; install with "easy_install restview"&lt;br /&gt;4. gimp:&lt;br /&gt;&amp;nbsp; &amp;nbsp; To edit screen-captured images to embed in the document.&lt;br /&gt;I also have python-docutils and sphinx installed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-3062630215934449708?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/3062630215934449708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2011/05/learning-restructuredtext.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/3062630215934449708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/3062630215934449708'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2011/05/learning-restructuredtext.html' title='Learning RestructuredText'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-2876648142642028798</id><published>2011-05-15T00:14:00.000-07:00</published><updated>2011-05-15T00:15:22.480-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ebnf'/><category scheme='http://www.blogger.com/atom/ns#' term='parsing'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Learning about BNF/EBNF grammar</title><content type='html'>I was reading up on parsing in python and decided to try out the simpleparse module. Luckily, there are some pretty good tutorials like this one by David Mertz:&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://www.ibm.com/developerworks/linux/library/l-simple/index.html"&gt;http://www.ibm.com/developerworks/linux/library/l-simple/index.html&lt;/a&gt;&lt;/blockquote&gt;&amp;nbsp;However I got stuck at his example of the python definition for floating-point.&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 12px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="displaycode" style="background-attachment: initial !important; background-clip: initial !important; background-color: rgb(247, 247, 247) !important; background-image: initial !important; background-origin: initial !important; background-position: initial initial !important; background-repeat: initial initial !important; color: black; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; font-size: 11px; margin-bottom: 0px; margin-top: 0px; overflow-x: auto; overflow-y: auto; width: 694px;"&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 12px;"&gt;floatnumber:    pointfloat | exponentfloat&lt;br /&gt;pointfloat:     [intpart] fraction | intpart "."&lt;br /&gt;exponentfloat:  (nonzerodigit digit* | pointfloat) exponent&lt;br /&gt;intpart:        nonzerodigit digit* | "0"&lt;br /&gt;fraction:       "." digit+&lt;br /&gt;exponent:       ("e"|"E") ["+"|"-"] digit+&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;It was rather obvious that "|" meant "OR". It was really the "()" and "[]" symbols that tripped me up.&lt;br /&gt;Nevertheless after browsing through this BNF/EBNF tutorial by&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Lars Marius Garshol&lt;/span&gt;:&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://www.garshol.priv.no/download/text/bnf.html"&gt;http://www.garshol.priv.no/download/text/bnf.html&lt;/a&gt;&lt;/blockquote&gt;and the wikipedia article on EBNF:&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form"&gt;http://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form&lt;/a&gt;&lt;/blockquote&gt;it all came to clear focus.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-2876648142642028798?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/2876648142642028798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2011/05/one-useful-resource-for-learning-about.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/2876648142642028798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/2876648142642028798'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2011/05/one-useful-resource-for-learning-about.html' title='Learning about BNF/EBNF grammar'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-9005364133310288949</id><published>2011-05-09T03:26:00.000-07:00</published><updated>2011-05-13T22:43:04.229-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='completion'/><title type='text'>Making bash completion case-insensitive</title><content type='html'>It is usually a bother for me to do:&lt;br /&gt;&lt;blockquote&gt;cd Documents&lt;/blockquote&gt;I have to type the "D" in upper-case and all. Well to not have to do that...&lt;br /&gt;&lt;br /&gt;Create a file named &lt;code&gt;.inputrc&lt;/code&gt; in your home directory, and put this line in it:&lt;br /&gt;&lt;blockquote&gt;set completion-ignore-case On&lt;/blockquote&gt;Then open a new shell and try it out&lt;br /&gt;&lt;br /&gt;Thanks to &lt;a href="http://superuser.com/questions/271530/make-bashs-tab-completion-case-insensitive"&gt;http://superuser.com/questions/271530/make-bashs-tab-completion-case-insensitive&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-9005364133310288949?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/9005364133310288949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2011/05/making-bash-completion-case-insensitive.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/9005364133310288949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/9005364133310288949'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2011/05/making-bash-completion-case-insensitive.html' title='Making bash completion case-insensitive'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-3254114651785095392</id><published>2011-05-01T10:53:00.000-07:00</published><updated>2011-05-01T10:53:11.896-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PyZ3950'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='bug'/><category scheme='http://www.blogger.com/atom/ns#' term='ply'/><title type='text'>Getting PyZ3950 to play nice with python-ply</title><content type='html'>I have recently used the excellent PyZ3950 library to connect to the library of congress and query for cataloguing information for books.&lt;br /&gt;PyZ3950 depends on Dave Beasley's ply (lex and yacc) package.&lt;br /&gt;Unfortunately, when I first tried:&lt;br /&gt;&lt;blockquote&gt;from PyZ3950 import zoom&lt;/blockquote&gt;I got this traceback:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;In [1]: from PyZ3950 import zoom&lt;br /&gt;---------------------------------------------------------------------------&lt;br /&gt;ImportError&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Traceback (most recent call last)&lt;br /&gt;&lt;br /&gt;/home/bayo/&lt;ipython console=""&gt; in &lt;module&gt;()&lt;br /&gt;&lt;br /&gt;/usr/local/lib/python2.7/dist-packages/PyZ3950/zoom.py in &lt;module&gt;()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 71 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 72 from PyZ3950 import z3950&lt;br /&gt;---&amp;gt; 73 from PyZ3950 import ccl&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 74 from PyZ3950 import asn1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 75 from PyZ3950 import zmarc&lt;br /&gt;&lt;br /&gt;/usr/local/lib/python2.7/dist-packages/PyZ3950/ccl.py in &lt;module&gt;()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 122 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 123 &lt;br /&gt;--&amp;gt; 124 import lex&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 125 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 126 &lt;br /&gt;&lt;br /&gt;ImportError: No module named lex&lt;/module&gt;&lt;/module&gt;&lt;/module&gt;&lt;/ipython&gt;&lt;/blockquote&gt;After changing&lt;br /&gt;&lt;blockquote&gt;"import lex" to "from ply import lex" (line 124; PyZ3950/ccl.py)&lt;/blockquote&gt;and&lt;br /&gt;&lt;blockquote&gt;"import yacc" to "from ply import yacc" (line 140; PyZ3950/ccl.py)&lt;/blockquote&gt;it worked well.&lt;br /&gt;&lt;br /&gt;I have sent a mail to Aaron Lav, the maintainer of PyZ3950.&lt;br /&gt;version of ply = 3.4&lt;br /&gt;version of PyZ3950 = 2.04&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-3254114651785095392?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/3254114651785095392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2011/05/getting-pyz3950-to-play-nice-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/3254114651785095392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/3254114651785095392'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2011/05/getting-pyz3950-to-play-nice-with.html' title='Getting PyZ3950 to play nice with python-ply'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-8231084648797139063</id><published>2011-04-29T06:18:00.000-07:00</published><updated>2011-04-29T06:19:06.420-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='url params'/><category scheme='http://www.blogger.com/atom/ns#' term='class-based views'/><title type='text'>Passing url params to class-based generic views in django</title><content type='html'>Passing url parameters to class-based generic views from the urlconf is pretty easy.&lt;br /&gt;&lt;br /&gt;(r'(\d+)/$', MyView.as_view()) or&lt;br /&gt;(r'(?P&lt;id&gt;&lt;id&gt;&lt;id&gt;\d+)/$', MyView.as_view())&lt;/id&gt;&lt;/id&gt;&lt;/id&gt;&lt;br /&gt;&lt;br /&gt;and you access the parameters within the class via self.args and self.kwargs&lt;br /&gt;&lt;br /&gt;The other way to pass in parameters in the urlconf is via the as_view method e.g:&lt;br /&gt;(r'', MyView.as_view(foo='bar'))&lt;br /&gt;&lt;br /&gt;and they can be accessed directly as self.foo within the class&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-8231084648797139063?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/8231084648797139063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2011/04/passing-url-params-to-class-based.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/8231084648797139063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/8231084648797139063'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2011/04/passing-url-params-to-class-based.html' title='Passing url params to class-based generic views in django'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-7757341632072163248</id><published>2011-04-27T00:44:00.000-07:00</published><updated>2011-04-27T00:44:13.636-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='automated backup'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='backup'/><category scheme='http://www.blogger.com/atom/ns#' term='cron'/><title type='text'>Automatic backup of a mysql database</title><content type='html'>In my company, we usually deploy our applications to local servers at our clients' offices, thus we need to take care of things like automatic backup, so their in-house techie doesn't foul things up.&lt;br /&gt;I prefer to deploy on mysql and ubuntu linux and my backup strategy is thus:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Use &lt;b&gt;mysqldump&lt;/b&gt; to take a backup of the database&lt;/li&gt;&lt;li&gt;Pass the dump to &lt;b&gt;gzip&lt;/b&gt; to compress&lt;/li&gt;&lt;li&gt;Save the file in a /backup dir specially for that purpose or&lt;/li&gt;&lt;li&gt;Email the file to my sysadmin address&lt;/li&gt;&lt;li&gt;Manage this process with &lt;b&gt;cron&lt;/b&gt; so I get a backup everyday&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;So, how do I do it?&lt;br /&gt;&lt;br /&gt;mysqldump -u USR -pPWD DB | gzip &amp;gt; /backupdir/backup_`date '+%d%m%Y'`.sql.gz&lt;br /&gt;&lt;br /&gt;This tells mysql that my credentials are &lt;b&gt;USR/PWD&lt;/b&gt; and I want a dump of the &lt;b&gt;DB&lt;/b&gt; database (or &lt;b&gt;--all-databases&lt;/b&gt; to backup all databases), then pipe the result to &lt;b&gt;gzip&lt;/b&gt; which will compress it and save it to my backup directory with the name &lt;b&gt;backup_27042011.sql.gz.&lt;/b&gt;&lt;br /&gt;The &lt;b&gt;date&lt;/b&gt; program (see the back-ticks?) does the magic of converting &lt;b&gt;'+%d%m%Y'&lt;/b&gt; to &lt;b&gt;27042011&lt;/b&gt; since today is the 27th of April, 2011.&lt;br /&gt;&lt;br /&gt;Now to automate this process, I modify my &lt;b&gt;crontab&lt;/b&gt; by adding the following:&lt;br /&gt;&lt;br /&gt;30 18 * * * root mysqldump -u USR -pPWD DB | gzip &amp;gt; /backupdir/backup_`date '+%d%m%Y'`.sql.gz&lt;br /&gt;&lt;br /&gt;Which will run mysqldump as root at 6:30pm every day.&lt;br /&gt;&lt;br /&gt;We don't turn of the servers working days (which usually end 5pm) so it is a good time to do my backup.&lt;br /&gt;&lt;br /&gt;Next, I will talk about sending the backup via email to the sysadmin, as well as a little trick I use in synchronizing certain tables in my local and remote db.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-7757341632072163248?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/7757341632072163248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2011/04/automatic-backup-of-mysql-database.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/7757341632072163248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/7757341632072163248'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2011/04/automatic-backup-of-mysql-database.html' title='Automatic backup of a mysql database'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-4019114928478152604</id><published>2011-04-20T23:59:00.000-07:00</published><updated>2011-04-20T23:59:16.796-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='web framework'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>New features of django1.3 (that I find the most interesting)</title><content type='html'>I have not really looked at django 1.3 since it was released, so I took a brief glance this morning and am already considering moving my current project (a library management application) to 1.3.&lt;br /&gt;The most useful features to me at this time are:&lt;br /&gt; - class-based views (I have already been using class-based views but now I will like to move my generic views to the class-based ones)&lt;br /&gt; - logging improvements (Nothing I like better than logging something to a text file and 'tail-ing' it)&lt;br /&gt; - configurable delete-cascade (I have been bothered from time to time by the compulsory delete-cascade behavior of foreign keys. Nice that it is now configurable)&lt;br /&gt; - TemplateResponse (use a decorator to modify a response after it has been generated by the view)&lt;br /&gt; - Support for lookups spanning relations in admin's list_filter (I can throw away my custom filterspec)&lt;br /&gt; - A render shortcut that bundles render_to_response with a RequestContext&lt;br /&gt; - simple_tag() now accepts a takes_context argument&lt;br /&gt;&lt;br /&gt;I have to stop before I add all the new features.&lt;br /&gt;Great job guys!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-4019114928478152604?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/4019114928478152604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2011/04/new-features-of-django13-that-i-find.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/4019114928478152604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/4019114928478152604'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2011/04/new-features-of-django13-that-i-find.html' title='New features of django1.3 (that I find the most interesting)'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-2623053745774013943</id><published>2011-02-12T23:31:00.000-08:00</published><updated>2011-02-12T23:31:43.191-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='csv'/><category scheme='http://www.blogger.com/atom/ns#' term='polymorphism'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='xlrd'/><category scheme='http://www.blogger.com/atom/ns#' term='lists'/><title type='text'>Polymorphism</title><content type='html'>When I see big words like polymorphism, xxx-pattern, etc, I usually am right to imagine it will mean writing more code. In python, however, it often means writing less&lt;br /&gt;I am writing a small application to help my brother in his business.&lt;br /&gt;At a point I decided to change from processing excel files to csv files, cos the excel files do a lot of havoc to phone numbers and xlrd, the python module I use to read excel files, does not really know how to handle long numbers that's really text (or I don't have the patience to find out how to do this properly).&lt;br /&gt;Anyhow, I switch from returning a iterable of excel data to returning an iterable of csv data and the rest of the code works automagically.&lt;br /&gt;I don't have to make a distinction between the two kinds of data as they are similar enough.&lt;br /&gt;Another reason I love python...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-2623053745774013943?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/2623053745774013943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2011/02/polymorphism.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/2623053745774013943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/2623053745774013943'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2011/02/polymorphism.html' title='Polymorphism'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-1091556667667378108</id><published>2011-01-03T03:13:00.000-08:00</published><updated>2011-01-03T03:20:43.543-08:00</updated><title type='text'>Change default storage engine in MySql</title><content type='html'>&lt;div&gt;To change the default storage engine in mysql, just edit the my.cnf file&lt;/div&gt;&lt;div&gt;(on my ubuntu 9.10 it is at /etc/mysql/my.cnf).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;under [mysqld], add&lt;/div&gt;&lt;div&gt;default-storage-engine = innodb (or whatever storage engine you like)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then restart mysql&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://dougalmatthews.com/articles/2008/sep/3/changing-default-storage-engine-in-mysql/"&gt;http://dougalmatthews.com/articles/2008/sep/3/changing-default-storage-engine-in-mysql/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-1091556667667378108?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/1091556667667378108/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2011/01/change-default-storage-engine-in-mysql.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/1091556667667378108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/1091556667667378108'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2011/01/change-default-storage-engine-in-mysql.html' title='Change default storage engine in MySql'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-1075379423494757807</id><published>2011-01-02T09:37:00.000-08:00</published><updated>2011-01-02T10:10:28.623-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='nginx'/><category scheme='http://www.blogger.com/atom/ns#' term='media'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Serving django static media using nginx on ubuntu server</title><content type='html'>I setup a django site on my VPS recently using the standard apache+mod-wsgi setup. I had done the necesary setup for apache to serve my django application and was about to add the 2-3 lines in the apache config files to allow it serve my static files as well (css, images, js for the uninitiated), when it occurred to me to use nginx or lighttpd instead.&lt;br /&gt;The choice was easy, 'nginx' sounds way better that 'lighttpd' (pronounced 'lighty') so I picked it, especially as &lt;a href="http://superjared.com/entry/benching-lighttpd-vs-nginx-static-files/"&gt;benchmarks like this&lt;/a&gt; were rather inconclusive.&lt;br /&gt;&lt;br /&gt;So first, I install nginx:&lt;br /&gt;&lt;blockquote&gt;sudo apt-get install nginx&lt;/blockquote&gt;Lol, it doesn't get better than that. (hmmn maybe mind-activated installs, where is professor xavier when you need him?)&lt;br /&gt;&lt;br /&gt;Next the configuration (it is at /etc/nginx/sites-available/default), another surprise:&lt;br /&gt;&lt;pre class="default prettyprint"&gt;&lt;code&gt;&lt;span class="pln"&gt;server &lt;/span&gt;&lt;span class="pun"&gt;{&lt;/span&gt;&lt;span class="pln"&gt; &lt;br /&gt;    listen   &lt;/span&gt;&lt;span class="lit"&gt;8080&lt;/span&gt;&lt;span class="pun"&gt;;&lt;/span&gt;&lt;span class="pln"&gt; &lt;br /&gt;    server_name  localhost&lt;/span&gt;&lt;span class="pun"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;    access_log  &lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="kwd"&gt;var&lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;log&lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;nginx&lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;aa8000&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;access&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;log&lt;/span&gt;&lt;span class="pun"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;  &lt;br /&gt;    error_log  &lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="kwd"&gt;var&lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;log&lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;nginx&lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;aa8000&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;error&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="pln"&gt;log&lt;/span&gt;&lt;span class="pun"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;   &lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;    location &lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="kwd"&gt;static&lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;  &lt;br /&gt;       autoindex on&lt;/span&gt;&lt;span class="pun"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;  &lt;br /&gt;       root   &lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;path/to/&lt;/span&gt;&lt;span class="pln"&gt;&lt;/span&gt;&lt;span class="pun"&gt;strange/location/;&lt;/span&gt;&lt;span class="pln"&gt;  &lt;br /&gt;    &lt;/span&gt;&lt;span class="pun"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span class="pln"&gt;     location &lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="kwd"&gt;media&lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;  &lt;br /&gt;       autoindex on&lt;/span&gt;&lt;span class="pun"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;  &lt;br /&gt;       root   &lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;path/to/strange/location&lt;/span&gt;&lt;span class="pun"&gt;/;&lt;/span&gt;&lt;span class="pln"&gt;  &lt;br /&gt;    &lt;/span&gt;&lt;span class="pun"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;  &lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;}&lt;/span&gt;&lt;span class="pln"&gt;   &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;Easy peasy.&lt;br /&gt;&lt;br /&gt;You will have noticed that I asked nginx to please listen on the port 8080 and that the files it would be serving were at  &lt;code&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;path/to/strange/location&lt;/span&gt;&lt;span class="pun"&gt;/ &lt;/span&gt;&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Next, I go to my project's settings.py file and change my ADMIN_MEDIA_PREFIX and MEDIA_URL to:&lt;br /&gt;&lt;blockquote&gt;MEDIA_URL= 'http://domain:8080/static/'&lt;br /&gt;ADMIN_MEDIA_PREFIX = 'http://domain:8080/media/'&lt;br /&gt;&lt;/blockquote&gt;Then I symlinked both my static_files directory and my django/contrib/admin/media directories to &lt;code&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;span class="pln"&gt;path/to/strange/location&lt;/span&gt;&lt;span class="pun"&gt;/&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;as I had promised the nginx configuration.&lt;br /&gt;&lt;br /&gt;Lastly, I restarted both apache and nginx:&lt;br /&gt;&lt;blockquote&gt;sudo /etc/init.d/apache2 restart&lt;br /&gt;sudo /etc/init.d/nginx restart&lt;br /&gt;&lt;/blockquote&gt;And that was it...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-1075379423494757807?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/1075379423494757807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2011/01/serving-django-static-media-using-nginx.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/1075379423494757807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/1075379423494757807'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2011/01/serving-django-static-media-using-nginx.html' title='Serving django static media using nginx on ubuntu server'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-1024483478346587689</id><published>2010-12-18T00:07:00.000-08:00</published><updated>2010-12-18T00:18:11.232-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='alias'/><title type='text'>Now I am spoiled</title><content type='html'>After getting SSH public keys setup and my mercurial repo serving on my VPS, I get very lazy and did not like to type &lt;blockquote&gt;ssh remoteuser@remotehost&lt;/blockquote&gt; in my terminal, so I edit my .bashrc file and added an alias&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;very-very-very-very-very-short-cut= 'ssh remoteuser@remotehost'&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;And voila! I am on my server...&lt;br /&gt;Life is really great with all this goodness lying around...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-1024483478346587689?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/1024483478346587689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2010/12/now-i-am-spoiled.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/1024483478346587689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/1024483478346587689'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2010/12/now-i-am-spoiled.html' title='Now I am spoiled'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-5187657207889945894</id><published>2010-12-17T23:28:00.000-08:00</published><updated>2010-12-17T23:57:24.365-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mercurial'/><category scheme='http://www.blogger.com/atom/ns#' term='mercurial-server'/><category scheme='http://www.blogger.com/atom/ns#' term='hg'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Setup mercurial server on ubuntu VPS part 2</title><content type='html'>Now I have mercurial installed on both my local and remote systems, and they can talk to each other using public/private keys over ssh. What next?&lt;br /&gt;I install &lt;a href="http://www.lshift.net/mercurial-server.html"&gt;mercurial-server&lt;/a&gt; on my vps via the ubuntu package management system like this:&lt;br /&gt;&lt;blockquote&gt;&lt;ul&gt;&lt;li&gt;&lt;blockquote&gt;&lt;/blockquote&gt;Edited /etc/apt/sources.list to add&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;deb http://de.archive.ubuntu.com/ubuntu lucid main universe&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Updated my repos with apt-get update&lt;/li&gt;&lt;li&gt;Then apt-get install mercurial-server&lt;/li&gt;&lt;/ul&gt;Then showed mercurial-server my public key with&lt;br /&gt;&lt;ul&gt;&lt;li&gt;sudo mkdir -p /etc/mercurial-server/keys/root/remoteuser&lt;/li&gt;&lt;li&gt;sudo cp my-key /etc/mercurial-server/keys/root/remoteuser/localmachine&lt;/li&gt;&lt;li&gt;sudo -u hg /usr/share/mercurial-server/refresh-auth&lt;/li&gt;&lt;/ul&gt;Now, I make my repo (still on the server) with:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;hg init projectname&lt;/li&gt;&lt;li&gt;cd projectname&lt;/li&gt;&lt;li&gt;hg add&lt;/li&gt;&lt;li&gt;hg commit -u -m 'initial commit'&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;Back on my local machine, I simply do:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;hg clone ssh://remoteuser@remotehost/path/to/repo&lt;/li&gt;&lt;li&gt;cd projectname&lt;/li&gt;&lt;li&gt;hg pull&lt;/li&gt;&lt;li&gt;hg update&lt;/li&gt;&lt;li&gt;(edit the files)&lt;/li&gt;&lt;li&gt;hg commit -m 'something' -u&lt;/li&gt;&lt;li&gt;hg push&lt;/li&gt;&lt;/ul&gt;On the server,&lt;br /&gt;&lt;ul&gt;&lt;li&gt;hg update&lt;/li&gt;&lt;li&gt;(edit files)&lt;/li&gt;&lt;li&gt;hg commit -u&lt;/li&gt;&lt;/ul&gt;On local machine,&lt;br /&gt;&lt;ul&gt;&lt;li&gt;hg pull&lt;/li&gt;&lt;li&gt;hg update&lt;/li&gt;&lt;/ul&gt;Mercurial is so easy to use!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-5187657207889945894?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/5187657207889945894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2010/12/setup-mercurial-server-on-ubuntu-vps.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/5187657207889945894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/5187657207889945894'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2010/12/setup-mercurial-server-on-ubuntu-vps.html' title='Setup mercurial server on ubuntu VPS part 2'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-548912165165680691</id><published>2010-12-17T21:24:00.001-08:00</published><updated>2010-12-17T21:48:17.553-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='chmod'/><category scheme='http://www.blogger.com/atom/ns#' term='permissions'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='filesystem'/><title type='text'>Linux filesystem permissions</title><content type='html'>I just learned my linux filesystem permissions. I used to be awed when reading stuff like "chmod 600 abc". Those magic numbers were scary for some reason I cannot quite put my finger on...&lt;br /&gt;First when doing a long ls (ls -l), you get something like this:&lt;br /&gt;drwxrwxrwx - 10 characters, the first one can be:&lt;br /&gt;'d' for a directory, '-' for a file, and 'l' for a link.&lt;br /&gt;The next 9 characters represent the file permissions for 3 kinds of users:&lt;br /&gt;first 3 for the owner of the file, next for a member of the file group, and the last for 'others', meaning the rest of the world.&lt;br /&gt;These users are usually represented by the symbols 'u' (owner), 'g' (group), and 'o' (others).&lt;br /&gt;Also, the permissions are 'r'ead, 'w'rite and e'x'ecute&lt;br /&gt;Now, you can do fancy stuff like adding or removing permissions for users by:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;go-w (remove write access for group and others),&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;u+x (add execute access to the owner),&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;a+rw (add read-write access for everybody -really naughty!)&lt;/li&gt;&lt;/ul&gt;Or you can set absolute permissions by using those numeric notations:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;711 (read-write-execute for owner, execute for group and others)&lt;/li&gt;&lt;li&gt;600 (read-write for owner, no access for group and others)&lt;/li&gt;&lt;/ul&gt;This is how the numeric codes work:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;4 is for read&lt;/li&gt;&lt;li&gt;2 is for write&lt;/li&gt;&lt;li&gt;1 is for execute&lt;/li&gt;&lt;/ul&gt;So the total permissions for a user is the sum of the individual digit:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;7 = 4 + 2 + 1 = read + write + execute&lt;/li&gt;&lt;li&gt;1 = execute&lt;/li&gt;&lt;li&gt;5 = 4 + 1 = read + execute &lt;/li&gt;&lt;li&gt;6 = 4 + 2 = read + write&lt;/li&gt;&lt;/ul&gt;And the first digit is for the owner, second for the group and third for others&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-548912165165680691?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/548912165165680691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2010/12/linux-filesystem-permissions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/548912165165680691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/548912165165680691'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2010/12/linux-filesystem-permissions.html' title='Linux filesystem permissions'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-3566260489427257345</id><published>2010-12-17T20:47:00.000-08:00</published><updated>2010-12-17T21:19:05.936-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openssh'/><category scheme='http://www.blogger.com/atom/ns#' term='mercurial'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ssh'/><title type='text'>Setup mercurial server on ubuntu server part1</title><content type='html'>I decided to setup mercurial on my VPS instead of the customary subversion, and am just writing reminder notes for myself so I don't repeat the mistakes I made this time.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I look up the various options for publishing mercurial repositories &lt;a href="http://mercurial.selenic.com/wiki/PublishingRepositories"&gt;here&lt;/a&gt;, and decide on ssh (why did I do that again?)&lt;/li&gt;&lt;li&gt;Next, I read up how to &lt;a href="http://dev.lshift.net/paul/mercurial-server/docbook.html"&gt;share mercurial repositories with mercurial-server&lt;/a&gt;, where they assumed that I have setup an SSH public key for authentication since mercurial-server does not authenticate with passwords.&lt;/li&gt;&lt;li&gt;I had not and didn't know how, so I read up some material on OPENSSH and setting up public/private keys. The scheme seems really simple: &lt;blockquote&gt;- generate keys on your local system with ssh-keygen -t dsa&lt;br /&gt;- which generates your private key id_dsa, and a public key id_dsa.pub&lt;br /&gt;- either a) copy the public key to the remote system using&lt;br /&gt; scp id_dsa.pub remoteuser@remotehost: (don't forget the colon(:)) or&lt;br /&gt; b) ssh-copy-id remoteuser@remotehost (better, since onlike the scp option, it would append your key to the .ssh/authorized_keys file itself on the remote host)&lt;br /&gt;- logout and log back in and when you do ssh remoteuser@host, you no longer need to type in the password&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Note: the file permissions on the server should be: 700 for .ssh/, and 600 for .ssh/authorized_keys&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-3566260489427257345?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/3566260489427257345/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2010/12/setup-mercurial-server-on-ubuntu-server.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/3566260489427257345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/3566260489427257345'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2010/12/setup-mercurial-server-on-ubuntu-server.html' title='Setup mercurial server on ubuntu server part1'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-5203889681556119371</id><published>2010-11-18T07:59:00.000-08:00</published><updated>2011-01-01T07:59:51.264-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='google maps'/><category scheme='http://www.blogger.com/atom/ns#' term='appengine'/><title type='text'>Firebug, a map, a snake and a few easy scripts</title><content type='html'>I have been addicted to the google maps api since I got a first taste of it a few weeks ago at the lagos devfest event. And so, I started to build a polling app for the Nigerian elections to be held &lt;del&gt;next year&lt;/del&gt; this year. The same polling app that Essien, Stan and Keni wanted us to build a couple of weeks before.&lt;div&gt;I also wanted to make the map look like the US electoral maps &lt;a href="http://www.fastcompany.com/1699641/watch-the-election-in-real-time-using-twitter-google-facebook-foursquare"&gt;shown here&lt;/a&gt;.&lt;br /&gt;Unfortunately, after spending the day searching for data to help me draw polygons of the state boundries of the country, I still had nothing... So I decided to generate long/lat values to enable me draw polygons that would approximate the state boundaries myself.&lt;/div&gt;This is the methodology I came up with:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Get coordinates of a polygon that would approximate the boundaries of a state.&lt;blockquote&gt;This I did by a little javascript which tracked my mouse clicks and wrote the lat/lng at the bottom of the page (I found reference points on the map and just interpolated to find the coordinates of my clicks.)&lt;br /&gt;I copied these and pasted in a text file in json-ish format&lt;/blockquote&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol&gt;&lt;li&gt;Overlay the polygon on the map for that state to see how well it fits&lt;blockquote&gt;I made ajax requests to get the regions' coordinates in json format (obtained from the text file I keep updating with the latest 'clicks', and served up by google appengine's dev server) and just used the google maps api to draw the polygons on the map&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Do some elementary math to find a better fitting polygon&lt;blockquote&gt;For points in the polygon that did not fit properly, I used a python script and the euclidean distance metric to find the closest point to adjoining polygons (states) to reduce the cross-over noise (space between regional borders, overlapping borders)&lt;br /&gt;I then updated the existing region's lat/lng with the corrected values&lt;br /&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;blockquote&gt;repeat, till satisfied&lt;/blockquote&gt;&lt;/li&gt;&lt;/ol&gt;I also wrote a few helper-scripts to do things like find the highest/lowest/leftmost/rightmost points for a particular region.&lt;br /&gt;&lt;br /&gt;This was a really fun exercise for me though I can't seem to find the scripts now... :(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-5203889681556119371?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/5203889681556119371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2010/11/firebug-map-snake-and-few-easy-scripts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/5203889681556119371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/5203889681556119371'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2010/11/firebug-map-snake-and-few-easy-scripts.html' title='Firebug, a map, a snake and a few easy scripts'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-8201598402402965922</id><published>2010-10-29T15:30:00.000-07:00</published><updated>2010-10-29T15:55:57.626-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='devfest'/><category scheme='http://www.blogger.com/atom/ns#' term='appengine'/><title type='text'>Using google appengine with ubuntu 10.10</title><content type='html'>&lt;p&gt;I spent the day rather pleasantly at the google devfest where I was in the google appengine talk. Very up my street as it resembles my favorite web framework, &lt;a href="http://www.djangoproject.com/"&gt;django&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;I couldn't sleep at night without spending time on one or two appengine tutorials. It wasn't long till I realized why everybody was using python 2.5.x (I have python 2.6.6 installed by default on my OS, ubuntu 10.10 Maverick Meercat). It seems appengine is not yet compatible with the 2.6.x series.&lt;/p&gt;&lt;p&gt;In particular when I tried to call google.appengine.api.users.get_current_user(), It gave me a long traceback (error) which ended with:&lt;/p&gt;&lt;p&gt;self._module = sys.modules['warnings'] if module is None else module&lt;br /&gt;KeyError: ‘warnings’&lt;br /&gt;&lt;/p&gt;&lt;p&gt;It seems I really need python 2.5.x to continue. &lt;/p&gt;&lt;p&gt;From this &lt;a href="http://www.cloudartisan.com/2010/10/google-app-engine-sdk-broken-on-ubuntu-maverick-10-10/"&gt;blogpost&lt;/a&gt; I learn that, though python 2.5 is not in the ubuntu 10.10 repos, I can add a repository in Launchpad that will enable me install the said version:&lt;/p&gt;&lt;p&gt;sudo add-apt-repository ppa:fkrull/deadsnakes&lt;br /&gt;sudo apt-get update&lt;br /&gt;sudo apt-get install python2.5&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Next, I have to change the default python that google appengine's development server uses (that is google_appengine/dev_appserver.py)&lt;/p&gt;&lt;p&gt;So the she-bang changes from &lt;/p&gt;&lt;p&gt;#!/usr/bin/env python&lt;/p&gt;&lt;p&gt;to&lt;/p&gt;&lt;p&gt;#!/usr/bin/env python2.5&lt;/p&gt;&lt;p&gt;and... (let me test)&lt;/p&gt;&lt;p&gt;Voila! It works (well, it gives an error that it could not initialize the images API 'cos PIL is not installed, but that is easily fixed!)&lt;/p&gt;&lt;p&gt;Not bad at all, not even nearly bad...&lt;/p&gt;&lt;p&gt;PS: The last step was not very necessary as I could also start the dev_appserver.py script with: python2.5 dev_appserver.py &lt;myapp_path&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-8201598402402965922?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/8201598402402965922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2010/10/using-google-appengine-with-ubuntu-1010.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/8201598402402965922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/8201598402402965922'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2010/10/using-google-appengine-with-ubuntu-1010.html' title='Using google appengine with ubuntu 10.10'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-1438860084660027445</id><published>2010-10-13T00:25:00.000-07:00</published><updated>2010-10-13T01:18:15.190-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='prime numbers'/><category scheme='http://www.blogger.com/atom/ns#' term='mathematics for fun'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='numbers'/><title type='text'>Secrets of the primes</title><content type='html'>I was working on some random programming puzzle a friend posted on facebook the other day when I met (again) the need to compute prime numbers (numbers that are divisible only by themselves and 1 without remainder), as well as to find if a certain number is a prime. This story is about how I discovered some secrets (at least to me) of prime numbers.&lt;br /&gt;First I wrote the most naive prime number checker imaginable -- just check if the number is divisible by any number less than it and greater than 1, but it hung my system at the second try (was checking if a 7- or 8- digit number was a prime)...I will add code samples at the end of the post so as not to bore non-programmers who may find the subject interesting.&lt;br /&gt;First I saw that a prime number can be found by just checking if it is divisible by smaller prime numbers... so instead of saying N is a prime if it does not have a factor among all the numbers between 2 and N-1, I can define N as a prime if it does not have any factors among all the PRIME numbers between 2 and N-1.&lt;br /&gt;This was fortuitous cos while 40% of numbers less than 10 are primes, 25% of numbers less than 100 are, and the percentage gets smaller as the numbers grow.&lt;br /&gt;&lt;br /&gt;The next issue was finding if a particular number was a prime: I start naively again by saying I check from 2 to that number if it is divisible by any of the primes. Hung system again!&lt;br /&gt;But let's take a candidate prime and observe its behavior first...&lt;br /&gt;let our candidate prime be 101&lt;br /&gt;101 is not divisible by 2&lt;br /&gt;Ok, but I now observe that 101 cannot be divisible by any prime number greater than 101 divided by 2 either (about 51, I round up for safety).&lt;br /&gt;Also 101 is neither divisible by 3 nor any prime greater than 34 (approx. 101/3)&lt;br /&gt;Though I did not find any fancy mathematical proof but I reasoned that if a number N is not divisible by a small-prime m, then it would not be divisible by bigger prime M which is greater than N/m rounded up.&lt;br /&gt;This leads to the hypothesis that a number is a prime if it does not have a prime factor whose square is less than the number. or more formally,&lt;br /&gt;A number N is a prime number if there is no m defined thus:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;m is a prime number&lt;/li&gt;&lt;li&gt;the square of m is less than N&lt;/li&gt;&lt;/ul&gt;I have not checked for treatments of prime numbers on the internet yet but will post my findings as time goes on...&lt;br /&gt;PS. --- python code for working with prime numbers&lt;br /&gt;&lt;br /&gt;def prime_gen():&lt;br /&gt;   candidate = 2&lt;br /&gt;   primes = []&lt;br /&gt;   while True:&lt;br /&gt;       if not factor_in(candidate, primes):&lt;br /&gt;           primes.append(candidate)&lt;br /&gt;           yield candidate&lt;br /&gt;       candidate += 1&lt;br /&gt;&lt;br /&gt;def factor_in(n, factors=[]):&lt;br /&gt;   for i in factors:&lt;br /&gt;       if n % i == 0:&lt;br /&gt;           return True&lt;br /&gt;   return False&lt;br /&gt;&lt;br /&gt;def is_prime(n):&lt;br /&gt;   small_primes = prime_gen()&lt;br /&gt;   while True:&lt;br /&gt;       prime = small_primes.next()&lt;br /&gt;       if n % prime == 0:&lt;br /&gt;           return False&lt;br /&gt;       if prime * prime &gt; n:&lt;br /&gt;           return True&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-1438860084660027445?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/1438860084660027445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2010/10/secrets-of-primes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/1438860084660027445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/1438860084660027445'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2010/10/secrets-of-primes.html' title='Secrets of the primes'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-6005971152783958056</id><published>2010-08-31T19:17:00.000-07:00</published><updated>2010-08-31T19:26:59.383-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Can't connect to mysql problem solved (twice)</title><content type='html'>A while ago (about a week), I ran into a problem with my mysql. I could not connect to it and all the applications I had running off it stopped working. The error I got was:&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: 12px; line-height: 24px; white-space: pre; "&gt;&lt;blockquote&gt;Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)&lt;/blockquote&gt;I came across &lt;a href="http://anthologyoi.com/computers/cant-connect-to-local-mysql-server-through-socketerror.html"&gt;this&lt;/a&gt; and some other solutions. The following steps are copied from it:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: 12px; line-height: 24px; white-space: pre; "&gt;&lt;span class="Apple-style-span" style="font-family: verdana, sans-serif; line-height: normal; white-space: normal; "&gt;&lt;p style="line-height: 24px; text-indent: 15px; margin-top: 2px; margin-right: 0px; margin-bottom: 10px; margin-left: 10px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt; (All commands need to be run as root)&lt;/p&gt;&lt;p style="line-height: 24px; text-indent: 15px; margin-top: 2px; margin-right: 0px; margin-bottom: 10px; margin-left: 10px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;Create the directory (if it doesn’t already exist).&lt;/p&gt;&lt;span class="code_child" style="font-family: 'Courier New', Courier, monospace; list-style-type: decimal; white-space: pre; width: 0px; overflow-x: auto; overflow-y: auto; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: inset; border-right-style: inset; border-bottom-style: inset; border-left-style: inset; border-color: initial; margin-top: 10px; margin-right: 10px; margin-bottom: 10px; margin-left: 10px; padding-top: 4px; padding-right: 4px; padding-bottom: 4px; padding-left: 4px; "&gt;sudo mkdir /var/run/mysqld/&lt;/span&gt;&lt;p style="line-height: 24px; text-indent: 15px; margin-top: 2px; margin-right: 0px; margin-bottom: 10px; margin-left: 10px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;Create the file by “touching” it.&lt;/p&gt;&lt;span class="code_child" style="font-family: 'Courier New', Courier, monospace; list-style-type: decimal; white-space: pre; width: 0px; overflow-x: auto; overflow-y: auto; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: inset; border-right-style: inset; border-bottom-style: inset; border-left-style: inset; border-color: initial; margin-top: 10px; margin-right: 10px; margin-bottom: 10px; margin-left: 10px; padding-top: 4px; padding-right: 4px; padding-bottom: 4px; padding-left: 4px; "&gt;sudo touch /var/run/mysqld/mysqld.sock&lt;/span&gt;&lt;p style="line-height: 24px; text-indent: 15px; margin-top: 2px; margin-right: 0px; margin-bottom: 10px; margin-left: 10px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;Set the ownership of the mysqld.sock file and folder to mysql.&lt;/p&gt;&lt;span class="code_child" style="font-family: 'Courier New', Courier, monospace; list-style-type: decimal; white-space: pre; width: 0px; overflow-x: auto; overflow-y: auto; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: inset; border-right-style: inset; border-bottom-style: inset; border-left-style: inset; border-color: initial; margin-top: 10px; margin-right: 10px; margin-bottom: 10px; margin-left: 10px; padding-top: 4px; padding-right: 4px; padding-bottom: 4px; padding-left: 4px; "&gt;sudo chown -R mysql /var/run/mysqld/&lt;/span&gt;&lt;p style="line-height: 24px; text-indent: 15px; margin-top: 2px; margin-right: 0px; margin-bottom: 10px; margin-left: 10px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;You can then start MySQL and breath easier.&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-6005971152783958056?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/6005971152783958056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2010/08/cant-connect-to-mysql-problem-solved.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/6005971152783958056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/6005971152783958056'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2010/08/cant-connect-to-mysql-problem-solved.html' title='Can&apos;t connect to mysql problem solved (twice)'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-8790080688178103998</id><published>2010-07-16T23:31:00.000-07:00</published><updated>2010-07-16T23:41:18.155-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ferry'/><category scheme='http://www.blogger.com/atom/ns#' term='travel'/><category scheme='http://www.blogger.com/atom/ns#' term='sea'/><category scheme='http://www.blogger.com/atom/ns#' term='sketch'/><title type='text'>Ferry sketch</title><content type='html'>I went by ferry from Victoria Island to Ikorodu earlier this week. In the morning I had gone the opposite route via speed boat. I wrote this sketch to try and capture the essence and meaning of that journey to me.&lt;br /&gt;&lt;br /&gt;If I could use one word to describe the ferry, it'd be noise.&lt;br /&gt;If I could use another, it'd be peace.&lt;br /&gt;The peace of a giant, reducing everything before it to spray, while negotiating a path through the mass of the great sea.&lt;br /&gt;The engines grind heavily as they slice through the weak but troublesome waves which watch closely yet aloof, longing to bounce the ferry playfully across the water, like they do with their other toy, the smaller speed boat.&lt;br /&gt;These erratic children run alongside us as we draw a scar across the skin of the waters, and she in turn, pulls us along toward home.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-8790080688178103998?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/8790080688178103998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2010/07/ferry-sketch.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/8790080688178103998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/8790080688178103998'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2010/07/ferry-sketch.html' title='Ferry sketch'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-1782191194343369705</id><published>2010-07-16T23:21:00.000-07:00</published><updated>2010-07-16T23:30:12.101-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rock'/><category scheme='http://www.blogger.com/atom/ns#' term='sketch'/><category scheme='http://www.blogger.com/atom/ns#' term='dream'/><title type='text'>Dreamsketch</title><content type='html'>I dreamt one night of a magestic rock and wrote this little sketch in the dream. I was acutely aware that I was in a dream and that I had to capture the essence of it all before I woke up,, or it would be lost ... forever.&lt;br /&gt;Don't mind me, I like drama a little too much.&lt;br /&gt;Unfortunately, I did not remember the whole sketch when I woke from the dream. So I had to 'augment' it a little. The sketch is far from finished as this is still an early draft but here goes:&lt;br /&gt;&lt;br /&gt;It stood to the left capped in a mist&lt;br /&gt;Rising majestic and unyielding by itself&lt;br /&gt;Patterns of knives spot its skin&lt;br /&gt;From its crown to the toe where I humbly sit&lt;br /&gt;&lt;br /&gt;The breadth of Time is counted on its rim&lt;br /&gt;And me a tick in its never ending clock.&lt;br /&gt;My simple, weary strand of life&lt;br /&gt;By this solid block of eternity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-1782191194343369705?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/1782191194343369705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2010/07/dreamsketch.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/1782191194343369705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/1782191194343369705'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2010/07/dreamsketch.html' title='Dreamsketch'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-7002210813468683970</id><published>2010-07-08T19:25:00.000-07:00</published><updated>2010-07-08T20:19:08.219-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mail server'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='lamson'/><title type='text'>Setting up lamson</title><content type='html'>&lt;div&gt;Just what I need. An opportunity to use a 'cool' tool. &lt;/div&gt;&lt;div&gt;That tool is &lt;a href="http://lamsonproject.org"&gt;lamson&lt;/a&gt;. A python mail server.&lt;/div&gt;&lt;div&gt;This post is about installing lamson, which was not quite as straight-forward as has been my experience installing python libraries.&lt;/div&gt;&lt;div&gt;According to  &lt;a href="http://lamsonproject.org/docs/getting_started.html"&gt;the 30 seconds part of the docs&lt;/a&gt;, setting up your mail server should be as simple as:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;$ easy_install lamson &lt;/div&gt;&lt;div&gt;$ lamson gen -project mymailserver &lt;/div&gt;&lt;div&gt;$ cd mymailserver &lt;/div&gt;&lt;div&gt;$ lamson start &lt;/div&gt;&lt;div&gt;$ lamson log &lt;/div&gt;&lt;div&gt;$ nosetests &lt;/div&gt;&lt;div&gt;$ lamson help -for send &lt;/div&gt;&lt;div&gt;$ lamson send -sender me@mydomain.com -to test@test.com \&lt;/div&gt;&lt;div&gt;         -subject “My test.” -body “Hi there.” -port 8823 $ less logs/lamson.log $ mutt -F muttrc&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well, my experience was not as seamless as that. The whole problem started with the first line:&lt;/div&gt;&lt;div&gt;$ easy_install lamson&lt;/div&gt;&lt;div&gt;I got an error:&lt;/div&gt;&lt;div&gt;Reading http://code.google.com/p/pylockfile/ No local packages or download links found for lockfile&gt;=0.9 error: Could not find suitable distribution for Requirement.parse('lockfile&gt;=0.9')&lt;/div&gt;&lt;div&gt;Apparently, the lockfile version 0.9 had not been published yet on pypi.  &lt;/div&gt;&lt;div&gt;Luckily, &lt;a href="http://librelist.com/browser//lamson/2010/5/11/lockfile-0-9-requirement/#aa90329a94b86cae01ee8d0d32da62bc"&gt;someone had gone that road&lt;/a&gt; before, and I was able to download the &lt;a href="http://code.google.com/p/pylockfile/downloads/detail?name=lockfile-0.9.tar.gz"&gt;0.9&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://code.google.com/p/pylockfile/downloads/detail?name=lockfile-0.9.tar.gz"&gt;version&lt;/a&gt; from google code.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ok, round 2:&lt;/div&gt;&lt;div&gt;$ lamson gen -project mymailserver&lt;/div&gt;&lt;div&gt;File "/usr/local/lib/python2.6/dist-packages/lamson-1.0pre2-py2.6.egg/lamson/utils.py", line 12,&lt;/div&gt;&lt;div&gt;from daemon import pidlockfile&lt;/div&gt;&lt;div&gt;ImportError: cannot import name pidlockfile&lt;/div&gt;&lt;div&gt;This was apparently supposed to be&lt;/div&gt;&lt;div&gt;from lockfile import pidlockfile&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Round 3:&lt;/div&gt;&lt;div&gt;$ cd mymailserver&lt;/div&gt;&lt;div&gt;$ lamson start&lt;/div&gt;&lt;div&gt;$ lamson log&lt;/div&gt;&lt;div&gt;$ nosetests&lt;/div&gt;&lt;div&gt;Traceback again!&lt;/div&gt;&lt;div&gt;from lamson/server.py line 62, in resolve_relay_host&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;import DNS&lt;/div&gt;&lt;div&gt;ImportError: No module named DNS&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well this was easily resolved by:&lt;/div&gt;&lt;div&gt;apt-get install python-dns&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After that, it was smooth(?)-sailing&lt;/div&gt;&lt;div&gt;(I also installed mutt - apt-get install mutt)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-7002210813468683970?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/7002210813468683970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2010/07/setting-up-lamson.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/7002210813468683970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/7002210813468683970'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2010/07/setting-up-lamson.html' title='Setting up lamson'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-7958686492812937052</id><published>2010-05-19T15:54:00.000-07:00</published><updated>2010-05-19T16:34:24.266-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dbsettings'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='django1.2'/><title type='text'>broke dbsettings and I can do nothing about it</title><content type='html'>Django 1.2 just came out! hurrah!!&lt;br /&gt;Tested it on two projects. No luck! I get a KeyError from django.utils.datastructures module, hmnn.. the SortedDict class.&lt;br /&gt;I walk up the stack trace and notice that it is dbsettings (or django-values as it was once called) that's acting up.&lt;br /&gt;But where?&lt;br /&gt;dbsettings.loading... ah! There is this SettingDict class that just closely wraps the afore-mentioned SortedDict one from django.utils.datastructures.py&lt;br /&gt;But it used to work on django 1.1.1, so what gives?&lt;br /&gt;Let me see the SortedDict implementations from both versions of django, old and new.&lt;br /&gt;Yeah, they both have this keyOrder thingy (a list) to keep the order of the keys of the dict (the SortedDict is just a dictionary which remembers the order in which items are entered).&lt;br /&gt;They both implement __setitem__ so you can do stuff like:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;sorted_dict[key] = value&lt;br /&gt;&lt;/blockquote&gt;(yawn...)&lt;br /&gt;But wait.. the whole implementation is changed&lt;br /&gt;while django1.1.1 went:&lt;br /&gt;&lt;blockquote&gt;def __setitem__(self, key, value):&lt;br /&gt;    super(SortedDict, self).__setitem__(key, value)&lt;br /&gt;    if key not in self.keyOrder:&lt;br /&gt;        self.keyOrder.append(key)&lt;/blockquote&gt;django 1.2 goes:&lt;br /&gt;&lt;blockquote&gt;def __setitem__(self, key, value):&lt;br /&gt;    if key not in self:&lt;br /&gt;        self.keyOrder.append(key)&lt;br /&gt;    super(SortedDict, self).__setitem__(key, value)&lt;/blockquote&gt;Now this is not necessarily an issue but dbsettings (in the loading module), extends the SortedDict class and overrides sensitive signatures like __iter__ and __contains__ which do very bad stuff that prof told us never to do:&lt;br /&gt;For example it redefined __contains__ to check within the values() instead of the keys().&lt;br /&gt;This breaks stuff because from SortedDict's implementation of __setitem__ it checks if key not in self. From SettingsDict's implementation of __contains__, this frigging breaks everything, Boom!!!&lt;br /&gt;That is the first part. The second part is that I cannot do anything about it cos someone else has: check out his work-around &lt;a href="http://github.com/codysoyland/django-dbsettings/commit/af8012263f15b8f9371ce86207a371d64c7911c8"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-7958686492812937052?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/7958686492812937052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2010/05/broke-dbsettings-and-i-can-do-nothing.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/7958686492812937052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/7958686492812937052'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2010/05/broke-dbsettings-and-i-can-do-nothing.html' title='broke dbsettings and I can do nothing about it'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-2399268508432979660</id><published>2010-05-03T02:26:00.000-07:00</published><updated>2010-05-03T02:59:11.588-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lexical-scoping'/><category scheme='http://www.blogger.com/atom/ns#' term='strings'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='parenthesis'/><title type='text'>2 new things I learned before 11 am</title><content type='html'>1. In python,&lt;div&gt;some_string = 'My name is bayo',&lt;/div&gt;&lt;div&gt;some_string = ('My name is bayo'),&lt;/div&gt;&lt;div&gt;and&lt;/div&gt;&lt;div&gt;some_string = ('My name'&lt;/div&gt;&lt;div&gt;                        ' is bayo')&lt;/div&gt;&lt;div&gt;basically mean the same thing&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2. Lexical scoping is a bit trickier than I thought.&lt;/div&gt;&lt;div&gt;&gt;&gt;&gt; i = 4#outermost i&lt;/div&gt;&lt;div&gt;&gt;&gt;&gt; def foo(x):&lt;/div&gt;&lt;div&gt;...          def bar():&lt;/div&gt;&lt;div&gt;...              print i,&lt;/div&gt;&lt;div&gt;...          for i in x: print i,&lt;/div&gt;&lt;div&gt;...          bar()&lt;/div&gt;&lt;div&gt;...&lt;/div&gt;&lt;div&gt;&gt;&gt;&gt; foo([0,1,2])&lt;/div&gt;&lt;div&gt;0 1 2 2&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You see? the global i(=4) is invisible because i is defined in foo. The i referred to in bar is bound to the inner-most-scoped i (in foo)&lt;/div&gt;&lt;div&gt;If you change foo to&lt;/div&gt;&lt;div&gt;&gt;&gt;&gt; def foo(x):&lt;/div&gt;&lt;div&gt; ...         def bar():&lt;/div&gt;&lt;div&gt; ...             print i,&lt;/div&gt;&lt;div&gt; ...         bar()&lt;/div&gt;&lt;div&gt; ...         for i in x: print i,&lt;/div&gt;&lt;div&gt;&gt;&gt;&gt; foo(range(3))&lt;/div&gt;&lt;div&gt;---------------------------------&lt;/div&gt;&lt;div&gt;NameError "free variable i referenced before assignment in enclosing scope"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Meaning there is i defined in the enclosing scope (foo) which is referenced before the assignment. Using a list-comp in place of&lt;/div&gt;&lt;div&gt;...   for i in x: print i,&lt;/div&gt;&lt;div&gt;does little cos list comps (in python 2.x) leak the loop variable (i) to the containing scope&lt;/div&gt;&lt;div&gt;If you do &lt;/div&gt;&lt;div&gt;...    for y in x: print y,&lt;/div&gt;&lt;div&gt;it works properly since the 'i' in bar can then see the 'i' in the outer scope:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&gt;&gt;&gt; i = 4&lt;/div&gt;&lt;div&gt;&gt;&gt;&gt; def foo(x):&lt;/div&gt;&lt;div&gt;...          def bar():&lt;/div&gt;&lt;div&gt;...              print i,&lt;/div&gt;&lt;div&gt;...          for y in x: print y,&lt;/div&gt;&lt;div&gt;...          bar()&lt;/div&gt;&lt;div&gt;...&lt;/div&gt;&lt;div&gt;&gt;&gt;&gt; foo([0,1,2])&lt;/div&gt;&lt;div&gt;0 1 2 4&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-2399268508432979660?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/2399268508432979660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2010/05/2-new-things-i-learned-before-11-am.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/2399268508432979660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/2399268508432979660'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2010/05/2-new-things-i-learned-before-11-am.html' title='2 new things I learned before 11 am'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-6284021554558456984</id><published>2010-01-05T23:20:00.000-08:00</published><updated>2010-01-05T23:44:28.713-08:00</updated><title type='text'>Internet access with the Koala</title><content type='html'>I was really wowed when I saw that in recent releases of ubuntu (9.04, 9.10), you set up broadband internet with a wizard that had in its ISP options most major telcos in Nigeria. So, of course I dumped my hardy heron (ubuntu 8.04) for the karmic koala and set up broad band internet connections to both Zain and MTN (whistling...)&lt;div&gt;To my chagrin, I started to have some issues after a while:&lt;/div&gt;&lt;div&gt;1. I connect the modem (usually a Huawei e220 I borrowed from keni).&lt;/div&gt;&lt;div&gt;2. Wait for the icon to do the ring-a-roses&lt;/div&gt;&lt;div&gt;3. Connected (shows the signal strength in a row of growing bars, and even shows a little popup saying 'connected')&lt;/div&gt;&lt;div&gt;4. Since I am paranoid, I do a tail -f /var/log/messages and at the tail end I see local ip: xxxx, remote ip: xxxx&lt;/div&gt;&lt;div&gt;5. I am still paranoid, and do a ping google.com&lt;/div&gt;&lt;div&gt;6. Sometimes I am greeted with the pleasant ping responses, but it is the other times when I get the "wtf are you talking about? I don't know google.com" that I am talking about...&lt;/div&gt;&lt;div&gt;7. Frustrated....&lt;/div&gt;&lt;div&gt;8. Disconnect... connect... disconnect... connect...&lt;/div&gt;&lt;div&gt;9. It works! and I noticed from my tail that when it does, I also get a primary DNS and secondary DNS info, hmmnnn...&lt;/div&gt;&lt;div&gt;10. I do a grep on my /var/log/messages for all primary DNS info and voila! they are all the same (not exactly, they are different for the Zain connections)&lt;/div&gt;&lt;div&gt;11. I go to my connection settings and instead of automatically getting DNS settings, I enter the DNS info that grep just told me&lt;/div&gt;&lt;div&gt;12. I can now make this blog entry...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;PS&lt;/div&gt;&lt;div&gt;Unfortunately, this does not guarantee that MTN 'narrowband' internet will be on...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-6284021554558456984?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/6284021554558456984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2010/01/internet-access-with-koala.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/6284021554558456984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/6284021554558456984'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2010/01/internet-access-with-koala.html' title='Internet access with the Koala'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-6079126002946608046</id><published>2009-11-25T21:31:00.000-08:00</published><updated>2009-11-25T22:27:58.624-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='self'/><category scheme='http://www.blogger.com/atom/ns#' term='psychology'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='life'/><category scheme='http://www.blogger.com/atom/ns#' term='chess'/><title type='text'>as in chess...</title><content type='html'>Prophylactic thinking, my favorite subject in chess.&lt;br /&gt;Seeing the problem long before it manifests and laying ambush for it...&lt;br /&gt;Recognizing and removing the weed before it germinates (not that kind, pleeaase - let it grow for I and I).&lt;br /&gt;Prophylaxis; a shiny word for the deepest, coldest, calculated(est) concept&lt;br /&gt;You play your game in your opponent's mind, and if he is any good the battle field will shift between your mind and his often. The game of chess is not played on 64 squares!&lt;br /&gt;&lt;br /&gt;We learnt the rules long ago and through work work work. It boils down to 3 simple concepts really:&lt;br /&gt;&lt;br /&gt;POSITIONAL ASSESSMENT&lt;br /&gt;PLANNING&lt;br /&gt;CALCULATION&lt;br /&gt;in that order.&lt;br /&gt;&lt;br /&gt;If you practice the three well and fastidiously, you will be blessed with a fourth, brilliant combinations, tactical coups that eliminate the obstacle in flash and style. But first:&lt;br /&gt;&lt;br /&gt;Positional assessment: this is counting, weighing and comparing.&lt;br /&gt;not the number of pieces you have, no sir! Your assets vs liabilities&lt;br /&gt;&lt;ol&gt;&lt;li&gt;the effectiveness/activity of your pieces in relation to the achievement of your goals (happiness, anyone). sometimes you cannot see a clean relationship between the goal and the effectiveness of your tools, in such cases, the effectiveness of the tools is to be weighed against other factors of your position&lt;/li&gt;&lt;li&gt;the way in which the pieces you have co-operate. do they help each other? complement each other? like 2 bishops gazing across the two colored board at the hostile kings position... or 2 pawns standing side-by-side to cover 4 central squares. or do they get in each other's way?&lt;/li&gt;&lt;li&gt;the amount of space you have to manoeuvre. how much lee-way do you have to take decisions and quickly execute plans? are you constrained by factors like lack of cash? necessity to complete mortgage payments? contracts you need to uphold? people you need to please?&lt;/li&gt;&lt;li&gt;the safety of your king. what things are dearest to you? have you invested in proper safety measures like insurance, remote backup of critical files, communication in relationships, safeguarding your reputation...&lt;/li&gt;&lt;li&gt;then the numerical strength of your material. how much material weight can you push to achieve your goals?&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Now you get to the planning stage. and the questions you would like to ask yourself all come out of the positional assessment's what next beg...&lt;br /&gt;&lt;ol&gt;&lt;li&gt;how well off am I? am i in black or red? stronger or weaker than my opponent (poverty, unhappiness, lack of fulfilment, feeling of inadequacy...)here you need the honest truth. you can lie to everyone else, but at this point it is just the worst thing to say 'i am well', 'i am rich', and all the other assertations. this is the point where you make the fork. left or right? either way is good - if it is the way home (or to school, church, bar, whatever). There is a standing rule in chess: when in an advantageous position, you have the right and the need to attack or risk losing your advantage. When at a disadvantage however, you have to rein in your horse, dig a ditch and defend stoutly, endeavoring to cover up the weaknesses in your position and edge toward neutrality. In a balanced position, you maneuver and actively seek ways of extracting some sort of advantage or at least an imbalance that you can take advantage of.&lt;/li&gt;&lt;li&gt;Also, at this point you need new answers: if I am stronger, where does my strength lie? where is the weakest position in my opponents board? How do I conduct my attack to increase my grip on the position? When weak, the opposite questions are as important: Where is my biggest weakness? How can the opponent most readily attack me? What can I do to mitigate my weaknesses? Opportunities for counter attack are not far from your thoughts as well&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Calculation is the ability (we all have) to look at the possible outcomes of our actions, what is profitable and what is not. How do we know what is profitable and what is not? we have to do an assessment of the possible positions after the imagined series of actions, weigh them again on the scale and decide.&lt;br /&gt;&lt;br /&gt;A last word, consistency is a virtue as long as it does not grow to complacence or fear of change. It is a wild game. Come let us play it with zest and energy.&lt;br /&gt;&lt;br /&gt;So we lather, rinse, repeat as we master this age old game of ours&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-6079126002946608046?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/6079126002946608046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2009/11/as-in-chess.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/6079126002946608046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/6079126002946608046'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2009/11/as-in-chess.html' title='as in chess...'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-7281952422579975720</id><published>2009-11-24T03:58:00.000-08:00</published><updated>2009-11-24T04:12:44.905-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='travel'/><category scheme='http://www.blogger.com/atom/ns#' term='car'/><category scheme='http://www.blogger.com/atom/ns#' term='accident'/><title type='text'>a spin in the yarn</title><content type='html'>The white "hiluxy" truck was about to overtake my rickety audi. I have just looked at the rear view mirror, the right side mirror, the fuel guage, dashboard clock and  speedometer. Every thing was fine. a hundred and 10, maybe 20 km/hr, a quarter tank of fuel, a stationary 911 truck about 75m away to the left. The hilux was passing me... crack! did he touch me? The car skid to the left. started in a spin, counter-clockwise. Don't freakin touch the brakes!&lt;br /&gt;"Father help me, help me please"&lt;br /&gt;The car spun around twice or more, narrowly missed the parked 911 and headed for the culvert. I crashed into the the cement culvert, and the car ground to a halt.&lt;br /&gt;I breathe a "thank you Lord"&lt;br /&gt;Put off the car engine, unfastened the seat belt, opened the door and squeezed out. The hilux had sped along, but my friend, Diran, who was traveling ahead of me in his honda had stopped a few meters ahead and was walking back. I waved at him so he knows I am Ok.&lt;br /&gt;Hope I don't have nightmares...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-7281952422579975720?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/7281952422579975720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2009/11/spin-in-yarn.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/7281952422579975720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/7281952422579975720'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2009/11/spin-in-yarn.html' title='a spin in the yarn'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-161136775976687365</id><published>2009-09-10T02:50:00.000-07:00</published><updated>2009-09-10T04:05:27.699-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rebranding'/><category scheme='http://www.blogger.com/atom/ns#' term='nigeria'/><category scheme='http://www.blogger.com/atom/ns#' term='politics'/><title type='text'>A tale of two aunts</title><content type='html'>When Aunt Dora became information minister, I was a bit skeptical cos she was doing such a great job at NAFDAC. So she gets promoted (it seemed) and in a short while we start to hear of a new project to re-brand (brainwash) the country. Bravo! (it seemed again). But thinking about it a bit, what is the meat of the re-branding project? At first glance it seems like we want to show the world (and ourselves) that Nigeria is not all corruption and fraud (419), suffering (and smiling - RIP Fela), failed (x-point) agendas, etc... But that we are um... what? (I have to re-brand/brainwash myself again, it seems).&lt;br /&gt;Every Nigerian of a thoughtful disposition (and most who have their thinking done for them by the media and gossip-channels) know what's what. We are all tired of talking about it (yawn), though we are apparently not sick enough (or courageous enough?) to do anything about it. The people who were are almost all gone now: Gani (sun re o!), Fela, Beko...&lt;br /&gt;I wish Aunt Dora would tell us exactly what we are re-branding? Is it the mess that is Nigeria? Bob Marley (RIP) said: "Some people put their best outside, some people keep their best inside". Aunty, pls we want to keep our best inside not outside for display, when we DEY HEAR AM for inside.&lt;br /&gt;Another lovely aunt of mine, Aunt Cecilia is being harassed for sharp practices in the banking sector. I have heard so much said about my poor aunt that... &lt;br /&gt;I believe that in this life, the only things we take with us (we are all gonna die!) are the things we leave behind... &lt;br /&gt;&lt;br /&gt;PS&lt;br /&gt;My apologies to all who are offended by my use of Fela and Bob Marley's quotes. Perhaps I should have used quotes from Ghandi, Awo, Zik, Nkrumah, Lincoln, Aunt Maggie, Oga Churchill, etc... Perhaps even from the Bible or Quran... But we no need to go that far, bros.The winch wey dey worry us, na inside awa house e dey!&lt;br /&gt;&lt;br /&gt;PPS&lt;br /&gt;My apologies to those I have also offended by picking on the (few) ladies we have in high places... But I have long lost faith in the uncles and (sugar?)daddies that have held our poor country hostage for decades. They have apparently sold some part of their souls to the devil and so we have to use XX-long spoons when dining with them (don't swallow please)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-161136775976687365?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/161136775976687365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2009/09/tale-of-two-aunts.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/161136775976687365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/161136775976687365'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2009/09/tale-of-two-aunts.html' title='A tale of two aunts'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-6518613218274809444</id><published>2009-08-01T16:37:00.000-07:00</published><updated>2009-08-01T17:19:32.877-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='nigeria'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>the scent of a coders conference</title><content type='html'>There is the scent of a hackers conference in the air...&lt;br /&gt;A group of hackers and hacker-cum-businessmen met yesterday in the busy city of Lagos with one agenda in mind...&lt;br /&gt;To organize a top notch programmer's conference here in Lagos. A conference with the central goal of exposing young and would be programmers to the wonderful labyrinth of languages, tools and technologies out there.&lt;br /&gt;Experienced hackers are not left behind with the dazzling array of tech talks and hacking sessions.&lt;br /&gt;Hey, this is just the dream. Don't quote me!&lt;br /&gt;Watch out for more information on developments.&lt;br /&gt;P.S.&lt;br /&gt;The project is code-named {braces}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-6518613218274809444?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/6518613218274809444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2009/08/scent-of-coders-conference.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/6518613218274809444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/6518613218274809444'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2009/08/scent-of-coders-conference.html' title='the scent of a coders conference'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-1370093320932909260</id><published>2009-08-01T12:04:00.000-07:00</published><updated>2009-08-01T15:13:38.159-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lightblue'/><category scheme='http://www.blogger.com/atom/ns#' term='bluetooth'/><category scheme='http://www.blogger.com/atom/ns#' term='obex'/><category scheme='http://www.blogger.com/atom/ns#' term='pybluez'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='bluez'/><title type='text'>bluetooth file transfer with PyBluez and lightblue</title><content type='html'>&lt;div style="text-align: left;"&gt;I just learnt to send files via bluetooth to my phone using python. I am ashamed to say it took a couple of days to get it off the ground.&lt;br /&gt;&lt;/div&gt;I have a nokia e63 and my development box is an linux ubuntu 8.04 (hardy heron) machine&lt;br /&gt;Starting out I gathered some info about the bluetooth stack, learnt the way to go was bluez (and PyBluez in my case as I would much rather work in python than the other options I came across, java or c).&lt;br /&gt;So I did an apt-get install python-bluez and experimented some. I found it terribly easy to scan for bluetooth devices and connect, but I did not succeed in sending files to the phone.&lt;br /&gt;Then I discovered lightblue!&lt;br /&gt;So off I went and downloaded lightblue, cd'd to the directory and went&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;sudo python setup.py install&lt;br /&gt;&lt;/span&gt;Unfortunately, I got lots of errors starting with&lt;br /&gt;&lt;span style="font-style: italic;"&gt;could not find bluetooth/bluetooth.h or bluetooth/hci.h &lt;/span&gt;and a whole slew of similar messages. A google search revealed that I needed to install the development files for bluez. So:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;sudo apt-get install libbluetooth-dev&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;and voila! some of the error messages went&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;. &lt;/span&gt;The errors left had OBEX all over them, and so I guessed that they were missing the OBEX development files as well.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;sudo apt-get install libopenobex1-dev&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;sudo python setup.py install&lt;/span&gt;&lt;br /&gt;Now the install went smooth.&lt;br /&gt;I wasted no time in testing:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;import lightblue&lt;br /&gt;for device in lightblue.finddevices():&lt;br /&gt;   lightblue.obex.sendfile(device[0],9,file_object)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;9 is the port for OBEX push&lt;br /&gt;device[0] will give the address of the bluetooth device&lt;br /&gt;file_object is either a file name or a file obtained by calling open(file_path)&lt;br /&gt;Next, I will find how to send files asynchronously as a step toward building a full-scale bluetooth marketing device! So till then!&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-1370093320932909260?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/1370093320932909260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2009/08/bluetooth-file-transfer-with-pybluez.html#comment-form' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/1370093320932909260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/1370093320932909260'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2009/08/bluetooth-file-transfer-with-pybluez.html' title='bluetooth file transfer with PyBluez and lightblue'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-5069609177579851755</id><published>2009-07-30T10:36:00.000-07:00</published><updated>2009-07-30T11:32:05.676-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python django programming coding web framework code'/><title type='text'>shiny new Django1.1 in a few words</title><content type='html'>"It was with joy that..." I viewed the announcement of the release of django 1.1.&lt;br /&gt;It has a ton of features like (opening the release notes):&lt;br /&gt;- speed up of test performance (now i'll stop being a hypocrite and write those unit tests)&lt;br /&gt;- aggregation (instead of grabbing a bunch of records and finding the length, or writing custom sql, i can just ask for the Count, or SUM,MAX,MIN of particular fields)&lt;br /&gt;- annotation (give me all the drugs that i brought in last week and the total number of sales for each)&lt;br /&gt;- F (query)-expressions (give me all the drugs whose purchase dates are greater than the expiry dates, and by the way get the list of people i have sold them to, grouped by drug)&lt;br /&gt;- deferred fields (when you have 'expensive' field data, large text fields for instance, you can defer their loading till they are needed). Nice performance feature&lt;br /&gt;- Admin actions (d admin site just got better with the addition of batch delete and custom actions)&lt;br /&gt;&lt;br /&gt;Since I have been running the development version, I have gotten used some of these, However, there are a ton of other stuff I just got to know about:&lt;br /&gt;- unmanaged models&lt;br /&gt;- proxied models (i am a fan)&lt;br /&gt;- url namespaces&lt;br /&gt;- loads of other stuff that i will be looking at in the next few weeks, especially as I have a million project ideas to work on.&lt;br /&gt;The django team has done a wonderful job! I can only hope for the privilege to contribute to it in the future... of course I will!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-5069609177579851755?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/5069609177579851755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2009/07/shiny-new-django11-in-few-words.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/5069609177579851755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/5069609177579851755'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2009/07/shiny-new-django11-in-few-words.html' title='shiny new Django1.1 in a few words'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-5517553468390855182</id><published>2009-07-22T01:48:00.000-07:00</published><updated>2009-07-22T01:57:39.212-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='user experience'/><category scheme='http://www.blogger.com/atom/ns#' term='online booking'/><category scheme='http://www.blogger.com/atom/ns#' term='virgin nigeria'/><category scheme='http://www.blogger.com/atom/ns#' term='travel'/><title type='text'>crappy virgin nigeria online booking experience (aka where are lawyers when i need them)</title><content type='html'>I was trying to book a flight from lagos to port-harcourt for the 22nd of July (today) and I found that you have to be extra careful when booking for virgin nigeria flights. The 2 issues are:&lt;br /&gt;1. I selected 22nd of July for the booking date. By some crazy magic, when i clicked next to continue the booking process, the date 23rd July shows up as my booking date. Since I was more interested in the cost of the flight, my brain did not take the new (magically derived) date in. So, I pay and only then discover that virgin nigeria prefers that I travel tomorrow instead of today, and also that cancelling my booking will cost N2,500 that I never budgeted for. I (and any reasonable user, IMHO) would have thought they could indicate that flights on the date I selected did not have any available seats, like putting a LARGE RED SIGN that screams 'There are no seats available for the date you selected, however we have flights for the 23rd of July...etc' with a very big sorry sign on it (i don't think it costs anything to say sorry even if it's not your fault that the user did not book early enough). &lt;br /&gt;Or maybe a separate list of suggested travel dates, that is clearly marked 'RED PAINT: SUGGESTED TRAVEL DATE: XX/YY/ZZ'. But just tricking him/her to book on any arbitrary date (tomorrow is as arbitrary as next year) is just bad bad bad!!!!&lt;br /&gt;Another source of frustration is that our own dear virgin nigeria claimed to charge N15,650 for the flight... How come my sms alert rounds it up to N16,000? are there hidden costs that they do not show us? or is somebody stealing my money behind my back? or both?&lt;br /&gt;Virgin Nigeria you have to get your act together and make your online booking experience less of a JAMB exam!&lt;br /&gt;At least we have the option of going aero for their cheap flights (small advert for them here)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-5517553468390855182?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/5517553468390855182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2009/07/crappy-virgin-nigeria-online-booking.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/5517553468390855182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/5517553468390855182'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2009/07/crappy-virgin-nigeria-online-booking.html' title='crappy virgin nigeria online booking experience (aka where are lawyers when i need them)'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-8386923532462458038</id><published>2009-07-04T15:28:00.000-07:00</published><updated>2009-07-04T16:07:49.508-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tax'/><category scheme='http://www.blogger.com/atom/ns#' term='evince'/><category scheme='http://www.blogger.com/atom/ns#' term='income'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='nigeria'/><title type='text'>A free service to calculate your taxes (Nigeria-residents for a start)</title><content type='html'>The company I work for, Evince Systems (http://www.evincesystems.com), just put up a free service to help Nigerians calculate their income tax online. The url is at &lt;a href="http://www.taxophobia.com"&gt;http://www.taxophobia.com&lt;/a&gt;.&lt;br /&gt;You just browse to the site, fill in your pay information, and get a break down of your tax details.&lt;br /&gt;We plan to expand the service to support companies that want to calculate their staff tax information.&lt;br /&gt;You can follow Evince Systems on twitter as @evincesys&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-8386923532462458038?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/8386923532462458038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2009/07/free-service-to-calculate-your-taxes.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/8386923532462458038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/8386923532462458038'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2009/07/free-service-to-calculate-your-taxes.html' title='A free service to calculate your taxes (Nigeria-residents for a start)'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-132755193449723951</id><published>2009-06-26T05:21:00.000-07:00</published><updated>2009-06-26T07:13:29.806-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='self'/><category scheme='http://www.blogger.com/atom/ns#' term='intellect'/><category scheme='http://www.blogger.com/atom/ns#' term='mind'/><category scheme='http://www.blogger.com/atom/ns#' term='relationship'/><category scheme='http://www.blogger.com/atom/ns#' term='personal development'/><category scheme='http://www.blogger.com/atom/ns#' term='business'/><title type='text'>dining with devils (aka a world of long spoons)</title><content type='html'>There is this game called prisoner's dilemma (i think) which I learned from a documentary a while ago. It is played by two players with pen and paper. During each round, the players are asked to either co-operate or decline and are scored as follows:&lt;br /&gt;1. if both players decline, they each get 2 points&lt;br /&gt;2. if both players co-operate, they each get 3 points&lt;br /&gt;3. if one declines and the other co-operates, the declining player gets 4 while the co-operating player gets 1 point.&lt;br /&gt;It is obvious from this explanation that players that co-operate get the maximum total benefit (6 points) while both declining get 4 and one declining and the other co-operating get 5 points.&lt;br /&gt;The game loosely mirrors the win-win, win-lose and lose-lose scenarios bandied about in personal development books (the better ones imho).&lt;br /&gt;So what about the game?&lt;br /&gt;A competition was organized (still talking about the documentary) among software makers to find out what the most effective strategy was in this scenario. A number of software houses contributed programs which implemented various algorithms. The most successful algorithms went like this:&lt;br /&gt;1. with programs that have a history of co-operating, co-operate&lt;br /&gt;2. with programs that have a history of declining, decline.&lt;br /&gt;&lt;br /&gt;Programs that show a tendency to decline are like opportunistic people who take advantage of other people to achieve their aims, they apply a win-lose strategy.&lt;br /&gt;The ones that co-operate all the time are naive people whose preponderance makes the opportunistic people more successful. They do not take care of themselves, but instead depend on being treated fairly by others. They are weak and apply a lose-win strategy&lt;br /&gt;There are the ones that apply lose-lose strategies, the ones that do not care for their own gain but look only for the loss of others. It may be surprising how many of these people exist. These are the cynics and spoil sports&lt;br /&gt;Then there are the ones that are people who co-operate with those that co-operate and decline with those that decline. In an ideal society, these should be the most successful people. Alas we live in a less than ideal society and the first group (the win-lose group) are the most successful, and this in my opinion, is because of the do-gooders in the lose-win group&lt;br /&gt;Why aren't we all emancipated people who look out for OUR own benefit as well as that of our neighbours??&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-132755193449723951?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/132755193449723951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2009/06/dining-with-devils.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/132755193449723951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/132755193449723951'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2009/06/dining-with-devils.html' title='dining with devils (aka a world of long spoons)'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-8480975122977839325</id><published>2009-06-19T17:10:00.000-07:00</published><updated>2009-06-19T17:29:47.892-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='physics'/><title type='text'>what google can't help me find (or poor search techniques)</title><content type='html'>I was reading a blog just now about a(nother) dissatisfied programmer who quit his job. Yes they have really turned our creative-arts-beauty-pursuit into a frigging (to pass the acceptable word filter) sweat shop where people only pretend to love what they do. But that's not the point of this rant...&lt;br /&gt;Years ago, while I was in school (Yaba College of Technology) and was (as usual) in the library, and also typically not studying my course work, I stumbled upon a large hardback titled 'BOHR'. Yes, the same Bohr (Borg?) of the atomic theories and physics stuff. Lovely biography that encompassed the lives of lots of other popular physicists of the age Werner Heisenberg (uncertainty principle), Wolfgang Paulli (paulli's principle), and the like. But again that is not the point of my post...&lt;br /&gt;In the book, there was this poem I learned by heart. Forgoten most of it now but went something like:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Take away your billion dollars, take away your boundless gold....&lt;br /&gt;....&lt;br /&gt;Engineering isn't physics, are you absolutely clear?&lt;br /&gt;So take away your billion dollars, let's be physicists again&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Tried to search for the poem in google but no dice (or too much dice, whatever)...&lt;br /&gt;so, I do this rant instead...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-8480975122977839325?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/8480975122977839325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2009/06/what-google-cant-help-me-find-or-poor.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/8480975122977839325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/8480975122977839325'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2009/06/what-google-cant-help-me-find-or-poor.html' title='what google can&apos;t help me find (or poor search techniques)'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-3463573733137567677</id><published>2009-05-31T22:27:00.001-07:00</published><updated>2009-05-31T22:44:25.561-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django dash python competition'/><title type='text'>django dash</title><content type='html'>Just completed the djangodash hosted by &lt;a href="http://www.toastdriven.com"&gt;toast-driven&lt;/a&gt; which is a &lt;a href="http://www.djangoproject.com"&gt;django&lt;/a&gt; competition where you could work in teams on a project and submit by checking into svn.&lt;br /&gt;Although we did not get to check in all our code, (the party line is: "we had internet access on only one box, and did not have a local network set up, so we had to do a caveman's synchronization (copy the files to the flash drive so i can update my project)") but the experience was really great for me. I got to work with a number of libraries I had not previously given a thought to.&lt;br /&gt; - the thickbox jquery plugin&lt;br /&gt; - the django comments framework&lt;br /&gt; - openid using django-authopenid, an excellent openid framework written by Benoît Chesneau &lt;br /&gt;so, it was a win for me, and i hope for stan as well (who was my co-conspirator in the project)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-3463573733137567677?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/3463573733137567677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2009/05/django-dash.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/3463573733137567677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/3463573733137567677'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2009/05/django-dash.html' title='django dash'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-8621667555710115058</id><published>2009-05-14T02:28:00.000-07:00</published><updated>2009-05-27T03:55:36.564-07:00</updated><title type='text'>django on oracle experience</title><content type='html'>I had to set up django/modpython/apache on oracle/windows in a production environment a while ago. Thanks to a couple of articles [links], this was not really a painful experience. Here I will outline the major issues that came up.&lt;br /&gt;The database server had been configured by an oracle expert, and the oracle client installed on the webserver.&lt;br /&gt;&lt;br /&gt;First, I had to install cx_oracle version  4.3.1 so that python could talk to the oracle 10g client. I read in the deployment notes in the django doc that the 5.0 version was buggy, so I (typically) played it safe with an older version.&lt;br /&gt;&lt;br /&gt;Next, I installed python and tried to connect to their database server with:&lt;br /&gt;&gt;&gt;&gt; import cx_Oracle&lt;br /&gt;&gt;&gt;&gt; cx_Oracle.connect("username/password@service_name")&lt;br /&gt;&gt;&gt;&gt;&lt;br /&gt;since there were no errors, i knew it was safe&lt;br /&gt;&lt;br /&gt;Then, I installed apache2.4 (here I initially made the mistake of installing apache 1.3, till cross-checking the docs showed apache 2.x as the recommended version)&lt;br /&gt;&lt;br /&gt;I installed modpython&lt;br /&gt;&lt;br /&gt;Edited the httpd.conf file and added the LoadModule line &lt;br /&gt;&lt;br /&gt;Edited the vhost.conf file and added the virtual host configuration for my appication (basically to tell apache to allow modpython manage serving the application, while serving the media files itself)&lt;br /&gt;&lt;br /&gt;Restarted apache and voila!&lt;br /&gt;deployment complete&lt;br /&gt;&lt;br /&gt;Notes&lt;br /&gt;I had some issues previously with naming some of my model fields 'date', which is a reserved word for oracle. oracle behaved very strangely then as it allowed me create the tables (with syncdb) but would not allow syncdb do a select when creating indexes (also with syncdb).&lt;br /&gt;makes me wonder why oracle has not been able to solve this issue, especially as mysql and other dbms' don't seem to have this problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-8621667555710115058?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/8621667555710115058/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2009/05/django-on-oracle-experience.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/8621667555710115058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/8621667555710115058'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2009/05/django-on-oracle-experience.html' title='django on oracle experience'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-5408388210387596446</id><published>2009-03-20T03:58:00.000-07:00</published><updated>2009-03-20T04:49:00.708-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='display'/><category scheme='http://www.blogger.com/atom/ns#' term='extend monitor'/><category scheme='http://www.blogger.com/atom/ns#' term='intrepid'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>External monitor with ubuntu 8.10</title><content type='html'>I like working witn dual monitors a lot - even when I don't really need to. It's just a weakness I have. Yesterday I wanted to hook up my ubuntu intrepid ibex laptop to a client's monitor... I checked the Preference and Administrator menus but did not find any "extend display" icon or something similar.&lt;br /&gt;googled, called a friend, checked "Screen Resolution" again, then wait! The "Screen Resolution"! The new monitor was overlapping the laptop's...&lt;br /&gt;So I just dragged it to one side and there was my laptop display icon underneath...&lt;br /&gt;But after I dragged the external monitor away, I was prompted to log out and log back in. And that did the trick!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-5408388210387596446?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/5408388210387596446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2009/03/external-monitor-with-ubuntu-810.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/5408388210387596446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/5408388210387596446'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2009/03/external-monitor-with-ubuntu-810.html' title='External monitor with ubuntu 8.10'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-6183497821913883078</id><published>2009-03-16T16:01:00.000-07:00</published><updated>2009-03-17T02:05:40.489-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><title type='text'>well known django optimization tricks</title><content type='html'>Was looking at improving the performance of an import utility in a Django project I wrote and was I surprised at the outcome. they were typically going to import 10000 records from excel and update data in the db. the data will include text that's the 'name' attribute of foreign keys, dates, e.g.  Date of birth, employment date, etc, and plain text like staff id, name, qualifications etc... I cannot say how long it used to run before as I have not had the patience to wait. However I did some rough profiling with the timeit module and was getting like 0.33 secs per transaction. that adds up to about 55 mins for the lot. I will just give an outline of how I got it down to less than 2 mins!&lt;br /&gt; &lt;br /&gt;1. I got rid of lots of list.index() calls by using dictionaries instead&lt;br /&gt;2. instead of assigning fk objects to the individual objects, I got all the possible fk's as dicts with names as keys and ids as values using &lt;br /&gt;dict(model.objects.values_list('name','id')) &lt;br /&gt;so, when I get from the excel sheet the name of new value, I just looked up the ids with the name, then assigned the ids to the objects using &lt;br /&gt;setattr(obj,'%s_id'%field_name,id). &lt;br /&gt;3. caching via simple constructs like: &lt;br /&gt;if not self.column_data['key']: &lt;br /&gt;    self.column_data['key'] = values&lt;br /&gt;return self.column_data['key']&lt;br /&gt;4. Instead of checking if an object's fields have changed, and only then saving, I decided to save everything which costs me about 50 secs, I am not exactly sure if checking for changes and saving only dirty data will buy me much as there are about 8 fields to check, some dates, fks' and plain text. Besides there are other things to do, like watch movies...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-6183497821913883078?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/6183497821913883078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2009/03/premature-optimization-is.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/6183497821913883078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/6183497821913883078'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2009/03/premature-optimization-is.html' title='well known django optimization tricks'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-2870592350929506423</id><published>2009-03-06T22:57:00.000-08:00</published><updated>2009-03-06T23:23:52.336-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='abuja'/><category scheme='http://www.blogger.com/atom/ns#' term='vacation'/><category scheme='http://www.blogger.com/atom/ns#' term='holiday'/><category scheme='http://www.blogger.com/atom/ns#' term='bauchi'/><category scheme='http://www.blogger.com/atom/ns#' term='jos'/><title type='text'>first day in the tourist resort</title><content type='html'>woke up a little early (as usual), thanked God for another day (as usual again). Spent an hour practicing to touch type. Then off I go in search of my caffeine and to look up the place a little. Staying in a hotel named cinderella, which is not too bad in spite of its sleazy name. Was hoping to work on the sms notification app last night, but a bottle of beer was enough to send me off to bed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-2870592350929506423?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/2870592350929506423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2009/03/first-day-in-tourist-resort.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/2870592350929506423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/2870592350929506423'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2009/03/first-day-in-tourist-resort.html' title='first day in the tourist resort'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-7497514481169015332</id><published>2009-03-06T09:58:00.000-08:00</published><updated>2009-03-06T10:22:21.574-08:00</updated><title type='text'>weekend holiday to jos</title><content type='html'>left abuja a little late (at about four-thirty pm) for jos, a three hour drive by bus. Tried to watch some python videos on the way but couldn't get the volume of the real player that came with my phone to growl above the howls of the wind. So I listen to the latest thisweekindjango.  podcast to pacify my conscience, and make do with the eagles, dan seals and everly bros, taking pictures and day-dreaming of teaching a python class, in the university, and maybe making a few converts&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-7497514481169015332?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/7497514481169015332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2009/03/weekend-holiday-to-jos.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/7497514481169015332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/7497514481169015332'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2009/03/weekend-holiday-to-jos.html' title='weekend holiday to jos'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-4736300564094244905</id><published>2008-12-23T13:22:00.000-08:00</published><updated>2008-12-23T13:52:09.885-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pinax'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>Pin in the Ax</title><content type='html'>I just downloaded pinax, the django-based drupal/plone (i have read it described in relation to these other excellent frameworks). It really gave me a kick to:&lt;br /&gt;1. download the 0.5 version (sorry didn't svn it, or did i?)&lt;br /&gt;2. cd into project/complete_project&lt;br /&gt;3. syncdb&lt;br /&gt;4. runserver&lt;br /&gt;and it worked! wow!&lt;br /&gt;Django is really fun to work with, and now pinax?&lt;br /&gt;i guess somewhere on the net there's some docs on how to build pinax-ready django apps...&lt;br /&gt;Now I am thinking to move my apps to pinax...&lt;br /&gt;hmmn&lt;br /&gt;Oh! merry xmas and a happy new year&lt;br /&gt;&lt;br /&gt;Today is my mom's birthday!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-4736300564094244905?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/4736300564094244905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2008/12/pin-in-ax.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/4736300564094244905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/4736300564094244905'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2008/12/pin-in-ax.html' title='Pin in the Ax'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-5215991874170682137</id><published>2008-09-23T01:42:00.000-07:00</published><updated>2008-09-23T02:00:15.503-07:00</updated><title type='text'>configure Atheros AR242x 802.11abg Wireless Adapter on my ubuntu machine</title><content type='html'>I was having quite a bit of trouble with my new Acer Aspire S5702, cos i could not get the wireless card to work.&lt;br /&gt;I knew it was Atheros Communications Inc. AR242x 802.11abg Wireless PCI Express Adapter (rev 01)&lt;br /&gt;Setting it up, I was helped extensively by a step-by-step at&lt;br /&gt;&lt;a href="http://ubuntuforums.org/showthread.php?t=902860"&gt;http://ubuntuforums.org/showthread.php?t=902860&lt;/a&gt;&lt;br&gt;&lt;br /&gt;as well as &lt;br&gt;&lt;br /&gt;&lt;a href="http://madwifi.org/ticket/1192"&gt;http://madwifi.org/ticket/1192&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I can see the wireless networks around now...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-5215991874170682137?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/5215991874170682137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2008/09/configure-atheros-ar242x-80211abg.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/5215991874170682137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/5215991874170682137'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2008/09/configure-atheros-ar242x-80211abg.html' title='configure Atheros AR242x 802.11abg Wireless Adapter on my ubuntu machine'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-1960184789253035407</id><published>2008-09-22T22:25:00.000-07:00</published><updated>2008-09-22T22:28:42.495-07:00</updated><title type='text'>legitimate name in python II</title><content type='html'>#this should do the trick!&lt;br /&gt;import keyword, re&lt;br /&gt;&lt;br /&gt;#first, politely ask for the variable name to check&lt;br /&gt;x = raw_input('Please enter the variable name')&lt;br /&gt;#construct the pattern we need it to match&lt;br /&gt;pattern = '^[a-zA-Z_][a-zA-Z_0-9]*$'&lt;br /&gt;#is it a keyword?&lt;br /&gt;if keyword.iskeyword(x):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print 'The variable name is not legitimate'&lt;br /&gt;else:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if re.match(pattern, x):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  print 'The variable is a legitimate python identifier'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  print 'The variable name is not legitimate'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-1960184789253035407?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/1960184789253035407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2008/09/legitimate-name-in-python-ii.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/1960184789253035407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/1960184789253035407'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2008/09/legitimate-name-in-python-ii.html' title='legitimate name in python II'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-7829196156457378436</id><published>2008-09-21T17:09:00.000-07:00</published><updated>2008-09-21T17:28:51.593-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>finding if a variable name is legitimate in python</title><content type='html'>You can get python from &lt;a href="http://www.python.org"&gt;http://www.python.org&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To solve this problem, i initially thought would be easy - almost trivial. just do&lt;br /&gt;variable = raw_input('enter a variable name')&lt;br /&gt;try:&lt;br /&gt;    eval('%s = 0' % variable)&lt;br /&gt;except:&lt;br /&gt;    print 'the variable is not legal'&lt;br /&gt;else:&lt;br /&gt;   print 'the variable is legal'&lt;br /&gt;&lt;br /&gt;till i found that eval('a=0') is not legal, so have to find another way&lt;br /&gt;&lt;br /&gt;now, what is a valid identifier name in python?&lt;br /&gt;1. contains numbers, letters or _&lt;br /&gt;2. starts with a letter or _&lt;br /&gt;3. is not a keyword&lt;br /&gt;&lt;br /&gt;luckily, the third condition is handled by:&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; import keyword&lt;br /&gt;&gt;&gt;&gt; keyword.iskeyword(variable)&lt;br /&gt;&lt;br /&gt;The first two can be handled by regular expressions or (simpler?) by hand&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-7829196156457378436?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/7829196156457378436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2008/09/finding-if-variable-name-is-legitimate.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/7829196156457378436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/7829196156457378436'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2008/09/finding-if-variable-name-is-legitimate.html' title='finding if a variable name is legitimate in python'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-1362088083570959860</id><published>2008-08-31T21:56:00.000-07:00</published><updated>2008-08-31T22:54:18.778-07:00</updated><title type='text'>the bird or the lizard</title><content type='html'>i got wing ide (python development environment) up and running an had my first django debug session. great! I think it's time I invest in a development environment.&lt;br /&gt;The two that are in the race now are: komodo and wind IDE. I have been using komodo edit, the free version for a while and love it.&lt;br /&gt;but i am thinking komodo for now cos of multiple language support. have not tried my wing ide to see how it plays with html and javascript (with jQuery) which i use for my everyday work...&lt;br /&gt;it's debugging of django is awesome though...&lt;br /&gt;&lt;br /&gt;I'll download the komodo IDE and review side-by-side with wing IDE and so come to a decision&lt;br /&gt;Then the prices:&lt;br /&gt;komodo ide - $295&lt;br /&gt;wing IDE - $179&lt;br /&gt;&lt;br /&gt;komodo personal - $30&lt;br /&gt;wing personal - $35&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-1362088083570959860?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/1362088083570959860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2008/08/bird-or-lizard.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/1362088083570959860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/1362088083570959860'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2008/08/bird-or-lizard.html' title='the bird or the lizard'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-6734241544119794492</id><published>2008-08-30T19:38:00.000-07:00</published><updated>2008-08-30T19:49:15.152-07:00</updated><title type='text'>got my apt-get working on ubuntu 7.10</title><content type='html'>I just got my apt-get working (somewhat).&lt;br /&gt;I am a newbie linux user&lt;br /&gt;I used to get errors when trying to use apt-get or wget on my ubuntu 7.10 laptop like:&lt;br /&gt;Connection Refused 192.168.0.1:8080...&lt;br /&gt;I figured it had something to do with the port of the proxy i was getting internet from.&lt;br /&gt;I called a friend who said i did not have to go thru a proxy, but should use the internet directly to connect to an apt-server;&lt;br /&gt;Using his cue, i got wget to work with&lt;br /&gt;wget [url] --no-proxy&lt;br /&gt;wow! so i tried for apt-get and got it working from my terminal after&lt;br /&gt;echo $http_proxy&lt;br /&gt;http://192.168.0.1:8080&lt;br /&gt;export http_proxy=&lt;br /&gt;echo $http_proxy&lt;br /&gt;&lt;br /&gt;apt-get [whatever]&lt;br /&gt;works! hurray!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-6734241544119794492?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/6734241544119794492/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2008/08/got-my-apt-get-working-on-ubuntu-710.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/6734241544119794492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/6734241544119794492'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2008/08/got-my-apt-get-working-on-ubuntu-710.html' title='got my apt-get working on ubuntu 7.10'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-2687060329764002203</id><published>2008-08-30T02:58:00.000-07:00</published><updated>2008-08-30T03:14:42.666-07:00</updated><title type='text'>setting up admin media on a webfaction account</title><content type='html'>i had a headache early this week. A client called from lagos that I should come by the first flight next day to help sort out the technology side of a new start-up, and so i went (i don't like missing opportunities for paid travel). It turned out he needed something else more urgently, an inventory control application to run on the web. Luckily I already had some django inventory project almost ready, so i finished it up, using only the admin site and uploaded to webfaction.&lt;br /&gt;problem: the admin media (css, images, javascript) weren't working.&lt;br /&gt;I edited to httpd.conf  to add the &lt;Location '/media'&gt; SetHandler None &lt;/Location&gt;, but to no avail, mod-python was still trying (and failing) to serve my admin-media.&lt;br /&gt;So at last, I did what I should have done all this while - I checked the knowledge base of web faction and discovered i should just create a new Symbolic Link application called admin_media for example, edit my website configuration, again from the control panel, and mount the application i just created on '/media' (i had mounted the main django/mod_python application on '/'), and voila! my admin_media is served properly.&lt;br /&gt;Too simple! Thanks webfaction! http://www.webfaction.com for django, rails (and other) webhosting.&lt;br /&gt;I will try to make post on setting up a django site on webfaction step-by-step&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-2687060329764002203?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/2687060329764002203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2008/08/setting-up-admin-media-on-webfaction.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/2687060329764002203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/2687060329764002203'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2008/08/setting-up-admin-media-on-webfaction.html' title='setting up admin media on a webfaction account'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-7676690297945482265</id><published>2008-02-02T06:13:00.000-08:00</published><updated>2008-02-02T06:43:25.701-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ideas web communities projects software'/><title type='text'>an interesting project idea</title><content type='html'>i have been thinking of some ideas for community sites that are a little different from the norm.&lt;br /&gt;When I was growing up (all over Nigeria), family and friends were a rather big deal, you usually kept in touch with your cousins, (ex-)classmates, (ex-)neighbors, etc...&lt;br /&gt;Now, everyone is working or into business or something and nobody has the time for much real, Nigerian, people-oriented living anymore. many of us have not heard from nor spoken to our very,very,very good friends of yesterday in a long time. The current social/networking solutions we use are really not for us, not for people who value communal living and human associations. They are for the oyimbos who are more me, myself, and I'ish. Lone rangers who have no need for long-term and honest relationships, who instead are satisfied by porn flicks (i am not saying i don't watch porn, hey this is not about me...), and superficial relationships you can literally switch on/off with the power button of their computers, or maybe just the webcam/browser....&lt;br /&gt;Now that I have forced you to read through my ramblings, the idea ... very simple really, that's one of it's strong-points. if it was complex i would have been more suspicious. complexity is a multiplication of possible failure-point.&lt;br /&gt;Online communities for people who have/had a real-life relationship, friends, family, lovers,...&lt;br /&gt;Its like a collection of family blogs, with family used loosely to mean anything from classmates, area boys/girls, family.&lt;br /&gt;Ok, I'll expand on the idea as I go along...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-7676690297945482265?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/7676690297945482265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2008/02/interesting-project-idea.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/7676690297945482265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/7676690297945482265'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2008/02/interesting-project-idea.html' title='an interesting project idea'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-7893424701591368969</id><published>2008-01-24T06:59:00.000-08:00</published><updated>2008-01-24T07:21:47.807-08:00</updated><title type='text'>once upon a lover</title><content type='html'>I decided to send these 'raw', unedited.&lt;br /&gt;The way I first wrote them, because I believe something of the feeling and spirit I was in at the time I wrote them may be lost with 'polishing'.&lt;br /&gt;comments in brackets...&lt;br /&gt;To be honest, i cannot in my daytime senses explain why I have not either refined or junked these words.&lt;br /&gt;&lt;br /&gt;1)&lt;br /&gt;you don't truly appreciate those that love you until they're gone &lt;br /&gt;i didn't think i was a fool, but i guess i'm one too for letting you go&lt;br /&gt;i'm not crying over spilt milk (then what are you crying over, beer?)&lt;br /&gt;all i'm trying to say is&lt;br /&gt;thank you (lame, she's married! get on with your life)&lt;br /&gt;for the times we shared,(and) for the way you made me feel, (selfish)&lt;br /&gt;and if i never again find love, the way it was with you... (at this rate you probably won't)&lt;br /&gt;ah well,... thank you (pathetic, and rather ineffective, don't you think?)&lt;br /&gt;&lt;br /&gt;2)&lt;br /&gt;you spoilt me and left (distorted history, are you going senile?)&lt;br /&gt;(now)what do i do(?)&lt;br /&gt;no one can take your place&lt;br /&gt;every girl i meet&lt;br /&gt;cos they're mere mortals&lt;br /&gt;and i used to hold an angel&lt;br /&gt;in these mere mortal arms of mine&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-7893424701591368969?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/7893424701591368969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2008/01/once-upon-lover.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/7893424701591368969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/7893424701591368969'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2008/01/once-upon-lover.html' title='once upon a lover'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-2392346164308608283</id><published>2007-12-31T05:39:00.000-08:00</published><updated>2007-12-31T06:01:59.077-08:00</updated><title type='text'>No more work stuff</title><content type='html'>Ok,&lt;br /&gt;My technical blog is now at &lt;a href="http://my.opera.com/livinincode/blog/"&gt;http://my.opera.com/livinincode/blog&lt;/a&gt;&lt;br /&gt;this will just be for lifestyle ++&lt;br /&gt;&lt;br /&gt;btw django is a web development framework written in python (a programming language)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-2392346164308608283?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/2392346164308608283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2007/12/no-more-work-stuff.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/2392346164308608283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/2392346164308608283'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2007/12/no-more-work-stuff.html' title='No more work stuff'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-4697268769992948926</id><published>2007-12-24T16:31:00.000-08:00</published><updated>2007-12-24T16:38:27.465-08:00</updated><title type='text'>friends of bayo</title><content type='html'>Please if you are a friend of mine just indicate by commenting on this post.&lt;br /&gt;just enter your name and what you dislike the most about me&lt;br /&gt;since i am my friend, i'll start&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(I noticed that my blogs have not been commented on at all)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-4697268769992948926?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/4697268769992948926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2007/12/friends-of-bayo.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/4697268769992948926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/4697268769992948926'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2007/12/friends-of-bayo.html' title='friends of bayo'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-2074328694248609300</id><published>2007-12-24T16:15:00.000-08:00</published><updated>2007-12-24T16:25:18.573-08:00</updated><title type='text'>kodearena</title><content type='html'>I have to apologize to all the people who were expecting (eagerly i hope) kodearena to hold this year.&lt;br /&gt;I am so sorry.&lt;br /&gt;It will definitely hold next year though.&lt;br /&gt;Bigger, badder, snazzier.......(yeah, i know i said same about this year)&lt;br /&gt;dont let that stop you from having a&lt;br /&gt;&lt;br /&gt;MERRY CHRISTMAS AND HAPPY NEW YEAR&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-2074328694248609300?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/2074328694248609300/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2007/12/kodearena.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/2074328694248609300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/2074328694248609300'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2007/12/kodearena.html' title='kodearena'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-1569596456668946618</id><published>2007-10-13T14:30:00.000-07:00</published><updated>2007-10-13T16:02:40.559-07:00</updated><title type='text'>download links with django</title><content type='html'>I have been looking at python and django rather seriously for a few days now. I want to share a few tid-bits and resources that's been of help to me. maybe they'll  help someone else solve some problem or other.&lt;br /&gt;I am rewriting an application I wrote some time ago.&lt;br /&gt;I was rather stumped for a couple of days with providing download links to pdf and chm files from a template. resolved it with this bit of code in the template for the link&lt;br /&gt;&amp;lt;a href="{% url to.subject.view %}"&amp;gt;{{ b.title }}&amp;lt;/a&amp;gt;&lt;br /&gt;and this in the view:&lt;br /&gt;def downloads(request, book_id):&lt;br /&gt;    book = Books.objects.get(pk=book_id)&lt;br /&gt;    response = HttpResponse(file(path_to_file,'rb').read())&lt;br /&gt;    if extension == '.pdf':&lt;br /&gt;          response['Content-Type'] = 'application/pdf'&lt;br /&gt;    elif extension == '.chm':&lt;br /&gt;          response['Content-Type'] = 'application/octet-stream'&lt;br /&gt;      response['Content-Disposition'] = "Attachment;filename=%s" %book.file_name&lt;br /&gt;  return response&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-1569596456668946618?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/1569596456668946618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2007/10/download-links-with-django.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/1569596456668946618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/1569596456668946618'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2007/10/download-links-with-django.html' title='download links with django'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-3504339362611622745</id><published>2007-10-05T05:21:00.000-07:00</published><updated>2007-10-05T05:28:34.104-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lagos'/><category scheme='http://www.blogger.com/atom/ns#' term='splashers'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='nigeria'/><title type='text'>ready to roll</title><content type='html'>wrote a small utility yesterday (less than 1kb) to convert the django help files to html format. of course i am silly enough to think that is a laudable achievement. the code is below. a little setup issue. make sure the django docs are in an easily typed directory e.g. c:\docs&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;from docutils.core import publish_file&lt;br /&gt;import os&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;"""Converts text files to html. made especially to convert django docs from rst to html"""&lt;br /&gt;directory = raw_input("Please enter the path of the docs folder: ")&lt;br /&gt;if os.path.isdir(directory):&lt;br /&gt;   #make new dir to hold the html docs&lt;br /&gt;   os.chdir(directory)&lt;br /&gt;   os.mkdir('html')&lt;br /&gt;   #get all the text files in the directory&lt;br /&gt;   txtfiles = [filename for filename in os.listdir(directory) if os.path.splitext(filename)[1] == '.txt']&lt;br /&gt;   print 'converting files...'&lt;br /&gt;   for filename in txtfiles:&lt;br /&gt;      dest = os.path.splitext(filename)[0] + '.html'&lt;br /&gt;      publish_file(source_path=filename,destination_path='html/'+dest,writer_name='html')&lt;br /&gt;      print dest&lt;br /&gt;&lt;br /&gt;print&lt;br /&gt;print 'hey, bayo. thanks man!'&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;you're welcome&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-3504339362611622745?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/3504339362611622745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2007/10/ready-to-roll.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/3504339362611622745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/3504339362611622745'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2007/10/ready-to-roll.html' title='ready to roll'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-1729343981353346047</id><published>2007-09-30T18:00:00.000-07:00</published><updated>2007-09-30T18:25:00.025-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='i think this is when time flies'/><title type='text'>in the frigging loo</title><content type='html'>i always like a bit of drama on my birthday. and i got it this time, somewhat at least. was in the toilet attending to a running stomach when the hand of the clock creeped past 12 midnight to make me 33yrs old.&lt;br /&gt;Anyhow, the project. old news now is the fact that we jettisonned the idea of a command line web interface for a normal one, albeit with python/django.&lt;br /&gt;And of course, my new year resolutions. I normally would tie these goals to spiritual, intellectual, emotional and physical/financial goals. but not this time. I am very determined to keep these resolutions and so they are simple and clear.  well here goes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; spend an hour each day to reflect (on what? don't know)&lt;/li&gt;&lt;li&gt;tell the truth always&lt;br /&gt;&lt;/li&gt;&lt;li&gt;say no quickly&lt;/li&gt;&lt;li&gt;save 10%of my monthly income&lt;li&gt;learn to play the guitar&lt;/ul&gt;PS&lt;br /&gt;Would have liked to have something on weight loss, but maybe next year. &lt;br /&gt;&lt;ul&gt;&lt;li&gt; &lt;/li&gt;&lt;li&gt; &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-1729343981353346047?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/1729343981353346047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2007/09/in-frigging-loo.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/1729343981353346047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/1729343981353346047'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2007/09/in-frigging-loo.html' title='in the frigging loo'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-6905188963765843659</id><published>2007-09-30T07:30:00.000-07:00</published><updated>2007-09-30T08:00:15.855-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='developers'/><category scheme='http://www.blogger.com/atom/ns#' term='birthday'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>kodearena07</title><content type='html'>Hiya,&lt;br /&gt;it's just a little over a month till the reloaded edition of kodearena. so here we are, four guys in lagos working on the site. keni, stan, bode and i. just like the old days in abeokuta, sleeping in the office, and coding for fun (and a little profit).&lt;br /&gt;yesterday we had a little tiff about the language to use. eventually settled for python (though only stan has extensive experience developing with it, my experience is limited to examples from the tutorial and writing a small command line ideas bank (which i am inanely proud of), while bode is just getting into it). to add to the problem, stan has decided that we use the django web framework so we have that to combat also. sounds like fun, doesn't it? spent yesterday studying all that, while lara saved us with gredge (rice, amala, bread, caffeine...)&lt;br /&gt;before i forget, tomorrow is my birthday (october 1st, yippee!!!), have to charge my phone and await text messages and phone calls this night...&lt;br /&gt;ok, back to django&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-6905188963765843659?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/6905188963765843659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2007/09/kodearena07.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/6905188963765843659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/6905188963765843659'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2007/09/kodearena07.html' title='kodearena07'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2969337488622138192.post-8061697344422549640</id><published>2007-08-09T04:36:00.000-07:00</published><updated>2007-08-09T05:31:54.009-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='airport'/><title type='text'>Port Harcourt Airport</title><content type='html'>Port Harcourt airport has been closed for a long time now, after a series of accidents ravaged our people including children from Loyola Jesuits College in Abuja (I hope I am not opening old wounds - well this blog is not tht popular yet!)&lt;br /&gt;I was thinking this morning...&lt;br /&gt;... why don't we revive the main port harcourt airport, so we can have cheaper flights instead of having to pay through our noses for aero or arik or ... in the air force base?&lt;br /&gt;why?&lt;br /&gt;since the government does not want to revive the airport?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2969337488622138192-8061697344422549640?l=boyombo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://boyombo.blogspot.com/feeds/8061697344422549640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://boyombo.blogspot.com/2007/08/port-harcourt-airport.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/8061697344422549640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2969337488622138192/posts/default/8061697344422549640'/><link rel='alternate' type='text/html' href='http://boyombo.blogspot.com/2007/08/port-harcourt-airport.html' title='Port Harcourt Airport'/><author><name>boyombo</name><uri>http://www.blogger.com/profile/04850719697838332398</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/-ZQkv2wIFwpg/Tc95jNuZsyI/AAAAAAAAAE4/fkYsCJwICUI/s220/gym.jpg'/></author><thr:total>0</thr:total></entry></feed>
