<?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-8709811</id><updated>2011-12-01T08:54:48.090-02:00</updated><category term='matplotlib'/><category term='python diagram'/><category term='pc'/><category term='myth'/><category term='clipboard-modifier'/><category term='resolutions'/><category term='postgresql'/><category term='podcast'/><category term='astronomy'/><category term='tools'/><category term='gparted'/><category term='funny'/><category term='news'/><category term='drive'/><category term='web'/><category term='books'/><category term='sony'/><category term='usa'/><category term='predictions'/><category term='gwt'/><category term='environment'/><category term='programming article'/><category term='canon'/><category term='timelapse'/><category term='cas'/><category term='evolution'/><category term='presentation'/><category term='Arduino'/><category term='sld'/><category term='message'/><category term='opensource'/><category term='python'/><category term='Halloween'/><category term='rss'/><category term='thoughts'/><category term='sports'/><category term='mm2s5'/><category term='nintendo'/><category term='video'/><category term='gimp'/><category term='windows'/><category term='Canada'/><category term='vim'/><category term='mame'/><category term='inkscape'/><category term='wave'/><category term='hardware'/><category term='utility'/><category term='science'/><category term='backup'/><category term='notes'/><category term='linux'/><category term='insightful'/><category term='victor'/><category term='key-train'/><category term='ps3'/><category term='diy'/><category term='util'/><category term='orkut'/><category term='birthday'/><category term='personal'/><category term='olpc'/><category term='photography'/><category term='woodworking'/><category term='aquarium'/><category term='programming'/><category term='culture'/><category term='economy'/><category term='graphics'/><category term='gtk'/><category term='wii'/><category term='games'/><category term='language'/><category term='algorithm'/><category term='blog'/><category term='ideas'/><category term='computers'/><category term='gae'/><category term='brazil'/><category term='life'/><category term='electronics'/><category term='ui'/><category term='cool'/><category term='clone'/><category term='svg'/><category term='article'/><category term='ubuntu'/><category term='blogging'/><category term='mercurial'/><category term='google'/><category term='calculator'/><title type='text'>Scott's Blog</title><subtitle type='html'>Scott Kirkwood's Personal Blog
Programming, Python, Brazil, Google</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default?start-index=101&amp;max-results=100'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>487</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8709811.post-314966575348049269</id><published>2011-08-17T11:11:00.001-03:00</published><updated>2011-08-17T11:12:41.416-03:00</updated><title type='text'>Hello Streetview</title><content type='html'>Hello streetview, how are you doing?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-314966575348049269?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/314966575348049269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=314966575348049269' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/314966575348049269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/314966575348049269'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2011/08/hello-streetview.html' title='Hello Streetview'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-5386754502054335314</id><published>2010-12-10T14:10:00.000-02:00</published><updated>2010-12-10T14:10:21.058-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><title type='text'>Vanity URL</title><content type='html'>Finally decided to buy &lt;a href="http://scottkirkwood.com/"&gt;scottkirkwood.com&lt;/a&gt; for my vanity URL, why not?&lt;br /&gt;&lt;br /&gt;It points to my blog.instead of the less memorable &lt;a href="http://scottkirkwood.blogspot.com/"&gt;scottkirkwood.blogspot.com&lt;/a&gt;&amp;nbsp;and paying for 5 years is relatively cheap.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-5386754502054335314?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/5386754502054335314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=5386754502054335314' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/5386754502054335314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/5386754502054335314'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2010/12/vanity-url.html' title='Vanity URL'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-9198581336642866226</id><published>2010-04-05T13:24:00.000-03:00</published><updated>2010-04-05T13:24:44.975-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='key-train'/><title type='text'>Key-Train Launched</title><content type='html'>In the spirit of "Release Early/Release Often" I've shipped the first version of &lt;a href="http://code.google.com/p/key-train/"&gt;key-train&lt;/a&gt; (&lt;a href="http://key-train.googlecode.com/files/key-train-0.1.0.zip"&gt;key-train-0.1.0.zip&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Here's a screenshot:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://key-train.googlecode.com/hg/docs/screenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="372" src="http://key-train.googlecode.com/hg/docs/screenshot.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Features include:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Training for all the lowercase keys on the main part of the keyboard in two languages (English/Brazilian Portuguese) and two keyboards (qwerty/ABTN). &amp;nbsp;More languages and keyboards should be easy to add.&lt;/li&gt;&lt;li&gt;Easy for others to contribute&amp;nbsp;&lt;a href="http://code.google.com/p/key-train/wiki/CreatingALesson"&gt;better lessons&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://code.google.com/p/key-train/wiki/MakeKbd"&gt;new keyboards&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Easy for others to translate the software using the standard&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/GNU_gettext"&gt;gettext&lt;/a&gt;&amp;nbsp;package (I recommend using&amp;nbsp;&lt;a href="http://www.poedit.net/"&gt;poedit&lt;/a&gt;). The&amp;nbsp;&lt;a href="http://code.google.com/p/key-train/source/browse/src/keytrain/locale/key-train.pot"&gt;key-train.pot&lt;/a&gt;&amp;nbsp;file is created automatically - so don't edit it. &amp;nbsp;For your language, you would create a .po file like,&amp;nbsp;&lt;a href="http://code.google.com/p/key-train/source/browse/src/keytrain/locale/pt_BR/LC_MESSAGES/key-train.po"&gt;this one&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;A reasonable progression of keys and training (27 lessons).&lt;/li&gt;&lt;li&gt;Speed and accuracy training by typing in parts of Wikipedia articles.&lt;/li&gt;&lt;li&gt;Only one lesson file is required for different languages and keyboards.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;But the program isn't complete, here's a list of the biggest problems:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;The package is way too big, I have to split out the Wikipedia parts and drop the articles/paragraphs which would never be used (because they are too long/short or have ö∂đ &amp;nbsp;ĉȟᴀɹâçťêƦƨ).&lt;/li&gt;&lt;li&gt;Although you can change the keyboard, the keyboard displayed on the screen doesn't yet change.&lt;/li&gt;&lt;li&gt;The Portuguese translation is both incomplete and of poor quality.&lt;/li&gt;&lt;li&gt;The lesson plan needs work.&lt;/li&gt;&lt;li&gt;A students progression is stored. &amp;nbsp;It doesn't continue where they left off.&lt;/li&gt;&lt;li&gt;There are no graphs, problem keys, etc.&lt;/li&gt;&lt;li&gt;Even though most parts use SVG for display, it still looks pretty ugly.&lt;/li&gt;&lt;li&gt;The &lt;a href="http://code.google.com/p/key-train/source/browse/setup.py"&gt;setup.py&lt;/a&gt; doesn't automatically install the dependancies (i.e. python-yaml).&lt;/li&gt;&lt;li&gt;It's doesn't use &lt;a href="http://pypi.python.org/pypi/pip"&gt;pip&lt;/a&gt;, &lt;a href="http://pypi.python.org/pypi/distribute"&gt;distribute&lt;/a&gt;, nor does it have a debian package.&lt;/li&gt;&lt;li&gt;There are &lt;a href="http://code.google.com/p/key-train/issues/list"&gt;known bugs&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;br /&gt;If you'd like to contribute you can say so on the &lt;a href="http://groups.google.com/group/key-train-discuss"&gt;discussion list&lt;/a&gt;&amp;nbsp;or send me an email (at scott @ forusers.com).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-9198581336642866226?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/9198581336642866226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=9198581336642866226' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/9198581336642866226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/9198581336642866226'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2010/04/key-train-launched.html' title='Key-Train Launched'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-3248114173886194193</id><published>2010-01-21T18:11:00.000-02:00</published><updated>2010-01-21T18:11:36.516-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>fsck'd my drive</title><content type='html'>After a few power failures during a week of storms I rebooted my Ubuntu Linux computer and fsck found some errors. Next time I booted it found (and corrected) even more errors, until, eventually I wasn't able to boot anymore (couldn't find grub).&lt;br /&gt;&lt;br /&gt;I have a good &lt;a href="http://scottkirkwood.blogspot.com/2008/07/my-backup-setup.html"&gt;backup system&lt;/a&gt;&lt;sup&gt;*&lt;/sup&gt; so I wasn't too concerned (although this was my first real test). &amp;nbsp;I had run &lt;a href="http://sourceforge.net/apps/trac/smartmontools/wiki"&gt;smartctl&lt;/a&gt; on the first sign of trouble and it didn't give any errors, so it didn't appear to be a hard disk failure. I figure this is an opportunity for me to setup 64bit version of Ubunt and I've also been thinking about dual booting to Windows&lt;sup&gt;®&lt;/sup&gt; because &lt;a href="http://store.steampowered.com/"&gt;Steam&lt;/a&gt; looks like an easy and cheap way to install games.&lt;br /&gt;&lt;br /&gt;I put an old version of Windows XP in the drive and... it blue screened. &amp;nbsp;It just didn't want to install. &amp;nbsp;I tried two other versions and it also failed. &amp;nbsp;I then got the Ubuntu disk and it installed with no problems. &amp;nbsp;I tried Windows again, again it failed to install even though I had reformatted the disk when install Linux.&lt;br /&gt;&lt;br /&gt;After much forth and back I decided to reset my BIOS to factory defaults, and low and behold, Windows installed! &amp;nbsp;Not very nicely, however. &amp;nbsp;I had no Ethernet, no sound, slow graphics and in only one monitor, but at least it was running. &amp;nbsp;I then&amp;nbsp;installed&amp;nbsp;64 bit Ubuntu desktop and proceeded to restore all my files.&lt;br /&gt;&lt;br /&gt;Next day I went back to Windows to figure out what was wrong. &amp;nbsp;It's been years since I've touched Windows and I was at a loss. How can I get the updates if it can't connect to the internet? Then I thought every time we buy some device it comes with a little CD which I normally throw out - I wonder why they do that? &amp;nbsp;Do people still use CDs, how archaic?&lt;br /&gt;&lt;br /&gt;So I put in the CD for my motherboard which I luckily happened to have kept and in installed the drivers for Ethernet and sound and I was back business. Now I have Steam installed and the Torchlight game I bought for $5 bucks. &amp;nbsp;I'm a little sad that my computer has Windows on it, but such is life.&lt;br /&gt;&lt;br /&gt;&lt;sup&gt;*&lt;/sup&gt;Actually, I should have also backed up my package list (i.e. dpkg --get-selections) and my cron list (crontab -l), then it would have been even more painless. I've updated my backup program to dump out this information as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-3248114173886194193?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/3248114173886194193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=3248114173886194193' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/3248114173886194193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/3248114173886194193'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2010/01/fsckd-my-drive.html' title='fsck&apos;d my drive'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-1914751285955897798</id><published>2009-12-27T23:34:00.000-02:00</published><updated>2009-12-27T23:34:45.458-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='svg'/><category scheme='http://www.blogger.com/atom/ns#' term='inkscape'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Seven Segment Display in Inkscape</title><content type='html'>Today I got a little sidetracked while working on my &lt;a href="http://code.google.com/p/key-train/"&gt;key-train&lt;/a&gt; (keyboard training) project. &amp;nbsp;I thought I might spruce it up a little by using a seven segment display for the digits (say for the words per minutes), similar to what &lt;a href="http://ktouch.sourceforge.net/images/screenshots/ktouch01.png"&gt;kTouch&lt;/a&gt; has. &amp;nbsp;I found an open source font, but it &lt;a href="http://stackoverflow.com/questions/1967257/how-can-you-use-a-font-file-in-gtk"&gt;appears to be difficult&lt;/a&gt; to just use a ttf font in GTK.&lt;br /&gt;So I figured, it's only 10 images, I'll just make them in svg.&lt;br /&gt;&lt;br /&gt;I vaguely remembered a &lt;a href="http://screencasters.heathenx.org/episode-065/"&gt;heathenx inkscape podcast&lt;/a&gt;&amp;nbsp;describing how to make an LCD display and decided to use that at my base. Unfortunately, they didn't provide any source files in the show-notes (as far as I could see) so I had to watch and redo the drawings myself!&lt;br /&gt;&lt;br /&gt;By naming each of the seven segments I could create the 10 digits simply by deleting a few elements in one &lt;a href="http://scott-inkscape.googlecode.com/hg/seven-segment/plain-black.svg"&gt;template svg file&lt;/a&gt;. &amp;nbsp;I can create the template as beautiful as I like and quickly create the 10 derived images with &lt;a href="http://code.google.com/p/scott-inkscape/source/browse/seven_segment.py"&gt;these&lt;/a&gt; &lt;a href="http://code.google.com/p/scott-inkscape/source/browse/make_digits.py"&gt;programs&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://scott-inkscape.googlecode.com/hg/seven-segment/plain-black/combine.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="82" src="http://scott-inkscape.googlecode.com/hg/seven-segment/plain-black/combine.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://scott-inkscape.googlecode.com/hg/seven-segment/italic-black/combine.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="67" src="http://scott-inkscape.googlecode.com/hg/seven-segment/italic-black/combine.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Unfortunately, both &lt;a href="http://www.imagemagick.org/script/index.php"&gt;ImageMagick&lt;/a&gt; and &lt;a href="http://www.graphicsmagick.org/"&gt;GraphicsMagick&lt;/a&gt; don't handle svg blur properly so my little routine to make the nice combined image doesn't work &lt;a href="http://scott-inkscape.googlecode.com/hg/seven-segment/glow-green/combine.png"&gt;correctly&lt;/a&gt;, but here's what a blurred (glowing) digit might look like.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://scott-inkscape.googlecode.com/hg/seven-segment/glow-green/glow-green-3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://scott-inkscape.googlecode.com/hg/seven-segment/glow-green/glow-green-3.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;So the you have it, some open source 7 segment SVG digits for you to use.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-1914751285955897798?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/1914751285955897798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=1914751285955897798' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/1914751285955897798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/1914751285955897798'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2009/12/seven-segment-display-in-inkscape.html' title='Seven Segment Display in Inkscape'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-7858473485587099357</id><published>2009-12-14T13:02:00.000-02:00</published><updated>2009-12-14T13:02:26.399-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='opensource'/><title type='text'>Choo choo, get on the Key-Train</title><content type='html'>Well I've done it again, started another &lt;a href="http://code.google.com/p/key-train/"&gt;open source project&lt;/a&gt;. Renata and I want Victor to learn how to touch type, but these days, it's hard to find a school that teaches just that.&lt;br /&gt;&lt;br /&gt;So I looked at what available in open source and found &lt;a href="http://ktouch.sourceforge.net/"&gt;KTouch&lt;/a&gt;. &amp;nbsp;It's pretty good however I found some issues with it:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The lecture files aren't very obvious. It's not clear, for example, that it has already loaded the default lecture file.&lt;/li&gt;&lt;li&gt;The keyboard is rather plain looking.&lt;/li&gt;&lt;li&gt;The scrolling text area you type in is nifty, but gets in the way for advanced users. &amp;nbsp;My typing speed is limited to how fast it can scroll back. &amp;nbsp;Also, as you get near the end of the line it's becomes difficult to see what characters are coming up, slowing you down and creating additional errors.&lt;/li&gt;&lt;li&gt;Like many other typing tutor programs, it shows only one line of text at a time, it's not obvious how many lines you have left to do. The first time I ran it I thought it was going to go on forever.&lt;/li&gt;&lt;li&gt;It doesn't teach you proper hand positions very obvious (i.e. it doesn't show a picture of the hands in position).&lt;/li&gt;&lt;li&gt;It forces you to learn the space and return key very early. &amp;nbsp;It also doesn't show you how you should click them (i.e. use the thumbs for the spacebar and pinkie for the enter key).&lt;/li&gt;&lt;li&gt;It allows you to type-in mistakes, forcing the student to learn the backspace key very early as well.&lt;/li&gt;&lt;li&gt;The progression of keys is rather odd. It teaches the C, N and T keys before G and H keys for example.&lt;/li&gt;&lt;li&gt;It doesn't teach all the keys, Comma, Dot, Slash, and Quote keys are never taught, for example.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;I also found that the BBC has a nice &lt;a href="http://www.bbc.co.uk/schools/typing/"&gt;online keyboard trainer&lt;/a&gt;&amp;nbsp;that does a good job in many respects.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I decided to try my hand at making a keyboard training program for Linux with &lt;a href="http://www.pygtk.org/"&gt;PyGTK&lt;/a&gt;. &amp;nbsp;I already have some experience with keyboards in my&amp;nbsp;&lt;a href="http://code.google.com/p/key-mon/"&gt;key-mon&lt;/a&gt; project, although this project looks like it'll be a little bit larger in scope.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Screenshot, so far:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://key-train.googlecode.com/hg/docs/screenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://key-train.googlecode.com/hg/docs/screenshot.png" width="564" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here's what I want to include, eventually:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Show the hand positions. &amp;nbsp;I'm taking photographs of my hands and digitizing the outline with Inkscape, like I did above.&lt;/li&gt;&lt;li&gt;Have a nice looking keyboard, the one above is an early (ugly) version.&lt;/li&gt;&lt;li&gt;Show the whole lesson in one big textbox. Thus it will be obvious when you're done and how far you have to go.&lt;/li&gt;&lt;li&gt;Use interesting text. &amp;nbsp;I'm thinking of grabbing pages from&amp;nbsp;Wikipedia (like above) and using that instead of randomized text for the more advanced levels.&lt;/li&gt;&lt;li&gt;Use real words when possible. Use the aspell dictionary to verify if the words exist in the chosen language.&lt;/li&gt;&lt;li&gt;Use bi-grams and tri-grams from the chosen language instead of random sets of characters (I believe that is what KTouch does as well).&lt;/li&gt;&lt;li&gt;Automatically drop incomplete or weird training sessions to not adversely affect the final scores and progression statistics. &amp;nbsp;For example, you started training and then the phone rang.&lt;/li&gt;&lt;li&gt;Have it all scalable, by using &lt;a href="http://en.wikipedia.org/wiki/Scalable_Vector_Graphics"&gt;SVG&lt;/a&gt; for all the graphics.&lt;/li&gt;&lt;li&gt;Have lots of options. &amp;nbsp;For instance:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Show (or not) the keyboard depending on the level.&lt;/li&gt;&lt;li&gt;Permit mistakes or not, &amp;nbsp;i.e. forcing the student to hit the backspace or not.&lt;/li&gt;&lt;li&gt;Show the key the user typed on the keyboard or not. &amp;nbsp;Could be distracting.&lt;/li&gt;&lt;li&gt;Show where the key is on the keyboard when the student makes a mistake.&lt;/li&gt;&lt;li&gt;Sound on/off.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div&gt;Grabbing text from Wikipedia &lt;a href="http://code.google.com/p/key-train/source/browse/fetch_article.py"&gt;isn't that difficult&lt;/a&gt;&amp;nbsp;and I'm&amp;nbsp;contemplating&amp;nbsp;using text from there for the advanced lessons. &amp;nbsp;My first thought was to use text from &lt;a href="http://www.gutenberg.org/wiki/Main_Page"&gt;Project Gutenberg&lt;/a&gt;, but I found it difficult to find useful text there in other languages. Also, it's too easy to grab possibly inappropriate&amp;nbsp;text, and the text in Gutenberg is all old, and may contain language that isn't in common use today. &amp;nbsp;Wikipedia is modern, safe, clean, interesting and has article standards.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm also planning to grab Wikipedia text to get some rough bi-gram and trigram frequencies for each language for 'random' text. It won't be perfect, but who needs perfect?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Last night&amp;nbsp;I decided&amp;nbsp;that I'll create the image for the keyboard on the fly. &amp;nbsp;They keyboard shown above was created with my &lt;a href="http://code.google.com/p/scott-inkscape/wiki/RenderKeyboard"&gt;Inkscape plugin&lt;/a&gt;. The original idea was to use this only as a starting point and then to pretty up the graphics afterwards. &amp;nbsp;I realized, however, that always building the keyboard on the fly gives me more flexibility for the keyboard layout (ex. international keyboards). It also will be easier to highlight better what keys you are learning, what keys you've already been taught and what keys have yet to be taught.&lt;/div&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div&gt;You'll find the code at &lt;a href="http://code.google.com/p/key-train/"&gt;key-train&lt;/a&gt;, but it's not quite usable yet,&amp;nbsp;I still have some work ahead of me!&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-7858473485587099357?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/7858473485587099357/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=7858473485587099357' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/7858473485587099357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/7858473485587099357'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2009/12/choo-choo-get-on-key-train.html' title='Choo choo, get on the Key-Train'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-3363707726085767489</id><published>2009-12-09T15:50:00.000-02:00</published><updated>2009-12-09T15:50:08.622-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='opensource'/><title type='text'>Keyboard Monitor is being used</title><content type='html'>I saw this week that &lt;a href="http://meetthegimp.org/episode-128-beam-it-up-f-spot/"&gt;Meet the Gimp&lt;/a&gt; is using my keyboard monitor program and gave me nice plug as well.&lt;br /&gt;It was thrill, but bittersweet, since &lt;a href="http://code.google.com/p/key-mon/"&gt;key-mon&lt;/a&gt; still doesn't support the Wacom table (and I &lt;a href="http://stackoverflow.com/questions/1860668/unable-to-get-wacom-events-from-dev-input-event"&gt;don't know how to fix it&lt;/a&gt;).&lt;br /&gt;I also feel it could look a little better (at least that I can fix).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-3363707726085767489?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/3363707726085767489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=3363707726085767489' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/3363707726085767489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/3363707726085767489'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2009/12/keyboard-monitor-is-being-used.html' title='Keyboard Monitor is being used'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-8791745951430251671</id><published>2009-12-03T13:14:00.000-02:00</published><updated>2009-12-03T13:14:36.461-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Canada'/><title type='text'>Feeling a little homesick</title><content type='html'>Street view has some great shot's of Lennoxville.&lt;br /&gt;&lt;br /&gt;Bishop's University&lt;br /&gt;&lt;iframe frameborder="0" height="240" marginheight="0" marginwidth="0" scrolling="no" src="http://maps.google.com/maps/sv?cbp=12,171.42,,0,1.2&amp;amp;cbll=45.366655,-71.848182&amp;amp;panoid=&amp;amp;v=1&amp;amp;hl=en&amp;amp;gl=" width="425"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://maps.google.com/maps?f=q&amp;amp;source=embed&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=lennoxville,q+c&amp;amp;sll=-19.953744,-43.933181&amp;amp;sspn=0.018233,0.031993&amp;amp;ie=UTF8&amp;amp;hq=&amp;amp;hnear=Lennoxville,+La+R%C3%A9gion-Sherbrookoise,+Quebec,+Canada&amp;amp;ll=45.366256,-71.856514&amp;amp;spn=0.027256,0.063987&amp;amp;z=15&amp;amp;layer=c&amp;amp;cbll=45.366655,-71.848182&amp;amp;panoid=qpeF7ITFQWlQwB8dRTB14g&amp;amp;cbp=12,171.42,,0,1.2" style="color: blue; text-align: left;"&gt;View Larger Map&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;Lion's Pub&lt;br /&gt;&lt;iframe frameborder="0" height="240" marginheight="0" marginwidth="0" scrolling="no" src="http://maps.google.com/maps/sv?cbp=12,237.62,,1,3.64&amp;amp;cbll=45.366273,-71.855591&amp;amp;panoid=&amp;amp;v=1&amp;amp;hl=en&amp;amp;gl=" width="425"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://maps.google.com/maps?f=q&amp;amp;source=embed&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=lennoxville,q+c&amp;amp;sll=-19.953744,-43.933181&amp;amp;sspn=0.018233,0.031993&amp;amp;ie=UTF8&amp;amp;hq=&amp;amp;hnear=Lennoxville,+La+R%C3%A9gion-Sherbrookoise,+Quebec,+Canada&amp;amp;layer=c&amp;amp;cbll=45.366273,-71.855591&amp;amp;panoid=YgGtJXhNbB5vj_c6-AvGeQ&amp;amp;cbp=12,237.62,,1,3.64&amp;amp;ll=45.366288,-71.855736&amp;amp;spn=0.027257,0.063987&amp;amp;z=15" style="color: blue; text-align: left;"&gt;View Larger Map&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;Also of the the house I grew up in in Montreal.&lt;br /&gt;&lt;br /&gt;&lt;iframe frameborder="0" height="240" marginheight="0" marginwidth="0" scrolling="no" src="http://maps.google.com.br/maps/sv?cbp=12,49.28,,0,0.44&amp;amp;cbll=45.452522,-73.642578&amp;amp;panoid=&amp;amp;v=1&amp;amp;hl=pt-BR&amp;amp;gl=br" width="425"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://maps.google.com.br/maps?f=q&amp;amp;source=embed&amp;amp;hl=pt-BR&amp;amp;geocode=&amp;amp;q=11+Ballantyne+S.+Montreal+West,+Montreal,+CA&amp;amp;sll=-14.179186,-50.449219&amp;amp;sspn=122.411688,262.089844&amp;amp;ie=UTF8&amp;amp;hq=&amp;amp;hnear=11+Avenue+Ballantyne+Sud,+Montr%C3%A9al-Ouest,+Communaut%C3%A9-Urbaine-de-Montr%C3%A9al,+Qu%C3%A9bec,+Canad%C3%A1&amp;amp;ll=45.452632,-73.64282&amp;amp;spn=0.006804,0.015997&amp;amp;z=17&amp;amp;layer=c&amp;amp;cbll=45.452522,-73.642578&amp;amp;panoid=naIyF2vmDP5pIgok6RERhA&amp;amp;cbp=12,49.28,,0,0.44" style="color: blue; text-align: left;"&gt;Exibir mapa ampliado&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;No street view for Kingston yet. But there's this areal view of where I used to go windsurfing.&lt;br /&gt;&lt;br /&gt;&lt;iframe frameborder="0" height="350" marginheight="0" marginwidth="0" scrolling="no" src="http://maps.google.com.br/maps?f=q&amp;amp;source=s_q&amp;amp;hl=pt-BR&amp;amp;geocode=&amp;amp;q=Murney+Tower&amp;amp;sll=44.222933,-76.48827&amp;amp;sspn=0.003475,0.007998&amp;amp;ie=UTF8&amp;amp;hq=Murney+Tower&amp;amp;hnear=&amp;amp;ll=44.222933,-76.48827&amp;amp;spn=0.003475,0.007998&amp;amp;t=k&amp;amp;output=embed" width="425"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://maps.google.com.br/maps?f=q&amp;amp;source=embed&amp;amp;hl=pt-BR&amp;amp;geocode=&amp;amp;q=Murney+Tower&amp;amp;sll=44.222933,-76.48827&amp;amp;sspn=0.003475,0.007998&amp;amp;ie=UTF8&amp;amp;hq=Murney+Tower&amp;amp;hnear=&amp;amp;ll=44.222933,-76.48827&amp;amp;spn=0.003475,0.007998&amp;amp;t=k" style="color: blue; text-align: left;"&gt;Exibir mapa ampliado&lt;/a&gt;&lt;/small&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-8791745951430251671?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/8791745951430251671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=8791745951430251671' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/8791745951430251671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/8791745951430251671'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2009/12/feeling-little-homesick.html' title='Feeling a little homesick'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-4590147553681008819</id><published>2009-11-26T16:13:00.000-02:00</published><updated>2009-11-26T16:13:36.614-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='opensource'/><category scheme='http://www.blogger.com/atom/ns#' term='utility'/><title type='text'>Additions to key-mon</title><content type='html'>I've been busy and did lots of updates to &lt;a href="http://code.google.com/p/key-mon/"&gt;key-mon&lt;/a&gt;, my keyboard status monitor.&lt;br /&gt;&lt;br /&gt;The big news is that it's now resizable!&lt;br /&gt;&lt;br /&gt;Normal size:&lt;br /&gt;&lt;img alt="Normal screenshot" src="http://key-mon.googlecode.com/hg/docs/screenshot.png" /&gt;&lt;br /&gt;&lt;br /&gt;Small size:&lt;br /&gt;&lt;img alt="Smaller" src="http://key-mon.googlecode.com/hg/docs/screenshot-smaller.png" /&gt;&lt;br /&gt;&lt;br /&gt;Larger size:&lt;br /&gt;&lt;img alt="Larger" src="http://key-mon.googlecode.com/hg/docs/screenshot-larger.png" /&gt;&lt;br /&gt;&lt;br /&gt;It can be scaled to any size not just three, here it is at 2x without the mouse and showing the meta (Windows) key:&lt;br /&gt;&lt;img alt="Huge" src="http://key-mon.googlecode.com/hg/docs/2x-no-mouse-meta.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://screencasters.heathenx.org/blog/"&gt;Heathenx&lt;/a&gt; is helping me get nicer looking images, especially at smaller sizes. For the really small sizes I needed to change the look a bit, &amp;nbsp;so now I have two sets of &lt;a href="http://en.wikipedia.org/wiki/Scalable_Vector_"&gt;SVG&lt;/a&gt; files, one for the normal size and another for the smaller size.&lt;br /&gt;&lt;br /&gt;Creating the different sizes was a bit of a pain. GTK wants to read the svg from disk so any changes made to svg needs to be dumped to a temporary file. &amp;nbsp;Also GTK doesn't seem to have a parameter to load and resize, so I end up manipulating the svg so that it is scaled larger or smaller.&lt;br /&gt;&lt;br /&gt;The extra work was worth it, I think. &amp;nbsp;Some screencasts today are high resolution, so the key status monitor will be tiny. &amp;nbsp;Other screen casts are very small, so the key status monitor takes up a lot of space. Now application is infinitely flexible and can serve anyone's needs.&lt;br /&gt;&lt;br /&gt;Last night I thought of another application. &amp;nbsp;Showing the full keyboard and showing what you are pressing as you press them. &amp;nbsp;A million years ago I wrote an application for &lt;a href="http://www.champlainonline.com/"&gt;school&lt;/a&gt; (written in &lt;a href="http://en.wikipedia.org/wiki/Turbo_Pascal"&gt;Turbo Pascal 4.0&lt;/a&gt;) to help the students learn the keys to Word Perfect 5.x and MS Word 3.x. I could reuse some of the code from key-mon to do something similar, maybe for a typing tutor of some sort.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-4590147553681008819?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/4590147553681008819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=4590147553681008819' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/4590147553681008819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/4590147553681008819'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2009/11/additions-to-key-mon.html' title='Additions to key-mon'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-5208024867869272932</id><published>2009-11-23T14:42:00.000-02:00</published><updated>2009-11-23T14:42:57.475-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='opensource'/><category scheme='http://www.blogger.com/atom/ns#' term='utility'/><title type='text'>Created another open source utility key-mon</title><content type='html'>This weekend I was watching &lt;a href="http://screencasters.heathenx.org/episode-100/"&gt;screencasters.heathenx.org&lt;/a&gt; a video podcast about &lt;a href="http://www.inkscape.org/"&gt;Inkscape&lt;/a&gt; with the&amp;nbsp;&lt;a href="http://www.getmiro.com/"&gt;Miro&lt;/a&gt; player. Heathenx had to apologize that his key status monitor wasn't displaying mouse activity. &amp;nbsp;This wasn't the first time I've seen problems with this utility, earlier in the year &lt;a href="http://meetthegimp.org/"&gt;Meet the Gimp&lt;/a&gt; also had some problems getting it to work.&lt;br /&gt;&lt;br /&gt;I downloaded the &lt;a href="http://programmer-art.org/projects/key-status-monitor"&gt;program&lt;/a&gt;&amp;nbsp;and put in on my machine, and sure enough the mouse wasn't working for me either. Looking at the output, it complained that I have more than one mouse and it was going to pick the last one. &amp;nbsp;It lied, I looked at the code and it actually picked the the first one. I changed the code so that it did pick the &lt;i&gt;last&lt;/i&gt; mouse and it worked. &amp;nbsp;I thought of submitting a patch, but I realized that arbitrarily picking the last one might break the program for others for which it was working. &lt;br /&gt;&lt;br /&gt;To my delight the code was written in Python, using &lt;a href="http://www.pygtk.org/"&gt;PyGTK&lt;/a&gt;. It wasn't even that much code, I could probably write a similar program to from scratch in a day. I've never used PyGTK (I mostyl have used &lt;a href="http://www.wxpython.org/"&gt;wxPython&lt;/a&gt;), but a little &lt;a href="http://www.google.com/search?sourceid=chrome&amp;amp;ie=UTF-8&amp;amp;q=wxpython+vs+pygtk"&gt;googling&lt;/a&gt; showed that it is&amp;nbsp;definitely&amp;nbsp;the better choice in this case. PyGTK is already installed on most linux boxen (unlike wxPython).&lt;br /&gt;&lt;br /&gt;At that point I started&amp;nbsp;cataloging&amp;nbsp;the issues I saw with the program:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Doesn't support the Meta (aka windows key).&lt;/li&gt;&lt;li&gt;Doesn't support the scroll wheel, something that's used quite a bit in graphics programs.&lt;/li&gt;&lt;li&gt;Need to be root to run it.&lt;/li&gt;&lt;li&gt;There's no open repository (like &lt;a href="http://code.google.com/"&gt;code.google.com&lt;/a&gt;) to submit patches or issues to.&lt;/li&gt;&lt;li&gt;Doesn't have a context sensitive menu, you can only change options at the command line.&lt;/li&gt;&lt;li&gt;The window is not&amp;nbsp;re-sizable.&lt;/li&gt;&lt;li&gt;If you don't care about the mouse or certain keys - you are out of luck.&lt;/li&gt;&lt;/ul&gt;The original code kept all the images as PNG files, which is ok, but a little bit of playing around I discovered that GTK+ supports SVG extremely well (alpha transparencies and all). &amp;nbsp;I realized that I could create the images on the fly directly from the svg files!&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_UJUFZU670Yc/SwqhX1-mGnI/AAAAAAAAFq8/jlL71OC-90M/s1600/combined.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_UJUFZU670Yc/SwqhX1-mGnI/AAAAAAAAFq8/jlL71OC-90M/s640/combined.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Instead of having 6 large images for the mouse (normal, left-button, right-button, middle-button, scroll-up, scroll-down), &amp;nbsp;I would need only one for the mouse and 5 other smaller pieces for the buttons and scroll wheel. GTK obeys the SVG document size, so I just need to make them all the same size and everything should overlay in the right location (&lt;a href="http://code.google.com/p/key-mon/source/browse/lazy_pixbuf_creator.py"&gt;code&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;It also means that I the potential to make the window re-sizable. &amp;nbsp;If the images are two small, I can make the bigger - too large, I can make them smaller (although I haven't done this yet). &amp;nbsp;For many of the keys I can just search and replace the SVG contents to show different text, reducing about 100 keycap images that I would have needed to create.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_UJUFZU670Yc/SwqzxRhjnkI/AAAAAAAAFrE/UG_jQ3ISSBc/s1600/sample-search-replace.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_UJUFZU670Yc/SwqzxRhjnkI/AAAAAAAAFrE/UG_jQ3ISSBc/s400/sample-search-replace.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: auto;"&gt;The original code used the evdev module by Micah Dowty. With a quick &lt;a href="http://www.google.com/codesearch/p?hl=en&amp;amp;sa=N&amp;amp;cd=1&amp;amp;ct=rc#FkCuqpcMHOU/trunk/src/lib/evdev.py&amp;amp;q=evdev.py"&gt;code search&lt;/a&gt;&amp;nbsp;I found a more recent version of this module. &amp;nbsp;With this version I could throw it all the keyboards and mouses and it would track them all, thus fixing the mouse problem. &amp;nbsp;Running it's built in demo showed that I could easy keep track of the meta key and the scroll wheel as well. &amp;nbsp;Also, on my machine, I didn't need to be root to run the program another bonus.&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;I still have some work to do on it (more keys, packaging, refactoring). Here's what it looks like so far: &amp;nbsp;The pale buttons is just the lower dark buttons with a white semitransparent rectangle on top.&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_UJUFZU670Yc/Swq7LI7lqfI/AAAAAAAAFrc/Q_qYcAhUAQM/s1600/screenshot-blank.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_UJUFZU670Yc/Swq7LI7lqfI/AAAAAAAAFrc/Q_qYcAhUAQM/s640/screenshot-blank.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_UJUFZU670Yc/Swq7QyLXxiI/AAAAAAAAFrk/p_eSAjang4w/s1600/screenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_UJUFZU670Yc/Swq7QyLXxiI/AAAAAAAAFrk/p_eSAjang4w/s640/screenshot.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;It's amazing what you can code in a day these days.&lt;br /&gt;Visit to&amp;nbsp;&lt;a href="http://code.google.com/p/key-mon/"&gt;http://code.google.com/p/key-mon/&lt;/a&gt;&amp;nbsp;and have a look.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-5208024867869272932?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/5208024867869272932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=5208024867869272932' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/5208024867869272932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/5208024867869272932'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2009/11/created-another-open-source-utility-key.html' title='Created another open source utility key-mon'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_UJUFZU670Yc/SwqhX1-mGnI/AAAAAAAAFq8/jlL71OC-90M/s72-c/combined.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-8465512849413154190</id><published>2009-11-02T21:43:00.000-02:00</published><updated>2009-11-02T21:43:59.922-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='timelapse'/><category scheme='http://www.blogger.com/atom/ns#' term='canon'/><title type='text'>More Timelapse</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;Here's the camera taking images of the evening sky. &amp;nbsp;I stopped it when it got so dark that it was taking nearly 4 seconds of exposure per shot.&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh5.ggpht.com/_UJUFZU670Yc/Su9gdKa1NeI/AAAAAAAAFNM/kH9NvJ-AVmA/s1600/image3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://lh5.ggpht.com/_UJUFZU670Yc/Su9gdKa1NeI/AAAAAAAAFNM/kH9NvJ-AVmA/s320/image3.jpg" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Here's the movie made at 25 fps with 900 photos at 5 second intervals.&lt;br /&gt;&lt;object height="385" width="480"&gt;&lt;param name="movie" value="http://www.youtube.com/v/z9RlOAC3FhU&amp;hl=en&amp;fs=1&amp;rel=0"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/z9RlOAC3FhU&amp;hl=en&amp;fs=1&amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-8465512849413154190?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/8465512849413154190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=8465512849413154190' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/8465512849413154190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/8465512849413154190'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2009/11/more-timelapse.html' title='More Timelapse'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_UJUFZU670Yc/Su9gdKa1NeI/AAAAAAAAFNM/kH9NvJ-AVmA/s72-c/image3.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-3706401504507232429</id><published>2009-11-02T19:16:00.001-02:00</published><updated>2009-11-02T19:17:51.395-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='timelapse'/><category scheme='http://www.blogger.com/atom/ns#' term='canon'/><category scheme='http://www.blogger.com/atom/ns#' term='Arduino'/><title type='text'>Canon EOS 450D triggered by an Arduino</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;I was finally able to track down a 2mm stereo plug here in Belo Horizonte (&lt;a href="http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=Eletronica+Guarani+Ltda&amp;amp;sll=-19.918457,-43.94122&amp;amp;sspn=0.007263,0.013937&amp;amp;g=Rua+Carijos,+BH,+MG,+BR&amp;amp;ie=UTF8&amp;amp;hq=Eletronica+Guarani+Ltda&amp;amp;hnear=R.+dos+Carij%C3%B3s+-+Centro,+Belo+Horizonte+-+MG,+Brazil&amp;amp;ll=-19.918056,-43.942974&amp;amp;spn=0.003631,0.006968&amp;amp;t=h&amp;amp;z=18"&gt;Eletronica Guarani&lt;/a&gt;) so I can remotely control my Canon SLR from the Arduino.&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh6.ggpht.com/_UJUFZU670Yc/Su9BbH3C8jI/AAAAAAAAFL4/HORrIbpdXTY/img_7034.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh6.ggpht.com/_UJUFZU670Yc/Su9BbH3C8jI/AAAAAAAAFL4/HORrIbpdXTY/img_7034.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;It uses two &lt;a href="http://www.sparkfun.com/commerce/product_info.php?products_id=100"&gt;SPDT relay switches&lt;/a&gt;, one for the shutter and one for focus. &amp;nbsp;The way it's setup, there's no way I can cross the wires and hurt my camera, even after a few beers. &amp;nbsp;In the photo the black wire is hooked to ground and the blue wire to pin 12 on the Arduino (or &lt;a href="http://www.seeedstudio.com/depot/seeeduino-v212-fully-assembled-arduino-compatible-p-389.html"&gt;Seeeduino&lt;/a&gt; in my case). &amp;nbsp;So far I've only used the shutter and have left auto-focus off. &lt;br /&gt;Here's my first attempt of a timelapse movie with this setup:&lt;br /&gt;&lt;br /&gt;&lt;object height="505" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/RggMMGKbJ98&amp;hl=en&amp;fs=1&amp;rel=0"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/RggMMGKbJ98&amp;hl=en&amp;fs=1&amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="505"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;You'll find the code &lt;a href="http://code.google.com/p/scott-arduino/source/browse/CanonSlrIntervalometer/CanonSlrIntervalometer.pde"&gt;here&lt;/a&gt;.  &lt;a href="http://wordpress.bolanski.com/?p=9"&gt;This page&lt;/a&gt; helped me figure out to hook-up the plug.&lt;br /&gt;&lt;br /&gt;Making the movie is a little tricky on Linux. &amp;nbsp;First you'll need to installed &lt;a href="http://www.graphicsmagick.org/"&gt;GraphicsMagick&lt;/a&gt; (a faster version of ImageMagick):&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;sudo aptitude install graphicsmagick&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;Then you'll need to downloaded and compile from source mpeg2encode to that it can do the conversion to mpeg (this doesn't come included with GraphicsMagick because of some licensing issues).&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;mkdir -p ~/tmp&lt;br /&gt;cd ~/tmp&lt;br /&gt;wget http://www.mpeg.org/pub_ftp/mpeg/mssg/mpeg2vidcodec_v12.tar.gz&lt;br /&gt;tar xvf mpeg2vidcodec_v12.tar.gz&lt;br /&gt;cd mpeg2&lt;br /&gt;make&lt;br /&gt;sudo cp src/mpeg2enc/mpeg2encode /usr/local/bin/&lt;br /&gt;sudo cp src/mpeg2dec/mpeg2decode /usr/local/bin/&lt;br /&gt;cd ..&lt;br /&gt;rm -rf mpeg2&lt;br /&gt;rm mpeg2vidcodec_v12.tar.gz&lt;/pre&gt;&lt;/blockquote&gt;Finally to do the conversion you need to go to a directory that has all your photos and execute:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;gm convert -size 640x480 -resize 640x480 -monitor *.jpg movie.mpeg&lt;/pre&gt;&lt;/blockquote&gt;This will convert all the jpg images in the directory to 640x480 and create a new file called movie.mpeg (-monitor is to output the progress).&lt;br /&gt;It's a good idea to remember to set your camera to the lowest image quality settings before hand so you don't waste time downloading large images that will be downscaled anyway.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-3706401504507232429?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/3706401504507232429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=3706401504507232429' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/3706401504507232429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/3706401504507232429'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2009/11/canon-eos-450d-triggered-by-arduino.html' title='Canon EOS 450D triggered by an Arduino'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_UJUFZU670Yc/Su9BbH3C8jI/AAAAAAAAFL4/HORrIbpdXTY/s72-c/img_7034.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-4463012302687476440</id><published>2009-11-02T18:11:00.000-02:00</published><updated>2009-11-02T18:11:22.733-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Halloween'/><category scheme='http://www.blogger.com/atom/ns#' term='Arduino'/><title type='text'>Halloween Fun with Arduino and LCD</title><content type='html'>For Halloween this year I did two things. I redid my spinning &lt;a href="http://www.ladyada.net/make/minipov3/index.html"&gt;POV&lt;/a&gt; hat. I basicallly, just made it stronger, and lighter since it fell&amp;nbsp;apart&amp;nbsp;last year. &amp;nbsp;To make it lighter I used the &lt;a href="http://www.nkcelectronics.com/arduino-pro--5v16516.html"&gt;Arduino Pro&lt;/a&gt; (5V) and two coin style batteries (CF2032) instead of the normal Arduino and the heavier 9 volt battery. &amp;nbsp;I didn't have much time to perfect it so the effect wasn't perfect (&lt;a href="http://code.google.com/p/scott-arduino/source/browse/pov_hat/pov_hat.pde"&gt;code&lt;/a&gt;). &amp;nbsp;I really need to put a sensor on it that senses every time it spins around for it to work correctly, at the moment I just guess how fast it's spinning and put in a delay based on that guess. &amp;nbsp;What came out doesn't look that hot:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh6.ggpht.com/_UJUFZU670Yc/SutRz1Gv26I/AAAAAAAAFHA/oA4aqJ4XMxU/s1600/img_6290.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh6.ggpht.com/_UJUFZU670Yc/SutRz1Gv26I/AAAAAAAAFHA/oA4aqJ4XMxU/s320/img_6290.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The second device I made was a little more successful. It was a 16x2 line LCD from &lt;a href="http://www.sparkfun.com/commerce/product_info.php?products_id=255"&gt;sparkfun&lt;/a&gt;&amp;nbsp;(GDM1602K rev 2.1) display connected to a button so that every time you pressed it one more friend would be added. &amp;nbsp;I would go up to people and say "Press the button to be my friend on orkut".&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh4.ggpht.com/_UJUFZU670Yc/SutSA99xBjI/AAAAAAAAFH0/4oh0y0p5kMo/s1600/img_6320.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh4.ggpht.com/_UJUFZU670Yc/SutSA99xBjI/AAAAAAAAFH0/4oh0y0p5kMo/s320/img_6320.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;There's a colloquialism here in Brazil: "Me Add" which is both a shortening of "Me adiciona" and a&amp;nbsp;perversion&amp;nbsp;of &amp;nbsp;"Add Me" in English.&lt;br /&gt;Two additional items that are still in the mail that might have made things even more interesting are this &lt;a href="http://www.seeedstudio.com/depot/the-nevergoingtomiss-glaringdevileye-huge-red-push-button-p-378.html"&gt;big red button&lt;/a&gt; and the &lt;a href="http://www.adafruit.com/index.php?main_page=product_info&amp;amp;cPath=17_21&amp;amp;products_id=94&amp;amp;zenid=6cb162bfd6c95069162d910a21c6bb17"&gt;wave shield&lt;/a&gt;&amp;nbsp;to make some interesting noises when the button was pressed. Maybe for next year.&lt;br /&gt;The pages that helped me the most to set this up were both from arduino.cc (&lt;a href="http://arduino.cc/en/Tutorial/LiquidCrystal"&gt;LCD&lt;/a&gt;, &lt;a href="http://arduino.cc/en/Tutorial/Button"&gt;button&lt;/a&gt;) and the code is &lt;a href="http://code.google.com/p/scott-arduino/source/browse/me_add/me_add.pde"&gt;here&lt;/a&gt;.&lt;br /&gt;Here's what it looks like underneath:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh3.ggpht.com/_UJUFZU670Yc/Su849ulV1PI/AAAAAAAAFLs/r9oYlu0CoX4/img_7032.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh3.ggpht.com/_UJUFZU670Yc/Su849ulV1PI/AAAAAAAAFLs/r9oYlu0CoX4/img_7032.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;I stole the button from the &lt;a href="http://scottkirkwood.blogspot.com/2006/02/mame-control-panel-working.html"&gt;Mame console&lt;/a&gt; I made before. The potentiometer is needed to get the contrast correct (otherwise the text looks either black or empty). I wired the LCD back-lighting so that it was alway on and at 100% (since Halloween is at night). The resistor is just for the button.&lt;br /&gt;Too bad there's no trick or treating in Brazil, otherwise I would have made something scary as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-4463012302687476440?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/4463012302687476440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=4463012302687476440' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/4463012302687476440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/4463012302687476440'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2009/11/halloween-fun-with-arduino-and-lcd.html' title='Halloween Fun with Arduino and LCD'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_UJUFZU670Yc/SutRz1Gv26I/AAAAAAAAFHA/oA4aqJ4XMxU/s72-c/img_6290.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-4446882024195687769</id><published>2009-10-26T22:51:00.000-02:00</published><updated>2009-10-26T22:51:07.968-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='aquarium'/><title type='text'>I need a weedwacker for my fish tank</title><content type='html'>I think there are some fish in there somewhere...&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh6.ggpht.com/_UJUFZU670Yc/SuZDLRPuRZI/AAAAAAAAFFc/BuVOq6XIg88/_pregamma_0.697_reinhard02_key_0.18_phi_1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh6.ggpht.com/_UJUFZU670Yc/SuZDLRPuRZI/AAAAAAAAFFc/BuVOq6XIg88/_pregamma_0.697_reinhard02_key_0.18_phi_1.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Here's what I ended up taking out.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh6.ggpht.com/_UJUFZU670Yc/SuY-CAi7THI/AAAAAAAAFDE/w4fGr6gHmWw/s1600/img_6260.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh6.ggpht.com/_UJUFZU670Yc/SuY-CAi7THI/AAAAAAAAFDE/w4fGr6gHmWw/s640/img_6260.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Here's what it looks like now&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;a href="http://lh4.ggpht.com/_UJUFZU670Yc/SuY9hZWUf9I/AAAAAAAAFCQ/0nIX8ua7D_w/s1600/img_6265.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh4.ggpht.com/_UJUFZU670Yc/SuY9hZWUf9I/AAAAAAAAFCQ/0nIX8ua7D_w/s640/img_6265.jpg" /&gt;&lt;/a&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/8709811-4446882024195687769?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/4446882024195687769/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=4446882024195687769' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/4446882024195687769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/4446882024195687769'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2009/10/i-need-weedwacker-for-my-fish-tank.html' title='I need a weedwacker for my fish tank'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_UJUFZU670Yc/SuZDLRPuRZI/AAAAAAAAFFc/BuVOq6XIg88/s72-c/_pregamma_0.697_reinhard02_key_0.18_phi_1.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-7989227467753759381</id><published>2009-10-20T21:25:00.000-02:00</published><updated>2009-10-20T21:25:47.849-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='electronics'/><category scheme='http://www.blogger.com/atom/ns#' term='Arduino'/><category scheme='http://www.blogger.com/atom/ns#' term='diy'/><title type='text'>Making an Arduino Controlled Power Outlet</title><content type='html'>Over the weekend I created a Arduino controlled power outlet based on &lt;a href="http://www.sparkfun.com/commerce/tutorial_info.php?tutorials_id=119"&gt;this design&lt;/a&gt;. &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh4.ggpht.com/_UJUFZU670Yc/St0I1TEpMpI/AAAAAAAAE74/PEdf7IL4sSE/s1600/img_6221%20%28Modified%29.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh4.ggpht.com/_UJUFZU670Yc/St0I1TEpMpI/AAAAAAAAE74/PEdf7IL4sSE/s400/img_6221%20%28Modified%29.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;With this connected to a the Arduino I can control the two plugs&amp;nbsp;independently. &amp;nbsp;One end (which I cut an old US style plug) I plug into the mains power, the other end I connect to the Arduino (four connections):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh5.ggpht.com/_UJUFZU670Yc/St0I3cOSTBI/AAAAAAAAE18/D8d3gqVe510/s1600/img_6223%20%28Modified%29.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh5.ggpht.com/_UJUFZU670Yc/St0I3cOSTBI/AAAAAAAAE18/D8d3gqVe510/s320/img_6223%20%28Modified%29.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The fit was a bit tight!&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh5.ggpht.com/_UJUFZU670Yc/St0I5q2VDbI/AAAAAAAAE2E/MjsqpoyFF0g/s1600/img_6225.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh5.ggpht.com/_UJUFZU670Yc/St0I5q2VDbI/AAAAAAAAE2E/MjsqpoyFF0g/s320/img_6225.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;I did some tests to see if when the solenoids are on whether is would heat up too much.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh4.ggpht.com/_UJUFZU670Yc/St0I-ziHs_I/AAAAAAAAE2c/HoT7zNxv7eA/s1600/img_6231.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh4.ggpht.com/_UJUFZU670Yc/St0I-ziHs_I/AAAAAAAAE2c/HoT7zNxv7eA/s640/img_6231.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;After about about a 1/2 hour it did heat up to 32 C° which isn't too bad. &amp;nbsp;So now I'm all set to &lt;a href="http://www.plasma2002.com/blenderdefender/"&gt;scare some animals&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-7989227467753759381?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/7989227467753759381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=7989227467753759381' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/7989227467753759381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/7989227467753759381'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2009/10/making-arduino-controlled-power-outlet.html' title='Making an Arduino Controlled Power Outlet'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_UJUFZU670Yc/St0I1TEpMpI/AAAAAAAAE74/PEdf7IL4sSE/s72-c/img_6221%20%28Modified%29.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-8437710732042684813</id><published>2009-10-14T18:05:00.000-03:00</published><updated>2009-10-14T18:05:13.595-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='canon'/><category scheme='http://www.blogger.com/atom/ns#' term='Arduino'/><category scheme='http://www.blogger.com/atom/ns#' term='diy'/><title type='text'>Arduino Sonar Trigger Part 2</title><content type='html'>The idea this weekend was to setup the sonar with the Arduino so that I can get a shot of the &lt;a href="http://en.wikipedia.org/wiki/Seriema"&gt;Siriemas&lt;/a&gt;&amp;nbsp;that pass daily at the farm, or maybe a hummingbird.&lt;br /&gt;&lt;br /&gt;Well that didn't work out so well, turns out that the &lt;a href="http://www.sparkfun.com/commerce/product_info.php?products_id=639"&gt;sonar&lt;/a&gt; is affected by the wind. Adding a bit of hysteresis to the &lt;a href="http://code.google.com/p/scott-arduino/source/browse/CanonRemoteTrigger/CanonRemoteTrigger.pde"&gt;code&lt;/a&gt;, fixed it for the most part.&lt;br /&gt;&lt;br /&gt;I used &lt;a href="http://www.lua.org/"&gt;lua&lt;/a&gt; to program the camera, except that it looks like there some issues with it and my Canon SD450. &amp;nbsp;Calling &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="font-size: small;"&gt;get_shooting()&lt;/span&gt;&lt;/span&gt; repeatedly causes problems, for example. I got my intervalometer&amp;nbsp;&lt;a href="http://code.google.com/p/scott-arduino/source/browse/CanonRemoteTrigger/chdk/interval.lua"&gt;code&lt;/a&gt;&amp;nbsp;to work correctly only after removing that test. &amp;nbsp;Here's some timelapse photography that did work.&lt;br /&gt;&lt;br /&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Tc9yBZju5FA&amp;hl=en&amp;fs=1&amp;rel=0"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Tc9yBZju5FA&amp;hl=en&amp;fs=1&amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-8437710732042684813?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/8437710732042684813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=8437710732042684813' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/8437710732042684813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/8437710732042684813'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2009/10/arduino-sonar-trigger-part-2.html' title='Arduino Sonar Trigger Part 2'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-5639906203880131618</id><published>2009-10-05T23:24:00.000-03:00</published><updated>2009-10-05T23:24:47.375-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='canon'/><category scheme='http://www.blogger.com/atom/ns#' term='Arduino'/><category scheme='http://www.blogger.com/atom/ns#' term='diy'/><title type='text'>Canon SD450 Triggered by Sonar and the Arduino</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;This weekend I played with my Canon PowerShot &lt;a href="http://www.dpreview.com/reviews/canonsd450/"&gt;SD450&lt;/a&gt;&amp;nbsp;(aka IXUS 55) and the&amp;nbsp;&lt;a href="http://chdk.wikia.com/wiki/CHDK"&gt;CHDK&lt;/a&gt;&amp;nbsp;along with the &lt;a href="http://arduino.cc/"&gt;Arduino&lt;/a&gt; and the MaxBotix MaxSonar&amp;nbsp;&lt;a href="http://www.sparkfun.com/commerce/product_info.php?products_id=639"&gt;LV-EZ1&lt;/a&gt;. &amp;nbsp;The idea is to automatically take pictures when an object moves into frame.&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Part of the job involved hacking a USB cable to hook up to the Arduino which I promptly did, as you can see below.&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh4.ggpht.com/_UJUFZU670Yc/SsnbCM6y4XI/AAAAAAAAE0Y/hrBzq5WZNHA/s1600/img_5902.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh4.ggpht.com/_UJUFZU670Yc/SsnbCM6y4XI/AAAAAAAAE0Y/hrBzq5WZNHA/s320/img_5902.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Unfortunately, I was supposed to hack a Mini-USB cable (of which I have a dozen) and instead hacked my (only) Micro-USB cable (oops).&lt;br /&gt;The end I soldered two break away headers and then encased the whole thing with hot glue.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh3.ggpht.com/_UJUFZU670Yc/SsnbQAitnxI/AAAAAAAAE0c/cIsNKDlBYjw/s1600/img_5895%20%28Modified%29.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh3.ggpht.com/_UJUFZU670Yc/SsnbQAitnxI/AAAAAAAAE0c/cIsNKDlBYjw/s320/img_5895%20%28Modified%29.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Here's the setup. You can see the sonar on the right. &amp;nbsp;I soldered a female header to it instead of soldering wires directly to the board. &amp;nbsp;The hacked USB cable is connected to ground and pin 13. &amp;nbsp;For the sonar I've plugged it into Ground, 5V, and pin 7.&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh3.ggpht.com/_UJUFZU670Yc/SsnbBIFtHnI/AAAAAAAAE0U/kiErZQ7fcWY/s1600/img_5901.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh3.ggpht.com/_UJUFZU670Yc/SsnbBIFtHnI/AAAAAAAAE0U/kiErZQ7fcWY/s400/img_5901.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;You may also note that I'm not using the AN (analog) pin on the MaxSonar, but instead the PW (pulse width) pin, unlike most code I saw on the web. &amp;nbsp;The code is near the bottom on this &lt;a href="http://www.arduino.cc/playground/Main/MaxSonar"&gt;arduino.cc page&lt;/a&gt;. My final code for the arduino is &lt;a href="http://code.google.com/p/scott-arduino/source/browse/CanonRemoteTrigger/CanonRemoteTrigger.pde"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I should mention that the CHDK is a little tricky to setup on the SD450 for shooting remotely by USB. &amp;nbsp;From what I understand it's supposed to be able to do that out of the box, but it didn't work for me. &amp;nbsp;However, by creating a LUA&amp;nbsp;&lt;a href="http://code.google.com/p/scott-arduino/source/browse/CanonRemoteTrigger/chdk/myshutter.lua"&gt;script&lt;/a&gt;&amp;nbsp;for the camera I was able to get this to work.&lt;br /&gt;&lt;br /&gt;To finish the project I'm going to glue that bolt you can see under the plastic container which just happens to be the right size for a tripod bolt. &amp;nbsp;I'll also add a potentiometer which I'll hook up to a threshold, how far the subject must be before I take a shot. &amp;nbsp;I'll probably try and take some pictures of hummingbirds near the feeder this weekend.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-5639906203880131618?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/5639906203880131618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=5639906203880131618' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/5639906203880131618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/5639906203880131618'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2009/10/canon-sd450-triggered-by-sonar-and.html' title='Canon SD450 Triggered by Sonar and the Arduino'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_UJUFZU670Yc/SsnbCM6y4XI/AAAAAAAAE0Y/hrBzq5WZNHA/s72-c/img_5902.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-2477214749969988743</id><published>2009-08-22T12:04:00.004-03:00</published><updated>2009-08-22T20:26:33.399-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='thoughts'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Has the Web Made Us Better Readers?</title><content type='html'>In the recent past, when writers used expressions like "&lt;a href="http://en.wikipedia.org/wiki/Procrustes"&gt;Procrustean bed&lt;/a&gt;" or "&lt;a href="http://en.wikipedia.org/wiki/Sisyphus"&gt;Sisyphean task&lt;/a&gt;", they might have been considered rather 'snobby', even if those expressions might have been appropriate.&lt;br /&gt;&lt;br /&gt;Today, of course, we can link to the definitions or have the reader search for the definition easily.  It think, as long as the article isn't full of these types of references, it isn't too much work for the  percentage of readers that may not remember their greek mythology.&lt;br /&gt;&lt;br /&gt;Today, writers don't even need to go back to ancient Greece for their &lt;a href="http://en.wikipedia.org/wiki/Archetype"&gt;archetypes&lt;/a&gt;:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://upload.wikimedia.org/wikipedia/en/thumb/5/51/Fonzie_jumps_the_shark.PNG/200px-Fonzie_jumps_the_shark.PNG"&gt;&lt;img style="cursor: pointer; width: 200px; height: 168px;" src="http://upload.wikimedia.org/wikipedia/en/thumb/5/51/Fonzie_jumps_the_shark.PNG/200px-Fonzie_jumps_the_shark.PNG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;"&lt;a href="http://en.wikipedia.org/wiki/Jumping_the_shark"&gt;Jumped the Shark&lt;/a&gt;" is a great expression for when something has become passé (follow the link if you don't know this one).&lt;br /&gt;&lt;br /&gt;"&lt;a href="http://en.wikipedia.org/wiki/Streisand_effect"&gt;Streisand Effect&lt;/a&gt;" is when the attempt to suppress information backfires and  just makes it even more widely publicized.&lt;br /&gt;&lt;br /&gt;"&lt;a href="http://en.wikipedia.org/wiki/Redpill"&gt;Take the redpill&lt;/a&gt;" when you need to leave your fantasy world and meet reality.&lt;br /&gt;&lt;br /&gt;"Dialed &lt;a href="http://en.wikipedia.org/wiki/Up_to_eleven"&gt;Up to Eleven&lt;/a&gt;" for when something exceeds beyond, say, 10.&lt;br /&gt;&lt;br /&gt;If you &lt;a href="http://en.wikipedia.org/wiki/Grok"&gt;grokked&lt;/a&gt; all that, I think you might agree that writing on the web can and probably will become richer over time since there's little fear in throwing in an obscure allegory, idiom, metaphore, or colloquialism.  You just a click away from being a snob, to being illuminating.&lt;br /&gt;&lt;br /&gt;Here's to the end of dumbing down for the masses and instead writing rich, interesting and insightful articles.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-2477214749969988743?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/2477214749969988743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=2477214749969988743' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/2477214749969988743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/2477214749969988743'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2009/08/has-web-made-us-better-readers.html' title='Has the Web Made Us Better Readers?'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-4155124052251067166</id><published>2009-08-13T21:30:00.006-03:00</published><updated>2009-08-13T23:11:55.887-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gwt'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='gae'/><title type='text'>What I'm working On</title><content type='html'>At Google we have lots of internal tools, many for the command line.  On occasion some googler will take one of these tools and make it into an internal web site.&lt;div&gt;&lt;br /&gt;&lt;div&gt;Usually, when this happens I think "Why?  The command line tool is much more convenient!".  At first, the web site isn't all that useful, but week by week, features get added until the web version is faster, and has more useful features than the command line version.&lt;/div&gt;&lt;div&gt;I started thinking that I have some old programs that I wrote, years ago, which could be better off on the web.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One program I did this to is &lt;a href="http://mm2notes.appspot.com/"&gt;mm2notes&lt;/a&gt; which takes &lt;a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page"&gt;FreeMind&lt;/a&gt; MindMap and creates meeting notes.  The &lt;a href="http://code.google.com/p/mm2notes/"&gt;original version&lt;/a&gt; was only for the command line.  Already I can see the web version could be far more useful than running from the command line.  For instance, I can e-mail the action items to the people that have something to act upon.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another program that I wrote, even longer ago, was a program to help me learn Portuguese. It had two parts, one to train on the conjugation verbs, the other on writing checks.  I wrote it in C++ and and MFC, so you have to run it in Windows.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The other day I had to write a check and I remembered that old (2005) program.  I figured it was time for me to learn the &lt;a href="http://code.google.com/appengine/docs/java/overview.html"&gt;Java version of the Google App Engine&lt;/a&gt; version with &lt;a href="http://code.google.com/webtoolkit/overview.html"&gt;GWT&lt;/a&gt; and so I converted the code to Java and GWT.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It's really quite pleasant working with GWT, I have so say.  This whole program is client side, you could be practicing writing checks on the airplane.    If you run the program in a new version of Firefox or Safari you'll also get the benefit of  &lt;a href="http://www.alistapart.com/articles/cssatten"&gt;@font-face&lt;/a&gt; css tag which will download a handwriting like font (which I purchased a long time ago from Corel).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The web site is &lt;a href="http://escrevecheque.appspot.com/"&gt;escrevecheque&lt;/a&gt; and the source code can be found &lt;a href="http://code.google.com/p/escrevecheque/"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_UJUFZU670Yc/SoTAcfeuUUI/AAAAAAAAD0U/xXlZJNEJrJg/s1600-h/screenshot.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 258px;" src="http://2.bp.blogspot.com/_UJUFZU670Yc/SoTAcfeuUUI/AAAAAAAAD0U/xXlZJNEJrJg/s400/screenshot.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5369628251451707714" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-4155124052251067166?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/4155124052251067166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=4155124052251067166' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/4155124052251067166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/4155124052251067166'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2009/08/what-im-working-on.html' title='What I&apos;m working On'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_UJUFZU670Yc/SoTAcfeuUUI/AAAAAAAAD0U/xXlZJNEJrJg/s72-c/screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-1063866499617764875</id><published>2009-07-25T20:58:00.003-03:00</published><updated>2009-07-25T21:37:10.275-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mercurial'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>I'm Liking Mercurial</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://subversion.tigris.org/images/subversion_logo_hor-468x64.png"&gt;&lt;img style="cursor: pointer; width: 468px; height: 64px;" src="http://subversion.tigris.org/images/subversion_logo_hor-468x64.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.selenic.com/hg-logo/logo-droplets-200.png"&gt;&lt;br /&gt;&lt;img style="cursor: pointer; width: 200px; height: 240px;" src="http://www.selenic.com/hg-logo/logo-droplets-200.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I've been a longtime user of &lt;a href="http://subversion.tigris.org/"&gt;subversion&lt;/a&gt; for source control, and with &lt;a href="http://code.google.com/projecthosting/"&gt;Google's Project Hosting&lt;/a&gt;, that was the only choice.&lt;br /&gt;For a new project I'm working on I decided to try &lt;a href="http://mercurial.selenic.com/wiki/"&gt;mercurial&lt;/a&gt;, instead.&lt;br /&gt;&lt;br /&gt;I think I'll stick with mercurial from now on:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It's &lt;a href="http://nedbatchelder.com/text/hgsvn.html"&gt;very close to subversion&lt;/a&gt; for most commands.&lt;/li&gt;&lt;li&gt;It's incredibly fast.&lt;/li&gt;&lt;li&gt;I can perform commits without an internet connection.&lt;/li&gt;&lt;li&gt;It uses only one hidden folder for the whole tree.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The only issue I've found so far is that the default Mercurial version for Ubuntu is before version 1.3 which allows you to store the password in a &lt;span style="font-style: italic;"&gt;~/.hgrc&lt;/span&gt; file.  So, for now, I need to type in the password every time I do a push.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-1063866499617764875?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/1063866499617764875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=1063866499617764875' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/1063866499617764875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/1063866499617764875'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2009/07/im-liking-mercurial.html' title='I&apos;m Liking Mercurial'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-5899393551890316024</id><published>2009-06-28T12:14:00.002-03:00</published><updated>2009-06-28T13:02:19.638-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='wave'/><title type='text'>First Wave Robot</title><content type='html'>I took advantage of the fact that some wave developers were passing by our office and wrote a wave robot during a jam session.  This robot monitors what is being typed and makes it easy to convert to different units.   If you type "100kg (? lbs)" it will replace the ? with the correct value of 220 after you type the closing parenthesis, for example.&lt;br /&gt;&lt;br /&gt;I went a bit further and tried to be sensible with the significant figures.  I didn't want it say '220.462262 lbs.  So I examine the number of significant figures from the original number and try to duplicate it in the result.  If you say "100 kg" it'll put "220 lbs".  If instead you enter "100.0 kg" it'll put "220.5 lbs".&lt;br /&gt;&lt;br /&gt;Test revealed, however, that this wasn't good enough.  If I put in "1 inch" in would convert this to "3cm", a 18% error.  I put in an extra rule to increase the precision if the error was greater than 10%, which got these corner cases.&lt;br /&gt;&lt;br /&gt;What's interesting is that it took more time to write the conversion routines than it did to hook it up with wave.  If you use Google App engine in Python or Java it's dead easy.&lt;br /&gt;&lt;br /&gt;Google Wave is really a new way to communicate and collaborate, even without robots and gadgets.  With robots it goes to a whole new level.  You really should take a look at the &lt;a href="http://code.google.com/apis/wave/guide.html"&gt;wave api documentation&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The code for my converter is available &lt;a href="http://code.google.com/p/convertsy"&gt;here&lt;/a&gt; and the robot is called convertsy@appspot.com.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-5899393551890316024?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/5899393551890316024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=5899393551890316024' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/5899393551890316024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/5899393551890316024'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2009/06/first-wave-robot.html' title='First Wave Robot'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-4525948498437424364</id><published>2009-04-21T18:08:00.002-03:00</published><updated>2009-04-21T18:30:52.809-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Grub Could be A lot Simpler</title><content type='html'>Today I reinstalled Windows XP on my son's machine (my old machine).  &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;ct=res&amp;amp;cd=1&amp;amp;url=http%3A%2F%2Fwww.ubuntu.com%2F&amp;amp;ei=RjbuSevvIsrgtgeI3cHKDw&amp;amp;usg=AFQjCNHf4yS0SxsZMV_usEcMmNsnG5k3Yg&amp;amp;sig2=ORAPfgQ4sHFqMN6Svp_1Gg"&gt;Ubuntu&lt;/a&gt; works perfectly with sound, video, and internet, but Windows...&lt;br /&gt;In Windows, I had no sound, no internet, and problems with the video card.  Then when I tried to update, it said I can't use and English version of XP in Brazil!&lt;br /&gt;So I reinstalled with a Brazilian version of XP which blew away the boot sector (and thus the menu for selecting Ubuntu is gone).&lt;br /&gt;There are some good instructions &lt;a href="http://www.sorgonet.com/linux/grubrestore/"&gt;here&lt;/a&gt; on how to restore grub, but jeez, such a simple program has to be so much work:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-weight: bold;"&gt;sudo␣grub&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;find␣/boot/grub/stage1&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;root␣(hd0,1)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;setup␣(hd0)&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;Worse, it's even picky about spaces, you need to put a space (shown above as '␣') or you'll get an error message, you've got to be kidding me.   If you forget the sudo, it gives you useless error message instead of mentioning that running as root is probably a good idea.&lt;br /&gt;I suggest they fix grub with tab  completion so that I can just press "&lt;span style="font-weight: bold;"&gt;r&lt;tab&gt;&lt;/tab&gt;&lt;/span&gt;" and get:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-weight: bold;"&gt;restore my goddamn boot menu!&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;It should just figure out the rest, possibly asking a question if there's any doubt.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-4525948498437424364?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/4525948498437424364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=4525948498437424364' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/4525948498437424364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/4525948498437424364'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2009/04/grub-could-be-lot-simpler.html' title='Grub Could be A lot Simpler'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-6662393849737712249</id><published>2009-04-21T18:01:00.003-03:00</published><updated>2009-04-21T18:08:15.594-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='woodworking'/><title type='text'>Speakers Housing Part II</title><content type='html'>&lt;a href="http://picasaweb.google.com/lh/photo/hYoQQPMJHdFqWlRCoTHoIw?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_UJUFZU670Yc/Se4y1fgqfRI/AAAAAAAACuc/lZQeIeAY7nc/s800/img_2943.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;Today's a holiday (&lt;a href="http://worldculturenet.com/2007/04/18/tiradentes-day-independence-for-brazil/"&gt;Tiradentes Day&lt;/a&gt;) , so I finished off my speakers!&lt;br /&gt;This time I even tested them (last time I was so exhausted that I didn't even &lt;span style="font-style: italic;"&gt;want&lt;/span&gt; to know if they worked or not).&lt;br /&gt;I ended up putting the screw covers on with contact cement - I don't know how long they  stay up there.&lt;br /&gt;One project completed!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-6662393849737712249?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/6662393849737712249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=6662393849737712249' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/6662393849737712249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/6662393849737712249'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2009/04/speakers-housing-part-ii.html' title='Speakers Housing Part II'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_UJUFZU670Yc/Se4y1fgqfRI/AAAAAAAACuc/lZQeIeAY7nc/s72-c/img_2943.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-6730812487498036221</id><published>2009-04-20T11:15:00.004-03:00</published><updated>2009-04-20T12:28:45.539-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='woodworking'/><title type='text'>Speaker Housing</title><content type='html'>&lt;a href="http://picasaweb.google.com/lh/photo/xSf43w8VcqHRsYx2_KD6Tg?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_UJUFZU670Yc/SexiAhl8YgI/AAAAAAAACqo/futlgCbas30/s800/img_2942.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;This weekend I finished my speaker housing so I can have some sound on the veranda.&lt;br /&gt;It was a lot more work that I had hoped, I'm still sore.  My reciprocating saw didn't survive the experience either.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_UJUFZU670Yc/SeyKnPdRw9I/AAAAAAAACrY/QM8uT-AhyYA/s1600-h/img_2941.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 267px;" src="http://4.bp.blogspot.com/_UJUFZU670Yc/SeyKnPdRw9I/AAAAAAAACrY/QM8uT-AhyYA/s400/img_2941.jpg" alt="" id="BLOGGER_PHOTO_ID_5326784866041316306" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Unfortunately, I still have some work to do:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;put some edge strip laminate in the missing parts&lt;/li&gt;&lt;li&gt;plane down this piece so that it's flush.&lt;/li&gt;&lt;li&gt;Hide the screws.  I bought some covers, but I realize now they won't work, all my screws are flush and they must be protruding.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_UJUFZU670Yc/SeyJQ8aX5qI/AAAAAAAACrQ/fAluMmv1X2Y/s1600-h/speaker.png"&gt;&lt;img style="cursor: pointer; width: 238px; height: 400px;" src="http://1.bp.blogspot.com/_UJUFZU670Yc/SeyJQ8aX5qI/AAAAAAAACrQ/fAluMmv1X2Y/s400/speaker.png" alt="" id="BLOGGER_PHOTO_ID_5326783383460112034" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-6730812487498036221?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/6730812487498036221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=6730812487498036221' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/6730812487498036221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/6730812487498036221'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2009/04/speaker-housing.html' title='Speaker Housing'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_UJUFZU670Yc/SexiAhl8YgI/AAAAAAAACqo/futlgCbas30/s72-c/img_2942.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-1202150024904811323</id><published>2009-04-16T10:15:00.004-03:00</published><updated>2009-12-23T17:13:33.205-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><title type='text'>How I'd Improve the Nintendo Wii</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_UJUFZU670Yc/Sec21ILHHlI/AAAAAAAACqA/YP72FEa7hYg/s1600-h/nintendo_wii_motionplus.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5325285370743955026" src="http://1.bp.blogspot.com/_UJUFZU670Yc/Sec21ILHHlI/AAAAAAAACqA/YP72FEa7hYg/s400/nintendo_wii_motionplus.jpg" style="cursor: pointer; height: 270px; width: 213px;" /&gt;&lt;/a&gt;&lt;br /&gt;Nintendo is coming out with the &lt;a href="http://kotaku.com/5024907/nintendo-introduces-wii-motion-plus"&gt;Wii MotionPlus&lt;/a&gt;, which improves the already revolutionary controller.  It started me thinking on what else Nintendo could do.&lt;br /&gt;&lt;br /&gt;For instance, one or two cameras could be mounted on the TV pointing to the players. This has been &lt;a href="http://www.amazon.com/dp/B000VTQ3LU/?tag=softwareforusers-20"&gt;done before&lt;/a&gt; and makes for some fun games.  It also could be used to improve the playability of the games.  Imagine a sword fight where you can physically jump out of the way of the sword!&lt;br /&gt;&lt;br /&gt;Today if I want to play a quick game on the Wii Fit, I have to:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Drag out the Wii Fit platform and turn it on.&lt;/li&gt;&lt;li&gt;Find the Wii Fit DVD.&lt;/li&gt;&lt;li&gt;Eject the game that's already in the console, hope that my son saved his game and put the DVD somewhere.&lt;/li&gt;&lt;li&gt;Put the Wii Fit DVD in the console and restart the console.&lt;/li&gt;&lt;li&gt;Move and click the cursor to select the Wii Fit game.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Go through several screens and warnings.&lt;/li&gt;&lt;li&gt;Select which player I am.&lt;/li&gt;&lt;li&gt;Start playing, whew!&lt;/li&gt;&lt;/ol&gt;It could be a lot easier.  Putting in a DVD to select a game seems sooo 2001. I can't remeber the last time I put in a CD to listen to music. It should be more like this:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Drag out the Wii Fit platform and turn it on.&lt;/li&gt;&lt;li&gt;The Wii suspends my son's currently game and shows me a list of games that run with the Wii Fit.&lt;/li&gt;&lt;li&gt;Allows me to select the game by gesturing to the screen (using the camera, I should need the wiimote for something a simple as this).   It loads up the game nearly instantly from it's internal drive.  It already knows who I am since it used face recognition from the camera.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Start playing.&lt;/li&gt;&lt;/ol&gt;Wii Fit could now tell if I'm doing the posture correctly confirming my position in the camera. Now instead of saying "You have good posture" it could say "You have lousy posture, but your balance is good".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-1202150024904811323?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/1202150024904811323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=1202150024904811323' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/1202150024904811323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/1202150024904811323'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2009/04/how-id-improve-nintendo-wii.html' title='How I&apos;d Improve the Nintendo Wii'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_UJUFZU670Yc/Sec21ILHHlI/AAAAAAAACqA/YP72FEa7hYg/s72-c/nintendo_wii_motionplus.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-4769623049904525189</id><published>2009-04-08T13:09:00.005-03:00</published><updated>2009-04-08T14:14:23.962-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>Wake on lan works</title><content type='html'>I previously tried to get wake-on-lan to work and had no luck.  I was never sure if my code was wrong, or if a firewall was filtering the command of if my motherboard just doesn't support it (probably the latter).&lt;br /&gt;Today I got a new computer and the old wake-on-lan.py worked!&lt;br /&gt;&lt;br /&gt;So here's the program that works for me.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="python"&gt;&lt;br /&gt;#!/usr/bin/env python&lt;br /&gt;&lt;br /&gt;import socket&lt;br /&gt;import struct&lt;br /&gt;import sys&lt;br /&gt;&lt;br /&gt;def wake_on_lan(macaddress):&lt;br /&gt; """ Switches on remote computers using WOL. """&lt;br /&gt;&lt;br /&gt; # Check macaddress format and try to compensate.&lt;br /&gt; if len(macaddress) == 12:&lt;br /&gt;   pass&lt;br /&gt; elif len(macaddress) == 12 + 5:&lt;br /&gt;   sep = macaddress[2]&lt;br /&gt;   macaddress = macaddress.replace(sep, '')&lt;br /&gt; else:&lt;br /&gt;   raise ValueError('Incorrect MAC address format')&lt;br /&gt;&lt;br /&gt; # Pad the synchronization stream.&lt;br /&gt; data = ''.join(['FFFFFFFFFFFF', macaddress * 20])&lt;br /&gt; send_data = ''&lt;br /&gt;&lt;br /&gt; # Split up the hex values and pack.&lt;br /&gt; for i in range(0, len(data), 2):&lt;br /&gt;   send_data = ''.join([send_data,&lt;br /&gt;                        struct.pack('B', int(data[i: i + 2], 16))])&lt;br /&gt;&lt;br /&gt; # Broadcast it to the LAN.&lt;br /&gt; sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)&lt;br /&gt; sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)&lt;br /&gt; sock.sendto(send_data, ('255.255.255.255', 7))&lt;br /&gt; sock.close()&lt;br /&gt;&lt;br /&gt;if __name__ == '__main__':&lt;br /&gt;  machines = {&lt;br /&gt;    'hera' : '01-23-45-67-89-AB',&lt;br /&gt;    'zeus' : 'CD:EF:01:12:45:67',&lt;br /&gt;  }&lt;br /&gt;  machine = 'scott'&lt;br /&gt;  if len(sys.argv) &gt; 1:&lt;br /&gt;    machine = sys.argv[1].strip()&lt;br /&gt;  wake_on_lan(machines[machine])&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In the BIOS settings I turned on both "PME Event Wakeup" and "Power On Ring" (neither of which is written "wake on LAN").&lt;br /&gt;&lt;br /&gt;I'm quite happy with the computer, it has a very silent power supply and I also got a 22" Samsung LCD to go with it.&lt;br /&gt;No I'll have to go and setup my old computer for Victor.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-4769623049904525189?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/4769623049904525189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=4769623049904525189' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/4769623049904525189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/4769623049904525189'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2009/04/wake-on-lan-works.html' title='Wake on lan works'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-8292310671005661973</id><published>2009-04-06T20:58:00.004-03:00</published><updated>2009-04-06T22:32:42.813-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Weight Log</title><content type='html'>I've put together a &lt;a href="http://weight-log.appspot.com/"&gt;web site&lt;/a&gt; to track my weight and exercise.&lt;br /&gt;But mostly it's to play with &lt;a href="http://googleappengine.blogspot.com/"&gt;Google App Engine&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_UJUFZU670Yc/Sdqs3P_IGxI/AAAAAAAACnA/cBH-eF-soh8/s1600-h/weight-log.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 310px;" src="http://1.bp.blogspot.com/_UJUFZU670Yc/Sdqs3P_IGxI/AAAAAAAACnA/cBH-eF-soh8/s400/weight-log.png" alt="" id="BLOGGER_PHOTO_ID_5321755974875749138" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In the process I discovered two things I didn't know about before:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The &lt;a href="http://code.google.com/apis/visualization/documentation/gallery.html"&gt;Google Visualization API&lt;/a&gt;.  It's a very neat way of putting up charts easily.  One nice feature is the separation of data to data views.  You can, for instance, download (via AJAX) one table with six columns and produce 5 charts from it with 5 views, very neat.&lt;/li&gt;&lt;li&gt;You can use some &lt;a href="http://code.google.com/apis/ajaxlibs/documentation/index.html"&gt;libraries for free&lt;/a&gt; (i.e. it's doesn't count for your application's quota, and you get updates without having to manage it).  For my app I used the &lt;a href="http://dojotoolkit.org/"&gt;dojo&lt;/a&gt; library.&lt;/li&gt;&lt;/ol&gt;I figure the more of these web application I make the easier it will become. &lt;br /&gt;&lt;br /&gt;I'm not going to do an app a week like &lt;a href="http://www.webappwednesday.com/"&gt;Web App Wednesday&lt;/a&gt;, but Google's sure making it easy to put up  a site.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-8292310671005661973?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/8292310671005661973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=8292310671005661973' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/8292310671005661973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/8292310671005661973'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2009/04/weight-log.html' title='Weight Log'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_UJUFZU670Yc/Sdqs3P_IGxI/AAAAAAAACnA/cBH-eF-soh8/s72-c/weight-log.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-818672239961706284</id><published>2009-04-04T12:22:00.003-03:00</published><updated>2009-04-04T13:18:49.821-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='gparted'/><category scheme='http://www.blogger.com/atom/ns#' term='clone'/><category scheme='http://www.blogger.com/atom/ns#' term='drive'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Hard Drive Cloning in Ubutnu</title><content type='html'>I'm buying a new computer, but the new computer is without a hard drive nor a video card.  My computer is going to Victor who's has increasingly found it difficult to buy games for his computer, even games that are 4 years old.  Victor will get my old 120 Gig drive and I'll just use the 450 Gig drive that's also been on my computer for a while.&lt;br /&gt;I've been running my computer off an older 120 Gig Maxtor with another 450 Gig used for backup and some larger files.  My idea was to offload all the files off the 450 Gig (to my 1 TB drive my video server) and move all my stuff from the 120 to the 450 and just use the 450.&lt;br /&gt;I searched the Internet but it was not clear what the best method was to use.&lt;br /&gt;In short I:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Copied off all the old files off my 450 Gig drive using rsync.&lt;/li&gt;&lt;li&gt;I used &lt;a href="http://gparted.sourceforge.net/larry/move/move.htm"&gt;GParted to clone&lt;/a&gt; the 120 GB drive to 450 GB (using copy-paste!). I created a bootable "live" version of GParted  CD from &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=115843&amp;amp;package_id=269898"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I unplugged the 120GB drive and just left the 450GB in it's place.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I used an Ubuntu boot disk to &lt;a href="http://ubuntuforums.org/showthread.php?t=224351"&gt;create a boot partition&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Rebooted, and it worked!&lt;/li&gt;&lt;/ul&gt;The links above goes through the steps.  I would have been nice if GParted had created the boot partition as well (and maybe it can, I don't know), but this method worked just fine.&lt;br /&gt;My usual &lt;a href="http://en.wikipedia.org/wiki/Modus_operandi"&gt;m.o.&lt;/a&gt; when getting a new drive has been just to put it in the computer, and mount it as a separate folder.  Now that I've done this once, I think I'll clone the drive instead and use the older drive for backup, etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-818672239961706284?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/818672239961706284/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=818672239961706284' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/818672239961706284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/818672239961706284'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2009/04/hard-drive-cloning-in-ubutnu.html' title='Hard Drive Cloning in Ubutnu'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-4569220449850608312</id><published>2009-02-01T14:56:00.003-02:00</published><updated>2009-02-01T15:34:54.407-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>Toilet seat up or down?</title><content type='html'>These are some of the important questions in life.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Way Women See It&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If I didn't have &lt;span style="font-style: italic;"&gt;you&lt;/span&gt; in my life, I would never have to bring the toilet seat down. &lt;br /&gt;&lt;/li&gt;&lt;li&gt;If I forget to check that it's down, I'll end up sitting in toilet water.&lt;/li&gt;&lt;li&gt;Men could pee sitting down, if they wanted to.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;You are already getting free sex, it's the least you can do.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;The Way Men See It&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If I didn't have &lt;span style="font-style: italic;"&gt;you&lt;/span&gt; in my life, I would (almost) never have to put the toilet seat down.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;9 times out of 10 when I go to the toilet it's to urinate.  Having to both lift the seat up and put the seat back down seems like a lot of work.&lt;/li&gt;&lt;li&gt;Peeing sitting down takes longer, and doesn't get the last drops (especially when you get a little older).&lt;/li&gt;&lt;li&gt;You're being selfish for not put up the seat for me, why shouldn't I be selfish and not put the seat down for you?&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;The Solution&lt;/span&gt;&lt;br /&gt;Put both the seat and the seat cover (lid) down.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If you have to put the seat down, it takes as much work to put one down as two.&lt;/li&gt;&lt;li&gt;It can make the bathroom &lt;a href="http://images.google.com/images?hl=en&amp;amp;rls=GGGL,GGGL:2006-10,GGGL:en&amp;amp;q=toilet%20seat%20covers&amp;amp;um=1&amp;amp;ie=UTF-8&amp;amp;sa=N&amp;amp;tab=wi"&gt;look nicer&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;It's a lot more &lt;a href="http://www.straightdope.com/columns/read/1317/does-flushing-the-toilet-cause-dirty-water-to-be-spewed-around-the-bathroom"&gt;sanitary&lt;/a&gt;, but you have to put it down before you flush.&lt;/li&gt;&lt;li&gt;Equality for the sexes!&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/8709811-4569220449850608312?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/4569220449850608312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=4569220449850608312' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/4569220449850608312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/4569220449850608312'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2009/02/toilet-seat-up-or-down.html' title='Toilet seat up or down?'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-6330957051376736849</id><published>2009-02-01T14:33:00.002-02:00</published><updated>2009-02-01T14:56:22.717-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>The Tipping Point</title><content type='html'>I just finished reading the &lt;a href="http://www.amazon.com/exec/obidos/ASIN0316346624/?id=UTF8&amp;amp;tag=softwareforusers&amp;amp;creativeASIN=0316346624"&gt;Tipping Point&lt;/a&gt; and started thinking.&lt;br /&gt;&lt;br /&gt;I realized that a site like &lt;a href="http://www.goodreads.com/review/list/1482810"&gt;Good Reads&lt;/a&gt;, is a place for "&lt;a href="http://en.wikipedia.org/wiki/The_Tipping_Point"&gt;mavens&lt;/a&gt;", people who love books come there and tell others what books they should read. The whole publishing industry should pay for this site and encourage these mavens to flock there and give their opinions.&lt;br /&gt;It also made me realize that Good Reads needs more work on developing their network.  Make it easier to find others that have the same interests as you do.&lt;br /&gt;&lt;br /&gt;Also from my work on &lt;a href="http://www.orkut.com/"&gt;orkut&lt;/a&gt; I realize that competition is very powerful.  You see that your friends have 300 'friends' and you feel inadequate, and work to build up your list of friends.  The same could happen to books, you see someone with 100 books that they have reviewed and you start wondering what's wrong with you.  You start buying, and reading more books - and giving opinions about these books.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-6330957051376736849?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/6330957051376736849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=6330957051376736849' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/6330957051376736849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/6330957051376736849'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2009/02/tipping-point.html' title='The Tipping Point'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-6886205351099593725</id><published>2009-01-16T17:41:00.008-02:00</published><updated>2009-01-16T18:27:45.751-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='photography'/><category scheme='http://www.blogger.com/atom/ns#' term='canon'/><title type='text'>Love the Canon Xsi</title><content type='html'>I bought the &lt;a href="http://www.amazon.com/exec/obidos/ASIN/B0012YA85A?tag=softwareforusers"&gt;Canon Rebel XSi&lt;/a&gt; (aka EOS 450D) &lt;a href="http://en.wikipedia.org/wiki/Digital_single-lens_reflex_camera"&gt;digital SLR&lt;/a&gt; and have taken &lt;a href="http://flickr.com/photos/scott_kirkwood/"&gt;some&lt;/a&gt; &lt;a href="http://picasaweb.google.com/scottakirkwood"&gt;pictures&lt;/a&gt;.  After using the typical consumer compact camera (like the Canon &lt;a href="http://www.amazon.com/exec/obidos/ASIN/B0012YC7AE?tag=softwareforusers"&gt;Powershot SD&lt;/a&gt;) for a a few years using these modern digital SLRs is like going from a Corolla to a Porshe.  The speed a which it can focus and shoot is incredible, I could depress the button for 4 hours and take pictures at 3.5 pictures per second until the battery runs out. I also got a 8 gig memory card (only about $20.00 these days) and am thrilled that I can take more than a 1000 pictures with no problems.&lt;br /&gt;I tried my wifes older Canon EOS film SLR lenses and they worked flawlessly.  I was surprised that the image I saw in the viewfinder was the same as what came out in the final image as well.&lt;br /&gt;Having the large 3"  LCD means I can reliably review my image and make decisions about what to delete which I used to always do on the computer.&lt;br /&gt;I've been waiting for years to buy a digital SLR but it had hovered around a $1000 for what I was looking at, now it's more like $650 (with lens!).  I wanted something that would work with my older film lenses and a big LCD and some sort of anti-shake (the lens of the XSi has that).  Perhaps the only think I'm missing out on is taking video which is just starting to come out for digital SLR cameras (for a &lt;a href="http://www.amazon.com/exec/obidos/ASIN/B001ENOZY4?tag=softwareforusers"&gt;price&lt;/a&gt;).&lt;br /&gt;If I think back to my first digital camera that had only 640x480 image size and could hold only 24 images, it's quite a difference!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-6886205351099593725?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/6886205351099593725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=6886205351099593725' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/6886205351099593725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/6886205351099593725'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2009/01/love-canon-xsi.html' title='Love the Canon Xsi'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-8691594455654906921</id><published>2008-12-28T10:49:00.008-02:00</published><updated>2008-12-28T22:24:20.287-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Dynamic Typography</title><content type='html'>I'm fascinated with &lt;a href="http://en.wikipedia.org/wiki/Kinematic_typography"&gt;kinetic typography&lt;/a&gt;, especially the work of &lt;a href="http://blip.tv/file/1592215"&gt;Lawrence Lessig&lt;/a&gt;. If you like to see more of the genre you can go search &lt;a href="http://video.google.com/videosearch?q=kinetic%20typography&amp;amp;sourceid=navclient-ff&amp;amp;ie=UTF-8&amp;amp;rlz=1B3GGGL_enBR254BR255&amp;amp;um=1&amp;amp;sa=N&amp;amp;tab=wv#"&gt;google.&lt;/a&gt;&lt;br /&gt;I wanted to do my own. I could always try using open office &lt;a href="http://www.openoffice.org/product/impress.html"&gt;Impress&lt;/a&gt; or PowerPoint, but they are too  limited in what they can do and repeating the same fancy effect on two slides takes twice as long.&lt;br /&gt;My first attempt was to use the &lt;a href="http://www.openoffice.org/product/impress.html"&gt;Processing&lt;/a&gt; language, but it was a lot of work and the language is less than ideal (sort of old school).&lt;br /&gt;My second attempt was with &lt;a href="http://www.pygame.org/news.html"&gt;PyGame&lt;/a&gt;, which I've been meaning to learn more about.  It could work, but I found that the font's weren't anti-aliased (but I think I was doing it wrong) and creating the library was proving to take a long time.&lt;br /&gt;The I remembered &lt;a href="http://www.mechanicalcat.net/richard/log/Python/Bruce_the_Presentation_Tool_2_0__beta"&gt;Bruce&lt;/a&gt;, a presentation program written in Python and supposedly using &lt;a href="http://pseudofish.com/blog/2005/12/10/bruce-presentation-software-using-pygame/"&gt;PyGame&lt;/a&gt;.  When I downloaded the latest source, I found that it was using &lt;a href="http://www.pyglet.org/"&gt;Pyglet&lt;/a&gt; and &lt;a href="http://cocos2d.org/"&gt;Cocos2d&lt;/a&gt; instead.  These two were exactly what I needed, powerful and flexible and I could animate a bunch of objects at the same time independently.&lt;br /&gt;&lt;br /&gt;I've found for each slide I need:&lt;br /&gt;- List of objects (the words):&lt;br /&gt;- For each object:&lt;br /&gt;- it's initial setup (usually offscreen)&lt;br /&gt;- it's "on animation"&lt;br /&gt;- it's "off animation"&lt;br /&gt;&lt;br /&gt;Doing transitions between slides is easy with cocos2d, but I normally just use a quick fade transition.&lt;br /&gt;The code is still rough, my aim is to have a library of effects so that doing a cool presentation won't require too much work.&lt;br /&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/QM0GEmw55f8&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/QM0GEmw55f8&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;The code lives at &lt;a href="http://code.google.com/p/dynamic-typography/"&gt;code.google.com&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-8691594455654906921?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/8691594455654906921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=8691594455654906921' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/8691594455654906921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/8691594455654906921'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/12/dynamic-typography.html' title='Dynamic Typography'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-7390824466928102304</id><published>2008-12-14T21:06:00.007-02:00</published><updated>2008-12-27T23:38:10.815-02:00</updated><title type='text'>The rise of programming for artists?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_UJUFZU670Yc/SVa_lC7abYI/AAAAAAAAA5A/HorOy7jdz2E/s1600-h/tumor2.png"&gt;&lt;img style="cursor: pointer; width: 200px; height: 200px;" src="http://3.bp.blogspot.com/_UJUFZU670Yc/SVa_lC7abYI/AAAAAAAAA5A/HorOy7jdz2E/s200/tumor2.png" alt="" id="BLOGGER_PHOTO_ID_5284621855927987586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I've been using the &lt;a href="http://www.wiring.org.co/"&gt;Wiring&lt;/a&gt; language for doing my &lt;a href="http://www.arduino.cc/"&gt;Arduino&lt;/a&gt; programming and this week I played a little with it's big brother, &lt;a href="http://www.processing.org/"&gt;Processing&lt;/a&gt;.  I think Processing is a nice tool for beginners and has a great set of libraries, but not my cup of tea for programming.  I think what it offers is one tools set (including IDE, libraries and language) so you don't have to waste time figuring out which libraries or IDE you'll need to download as well.&lt;br /&gt;&lt;br /&gt;I've also just come across &lt;a href="http://www.contextfreeart.org/index.html"&gt;Context Free&lt;/a&gt; which is a language for making pretty pictures like the one above.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-7390824466928102304?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/7390824466928102304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=7390824466928102304' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/7390824466928102304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/7390824466928102304'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/12/rise-of-programming-for-artists.html' title='The rise of programming for artists?'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_UJUFZU670Yc/SVa_lC7abYI/AAAAAAAAA5A/HorOy7jdz2E/s72-c/tumor2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-9021512879652518932</id><published>2008-12-10T20:09:00.002-02:00</published><updated>2008-12-10T20:16:34.357-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='olpc'/><title type='text'>G1G1</title><content type='html'>I bought two OLPC (aka XO) laptops and gave one to a needy child through the &lt;a href="http://www.olpcnews.com/gallery/g1g1-2008-buyers-guide.html"&gt;G1G1&lt;/a&gt; (Give One/Get One) promotion.  In fact I gave two laptops since Google matched my donation (thanks Google!).&lt;br /&gt;It's already arrived at my Mother's house, it'll be interesting to see how it's changed since the beta machine (which I still have, but I can't upgrade anymore without bricking it).&lt;br /&gt;Maybe the dollar will go down in 2009 and the price of materials as well so that they can start selling the laptop at something near $100.00.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-9021512879652518932?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/9021512879652518932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=9021512879652518932' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/9021512879652518932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/9021512879652518932'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/12/g1g1.html' title='G1G1'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-3128945139066714442</id><published>2008-11-30T16:52:00.002-02:00</published><updated>2008-12-01T22:20:42.751-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Got my wife on Unbuntu</title><content type='html'>My wife, Renata, has been complaining more and more that Windows is getting slower and it's a pain downloading and installing anti-virus software all the time.  I occasionally tease that &lt;span style="font-style: italic;"&gt;I&lt;/span&gt; don't have any of these problems, I don't even have an anti-virus installed on my Ubuntu machine.&lt;br /&gt;So finally, this week, she said that she wants to a dual boot machine, like Victor has.&lt;br /&gt;Compounding the issue is that over the past few weeks our Internet provider had been getting slower and slower, of course, making Windows appear even slower than normal.&lt;br /&gt;I downloaded the DVD version of Ubuntu 8.10 which took a week with this slow connection and, of course, it didn't work (I believe her machine does like booting with a DVD). Luckily, some time on Friday our Internet provider fixed their problems and I was able to download the CD version of 8.10 in about 40 minuts.&lt;br /&gt;In the meantime I backed up her machine to my hard drive which was much slower than it should have been (about 8 hours).  I need to debug our network to see why we aren't doing 100 Mb/sec like we should be.&lt;br /&gt;When I finally got her machine to boot with the CD and had everything backed up, I found that Ubuntu was unable to partition the hard drive.  I ended up going back to Windows, running chkdsk /f and defragmented the drive.&lt;br /&gt;After all that I was able to partition without problems but then it failed to boot into X, ugh.   Luckily she wasn't around to see all this... I hit Alt-F1 and looked at the /var/log/Xorg.0.log and saw lots of errors related to her Wacom tablet.  I unplugged the tablet and I was finally able to install Ubuntu, whew.&lt;br /&gt;&lt;br /&gt;So far, so good.  She printed a receipt from a web page, and it just worked!  Thank you CUPS.&lt;br /&gt;I plugged in her Wacom tablet, and it worked too!  No rebooting or playing with xorg.conf, cool!&lt;br /&gt;She needed Java for a web site, and I installed it remotely from my machine and that worked after she restarted Firefox.&lt;br /&gt;&lt;br /&gt;Additional programs I installed for her:&lt;br /&gt;Skype, sun-java6-plugin, qalculate, wine, openoffice.org.l10n-pt-br, r-base-core (R language), unison-gtk, rdiff-backup, Amarok, vlc, and gnome-mplayer&lt;br /&gt;&lt;br /&gt;Stuff I installed for me:&lt;br /&gt;ssh, unison-gtk, rdiff-backup, subversion, gnome-vim, ssh, python2.5, python2.5-wxgtk2.8, python2.5-scipy, and ipython.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-3128945139066714442?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/3128945139066714442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=3128945139066714442' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/3128945139066714442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/3128945139066714442'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/11/got-my-wife-on-unbuntu.html' title='Got my wife on Unbuntu'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-4556416498855538865</id><published>2008-11-20T21:21:00.001-02:00</published><updated>2008-11-20T21:24:11.597-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='orkut'/><title type='text'>Launched</title><content type='html'>It's been a long road, but we launched Google Talk in Orkut.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://feedproxy.google.com/%7Er/OrkutBlog/%7E3/SiANdZCjo9M/fully-integrated-chat-in-orkut-thats.html"&gt;Official Orkut Blog Post of the Launch&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-4556416498855538865?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/4556416498855538865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=4556416498855538865' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/4556416498855538865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/4556416498855538865'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/11/launched.html' title='Launched'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-4622741175739999259</id><published>2008-10-22T11:24:00.002-02:00</published><updated>2008-10-22T17:44:29.045-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='electronics'/><category scheme='http://www.blogger.com/atom/ns#' term='Arduino'/><title type='text'>Build Status Monitor</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://led-matrix-tools.googlecode.com/svn/trunk/completed.jpg"&gt;&lt;img style="cursor: pointer;" src="http://led-matrix-tools.googlecode.com/svn/trunk/completed.jpg" alt="Smilie Build" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I bought the  SparkFun  &lt;a href="http://www.sparkfun.com/commerce/product_info.php?products_id=759" rel="nofollow"&gt;LED matrix&lt;/a&gt; to go along with the Arduino and here's what I've built.&lt;br /&gt;I basically smiles when the build is green and frowns when it's broken.&lt;br /&gt;You can find the code at &lt;a href="http://code.google.com/p/led-matrix-tools/"&gt;google code&lt;/a&gt;.&lt;br /&gt;I wanted to have is scroll messages across and there's code to do that, but in the end it was just too annoying since it sits in front of my desk. I have a routine ready, however if I want to give someone a message.&lt;br /&gt;To get the text I used wxPython and I draw the text in a buffer, then I look at the pixels one by one and those become the LEDs to turn on.  One nice addition is that I can pass Unicode characters and thus it's relatively easy to show special characters like ⚘♂✔✖✈☝ although 8x8 pixels is often not enough and I have to fix them by hand.&lt;br /&gt;Another bonus the that program works from the command line so you can print larger messages:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;./text2pixels.py --size 30 --bold --font "Delphine" Arduino&lt;br /&gt;                                                    ###                           &lt;br /&gt;                                   #                ##                            &lt;br /&gt;                                  ##                                              &lt;br /&gt;       ##                         ##                                              &lt;br /&gt;      ####                        ###                                         ### &lt;br /&gt;      ####                        ###    ##            ##    ##             #######&lt;br /&gt;     #####                        ###   ###     ##    ###   ###            ########&lt;br /&gt;    ######   ##    ####       ### ###   ###     ###   ###   ###      ###   #########&lt;br /&gt;   ###  ##   ##  ######    ##########   ##     ####   ###   ####    ####  ####   ###&lt;br /&gt;   ###  ###  ## #### ###  ###########   ##     ###    ###   ###    #####  ##     ###&lt;br /&gt;  ###   ###  #####   ##   ###    ####  ###     ###    ###   ###   ######  ##     ###&lt;br /&gt;##################        ###   ######  ###    ####    ###   ###  ### ### ###    ###&lt;br /&gt;##################         ##   ######## ###   ######   ###   ### ###  ###  ##   ####&lt;br /&gt;#####     ## ####          ######   ###  ## ########   ###   ######   ###  ########&lt;br /&gt;###       ######            ###     ###  ####### ##     ##   #####    ###   ####   &lt;br /&gt;####       ######                     ###  ####   ##     ##    ###     ###          &lt;br /&gt;###        ### ##                     ##           #           ##       ##          &lt;br /&gt;         ####                                                                     &lt;br /&gt;          ##                                                                    &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;./text2pixels.py --size 15 --font "Winks" Scott&lt;br /&gt;    ######                                                              &lt;br /&gt;  ##########                                                            &lt;br /&gt; #############                                                          &lt;br /&gt;###############                                                         &lt;br /&gt;################                                                        &lt;br /&gt;#################     #####         ######     ############# #############&lt;br /&gt;###############     ########      #########    ############  ############&lt;br /&gt;#############      ##########    ##########    ###########   ###########&lt;br /&gt; ####### ###      ############  ############   ###########   ###########&lt;br /&gt;  ######  #      #############  ############   ###########   ###########&lt;br /&gt;   ######        #############  ###### #####    ##########    ##########&lt;br /&gt;    ######       ############    #####  ####      #####         #####   &lt;br /&gt;     ######      ######   ##     ####   ####      #####         #####   &lt;br /&gt;   ## ######      #####          ####   ###       #####         #####   &lt;br /&gt;  #### #####      #####          #####  ###        ####          ####   &lt;br /&gt; ###########       #####          ########         ####          ####   &lt;br /&gt;  ##########       #########      ########         ###           ###    &lt;br /&gt;   ########         #######        ######          ###           ###    &lt;br /&gt;     ####             ####          ####            #             #     &lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-4622741175739999259?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/4622741175739999259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=4622741175739999259' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/4622741175739999259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/4622741175739999259'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/10/build-status-monitor.html' title='Build Status Monitor'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-7059173764930024548</id><published>2008-10-12T20:43:00.005-03:00</published><updated>2008-12-27T21:28:15.547-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='electronics'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='Arduino'/><title type='text'>Fun with SmartFun's LED Matrix</title><content type='html'>I had some fun this weekend with &lt;a href="http://www.sparkfun.com/commerce/product_info.php?products_id=759"&gt;the sparkfun LED matrix&lt;/a&gt;. It's a little bit expensive at $35.00, but looks like it could have a bunch of cool uses.&lt;br /&gt;Programming it I had to learn about &lt;a href="http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus"&gt;SPI&lt;/a&gt; and I ended up writing my own SPI routines in &lt;a href="http://processing.org/"&gt;processing&lt;/a&gt;.&lt;br /&gt;I've put the code up at&lt;a href="http://code.google.com/p/led-matrix-tools/"&gt; led_matrix_tools&lt;/a&gt; and some of it is very reusable.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 0);font-size:85%;" &gt;Note: I wrote this on October 12th, I just noticed now that I never sent it.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-7059173764930024548?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/7059173764930024548/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=7059173764930024548' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/7059173764930024548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/7059173764930024548'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/10/fun-with-smartfuns-led-matrix.html' title='Fun with SmartFun&apos;s LED Matrix'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-8269866058735470461</id><published>2008-09-27T10:16:00.004-03:00</published><updated>2008-09-28T20:31:15.110-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='brazil'/><title type='text'>Electricity in Brazil</title><content type='html'>Brazil has a strange relationship with electricity.  Something like 95% of the electricity in Brazil comes from hydroelectric, yet they charge an arm and a leg for it.&lt;br /&gt;A few years ago we had the "Apagão" (big-unplug or big-turn-off) where you had to halve your electricity consumption from the same time last year. This was because it hadn't rained enough and the water was getting too low behind the dams to make electricity. The real problem, of course, is that the government hasn't been investing in new electric generation plants. Worse was, that after the emergency, everyone had learned how to use less electricity (by buying compact fluorescent lights (at twice the normal price), for example) and was being more energy efficient, so the hydro company increased the prices.  Why? Because they weren't making enough revenue!&lt;br /&gt;At my home they charge R$0.5684/kWh which is about USD$ 0.3072/kWh.  That's 204% more than the New York region ($0.1508/kWh) or 217% more expensive than California and is only less expensive than Hawaii (&lt;a href="http://www.eia.doe.gov/cneaf/electricity/epm/table5_6_a.html"&gt;source&lt;/a&gt;).&lt;br /&gt;On the farm they charge only R$ 0.2795/kWh, which is 203% less expensive.  When it comes to electricity the rich pay for the poor.&lt;br /&gt;If I were to live in a favela, I would get my electricity for free, seriously.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-8269866058735470461?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/8269866058735470461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=8269866058735470461' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/8269866058735470461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/8269866058735470461'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/09/electricity-in-brazil.html' title='Electricity in Brazil'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-6276189597385163254</id><published>2008-09-26T23:00:00.007-03:00</published><updated>2008-10-09T07:56:36.695-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='brazil'/><title type='text'>Portuguese Words that are Odd in English</title><content type='html'>Puxe (pronounced "push") - means pull&lt;br /&gt;no - means "in" or "at",  "no happy hour" would be "at 'happy hour'"&lt;br /&gt;sex - means "Fri" or sexta feira.  Sexo would be sex.&lt;br /&gt;uai (pronounce "why") - it's an expression similar to "look", "well".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-6276189597385163254?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/6276189597385163254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=6276189597385163254' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/6276189597385163254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/6276189597385163254'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/09/portuguese-words-that-are-odd-in.html' title='Portuguese Words that are Odd in English'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-8141485354204733494</id><published>2008-08-11T11:33:00.002-03:00</published><updated>2008-08-11T11:44:18.794-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='victor'/><title type='text'>Old Games Still Attract</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://upload.wikimedia.org/wikipedia/en/4/4f/Baldur%27sGateLogo.png"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://upload.wikimedia.org/wikipedia/en/4/4f/Baldur%27sGateLogo.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;We we cleaning out some closest and my son picked up an old game of mine: &lt;a href="http://en.wikipedia.org/wiki/Baldur%27s_Gate_series"&gt;Baldur's Gate&lt;/a&gt; from 1998.  It's pretty tough for him since it's all in English and it's pretty complicated, but he likes it.  These old games still are lots of fun.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-8141485354204733494?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/8141485354204733494/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=8141485354204733494' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/8141485354204733494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/8141485354204733494'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/08/old-games-still-attract.html' title='Old Games Still Attract'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-2298274738746255968</id><published>2008-07-31T11:17:00.004-03:00</published><updated>2008-07-31T11:31:09.603-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='birthday'/><title type='text'>101010</title><content type='html'>So today I'm 101010 (in binary), or 33 in base 13, but &lt;a href="http://en.wikipedia.org/wiki/Base_13"&gt;nobody makes jokes in base 13&lt;/a&gt;&lt;sup&gt;*&lt;sup&gt;.&lt;br /&gt;&lt;br /&gt;I guess most geeks know that &lt;a href="http://en.wikipedia.org/wiki/Answer_to_Life%2C_the_Universe%2C_and_Everything"&gt;42&lt;/a&gt; is the "Answer to the Ultimate Question of Life, the Universe, and Everything", unfortunately I need to explain the special significance to everyone else.&lt;br /&gt;&lt;br /&gt;Somehow, I do feel wiser this year, perhaps it's just the senility making me forget my ignorance.&lt;br /&gt;&lt;br /&gt;&lt;sup&gt;*&lt;/sup&gt; *is also 42 in ASCII.&lt;br /&gt;&lt;/sup&gt;&lt;/sup&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-2298274738746255968?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/2298274738746255968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=2298274738746255968' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/2298274738746255968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/2298274738746255968'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/07/101010.html' title='101010'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-967525895522778314</id><published>2008-07-30T08:22:00.004-03:00</published><updated>2008-07-30T08:44:52.754-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mame'/><title type='text'>MAME Decal Mistakes</title><content type='html'>&lt;img src="http://lh3.ggpht.com/scottakirkwood/SJBP8RLB6SI/AAAAAAAAAMs/zZjYc3HBFlE/img_0081.jpg?imgmax=912" alt="Mame with decals" /&gt;&lt;br /&gt;The self adhesive poster came back from the printers and I quickly realized that I should have re-measured the &lt;a href="http://en.wikipedia.org/wiki/MAME"&gt;MAME&lt;/a&gt; console.&lt;br /&gt;The SVG file that I used was the original blueprints, but not exactly what I actually ended up cutting.  My final console ended up being a bit deeper than the plan and some of the holes were placed by eye.&lt;br /&gt;So you can see in the image that some decals that were supposed to be on the sides (like "Nintendo" and the packman ghosts) ended up appearing on the bottom.  Also, some of the holes don't line up nicely with the text like "Start" and "Pause" are more obvious.&lt;br /&gt;The resolution also isn't that great, I'm guessing that it's 100 DPI instead of 300 DPI which I was expecting.&lt;br /&gt;But from a distance it looks pretty nice and I'm still glad that I went and did it.  I'm a little wiser now - next time I'll make sure to remeasure.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-967525895522778314?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/967525895522778314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=967525895522778314' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/967525895522778314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/967525895522778314'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/07/mame-decal-mistakes.html' title='MAME Decal Mistakes'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/scottakirkwood/SJBP8RLB6SI/AAAAAAAAAMs/zZjYc3HBFlE/s72-c/img_0081.jpg?imgmax=912' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-2796687322093015395</id><published>2008-07-28T20:01:00.002-03:00</published><updated>2008-07-28T22:01:43.055-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mame'/><title type='text'>Mame Console Art</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_UJUFZU670Yc/SI5QIG-5ilI/AAAAAAAAAMM/Q3IU2UoMNA8/s1600-h/DrawnPanel.png"&gt;&lt;img style="cursor: pointer;" src="http://bp1.blogger.com/_UJUFZU670Yc/SI5QIG-5ilI/AAAAAAAAAMM/Q3IU2UoMNA8/s400/DrawnPanel.png" alt="" id="BLOGGER_PHOTO_ID_5228204317667330642" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Here's my and my Son's effort for a MAME console design.  Not the prettiest, but it was fun creating it.  I've sent it to the printer's and it should be ready tomorrow.&lt;br /&gt;The one I sent to the printer doesn't have the circles nor the black border which comes from my original design when I built it three years ago. &lt;br /&gt;The format that they liked the best was the PDF version which Inkscape exported without any problems.  The mistake I made was to not to shrink the "paper" to the size of all the boxes so I ended up paying for a little extra white that I probably won't need (it ended up being R$35.11). I think I should have also left cut marks in the diagram to make it easier to align and cut out the pieces, we'll see if that will be necessary.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-2796687322093015395?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/2796687322093015395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=2796687322093015395' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/2796687322093015395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/2796687322093015395'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/07/mame-console-art.html' title='Mame Console Art'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_UJUFZU670Yc/SI5QIG-5ilI/AAAAAAAAAMM/Q3IU2UoMNA8/s72-c/DrawnPanel.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-6664128191595823702</id><published>2008-07-27T18:34:00.003-03:00</published><updated>2008-07-27T19:13:22.694-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='mame'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Another Gimp Script</title><content type='html'>I've been wanting to make a plastic print to cover my my son's &lt;a href="http://scottkirkwood.blogspot.com/2006/02/mame-control-panel-working.html"&gt;MAME console&lt;/a&gt; for a while now (3 years already?).  All I need to do is get some bitmaps, or even better some scalable vector images, from a couple of games, put them together and send it to the printer, right?&lt;br /&gt;I knew I was in trouble, when after a few &lt;a href="http://www.google.com/search?q=mame+svg&amp;amp;sourceid=navclient-ff&amp;amp;ie=UTF-8&amp;amp;rls=GGGL,GGGL:2006-10,GGGL:en"&gt;searches&lt;/a&gt; I got my own blog listed.   Seems there aren't that many game fans making nice svg images of popular videos game characters. I did find, however, the &lt;a href="http://www.spriters-resource.com/capcom/megaman/classic/7/display.php?file=megaman.gif"&gt;spriters-resource.com&lt;/a&gt; which has the sprites from a lot of games, the problem is, they are all tiny.&lt;br /&gt;For example, here's what Megaman looks like &lt;img src="http://gimp-enlarge-sprite.googlecode.com/svn/trunk/megaman-raw.png" alt="Megaman" /&gt;.&lt;br /&gt;&lt;br /&gt;Zooming that up 8 times, for instance looks kinda crappy: &lt;img src="http://gimp-enlarge-sprite.googlecode.com/svn/trunk/megaman-raw-8x.png" alt="Megaman" 8x="" /&gt;&lt;br /&gt;&lt;br /&gt;Using the cubic interpolation 8x does only a so-so job:&lt;br /&gt;&lt;img src="http://gimp-enlarge-sprite.googlecode.com/svn/trunk/megaman-raw-8x-cubic.png" alt="Megaman 8x - cubic" /&gt;&lt;br /&gt;&lt;br /&gt;I tried various filters and effects and got the look I think I wanted which you can see here:&lt;br /&gt;&lt;img src="http://gimp-enlarge-sprite.googlecode.com/svn/trunk/megaman-after-2.6x.png" alt="Megaman after" /&gt;&lt;br /&gt;I wanted to fiddle with the steps so I put it all in a python plugin which you can find &lt;a href="http://code.google.com/p/gimp-enlarge-sprite/"&gt;here&lt;/a&gt; (here's a direct link to the &lt;a href="http://code.google.com/p/gimp-enlarge-sprite/source/browse/trunk/plug-ins/enlarge-sprite.py"&gt;code&lt;/a&gt; which may have some useful routines in it).&lt;br /&gt;I tried using Inkscape's "Trace Bitmap" routine (based on &lt;a href="http://potrace.sourceforge.net/"&gt;potrace&lt;/a&gt;) but had very little luck making anything that was looked acceptable and was better than simple scaling would do. The problem is there there is too much subtle shading in the original image.&lt;br /&gt;The final effect has a hint of the pixels and seems to capture most of the intent of the artist who drew the character.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-6664128191595823702?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/6664128191595823702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=6664128191595823702' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/6664128191595823702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/6664128191595823702'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/07/another-gimp-script.html' title='Another Gimp Script'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-8222459588373601952</id><published>2008-07-25T10:59:00.004-03:00</published><updated>2008-07-25T17:37:59.821-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='backup'/><title type='text'>My Backup Setup</title><content type='html'>Mostly my "backup" in the past has been putting everything into an offsite subversion repository. This works, but there are always things that I don't have saved that ends up being important and I don't normally save my large images.&lt;br /&gt;On occasion, I'll also make copies to DVD (in sets like "pictures") and that works fairly well too, but I don't do it often enough.&lt;br /&gt;I've wanted to setup a a real backup setup like provided with &lt;a href="http://www.bacula.org/en/"&gt;bacula&lt;/a&gt;, which is very complete and has a great name and subtitle ("It comes by night and sucks the vital essence from your computers.").  Under Ubuntu is installs quite easily but getting it setup is quite daunting, it's more for a company wide backup solution.  I like the fact that it's written in Python and that it can properly backup even Windows machines, by installing a small program on each machine.  But in the end, after reading the whole manual, I never got it setup.&lt;br /&gt;I just installed a new drive which was perfect for doing backups. I tried using the new "&lt;a href="http://www.linux.com/articles/50045"&gt;Gnome Simple Backup&lt;/a&gt;" which worked OK, but took a very long time and used 100% of my CPU while doing it.&lt;br /&gt;To make a long story short, I'm now using &lt;a href="http://www.nongnu.org/rdiff-backup/"&gt;rdiff-backup&lt;/a&gt;, here's why:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It written in Python (always a plus IMO).&lt;/li&gt;&lt;li&gt;It uses &lt;a href="http://samba.anu.edu.au/rsync/"&gt;rsync&lt;/a&gt; a powerful,  solid and efficient way to copy things from A to B.&lt;/li&gt;&lt;li&gt;It doesn't take long to copy and doesn't use a 100% of my CPU doing it.&lt;/li&gt;&lt;li&gt;The most recent backup is stored normally (no compression, no encryption, just copied). This is handy, I can have my music and pictures stored on my machine and back it up to my media center and play them there if I wish. I can also diff my current version with the backup without having to restore the backup first.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Older versions and deleted files can be recovered easily.&lt;/li&gt;&lt;li&gt;Using it is simple, mine's a one liner:&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;sudo rdiff-backup --include-globbing-filelist backup-list.txt / /big/backup/scott&lt;br /&gt;&lt;/blockquote&gt;Where /big is my 500 Gig drive. The backup-list.txt is just:&lt;br /&gt;&lt;blockquote&gt;/home&lt;br /&gt;/etc&lt;br /&gt;/usr/local&lt;br /&gt;/var&lt;br /&gt;- /opt&lt;br /&gt;- /sbin&lt;br /&gt;- /bin&lt;br /&gt;- /media&lt;br /&gt;- /mnt&lt;br /&gt;- /lib&lt;br /&gt;- /proc&lt;br /&gt;- /sys&lt;br /&gt;- /var/cache&lt;br /&gt;- /tmp&lt;br /&gt;- /dev&lt;br /&gt;- /var/tmp&lt;br /&gt;- /&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-8222459588373601952?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/8222459588373601952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=8222459588373601952' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/8222459588373601952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/8222459588373601952'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/07/my-backup-setup.html' title='My Backup Setup'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-822691975645211353</id><published>2008-07-08T12:19:00.004-03:00</published><updated>2008-07-08T13:36:46.967-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Google OpenSources Protocol Buffers</title><content type='html'>Google has open sourced &lt;a href="http://code.google.com/p/protobuf/"&gt;Protocol Buffers&lt;/a&gt; which is used extensively at Google.  It's used for storing data in big tables as well as for RPC communications between services.  It's perhaps nothing revolutionary, except that it works and it's fast. The other day I realized there are two very nice features of protobuffers: &lt;ol&gt;&lt;li&gt;You can have a zero sized protobuffer, which can still return (default) values.&lt;/li&gt;&lt;li&gt;Protobuffers can be both forwards and backwards compatible.&lt;/li&gt;&lt;/ol&gt;I suppose the easiest way to see the advantages is with a sample.  Imagine you want to store some settings for a program. &lt;pre class="prettyprint"&gt;&lt;a id="Quick_Example"&gt;&lt;/a&gt;&lt;blockquote&gt;&lt;a id="Quick_Example"&gt;message Settings {&lt;/a&gt;&lt;a id="Quick_Example"&gt;&lt;br /&gt; optional bool auto_backup = 1 [default=false];&lt;br /&gt;&lt;/a&gt;  optional int32 backup_frequency_sec = 2 [default=30];&lt;br /&gt; optional string backup_fname = 3 [default="auto.sav"];&lt;br /&gt;}&lt;/blockquote&gt;&lt;/pre&gt;By having everything optional and with defaults, even if the settings file is zero bytes long (or  doesn't exist) that's still a valid protobuf file and you can create a protobuffer instance that will have the correct defaults.  If I add a new optional field to Settings (say backup_directory) old programs that don't understand this field will just skip them.  Also, new programs that do know about backup_directory can still read old protobuf files.&lt;br /&gt;Another nice feature is that only the numeric tags are important, you can pretty much freely rename a field and not cause too many problems except a rebuild.&lt;br /&gt;How the &lt;a href="http://code.google.com/apis/protocolbuffers/docs/encoding.html"&gt;protobuf is stored&lt;/a&gt; in binary is also very interesting.  I had a similar problem way back when I worked for Andyne and needed to store lots of data. They have a nice way of storing varints, but I think they could have tried harder for floats and doubles.&lt;br /&gt;Overall, using protobuffers is far smaller and faster than using, say, XML.  I'm glad that I can now use it in my own open source programs instead of XML or &lt;a href="http://www.yaml.org/"&gt;Yaml&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-822691975645211353?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/822691975645211353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=822691975645211353' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/822691975645211353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/822691975645211353'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/07/google-opensources-protocol-buffers.html' title='Google OpenSources Protocol Buffers'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-6196136175665835626</id><published>2008-06-20T11:39:00.002-03:00</published><updated>2008-06-20T12:02:09.265-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='electronics'/><category scheme='http://www.blogger.com/atom/ns#' term='ideas'/><category scheme='http://www.blogger.com/atom/ns#' term='Arduino'/><title type='text'>More Arduino Ideas</title><content type='html'>More ideas on what to make:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Make a bark stopper, like &lt;a href="http://www.amazon.com/exec/obidos/ASIN/B00063KNVM?tag=softwareforusers"&gt;this one&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Make a &lt;a href="http://ca.youtube.com/watch?v=fsDW81rkihY"&gt;tennis&lt;/a&gt; &lt;a href="http://ca.youtube.com/watch?v=LBxUjBUdQ5o"&gt;ball&lt;/a&gt; &lt;a href="http://www.amazon.com/exec/obidos/ASIN/B00013N97M?tag=softwareforusers"&gt;shooter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Make a &lt;a href="http://www.amazon.com/exec/obidos/ASIN/B0006JN7FA?tag=softwareforusers"&gt;binary clock&lt;/a&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/8709811-6196136175665835626?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/6196136175665835626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=6196136175665835626' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/6196136175665835626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/6196136175665835626'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/06/more-arduino-ideas.html' title='More Arduino Ideas'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-2539617413666471956</id><published>2008-06-16T19:32:00.005-03:00</published><updated>2008-06-18T12:09:01.760-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Arduino'/><title type='text'>Arduino Ideas</title><content type='html'>I've been wanting to play with electronics, for years.  Somewhat spur of the moment I decided to purchase a bunch of stuff in order to do that. I've been collecting old junk (dead printers etc.) and now is my chance to to use all that.&lt;br /&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/en/thumb/1/17/Arduino_Diecimila.jpg/250px-Arduino_Diecimila.jpg" alt="Arduino" /&gt;&lt;br /&gt;Here are some of the project ideas I've collected:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;First this is probably &lt;a href="http://www.arduino.cc/en/Tutorial/BlinkingLED"&gt;Hello world&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Make an egg timer.&lt;/li&gt;&lt;li&gt;Make &lt;a href="http://code.google.com/p/ardrumo/"&gt;adrumo&lt;/a&gt; drum pad.&lt;/li&gt;&lt;li&gt;Have arduino play some drums, like &lt;a href="http://blog.makezine.com/archive/2008/06/robot_rock_group_practice.html?CMP=OTC-0D6B48984890"&gt;in this robot band&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Make a custom stoplight for when the build breaks.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Datalog something (light, &lt;a href="http://ragingreality.blogspot.com/2008/01/ardunio-and-sht15.html"&gt;temperature, humidity&lt;/a&gt;, footswitch).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Log the height of water in the water storage bin at the farm.&lt;/li&gt;&lt;li&gt;Make a &lt;a href="http://www.coded.be/en/node/39"&gt;simple two wheeled robot&lt;/a&gt; that can be controlled from the computer.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Make a simple intercom.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Make a 2d table that draws or cuts something (&lt;a href="http://members.shaw.ca/swstuff/dspic-servo.html"&gt;CNC machine&lt;/a&gt;).&lt;/li&gt;&lt;li&gt;Make a tiny &lt;a href="http://blog.makezine.com/archive/2008/06/create_your_own_tiny_flic.html?CMP=OTC-0D6B48984890"&gt;Flickr frame&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;A &lt;a href="http://www.youtube.com/watch?v=MN4aTP_VqiQ"&gt;Cylon&lt;/a&gt; or knight rider effect&lt;/li&gt;&lt;li&gt;Persistance of Vision &lt;a href="http://carlitoscontraptions.blogspot.com/2007/08/arduino-pov-prototype.html"&gt;POV&lt;/a&gt; either hand-held or &lt;a href="http://www.bricogeek.com/index/cat/7/nid/913/"&gt;spinning&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Take a &lt;a href="http://www.glacialwanderer.com/hobbyrobotics/?p=11"&gt;photo&lt;/a&gt; based on motion in-front of the camera,  may have to hack an old digital camera.&lt;/li&gt;&lt;li&gt;Take a photo of a &lt;a href="http://www.glacialwanderer.com/hobbyrobotics/?cat=9"&gt;lightning flash&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Make a two &lt;a href="http://blog.makezine.com/archive/2007/12/botka_balancing_robot.html"&gt;wheeled standing robot&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Make an electronic &lt;a href="http://www.66pacific.com/ph/simplest_ph.aspx"&gt;PH probe&lt;/a&gt; (although just the probe costs $50.00).&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/8709811-2539617413666471956?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/2539617413666471956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=2539617413666471956' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/2539617413666471956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/2539617413666471956'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/06/arduino-ideas.html' title='Arduino Ideas'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-5070181973334911025</id><published>2008-06-13T10:00:00.005-03:00</published><updated>2008-06-13T14:40:06.302-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='electronics'/><category scheme='http://www.blogger.com/atom/ns#' term='Arduino'/><title type='text'>Bought some Microcontrollers</title><content type='html'>&lt;img src="http://upload.wikimedia.org/wikipedia/en/thumb/1/17/Arduino_Diecimila.jpg/800px-Arduino_Diecimila.jpg" alt="Arduino USB diecimila" /&gt;&lt;br /&gt;For years I've been toying with the idea of playing more with electronics, specifically with microcontrollers, to build things like robots.   I figure it's the perfect blend of my strengths (programming) with something different for me (electronics).  In the past they were pretty expensive and underpowered, but thanks to &lt;a href="http://en.wikipedia.org/wiki/Moore%27s_law"&gt;Moore's Law&lt;/a&gt; they can be had for pretty cheap and they can do a lot in one tiny package.&lt;br /&gt;I've ordered two Arduino Diecimila USB devices from &lt;a href="http://www.sparkfun.com/"&gt;SparkFun&lt;/a&gt;.  These things come with the &lt;a href="http://en.wikipedia.org/wiki/Atmel_AVR"&gt;Atmel AVR&lt;/a&gt; ATmega168 with 16K RAM and runs at about &lt;a href="http://en.wikipedia.org/wiki/Instructions_per_second"&gt;1 MIPS&lt;/a&gt; which, in comparison, is about the same speed as my first computer, the &lt;a href="http://en.wikipedia.org/wiki/Atari_ST"&gt;Atari 1040ST&lt;/a&gt;.    Each of these cost $35.00 assembled (the chip itself is $5.00) and can be run off of a 9 volt battery.&lt;br /&gt;When I looked at these things in the past the most popular ones for hobbyists ran BASIC which I though was stupid &lt;a href="http://todbot.com/blog/2006/09/25/arduino-the-basic-stamp-killer/"&gt;and expensive&lt;/a&gt; ($125 vs $35).  As a programmer I'd much rather program in C or maybe &lt;a href="http://en.wikipedia.org/wiki/Forth_%28programming_language%29"&gt;Forth&lt;/a&gt;, besides, programming isn't the issue for me, it's the electronics.&lt;br /&gt;&lt;img src="http://www.sparkfun.com/commerce/images/ArduinaXbee-02-M.jpg" alt="XBee Shield" /&gt;&lt;br /&gt;The real deal is doing everything wirelessly, that's why I also bought two XBee 'shields' for the Arduino.  These things are little more expensive at &lt;a href="http://www.sparkfun.com/commerce/product_info.php?products_id=8471"&gt;$80.00&lt;/a&gt; each but could be made cheaper if I had the guts to do some soldering (&lt;a href="http://www.nkcelectronics.com/freeduino-arduino-xbee-shield-kit.html"&gt;$12.00&lt;/a&gt; + &lt;a href="http://www.nkcelectronics.com/xbee-24ghz-1mw-chip-antenna-mod241.html"&gt;$24.00&lt;/a&gt; = $36.00).  They have about the same range as WiFi but are about 200x more efficient.  They also work in self healing &lt;a href="http://en.wikipedia.org/wiki/Mesh_networking"&gt;mesh network&lt;/a&gt;, which I'm a big fan of (&lt;a href="http://en.wikipedia.org/wiki/XO-1_%28laptop%29"&gt;OLPC&lt;/a&gt;). My plan (at some point in the far future) is to have one Xbee (connected to a computer) controlling another XBee on a &lt;a href="http://www.geology.smu.edu/%7Edpa-www/robo/nbot/"&gt;wheeled robot&lt;/a&gt; platform.   I also thought of using Bluetooth but it's more &lt;a href="http://www.sparkfun.com/commerce/product_info.php?products_id=8255"&gt;expensive&lt;/a&gt;, has less range and uses more power.&lt;br /&gt;&lt;table class="basicTable" border="0" cellpadding="0" cellspacing="0"&gt;   &lt;tbody&gt;&lt;tr&gt;      &lt;th align="center"&gt;Standard&lt;/th&gt;     &lt;th align="center"&gt;ZigBee®&lt;br /&gt;    &lt;span class="two"&gt;802.15.4&lt;/span&gt;&lt;/th&gt;     &lt;th align="center"&gt;Wi-Fi™&lt;br /&gt;    &lt;span class="two"&gt;802.11b&lt;/span&gt;&lt;/th&gt;     &lt;th align="center"&gt;Bluetooth™&lt;br /&gt;     &lt;span class="two"&gt;802.15.1&lt;/span&gt;&lt;/th&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;     &lt;th&gt;&lt;p&gt;Transmission Range (meters)&lt;/p&gt;     &lt;/th&gt;&lt;td&gt; &lt;div align="center"&gt;1 – 100*&lt;/div&gt;&lt;/td&gt;     &lt;td&gt; &lt;div align="center"&gt;1 - 100&lt;/div&gt;&lt;/td&gt;      &lt;td&gt; &lt;div align="center"&gt;1 – 10&lt;/div&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;th&gt;&lt;p&gt;Battery Life (days)&lt;/p&gt;     &lt;/th&gt;&lt;td&gt;&lt;div align="center"&gt;100 – 1,000&lt;/div&gt;&lt;/td&gt;     &lt;td&gt;&lt;div align="center"&gt;0.5 – 5.0&lt;/div&gt;&lt;/td&gt;      &lt;td&gt;&lt;div align="center"&gt;1 - 7&lt;/div&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;th&gt;&lt;p&gt;Network Size (# of nodes) &lt;/p&gt;     &lt;/th&gt;&lt;td&gt;&lt;div align="center"&gt;&gt; 64,000&lt;/div&gt;&lt;/td&gt;     &lt;td&gt;&lt;div align="center"&gt;32&lt;/div&gt;&lt;/td&gt;      &lt;td&gt;&lt;div align="center"&gt;7&lt;/div&gt;&lt;/td&gt;   &lt;/tr&gt;         &lt;tr&gt;     &lt;th&gt;&lt;p&gt;Throughput kb/s)&lt;/p&gt;     &lt;/th&gt;&lt;td&gt;&lt;div align="center"&gt;20 – 250&lt;/div&gt;&lt;/td&gt;     &lt;td&gt;&lt;div align="center"&gt;11,000&lt;/div&gt;&lt;/td&gt;     &lt;td&gt;&lt;div align="center"&gt;720&lt;/div&gt;&lt;/td&gt;   &lt;/tr&gt;  &lt;/tbody&gt;&lt;/table&gt; * ZigBee-Pro can do 2-3x further.&lt;br /&gt;&lt;br /&gt;I also went ahead a purchased the LogoMatic &lt;a href="http://www.sparkfun.com/commerce/product_info.php?products_id=752"&gt;data logger&lt;/a&gt;.  I'm not sure how I'll use it but I do have some old SD chips lying around that I'd like to use for something.&lt;br /&gt;Today I was going through my Amazon wish list and realized that I won't be needing this:&lt;br /&gt;&lt;a href="http://www.amazon.com/exec/obidos/ASIN/B00066N5V4?tag=softwareforusers"&gt;&lt;img src="http://ecx.images-amazon.com/images/I/41N3Y3NXMZL._SL110_.jpg" alt="Digital Drum" /&gt;&lt;/a&gt; anymore since I &lt;a href="http://todbot.com/blog/2006/10/29/spooky-arduino-projects-4-and-musical-arduino/"&gt;can now make my own&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-5070181973334911025?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/5070181973334911025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=5070181973334911025' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/5070181973334911025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/5070181973334911025'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/06/bought-some-microcontrollers.html' title='Bought some Microcontrollers'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-6119839481132090294</id><published>2008-06-13T08:58:00.002-03:00</published><updated>2008-06-13T09:10:29.828-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='photography'/><title type='text'>Playing with long exposures at night</title><content type='html'>&lt;a href="http://www.flickr.com/photos/scott_kirkwood/2574619355/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3092/2574619355_34034d151c_m.jpg" alt="" style="border: 2px solid rgb(0, 0, 0);" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="margin-top: 0px;font-size:0;" &gt;&lt;a href="http://www.flickr.com/photos/scott_kirkwood/2574619355/"&gt;img_0047.jpg&lt;/a&gt; &lt;a href="http://www.flickr.com/people/scott_kirkwood/"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/span&gt; &lt;p&gt;Today was Valantines day (Dias dos Namorados). I painted this with a laser pointer and a 10 second exposure.&lt;/p&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/scott_kirkwood/2574646195/" title="img_0050.jpg by scott_kirkwood, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3170/2574646195_b213537e4a.jpg" alt="img_0050.jpg" width="500" height="375" /&gt;&lt;/a&gt;&lt;br /&gt;Victor's a ghost! &lt;br /&gt;This was another attempt, I had to do this indoors because the building next door has too much light.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-6119839481132090294?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/6119839481132090294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=6119839481132090294' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/6119839481132090294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/6119839481132090294'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/06/playing-with-long-exposures-at-night.html' title='Playing with long exposures at night'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3092/2574619355_34034d151c_t.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-6183089695637504110</id><published>2008-06-09T11:07:00.002-03:00</published><updated>2008-06-09T11:13:53.306-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='victor'/><category scheme='http://www.blogger.com/atom/ns#' term='photography'/><title type='text'>Quadruplets</title><content type='html'>This came out nicely and was pretty easy to do, thanks &lt;a href="http://meetthegimp.org/episode-044-splitting-myself/"&gt;Meet the Gimp&lt;/a&gt;.&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/scott_kirkwood/2558037973/" title="Quadruplets? by scott_kirkwood, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3024/2558037973_b3cd735ed3.jpg" alt="Quadruplets?" height="382" width="500" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-6183089695637504110?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/6183089695637504110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=6183089695637504110' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/6183089695637504110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/6183089695637504110'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/06/quadruplets.html' title='Quadruplets'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3024/2558037973_b3cd735ed3_t.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-5353957259528134944</id><published>2008-06-06T10:47:00.004-03:00</published><updated>2008-06-06T15:48:12.287-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='podcast'/><title type='text'>Two Great Podcasts</title><content type='html'>I've been watching two great &lt;a href="http://en.wikipedia.org/wiki/Podcast"&gt;podcasts&lt;/a&gt; (or technically &lt;a href="http://en.wikipedia.org/wiki/Video_podcast"&gt;vodcasts&lt;/a&gt;) about two programs I'd like to use more often, &lt;a href="http://en.wikipedia.org/wiki/GIMP"&gt;Gimp&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Inkscape"&gt;Inkscape&lt;/a&gt;.&lt;br /&gt;I've been watching these with &lt;a href="http://www.getmiro.com/"&gt;Miro&lt;/a&gt; which is a useful tool to &lt;a href="https://miroguide.com/"&gt;get&lt;/a&gt; and watch podcasts.  &lt;span style="font-style: italic;"&gt;Miro&lt;/span&gt; used to be called &lt;span style="font-style: italic;"&gt;Democracy&lt;/span&gt; and used to crash all the time in Linux, but this version is much more stable.  My only complaint is that you can't multi-task: watch videos while browsing other content from within Miro.&lt;br /&gt;&lt;br /&gt;One podcast I've been watching for a while is called &lt;a href="http://meetthegimp.org/"&gt;Meet the Gimp&lt;/a&gt;. Ever since I've started watching this podcast I've been enthusiastic about cleaning up and improving my own digital photographs.  Now I know how to efficiently cleanup my photos and I go and do it much more often.&lt;br /&gt;For example &lt;a href="http://meetthegimp.org/episode-042-dont-panic/"&gt;Episode 42&lt;/a&gt; shows how to to quickly improved the color of a photo that looked rather dull and also how to use the healing tool to remove some birds that are just in the way.&lt;br /&gt;Or &lt;a href="http://meetthegimp.org/episode-046-getting-rid-of-people/"&gt;Episode 46&lt;/a&gt; which uses two photographs (both taken without a tripod) align them up and then uses the mask to remove cars and a person down to their sneakers.&lt;br /&gt;&lt;img src="http://meetthegimp.org/wp-content/uploads/2008/05/einfus.jpg" alt="Meet the Gimp" /&gt;&lt;br /&gt;&lt;br /&gt;The other podcast I found recently is called &lt;a href="http://screencasters.heathenx.org/"&gt;screencasters.heathenx.org&lt;/a&gt; and gives tutorials on how to use the vector drawing tool Inkscape, it's just fantastic.&lt;br /&gt;For example, &lt;a href="http://screencasters.heathenx.org/episode-050/"&gt;Episode 50&lt;/a&gt; shows how to make an attractive button with a very nice 3d look with reflection and a sparkle effect.&lt;br /&gt;&lt;a href="http://screencasters.heathenx.org/episode-058/"&gt;Episode 58&lt;/a&gt; was even more interesting showing the new Filter Effects in Inkscape.  I didn't know this existed, and it looks &lt;span style="font-style: italic;"&gt;very&lt;/span&gt; useful.&lt;br /&gt;&lt;a href="http://screencasters.heathenx.org/episode-061"&gt;Episode 61&lt;/a&gt; he drew a garbage can and make it look 3d.&lt;br /&gt;And in &lt;a href="http://screencasters.heathenx.org/episode-047/"&gt;Episode 47&lt;/a&gt; shows how to make this rather nice clock using the clone tool.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_UJUFZU670Yc/SEmDjMTbwpI/AAAAAAAAAKM/kvMlds8CkYo/s1600-h/clock.png"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_UJUFZU670Yc/SEmDjMTbwpI/AAAAAAAAAKM/kvMlds8CkYo/s400/clock.png" alt="" id="BLOGGER_PHOTO_ID_5208839084652085906" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-5353957259528134944?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/5353957259528134944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=5353957259528134944' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/5353957259528134944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/5353957259528134944'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/06/two-great-podcasts.html' title='Two Great Podcasts'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_UJUFZU670Yc/SEmDjMTbwpI/AAAAAAAAAKM/kvMlds8CkYo/s72-c/clock.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-1306555609348169925</id><published>2008-06-03T10:14:00.003-03:00</published><updated>2008-06-03T11:15:22.533-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='aquarium'/><title type='text'>My Aquarium</title><content type='html'>When we built the home-office I decided that I also wanted to have a built in aquarium.  I set it up so that it's visible from both our bedroom and from within the home office:&lt;br /&gt;&lt;img src="http://farm1.static.flickr.com/70/198894902_f0230135f9_m.jpg" alt="Aquarium from the outside" /&gt;&lt;br /&gt;I knew this was a little risky. Most aquariums are up against a wall and you can only see in from once side. Being able to see from both sides makes it a little more difficult to setup the plants and rocks so that it looks nice from both sides.&lt;br /&gt;Also, the aquarium gets twice as much light and has the risk of becoming green with algae. This normally doesn't happen very often, but it appears that this time of year it does:&lt;br /&gt;&lt;img src="http://farm4.static.flickr.com/3090/2546849218_81be26e8e0.jpg" alt="Aquarium water is green" /&gt;&lt;br /&gt;&lt;br /&gt;My aquarium is filled with &lt;a href="http://en.wikipedia.org/wiki/Cichlid"&gt;Cichlid&lt;/a&gt; type fish which are quite hardy and long lived and more intelligent as well.  I didn't want a salt water aquarium, which would have been prettier, but much more expensive to setup and buy all the fish.  I bought a large 95 gallons (360 liters) which can allow the fish to grow quite large.&lt;br /&gt;My second risky decision was to have a planted aquarium.  Normally aquariums are full of plastic plants, I wanted real plants. It meant getting a CO&lt;sup&gt;2&lt;/sup&gt; tank to promote the health of the plants and buying expensive (about $50.00 each) lamps to provide artificial ultraviolet light.  You also need to buy a special substrate (dirt) for the plants to grow in. To do the CO&lt;sup&gt;2&lt;/sup&gt; properly you also need a bubble counter and a diffuser.  Because I now have Discus Cichlids which are more sensitive to PH changes I've also put in a solenoid on a timer which turns on the bubble only during the day, when the plants will take it up.&lt;br /&gt;&lt;img src="http://farm4.static.flickr.com/3028/2546850724_4853c4647f.jpg" alt="My setup" /&gt;&lt;br /&gt;So here's my final setup. I have a good canister filter (&lt;a href="http://www.amazon.com/Eheim-Canister-Filter-Classic-Plus/dp/B0002AQXVI"&gt;&lt;span&gt;EHEIM 2217&lt;/span&gt;&lt;/a&gt;) on the left, a CO&lt;sup&gt;2&lt;/sup&gt; tank (silver colored).  The brass thing connected to the the wall is the solenoid which turns the CO&lt;sup&gt;2 &lt;/sup&gt;on and off.&lt;br /&gt;Below that also attached to the wall, in red and black is my latest purchase, an ultra-violet (UV) sterilizer which should get rid of my algae problem. It uses only 8 watts so my electrical bill should go up noticeably.  Also, this time of year, it gets a little cold at night (maybe 15° Celsius) so I ended up buying two heaters since one didn't seem to cut it.&lt;br /&gt;Having an aquarium you can see on both sides is great, it looks nice at night and the fish recognize me even when I'm in the bedroom!  You just need to realize that you'll have to buy a lot of equipment so that the fish stay healthy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-1306555609348169925?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/1306555609348169925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=1306555609348169925' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/1306555609348169925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/1306555609348169925'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/06/my-aquarium.html' title='My Aquarium'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/70/198894902_f0230135f9_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-458484094855242883</id><published>2008-05-19T21:13:00.002-03:00</published><updated>2008-05-19T22:57:02.650-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='photography'/><category scheme='http://www.blogger.com/atom/ns#' term='funny'/><title type='text'>Digital Photography with Flash No-Flash Image Pairs</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://research.microsoft.com/projects/FlashNoFlash/title.jpg"&gt;&lt;img style="cursor: pointer; width: 320px;" src="http://research.microsoft.com/projects/FlashNoFlash/title.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;In the spirit of &lt;a href="http://en.wikipedia.org/wiki/High_dynamic_range_imaging"&gt;High Dynamic Range Imaging&lt;/a&gt; here's paper on how to improve digital photographs by taking two shots,  &lt;a href="http://research.microsoft.com/projects/FlashNoFlash/"&gt;one with flash and one without&lt;/a&gt;.&lt;br /&gt;Just like there are lots of &lt;a href="http://qtpfsgui.sourceforge.net/screenshots.php"&gt;good tools&lt;/a&gt; for HDR imaging, I suspect there will be tools for flash/no-flash.&lt;br /&gt;&lt;br /&gt;Of course there's always:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.funnychill.com/files/funny-pictures/with-and-without-flash.jpg"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://www.funnychill.com/files/funny-pictures/with-and-without-flash.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-458484094855242883?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/458484094855242883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=458484094855242883' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/458484094855242883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/458484094855242883'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/05/digital-photography-with-flash-no-flash.html' title='Digital Photography with Flash No-Flash Image Pairs'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-1896338597134839748</id><published>2008-04-27T22:41:00.002-03:00</published><updated>2008-04-27T22:48:50.972-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Unison Bash Completion</title><content type='html'>If you don't use &lt;a href="http://www.cis.upenn.edu/%7Ebcpierce/unison/"&gt;unison&lt;/a&gt; to keep folders synchronized you really should, it's great. It's like a two way &lt;a href="http://en.wikipedia.org/wiki/Rsync"&gt;rsync&lt;/a&gt; program.&lt;br /&gt;Problem is I end up synchronizing a bunchy of folders in different locations for different projects and I prefer to start unison at the command-line.  What I want is &lt;a href="http://www.debian-administration.org/articles/317"&gt;bash completion&lt;/a&gt; for unison.  It's not that difficult to setup.&lt;br /&gt;I just created a file in /etc/bash_completion.d called "unison" and it looks like this:&lt;br /&gt;&lt;blockquote&gt;_unison()&lt;br /&gt;{&lt;br /&gt;    local cur prev opts&lt;br /&gt;    COMPREPLY=()&lt;br /&gt;    cur="${COMP_WORDS[COMP_CWORD]}"&lt;br /&gt;    opts=$(python -c 'import glob,os,os.path;x = glob.glob(os.path.expanduser("~/.unison/*.prf")); print " ".join([os.path.split(y)[-1][:-4] for y in x])')&lt;br /&gt;&lt;br /&gt;    COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )&lt;br /&gt;    return 0                                 &lt;br /&gt;}&lt;br /&gt;complete -F _unison unison-gtk&lt;br /&gt;&lt;/blockquote&gt;The python part is all one line and it goes to my ~/.unison folder, lists all the *.prf files and then just gets the base names.  I suppose most people would use awk, but my awk is a little rusty.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-1896338597134839748?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/1896338597134839748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=1896338597134839748' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/1896338597134839748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/1896338597134839748'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/04/unison-bash-completion.html' title='Unison Bash Completion'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-68134782464225392</id><published>2008-04-26T10:44:00.007-03:00</published><updated>2008-04-26T11:20:11.091-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Upgrade to Hardy Heron (Ubuntu 8.04)</title><content type='html'>This Monday was a holiday here so I thought it might be a good time to upgrade my Linux, a couple of days before the official release.  It took a long time to download all the updates, but it seemed to get everything and then started the installation process.  I went inside to finish the last few episodes of Lost, I finally watched all 4 seasons of after beginning about a month ago.  I have to say that the 4th season is a letdown so far. I mean seriously, you need to have an emotional "constant" for  time travel? That really made me cringe, the writers need to stay as far away from math as possible.&lt;br /&gt;When I came back to the computer to see how it was going I was at 1% and got an error already. I spent the rest of the night clicking "OK" buttons because it kept finding problems with the install.  After a hundred of these it gave up and it quit the upgrade.   But by that time,  I had already started noticing that things had stopped working, like Gnome Nautilus, ugh.&lt;br /&gt;So with some trepidation I rebooted the machine.  I came back to a bash prompt and I was relieved!  I realize, however, that any neophyte Linux user would have been terrified, but I was at home, I can work with this, the normal Linux commands were all there and my disk was fine.&lt;br /&gt;I tried "&lt;code&gt;sudo aptitude upgrade&lt;/code&gt;" and it had a lot of failures and suggested using "&lt;code&gt;dpkg --configure -a&lt;/code&gt;"  I tried that and also got a lot of errors.&lt;br /&gt;Error messages are good, they point to something.  In this case I saw that there were a lot of errors with OpenOffice.  So I "sudo aptitude remove openoffice" and I gave a huge list of things it would also have to remove, I was getting somewhere!  It removed openoffice successfully, I had also noticed some errors with &lt;code&gt;timidity&lt;/code&gt; and &lt;code&gt;solfege&lt;/code&gt;, so I removed them as well.  More success.&lt;br /&gt;Finally, I ran "&lt;code&gt;sudo --configure -a&lt;/code&gt;" and it updated everything correctly and a reboot brought me back to gnome.&lt;br /&gt;&lt;br /&gt;Except that it couldn't figure out my video settings and I was 800x600 pixel mode on only one monitor.  This is better than things used to used to be say two versions ago with Ubuntu, before I would have been at the bash prompt again.   I tried  installing, one after another, the three versions of nvidia (nvidia-glx-new, nvidia-glx, and nvidia-glx-legacy) and none of them worked.  I went to my normal saviour Alberto Milone's "&lt;a href="http://www.albertomilone.com/nvidia_scripts1.html"&gt;Envy&lt;/a&gt;" and it wouldn't run under this version of Ubuntu.  I looked at the site and, he has a new version called "Envy NG".  I was a little nervous that the new version would not support my older video card, but a quick "&lt;code&gt;sudo aptitude remove envy &amp;amp; sudo aptitude install envyng-gtk&lt;/code&gt;" and I gave it a go.&lt;br /&gt;Envy saved the day again, worked flawlessly and my dual monitor setup was exactly the way it was before.&lt;br /&gt;O happy times, now compiz also works like a champ and I'm back to work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-68134782464225392?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/68134782464225392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=68134782464225392' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/68134782464225392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/68134782464225392'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/04/upgrade-to-hardy-heron-ubuntu-804.html' title='Upgrade to Hardy Heron (Ubuntu 8.04)'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-5788821129154960899</id><published>2008-03-12T23:05:00.006-03:00</published><updated>2008-10-09T20:38:15.561-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='insightful'/><category scheme='http://www.blogger.com/atom/ns#' term='evolution'/><title type='text'>Other forms of evolution</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Evolution of Conditioner Bottles&lt;/span&gt;&lt;br /&gt;It's happened to me more than once that I got home from shopping and I picked up a bottle of conditioner instead of a bottle of shampoo. Conditioner bottles have evolved to look more like shampoo bottles, and get taken instead.  I'm sure some time in the past, some designer created these two bottles of shampoo and conditioner because they looked nice together on the shelf.  All of a sudden the sales people noticed a large increase in the sales of their conditioner.  Bottle designs that confuse the consumer ended up selling more.  These designs end up having more stickiness, until the entire population of conditioner bottles is like their shampoo brethren.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Evolution of  Microwave Ovens  Consoles&lt;/span&gt;&lt;br /&gt;I remember when we got our first digital microwave oven from Panasonic.  To start it up you had to press the "power" button 4 times to get "high", then press the minutes and second buttons, and finally start.&lt;br /&gt;I look at microwaves now and they just assume "high", if you want something lower you have to press a power button before.  Now when you press the minutes or seconds it goes ahead and starts the microwave at the same time - no need for the silly "start" button.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Evolution of  Supermarket Food&lt;br /&gt;&lt;/span&gt;Michael Pollen's &lt;a href="http://www.amazon.com/exec/obidos/ASIN/1594201455?tag=softwareforusers"&gt;book&lt;/a&gt; describes how supermarket foods have evolved to select foods that, in the end, makes us buy more food. These foods are mostly empty calories with a high &lt;a href="http://en.wikipedia.org/wiki/Glycemic_index"&gt;glycemic index&lt;/a&gt; which makes us hungry for more of the same.&lt;br /&gt;&lt;span style="font-weight: bold;"&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/8709811-5788821129154960899?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/5788821129154960899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=5788821129154960899' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/5788821129154960899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/5788821129154960899'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/03/other-forms-of-evolution.html' title='Other forms of evolution'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-7173626473140487006</id><published>2008-03-10T11:26:00.003-03:00</published><updated>2008-03-13T17:24:48.749-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='myth'/><title type='text'>Home Theater PC</title><content type='html'>This Friday I bought a new PC to be used as my Linux Home Theater PC (HTPC).&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ATX 480W&lt;/li&gt;&lt;li&gt;Slim HTPC cabinet&lt;br /&gt;&lt;/li&gt;&lt;li&gt;VGA 512 GFORCE 8500GT, PCI &lt;/li&gt;&lt;li&gt;CPU Intel Core 2 DUO E6750&lt;/li&gt;&lt;li&gt;DDR2 1GB 667 Kingston&lt;/li&gt;&lt;li&gt;DVD/CD DL Samsung&lt;/li&gt;&lt;li&gt;Gigabyte GA-P35K - LGA 775&lt;/li&gt;&lt;li&gt;SATA 500 Gig HD (Western Digital)&lt;/li&gt;&lt;li&gt;Gyration Wireless &lt;a href="http://www.gyration.com/p-66-go-24-optical-air-mouse-and-compact-keyboard-suite.aspx"&gt;3d Mouse and Keyboard&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;I tried using the beta of Linux MCE, but it didn't work at all (video problems).  I used an older version of &lt;a href="http://www.linuxmce.org/"&gt;Linux MCE&lt;/a&gt; and got it working a bit.  But I didn't like the fact that it picked it's own name for my machine and user name.  I gave up on that and am now using the 8.04 alpha (yes alpha, I never learn) of &lt;a href="http://www.mythbuntu.org/"&gt;Mythbuntu&lt;/a&gt;.&lt;br /&gt;Mythbuntu worked reasonably well out of the box except a lot of the configuration screens didn't fit my 480P.  The OK or Next button would be off screen and I couldn't figure out how to move the window up so I could see it (Alt+Drag with the mouse is the trick).&lt;br /&gt;Other problems I had was that Myth defaults to hiding your mouse cursor so you can't see were you're clicking (there's an option to turn that off). &lt;br /&gt;I realize now that Linux MCE works well with a 3d mouse, but Myth works expects a remote. So I have to use the wireless keyboard for now until I figure out how to better configure Myth to be like Linux MCE.&lt;br /&gt;I'm pretty sure I'm going to need another 8 hours of playing around to get it working the way I want.  After that I'm going to hire an electrician to pass the relevant wires up and down so that it all looks nicely organized.&lt;br /&gt;The computer needs to be a little more silent, I may have to buy another, more expensive, power supply since that's the loudest thing in the computer at the moment. Also playing with the various settings for controlling the fans should help a bit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-7173626473140487006?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/7173626473140487006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=7173626473140487006' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/7173626473140487006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/7173626473140487006'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/03/home-theater-pc.html' title='Home Theater PC'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-6195000333284461833</id><published>2008-01-30T19:13:00.000-02:00</published><updated>2008-02-05T20:37:09.778-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='notes'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Bash notes</title><content type='html'>As a regular linux user I have some hints and tips how to setup &lt;a href="http://www.gnu.org/software/bash/manual/bashref.html#What-is-Bash_003f"&gt;bash&lt;/a&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Create a ~/.bash_aliases file and store all your aliases and functions there. You'll need to source the file in ~/.bashrc, see below.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;For common directories you visit create an alias that cd's to that folder starting with _.  Using the underscore is short and sweet and doesn't pollute your namespace as much. Here are two examples (the latter also changes the window title):&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;alias _mydir='cd /home/scott/my/dir'&lt;br /&gt;alias _other='cd /home/scott/src/projects/other;echo -ne "\033]2;Other Project\007"'&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;Use these cd aliases:&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;alias ..='cd ..'&lt;br /&gt;alias ...='cd ../..'&lt;br /&gt;alias ....='cd ../../..'&lt;br /&gt;alias .....='cd ../../../..'&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;Use these ls aliases. (h is for "human" file sizes, F is for adding a trailing / for directories)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;alias ls='ls -hF --color=auto'&lt;br /&gt;alias ll='ls -lhF --color=auto'&lt;br /&gt;alias la='ls -AF --color=auto'&lt;br /&gt;alias lrt='ls -lrthF'&lt;br /&gt;function ld {&lt;br /&gt; ls -l $* | grep ^d;&lt;br /&gt;}&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;Add common misspellings as you come across them:&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;alias gerp='grep'&lt;br /&gt;alias chgpr='chgrp'&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;Put in commands that you only need once in a while and you often forget.  Give it a really long name so there's no collision and just type "alias" to find them again. Here are two examples:&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;alias who-has-my-sound='lsof | egrep "dsp|snd"'&lt;br /&gt;alias my-programs-plus-params='ps -U $USER -fwww | cut -b 49- | grep -v "ps -U"'&lt;br /&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;I use the newer gvim with tabs but you have to remember pass the -p parameter, ugh:&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;alias gvim='gvim -geometry 110x60 -p'&lt;blockquote&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;Make a directory and cd to it in one step (thanks &lt;a href="http://www.blogger.com/profile/16841552998172483605"&gt;kpd&lt;/a&gt; for the suggestion):&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;function mkd() {&lt;br /&gt;  mkdir $1&lt;br /&gt;  cd $1&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;For ~/.bashrc here are my suggestions:&lt;br /&gt;&lt;blockquote&gt;# Add bash completion&lt;br /&gt;BASH_COMPLETEION="${BASH_COMPLETION:-/etc/bash_completion}"&lt;br /&gt;# My aliases (lots)&lt;br /&gt;if [ -f ~/.bash_aliases ]; then&lt;br /&gt;. ~/.bash_aliases&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;# Have a huge history&lt;br /&gt;export HISTSIZE=50000&lt;br /&gt;export HISTCONTROL=ignoredups&lt;br /&gt;shopt -s histappend&lt;br /&gt;&lt;br /&gt;# Turn off any buzzing or bells&lt;br /&gt;setterm -blength 0&lt;br /&gt;&lt;br /&gt;# Allow Ctrl-S to work as forward search by disabling XON/XOFF (^S/^Q)&lt;br /&gt;stty -ixon&lt;br /&gt;&lt;/blockquote&gt;This list is useful for me (if I ever need to setup a new machine), I hope it's useful for you as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-6195000333284461833?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/6195000333284461833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=6195000333284461833' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/6195000333284461833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/6195000333284461833'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/01/bash-notes.html' title='Bash notes'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-563879290881349877</id><published>2008-01-14T10:16:00.000-02:00</published><updated>2008-01-14T21:31:48.018-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='resolutions'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>New Year's Resolutions</title><content type='html'>My NewYear's Resolutions:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Health&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Have a regular exercise program (3 times a week, tennis or squash counts for at least 8 months).&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Continue eating healthy, but eat little less meat and dessert (hard to quantify).&lt;/li&gt;&lt;li&gt;Loose 12kg over the 12 months.&lt;/li&gt;&lt;li&gt;Go back on the &lt;a href="http://scottkirkwood.blogspot.com/2006/09/shangri-la-update.htmlhttp://scottkirkwood.blogspot.com/2006/09/shangri-la-update.html"&gt;Shangri-La&lt;/a&gt; diet for at least 3 months.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Fix/Build&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Get a new computer&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Give my old computer to Victor.&lt;/li&gt;&lt;li&gt;Get another 500 Gig of space.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Make the practice green&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;It won't be finished this year, but I plan to have the hole dug, the channels and gravel  and the first level of sand done by December.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Do something with &lt;a href="http://scottkirkwood.blogspot.com/2006/02/mame-control-panel-working.html"&gt;MAME&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;I have an old computer it may be interesting to get it working as a dedicated MAME setup, if it can handle it and maybe leave it at the farm.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Have a commercial printer print up a plasticized design that we draw up for Victor's MAME console I built.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Work on my open source programs&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;Have unit tests for all of them.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Publish/revive one of my older stuff.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Make one new project this year.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Make 6 commits on some other OSS project that isn't mine (like &lt;a href="http://haiku-os.org/"&gt;Haiku&lt;/a&gt;, and/or &lt;a href="http://wiki.laptop.org/index.php/Developers_Program"&gt;OLPC&lt;/a&gt;). Ok, the bar is pretty low on this one.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Create a home theater setup&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Setup a LinuxMCE computer with a hand-held remote control (here's a cool  &lt;a href="http://video.google.com/videoplay?docid=2176025602905109829"&gt;video&lt;/a&gt; demo, and &lt;a href="http://linux.wordpress.com/2007/05/07/video-linuxmce-vs-windows-media-center/"&gt;another&lt;/a&gt;).  I'll need to buy another computer.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Have it download and play TV shows or movies off the net.&lt;/li&gt;&lt;li&gt;Play music with visualizations from our collection.&lt;/li&gt;&lt;li&gt;Depending on the money/computer situation, have it work in one other room.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;Learn&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Take motorcycle lessons.&lt;/li&gt;&lt;li&gt;Take a month of German lessons, since I'm working on occasion with coworkers in Zurich updating my German makes more sense than updating my French.&lt;/li&gt;&lt;li&gt;Learn about the local flora and fauna (buy a book about the local trees, birds, and insects).&lt;/li&gt;&lt;li&gt;Learn a new programming language (&lt;a href="http://en.wikipedia.org/wiki/Haskell_%28programming_language%29"&gt;Haskell&lt;/a&gt;, write 10 programs).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Teach&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Buy a small boat and teach my son to sail, try and get out every 3rd weekend or so.&lt;/li&gt;&lt;li&gt;Do 4 tech talks.&lt;/li&gt;&lt;li&gt;Teach my son about the stars, he should recognize the Orion constellation reliably at least.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Teach Victor about the local trees, birds, and insects.&lt;/li&gt;&lt;li&gt;Teach Victor English (take him to English school).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Pictures&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Organize our older pictures.&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Scan some good, old (paper) pictures - say 100.&lt;/li&gt;&lt;li&gt;Go through the images that we recovered from a hard disk meltdown and organize 25% of them (a lot of work)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Take more photos (an average of 100 pictures taken per month).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Digitally enhance 5% of the kept photos (since I know &lt;a href="http://www.gimp.org/"&gt;Gimp&lt;/a&gt; better).&lt;/li&gt;&lt;li&gt;Get an digital SLR camera (like this &lt;a href="http://www.amazon.com/exec/obidos/ASIN/B000I1ZWRC?tag=softwareforusers"&gt;Cannon&lt;/a&gt;) in the second half of the year.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Music&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Take some music lessons for piano (for at least one month).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Buy a &lt;a href="http://www.amazon.com/exec/obidos/ASIN/B00066N5V4?tag=softwareforusers"&gt;digital drum kit&lt;/a&gt;, could be fun.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Listen, organize and expand my music collection (difficult to measure this one).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Art&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Draw/paint for 7 days 1 hour a day (preferably consecutively).&lt;/li&gt;&lt;li&gt;Making something artistic (something out of wood, say).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;See at least 3 shows this year.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Love&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Take Renata out to 6 romantic dinners.&lt;/li&gt;&lt;li&gt;Take Renata to 2 weekends alone (a resort with the whole family also counts).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Web&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Create two &lt;a href="http://www.google.com/help/reader/tour.html"&gt;Google Reader&lt;/a&gt; accounts, one with the minimum and another for fun, because I read too much on the web.&lt;/li&gt;&lt;li&gt;Have 52 new blog entries (i.e. average once a week).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;I think that's a pretty good list, and reasonably specific so I can score myself at the end of the year.  Not too ambitious, but there's a lot there to do.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-563879290881349877?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/563879290881349877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=563879290881349877' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/563879290881349877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/563879290881349877'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/01/new-years-resolutions.html' title='New Year&apos;s Resolutions'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-5026134009423633870</id><published>2008-01-13T20:09:00.000-02:00</published><updated>2008-01-13T21:20:25.743-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Using Gimp</title><content type='html'>I was thinking why I keep using &lt;a href="http://www.gimp.org/"&gt;GIMP&lt;/a&gt; instead of, say, Photoshop. Here are my main reasons in bullet form:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It's free and open source and I support that.&lt;/li&gt;&lt;li&gt;It uses Python as one of it's scripting languages. I've created &lt;a href="http://code.google.com/p/python-spin-number/"&gt;two&lt;/a&gt; &lt;a href="http://code.google.com/p/gimp-multi-text/"&gt;mini&lt;/a&gt; utilities using that fact.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Using &lt;a href="http://www.gimp.org/docs/python/index.html"&gt;Python-Fu&lt;/a&gt; instead of say &lt;a href="http://www.pythonware.com/products/pil/"&gt;PIL&lt;/a&gt; is that it uses the same object and object names as GIMP uses.  Learning more about Python-Fu makes me a better GIMP user since I know better how GIMP works.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Create the images using GIMP by hand I can decide later if it might be easy to script. If not, I'll just do it &lt;span style="font-style: italic;"&gt;all&lt;/span&gt; by hand.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I can install GIMP on anyone's machine in minutes, no legal hassles or possibilities of installing a virus from pirated software.&lt;/li&gt;&lt;li&gt;Once I install GIMP on a machine, I can use it immediately.  I don't have to figure out the interface of a program I'm not familiar with.&lt;/li&gt;&lt;li&gt;Some cool new features come out first for GIMP.&lt;/li&gt;&lt;li&gt;GIMP can load files directly from the web or FTP.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;GIMP has everything I need: clipping, masks, layers, and filters.  There are some nice plug-ins for making quick showy text.&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_UJUFZU670Yc/R4qX0FMGWaI/AAAAAAAAAIw/bH5jJXs3I2w/s1600-h/showy-text.png"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_UJUFZU670Yc/R4qX0FMGWaI/AAAAAAAAAIw/bH5jJXs3I2w/s400/showy-text.png" alt="" id="BLOGGER_PHOTO_ID_5155099644480870818" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I've recently been watching, and liking, the video tutorials at &lt;a href="http://meetthegimp.org/"&gt;Meet the GIMP!&lt;/a&gt;.  It's a nice way to learn some of the ins and outs of the GIMP.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-5026134009423633870?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/5026134009423633870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=5026134009423633870' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/5026134009423633870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/5026134009423633870'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/01/using-gimp.html' title='Using Gimp'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_UJUFZU670Yc/R4qX0FMGWaI/AAAAAAAAAIw/bH5jJXs3I2w/s72-c/showy-text.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-747713705141486987</id><published>2008-01-01T14:14:00.000-02:00</published><updated>2008-01-01T19:58:16.571-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='util'/><title type='text'>Downloading projecteuler.net</title><content type='html'>&lt;a href="http://projecteuler.net/"&gt;Project Euler&lt;/a&gt; is having some problems, and in any event, I wanted to download the questions that I haven't completed yet so that I could work on some problems even when I'm off the net.  I thought of use &lt;a href="http://www.httrack.com/"&gt;httrack&lt;/a&gt; which is made for this, but it doesn't seem to support passing cookies from firefox.&lt;br /&gt;Wget is the swiss army knife for things like this here's what I did:&lt;br /&gt;&lt;blockquote&gt;wget --load-cookies $COOKIE --convert-links --recursive --level=1  --restrict-file-names=windows  $SITE &lt;/blockquote&gt;Where COOKIE points to my firefox cookie file (~/.mozilla/firefox/&lt;somekey&gt;.defulat/cookies.txt)&lt;br /&gt;and SITE is the project euler site (http://projecteuler.net/index.php?section=problems)&lt;br /&gt;The parameter --convert-links will update the links so that they work offline and --level is to go only one level deep.  The restrict-file-names=windows is needed so that firefox can read files with ? or = in it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-747713705141486987?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/747713705141486987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=747713705141486987' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/747713705141486987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/747713705141486987'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2008/01/downloading-projecteulernet.html' title='Downloading projecteuler.net'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-7788379269150833274</id><published>2007-12-28T16:40:00.000-02:00</published><updated>2007-12-28T17:00:35.345-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='clipboard-modifier'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='opensource'/><title type='text'>Update to clipboard-modifier</title><content type='html'>Of my tools that I've written, the one I use most often is &lt;a href="http://code.google.com/p/clipboard-modifier/"&gt;clipboard-modifier&lt;/a&gt;.  I have it on my panel so that it's only one click away.&lt;br /&gt;I had longtime desire to make this tool more flexible, before I would have to always modify the code in order to have it do something different.  Now each plugin can add wxPython widgets on the dialog, thus they can control their own state and parameters.&lt;br /&gt;Perhaps the most useful is the ability to send the clipbard (via stdin) to any program and then update the clipboard from the program's output.  A good example is sorting the clipboard. Another is filtering it through grep, say.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://clipboard-modifier.googlecode.com/svn/trunk/doc/sample-sort-shot.png"&gt;&lt;img style="cursor: pointer;" src="http://clipboard-modifier.googlecode.com/svn/trunk/doc/sample-sort-shot.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The program still needs more polish, but it's already very useful, for me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-7788379269150833274?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/7788379269150833274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=7788379269150833274' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/7788379269150833274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/7788379269150833274'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/12/update-to-clipboard-modifier.html' title='Update to clipboard-modifier'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-1112532384553249828</id><published>2007-12-28T14:11:00.000-02:00</published><updated>2007-12-28T14:40:04.038-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mm2s5'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='presentation'/><title type='text'>Presentation: Using Python in Lieu of Bash</title><content type='html'>I just gave a presentation at Google today.  Part of my promised results this quarter was to give at least one tech talk, so on the last day, that's what I did!&lt;br /&gt;Normally I would point you to the slides, but some parts were Google confidential, so I can't.  Basically, my talk covered how you can use &lt;a href="http://en.wikipedia.org/wiki/Python_%28programming_language%29"&gt;Python&lt;/a&gt; instead of &lt;a href="http://en.wikipedia.org/wiki/Bash"&gt;Bash&lt;/a&gt; for scripting purposes and showed some concrete examples with the subprocess module.&lt;br /&gt;My talk suffered from Murphy's Law for demos, and failed in some places.  It was because I had file called subprocess.py which was being included instead of the standard subprocess module (oops).&lt;br /&gt;Once again I used my &lt;a href="http://code.google.com/p/mm2s5/"&gt;mm2s5 &lt;/a&gt;to create my presentation, and it worked like a charm.  I had planned to use Open Office.orgs's Presentation, but ended up running out of time and using &lt;a href="http://meyerweb.com/eric/tools/s5/"&gt;S5&lt;/a&gt; instead.   What I think I need is an mm2odp program to make an &lt;a href="http://en.wikipedia.org/wiki/OpenDocument"&gt;.odp&lt;/a&gt; file from my &lt;a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page"&gt;mindmap&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-1112532384553249828?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/1112532384553249828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=1112532384553249828' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/1112532384553249828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/1112532384553249828'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/12/presentation-using-python-in-lieu-of.html' title='Presentation: Using Python in Lieu of Bash'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-2407468030197766826</id><published>2007-12-23T19:03:00.000-02:00</published><updated>2007-12-23T20:09:24.825-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cas'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>CAS and Python</title><content type='html'>I've been somewhat interested in &lt;a href="http://en.wikipedia.org/wiki/Computer_algebra_system"&gt;CAS&lt;/a&gt; (Computer Algebra System) ever since I used Mathematica for a year while doing TA work for &lt;a href="http://physics.ubishops.ca/lnelson/"&gt;Lorne Nelson&lt;/a&gt;. Now, of course, there are some open source CAS programs you can use.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Sage&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.sagemath.org/"&gt;Sage&lt;/a&gt; looks quite interesting:&lt;br /&gt;&lt;blockquote&gt;Use SAGE for studying a huge range of mathematics, including algebra, calculus, elementary to very advanced number theory, cryptography, numerical computation, commutative algebra, group theory, combinatorics, graph theory, and exact linear algebra.&lt;br /&gt;[...]&lt;br /&gt;SAGE makes it easy for you to use most mathematics software together.  SAGE includes interfaces to Magma, Maple, Mathematica, MATLAB, and MuPAD, and  the free programs Axiom, GAP, GP/PARI, Macaulay2, Maxima, Octave, and Singular.&lt;br /&gt;[...] With the SAGE notebook you  can create embedded graphics, beautifully typeset mathematical expressions, add and delete input, and start up and interrupt multiple calculations. &lt;/blockquote&gt;Sage uses Python and allows you to access other CAS systems if they are installed. I think the motivation behind Sage was to allow provably correct results since all the code is open.  Using Mathematica, say, is closed source, so how can you prove that the result that Mathematica gave is correct?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;SymPy&lt;br /&gt;&lt;/span&gt;&lt;a href="http://code.google.com/p/sympy/"&gt;SymPy&lt;/a&gt; not to be confused with (&lt;a href="http://simpy.sourceforge.net/"&gt;SimPy&lt;/a&gt; or even &lt;a href="http://www.simpy.com/"&gt;simpy.com&lt;/a&gt;) is also quite neat, and perhaps a little simpler to use.  It's written in pure Python, so it's very portable but not as fast as implementations written in C++, say.  You can also run SymPy from within Sage if so desired.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-2407468030197766826?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/2407468030197766826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=2407468030197766826' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/2407468030197766826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/2407468030197766826'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/12/cas-and-python.html' title='CAS and Python'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-2368503202545179214</id><published>2007-12-23T15:54:00.000-02:00</published><updated>2007-12-23T19:03:15.256-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Pvote, Secure Voting with Python</title><content type='html'>&lt;div class="PubNote"&gt;&lt;div class="PubNoteAttributes"&gt;&lt;span class="AttributeTitle"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Ka&lt;/span&gt;-Ping &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Yee&lt;/span&gt; wrote is PhD dissertation (University of Waterloo, Ontario) on P&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;vote&lt;/span&gt;.  A secure voting software written in 460 lines of Python Code.&lt;br /&gt;Ping's &lt;a href="http://zestyping.livejournal.com/234617.html"&gt;blog post&lt;/a&gt;&lt;/span&gt; and part of the abstract is below.&lt;br /&gt;&lt;/div&gt; &lt;div class="PubNoteContentArea"&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div class="PubNoteContentArea"&gt;I examine the question of how to design election-related software, with particular attention to the threat of insider attacks, and propose the goal of simplifying the software in electronic voting machines. I apply a technique called &lt;em&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;prerendering&lt;/span&gt;&lt;/em&gt; to reduce the security-critical, voting-specific software by a factor of 10 to 100 while supporting similar or better usability and accessibility, compared to today's voting machines. Smaller and simpler software generally contributes to easier verification and higher confidence.&lt;br /&gt;&lt;br /&gt;I demonstrate and validate the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;prerendering&lt;/span&gt; approach by presenting &lt;a href="http://pvote.org/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Pvote&lt;/span&gt;&lt;/a&gt;, a vote-entry program that allows a high degree of freedom in the design of the user interface and supports synchronized audio and video, touchscreen input, and input devices for people with disabilities. Despite all its capabilities, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Pvote&lt;/span&gt; is just 460 lines of Python code; thus, it directly addresses the conflict between flexibility and reliability that underlies much of the current controversy over electronic voting. A security review of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;Pvote&lt;/span&gt; found no bugs in the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;Pvote&lt;/span&gt; code and yielded lessons on the practice of adversarial code review. The analysis and design methods I used, including the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;prerendering&lt;/span&gt; technique, are also applicable to other high-assurance software.&lt;/div&gt;&lt;/blockquote&gt;The &lt;a href="http://zesty.ca/pubs/yee-phd.pdf"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;PDF&lt;/span&gt; of his thesis&lt;/a&gt;, is quite enjoyable to read. I also downloaded and ran the &lt;a href="http://pvote.org/code/pvote-1.0b.zip"&gt;software&lt;/a&gt; and the &lt;a href="http://pvote.org/code/ballot-1.0b.zip"&gt;sample ballot&lt;/a&gt;, it's all pretty neat.  I like the idea of using a write only PROM to store the results and the separation of voting and display.&lt;br /&gt;He also did &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;Pthin&lt;/span&gt;, a subset of Python that has only the methods needed for P&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;vote&lt;/span&gt; mentioned in &lt;a href="http://www.eecs.berkeley.edu/Pubs/TechRpts/2007/EECS-2007-40.pdf"&gt;this separate tech report&lt;/a&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/8709811-2368503202545179214?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/2368503202545179214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=2368503202545179214' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/2368503202545179214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/2368503202545179214'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/12/pvote-secure-voting-with-python.html' title='Pvote, Secure Voting with Python'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-2566307610516526231</id><published>2007-12-09T21:58:00.000-02:00</published><updated>2007-12-11T07:22:50.224-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='astronomy'/><title type='text'>Fun with PyEphem</title><content type='html'>I just tried finding out when and if the International Space Station would pass overhead.  First I installed &lt;a href="http://rhodesmill.org/pyephem/quick"&gt;pyephem&lt;/a&gt; for linux:&lt;br /&gt;&lt;blockquote&gt;$ sudo easy_install pyephem&lt;/blockquote&gt;Then started python and typed the following:&lt;blockquote&gt;Python 2.5.1 (r251:54863, Oct  5 2007, 13:36:32)&lt;br /&gt;[GCC 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)] on linux2&lt;br /&gt;Type "help", "copyright", "credits" or "license" for more information.&lt;br /&gt;&gt;&gt;&gt; import ephem&lt;br /&gt;&gt;&gt;&gt; home=ephem.Observer()&lt;br /&gt;&gt;&gt;&gt; home.long = -43.9&lt;br /&gt;&gt;&gt;&gt; home.lat = 19.9&lt;br /&gt;&gt;&gt;&gt; home.elevation = 1000&lt;br /&gt;&gt;&gt;&gt; home.date = "2007/12/09 20:00"&lt;/blockquote&gt;Getting the information about the ISS was a bit harder.  Had to go to this &lt;a href="http://celestrak.com/NORAD/elements/stations.txt"&gt;page at celestrak&lt;/a&gt; and get the first three lines then enter it in ephem.&lt;br /&gt;&lt;blockquote&gt;&gt;&gt;&gt; iss = ephem.readtle("ISS (ZARYA)",       &lt;br /&gt;... "1 25544U 98067A   07343.37458451  .00020246  00000-0  12456-3 0  4837",&lt;br /&gt;... "2 25544  51.6404 280.6485 0000524 313.0633 141.2500 15.77203764518419")&lt;br /&gt;&gt;&gt;&gt; iss.compute(home)&lt;br /&gt;&gt;&gt;&gt; print iss.rise_time, iss.transit_time, iss.set_time&lt;br /&gt;2007/12/9 16:26:18 2007/12/9 16:29:51 2007/12/9 16:33:25&lt;br /&gt;&lt;/blockquote&gt;Definitely easy enough for me to write a little python program to get the most interesting events happening in my area tonight.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-2566307610516526231?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/2566307610516526231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=2566307610516526231' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/2566307610516526231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/2566307610516526231'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/12/fun-with-pyephem.html' title='Fun with PyEphem'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-6905801559969860838</id><published>2007-12-05T20:22:00.000-02:00</published><updated>2007-12-05T21:33:41.333-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='orkut'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>My First Google Feature</title><content type='html'>I launched my first real user facing feature at 100% today (took a week to get to 100%).&lt;br /&gt;Here's the link to the feature on the &lt;a href="http://en.blog.orkut.com/2007/11/scrap-alerts.html"&gt;Orkut Blog&lt;/a&gt; (and in &lt;a href="http://blog.orkut.com/2007/11/alertas-de-recados-scraps.html"&gt;Portuguese&lt;/a&gt;).&lt;br /&gt;Basically, we can show the user that they received new scraps in orkut right away as an animated pop up, similar to how you might get chat messages in gmail.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-6905801559969860838?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/6905801559969860838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=6905801559969860838' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/6905801559969860838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/6905801559969860838'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/12/my-first-google-feature.html' title='My First Google Feature'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-7209260482837650049</id><published>2007-11-20T11:42:00.000-02:00</published><updated>2007-11-26T15:52:55.798-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>Toxoplasmosis</title><content type='html'>From the blood tests it seems that I &lt;span style="font-style: italic;"&gt;do&lt;/span&gt; have toxoplasmosis and have had it for a while, but the parasite has only attacked now.  I've taken about 10 days of drugs which has it's own side effects (like insomnia).   At night I get this nice purple color shift when I look at lights. Another neat thing is when I turn off the lights at night I see some activity still going on in the affected area (a little light show for 5 minutes).  I'd say that the lesion has diminishing, although slowly.  I can now see the tops of letters, but not quite enough to read comfortably with the right eye.  My peripheral vision is unaffected but there's a big blind spot to the right and down of where by gaze would focus, and it makes things look sort of blurry when looking through both eyes. &lt;br /&gt;I think my brain is starting to get used to looking mostly through the left eye, and I can work pretty much normally. &lt;br /&gt;I'll be taking my drugs until the day or two after Christmas.  I'm also off: soft drinks, packaged juice, and alcohol :-( .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-7209260482837650049?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/7209260482837650049/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=7209260482837650049' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/7209260482837650049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/7209260482837650049'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/11/toxoplasmosis.html' title='Toxoplasmosis'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-429115569470645959</id><published>2007-11-18T21:24:00.000-02:00</published><updated>2007-11-18T22:47:23.433-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>Trouble Seeing out of One Eye</title><content type='html'>About a week ago I noticed that right eye had a part of the vision 'missing'.  I setup an appointment with my eye doctor the next day and it got worse.  So bad that I can't read with my right eye anymore.  I've since gone to a specialist and have started taking some drugs. There's a chance that it's &lt;a href="http://en.wikipedia.org/wiki/Toxoplasmosis"&gt;Toxoplasmosis&lt;/a&gt;, which isn't great, but at least it's curable.  There are no other effects besides the loss of vision (it's where I look, the peripheral vision is still ok).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-429115569470645959?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/429115569470645959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=429115569470645959' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/429115569470645959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/429115569470645959'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/11/trouble-seeing-out-of-one-eye.html' title='Trouble Seeing out of One Eye'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-1312135493110460555</id><published>2007-09-15T12:16:00.001-03:00</published><updated>2009-04-04T22:01:37.175-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='brazil'/><title type='text'>Odd Portuguese</title><content type='html'>There are some words in Portuguese that are odd to my English ears.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;puxe&lt;/span&gt; (pronounced "push"), means &lt;span style="font-weight: bold;"&gt;pull&lt;/span&gt; confuses the hell out of me when it's written on the door. &lt;img src="http://bp2.blogger.com/_UJUFZU670Yc/RuwGY7idPOI/AAAAAAAAAFA/5w1eOUPoves/s400/FarSideDoorPuxe.jpg" alt="FarSide Puxe" id="BLOGGER_PHOTO_ID_5110466702527511778" align="right" border="0" /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;pretende&lt;/span&gt; in means &lt;span style="font-weight: bold;"&gt;intend&lt;/span&gt; in English.&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;entender&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;means to &lt;span style="font-weight: bold;"&gt;understand&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;sex &lt;/span&gt;means &lt;span style="font-weight: bold;"&gt;Fri&lt;/span&gt; or sexta-feira.  Every Friday it seems the elevator wants to have sex as it shows the date at the top. &lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;no&lt;/span&gt; means &lt;span style="font-weight: bold;"&gt;in &lt;/span&gt;or&lt;span style="font-weight: bold;"&gt; at&lt;/span&gt;. So the other day I saw "&lt;span style="font-style: italic;"&gt;1/2 preço no happy-hour&lt;/span&gt;" and it made me sad that there's no happy hour.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;meia&lt;/span&gt; means &lt;span style="font-weight: bold;"&gt;half, &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;socks&lt;/span&gt;, and &lt;span style="font-weight: bold;"&gt;six&lt;/span&gt;. Apparently, the six comes from "half" a dozen.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;de 30 em 30 dias&lt;/span&gt; means &lt;span style="font-weight: bold;"&gt;every 30 days&lt;/span&gt; but to my mathematical mind 30/30 = 1, it should be every day.&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;legal&lt;/span&gt; means &lt;span style="font-weight: bold;"&gt;legal&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;cool&lt;/span&gt;. But I would think that only lawyers think legal is cool.&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;direito&lt;/span&gt; means &lt;span style="font-weight: bold;"&gt;right&lt;/span&gt;, but &lt;span style="font-style: italic;"&gt;direto&lt;/span&gt; means  &lt;span style="font-weight: bold;"&gt;straight ahead&lt;/span&gt;.  Very confusing when someones giving instructions while driving.&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;jóia&lt;/span&gt; means &lt;span style="font-weight: bold;"&gt;jewelry&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;great&lt;/span&gt;.  Actually, this one does kinda make sense.  If it meant &lt;a href="http://en.wikipedia.org/wiki/Fellatio"&gt;BJ&lt;/a&gt; it would make even more sense.&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/8709811-1312135493110460555?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/1312135493110460555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=1312135493110460555' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/1312135493110460555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/1312135493110460555'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/09/odd-portuguese.html' title='Odd Portuguese'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_UJUFZU670Yc/RuwGY7idPOI/AAAAAAAAAFA/5w1eOUPoves/s72-c/FarSideDoorPuxe.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-5677629776398864781</id><published>2007-09-03T21:05:00.000-03:00</published><updated>2007-09-07T07:10:26.177-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='funny'/><title type='text'>You know you're old when....</title><content type='html'>I was at a Google party and we were talking about our first computers etc. and got a big laugh when I admitted that I remembered the day we got the new DOS with subdirectories (i.e. mkdir).&lt;br /&gt;That would have been MS-DOS 2.0 in 1983, I was 16 years old then.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-5677629776398864781?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/5677629776398864781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=5677629776398864781' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/5677629776398864781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/5677629776398864781'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/09/you-know-youre-old-when.html' title='You know you&apos;re old when....'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-7515031481490021894</id><published>2007-08-22T22:38:00.000-03:00</published><updated>2007-08-23T22:18:51.733-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='algorithm'/><title type='text'>Content Aware Image Sizing</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_UJUFZU670Yc/RszmIJFhyGI/AAAAAAAAAD8/SFO9fcPzy6I/s1600-h/content-aware-image-sizing.png"&gt;&lt;img style="cursor: pointer;" src="http://bp3.blogger.com/_UJUFZU670Yc/RszmIJFhyGI/AAAAAAAAAD8/SFO9fcPzy6I/s400/content-aware-image-sizing.png" alt="" id="BLOGGER_PHOTO_ID_5101705505456375906" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=c-SSu3tJ3ns"&gt;Content aware image sizing&lt;/a&gt; is a method of resizing an image horizontally or vertically by removing pixels.  In the picture above we're resizing horizontally and the cyan line is the pixels that will be removed.  What's even neater is you can give hints of what parts to preserve or which parts to preferencially remove.&lt;br /&gt;Watch the video it explains it all.&lt;br /&gt;Here's the &lt;a href="http://portal.acm.org/citation.cfm?id=1276390&amp;coll=ACM&amp;amp;dl=ACM&amp;CFID=27510390&amp;amp;CFTOKEN=99439425"&gt;research paper&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-7515031481490021894?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/7515031481490021894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=7515031481490021894' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/7515031481490021894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/7515031481490021894'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/08/content-aware-image-sizing.html' title='Content Aware Image Sizing'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_UJUFZU670Yc/RszmIJFhyGI/AAAAAAAAAD8/SFO9fcPzy6I/s72-c/content-aware-image-sizing.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-3917415261871119762</id><published>2007-08-22T20:34:00.000-03:00</published><updated>2007-08-22T20:43:37.182-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nintendo'/><title type='text'>Nintendo Wii outsells XBox 360</title><content type='html'>&lt;a href="http://www.vgchartz.com/"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_UJUFZU670Yc/RszJc5FhyEI/AAAAAAAAADs/fFope0PSCkY/s400/wii-outsells-xbox.png" alt="" id="BLOGGER_PHOTO_ID_5101673976101455938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Looks like the Wii has finally outsold the XBox 360 in worldwide sales, despite the one year lead by Microsoft.&lt;br /&gt;Although my &lt;a href="http://nexgenwars.com/"&gt;favorite site&lt;/a&gt; doesn't yet say that yet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-3917415261871119762?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/3917415261871119762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=3917415261871119762' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/3917415261871119762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/3917415261871119762'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/08/nintendo-wii-outsells-xbox-360.html' title='Nintendo Wii outsells XBox 360'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_UJUFZU670Yc/RszJc5FhyEI/AAAAAAAAADs/fFope0PSCkY/s72-c/wii-outsells-xbox.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-5433495151005247938</id><published>2007-08-14T11:16:00.001-03:00</published><updated>2007-08-14T11:21:49.590-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cool'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><title type='text'>Welcome to the Uncanny Valley</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.motionportrait.com/about/demo_faith_02.html"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_UJUFZU670Yc/RsG5hXGUM2I/AAAAAAAAADM/ZZtQDIi2OfU/s400/uncanny-valley.png" alt="" id="BLOGGER_PHOTO_ID_5098560235947438946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.motionportrait.com/about/demo_faith_02.html"&gt;This model&lt;/a&gt; follows your cursor with her eyes and is very well done.&lt;br /&gt;So well done it's &lt;a href="http://en.wikipedia.org/wiki/Uncanny_Valley"&gt;creepy&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-5433495151005247938?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/5433495151005247938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=5433495151005247938' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/5433495151005247938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/5433495151005247938'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/08/welcome-to-uncanny-valley.html' title='Welcome to the Uncanny Valley'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_UJUFZU670Yc/RsG5hXGUM2I/AAAAAAAAADM/ZZtQDIi2OfU/s72-c/uncanny-valley.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-4329703023831196352</id><published>2007-07-31T18:59:00.001-03:00</published><updated>2007-07-31T19:04:55.627-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='funny'/><title type='text'>Calendar says 41, web says 25</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.arsgeek.com/?p=2232"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_UJUFZU670Yc/Rq-w-3GUM1I/AAAAAAAAACU/d_vKCL2XiAg/s320/myage.png" alt="" id="BLOGGER_PHOTO_ID_5093484297568138066" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I like the really high life expectancy too.&lt;br /&gt;Not sure if I can trust this program though, it's not too sure on how to spell "Expectancy".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-4329703023831196352?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/4329703023831196352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=4329703023831196352' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/4329703023831196352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/4329703023831196352'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/07/calendar-says-41-web-says-25.html' title='Calendar says 41, web says 25'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_UJUFZU670Yc/Rq-w-3GUM1I/AAAAAAAAACU/d_vKCL2XiAg/s72-c/myage.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-355584185720415561</id><published>2007-07-29T21:52:00.000-03:00</published><updated>2007-07-29T21:59:02.491-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='science'/><title type='text'>Eyebrows serve to show where we are looking</title><content type='html'>Why do we have a line of hair sitting caterpillar-like above each of our eyes? Forget such mundanities as dust protection or ornamentation, a &lt;a href="http://bps-research-digest.blogspot.com/2007/07/so-thats-what-eyebrows-are-for.html"&gt;new study suggests&lt;/a&gt; our eyebrows serve to control how easily other people can tell where we are looking.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-355584185720415561?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/355584185720415561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=355584185720415561' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/355584185720415561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/355584185720415561'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/07/eyebrows-serve-to-show-where-we-are.html' title='Eyebrows serve to show where we are looking'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-470366434417033234</id><published>2007-07-02T09:40:00.000-03:00</published><updated>2007-07-02T11:55:01.445-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ideas'/><category scheme='http://www.blogger.com/atom/ns#' term='calculator'/><title type='text'>Dreams of the Ultimate Calculator</title><content type='html'>I have this recurring fantasy of programming the perfect calculator.  I've found two or three very good ones:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://futureboy.homeip.net/frinkdocs/"&gt;Frink&lt;/a&gt;, is a Java based calculator that I've become very fond of.  It nearly has it all:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Pros&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;Runs anywhere, including cell phones and other small devices that have Java.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Unit conversion including currencies, and timezones.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Unlimited precision, interval arithmetic, complex numbers.&lt;/li&gt;&lt;li&gt;Really &lt;a href="http://futureboy.homeip.net/frinkdocs/#SampleCalculations"&gt;fun tutorial&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Cons&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Closed source.&lt;/li&gt;&lt;li&gt;Java ;-)&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;&lt;a href="http://qalculate.sourceforge.net/"&gt;Qalculate!&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Pros&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Open Source&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Auto complete as you type, pretty cool.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Pretty prints results, ex. sqrt(2) =&gt; √(2) or 2*3 =&gt; 2·3.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Notion of exact values and showing fractional values.&lt;/li&gt;&lt;li&gt;Weird numbers formats like Roman, Sexagesimal&lt;/li&gt;&lt;li&gt;Can create your own functions that has dialog boxes.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;RPN, plotting, history&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Cons&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Too many menus buttons.&lt;/li&gt;&lt;li&gt;Not fun, a little dry.&lt;/li&gt;&lt;li&gt;Missing Brazilian Real for currency!&lt;/li&gt;&lt;li&gt;No timezones.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;&lt;a href="http://wxmaxima.sourceforge.net/wiki/index.php/Main_Page"&gt;wxMaxima&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Pros&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Open source&lt;/li&gt;&lt;li&gt;Complete computer algebra system.&lt;/li&gt;&lt;li&gt;Plotting&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Cons&lt;/li&gt;&lt;ul&gt;&lt;li&gt;No unit conversions&lt;/li&gt;&lt;li&gt;No timezone conversions&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;If I were to make a calculator what features would I have?:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Open Source&lt;/li&gt;&lt;li&gt;Written in Python with optional C++ packages for speed&lt;/li&gt;&lt;li&gt;Works on small devices that have Python (like the &lt;a href="http://wiki.laptop.org/go/Home"&gt;OLPC&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Command line only interface also available (like &lt;a href="http://www.gnu.org/software/bc/manual/html_mono/bc.html"&gt;bc&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Numbers are stored as basic &lt;a href="http://en.wikipedia.org/wiki/SI"&gt;SI units&lt;/a&gt; and everything else is formatting.  So, for example all angles would be stored and calculated in radians, but you can display the format Degrees°  Minutes"  Seconds ', or just Degress with decimal point. You can show large numbers grouped with commas (1,234,567) or with spaces (1234 5678) etc. - all part of formatting. This could allow for Celsius/Fahrenheit conversions since it's could just be a special formatting.  This is different from other calculators which uses SI units to convert from one unit to the other but doesn't use units as 'formatting'.  Perhaps it makes no real difference, or maybe it's just brilliant.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Numbers would be stored as arbitrary precision fractions with real and complex parts and as intervals (interval arithmetic).   This means up to 6 arbitrary precision numbers per value (numerator/denominator * real/imaginary * low/high interval).&lt;/li&gt;&lt;li&gt;Use Python for any extra programming capabilities.  This means that the language should be compatible with Python as much as possible, or if you use a subset it would be compatible.  For example, it would be nice to allow both ^ and ** to mean the exponent, but if you are mixing with Python you'd have to use only **.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Editable&lt;/span&gt; history.  As you enter values it is stored in a history which you can edit and all the calculations after will be recalculated.  This is very useful if you a bunch of calculations and then your realize the results is incorrect, as you look at your history you see your mistake and you fix it, then all the other calculations are recalculated as if you had typed in the correct value the first time.&lt;/li&gt;&lt;li&gt;Time zones, and other date calculations (Frink does a good job here).&lt;/li&gt;&lt;li&gt;Currency calculations with historical currencies (Frink again).&lt;/li&gt;&lt;li&gt;Ability to add your own functions with a dialog explaining how it works. (Qalculate! is pretty good in this respect, but it could be more interesting by having more teaching material).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Support for many languages.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Intelligent formating.  If it thinks you are doing currency calculations because you enter numbers like 1.25 and 1.10 then it will try to show the calculations with two decimal points.  If you perform calculations with feet and inches it will try and give you the results as Feet Inches 1/4 inches, etc..  When it guesses the wrong formatting it should be easy to set it straight.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Entering *2 or +3 will know to do the equivalent of %*= or %+=, where % is used for the previous value.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Units and functions will know when they are not exact and will quietly use intervals when they aren't.&lt;/li&gt;&lt;li&gt;Common units of measure should be easily accessible, rare units should be at least available.&lt;/li&gt;&lt;li&gt;Your standard units can be set.  Some units are not very precise, like &lt;a href="http://en.wikipedia.org/wiki/Gallon"&gt;gallon&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/Cup_%28unit%29"&gt;cup&lt;/a&gt; and vary from place to place or historically.  This may be a way around the problem of having uk_gallon, us_gallon, us_dry_gallon, etc. It would also be interesting to be able to set your location to ancient Rome and get common values shown in Cubits and in Roman numerals.&lt;/li&gt;&lt;li&gt;It will look at the calculation history and attempt substitutions of exact values if it can, so that sqrt(2)^2 should give 2 instead of 2.0000000000000001448 like it does in Frink.&lt;/li&gt;&lt;li&gt;Option to show repeated decimals with a line above.  Ex. 1/3 could be shown as 0.3̅ or 1/7 as 0.1̅4̅2̅8̅5̅7̅&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Some CAS like features, but probably not a full set.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;It should be fun.  You can easily get a very interesting history of a unit. You probably wouldn't have thought that the &lt;a href="http://en.wikipedia.org/wiki/Kilogram"&gt;kilogram&lt;/a&gt; or the &lt;a href="http://en.wikipedia.org/wiki/Metre"&gt;meter&lt;/a&gt; had such an interesting history, let alone a &lt;a href="http://en.wikipedia.org/wiki/Cubit"&gt;cubit&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/List_of_strange_units_of_measurement#Electromagnetic_flux:_jansky"&gt;jansky&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/Firkin"&gt;furkin&lt;/a&gt;.  Browsing functions should be informative and easy to do without having to go forth an back to the menu each time. Having a Frink like manual would help immensely.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Perhaps when I retire I'll work on this one day, who knows.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-470366434417033234?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/470366434417033234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=470366434417033234' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/470366434417033234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/470366434417033234'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/07/dreams-of-ultimate-calculator.html' title='Dreams of the Ultimate Calculator'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-432638411523738610</id><published>2007-06-22T14:30:00.000-03:00</published><updated>2007-06-22T14:49:59.473-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Python 3000</title><content type='html'>&lt;a href="http://www.artima.com/weblogs/viewpost.jsp?thread=208549"&gt;Python 3000&lt;/a&gt; will be the first Python version which is free to break backward compatibility, a chance to get rid of old problems and cruft that have accumulated over the years.&lt;br /&gt;I like most of the changes and agree with their reasons but I'm sad about one thing. Before you could create a program like this:&lt;br /&gt;&lt;blockquote&gt;print "Hello world!"&lt;br /&gt;&lt;/blockquote&gt;For beginners, this is great, no extra semicolons, parentheses etc. Now you will have to write:&lt;br /&gt;&lt;blockquote&gt;print("Hello world!")&lt;br /&gt;&lt;/blockquote&gt;It's not the end of the world, but it just got a little more difficult for beginners.  On the other hand it will introduce them to functions a little earlier.&lt;br /&gt;Another difference I'm not so sure about is removing the % operator.  I &lt;span style="font-style: italic;"&gt;like&lt;/span&gt; that formatting operator:&lt;br /&gt;&lt;blockquote&gt;print "Your are %d years old" % age&lt;br /&gt;&lt;/blockquote&gt;now becomes:&lt;br /&gt;&lt;blockquote&gt;print("You are {0:d} years old".format(age))&lt;br /&gt;&lt;/blockquote&gt;sigh.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-432638411523738610?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/432638411523738610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=432638411523738610' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/432638411523738610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/432638411523738610'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/06/python-3000.html' title='Python 3000'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-7939685250434467346</id><published>2007-06-21T14:34:00.000-03:00</published><updated>2007-06-21T14:47:09.748-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Simple fix to Gnome Terminal</title><content type='html'>I often double click on a filename or folder and then paste it with the middle button (the scroll wheel), in Linux. What annoyed me was that it doesn't get the ~ character so if I'm cutting an pasting my current path as shown on the command line&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;blockquote&gt;scott@home:~/src/folder/name$&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Double click, middle click gives me &lt;span style="font-weight: bold;"&gt;/src/folder/name&lt;/span&gt; and not &lt;span style="font-weight: bold;"&gt;~/src/folder/name&lt;/span&gt;.  How annoying, I have to cursor all the way to the beginning and enter the tilde character.&lt;br /&gt;Even worse if there's an error message like:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-weight: bold;"&gt;Error in ~/src/folder/name.cc:123&lt;/span&gt; &lt;/blockquote&gt;Double click, middle click gives me now &lt;span style="font-weight: bold;"&gt;/src/folder/name.cc:123&lt;/span&gt;. Now I have to edit both sides.&lt;br /&gt;&lt;br /&gt;The fix is simple, go to your Gnome Terminal|Profiles... and edit your default profile. The first pane called "General" and has a field called "Select-by-word characters".  Add the tilde (~) and remove the colon (:) and you're done.&lt;br /&gt;There, I just saved you 2 thousand keystrokes a year.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-7939685250434467346?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/7939685250434467346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=7939685250434467346' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/7939685250434467346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/7939685250434467346'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/06/simple-fix-to-gnome-terminal.html' title='Simple fix to Gnome Terminal'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-6410435940620891382</id><published>2007-06-15T12:46:00.000-03:00</published><updated>2007-06-15T13:13:34.395-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='culture'/><category scheme='http://www.blogger.com/atom/ns#' term='language'/><title type='text'>It's Hard to Keep Up</title><content type='html'>Our language is changing faster and faster, it's hard to keep up. Even yesterday I used the word &lt;a href="http://en.wikipedia.org/wiki/W00t#W"&gt;w00t&lt;/a&gt;!.&lt;br /&gt;Thankfully, our technology helps keep us up-to-date.&lt;br /&gt;Now I know about &lt;a href="http://icanhascheezburger.com/"&gt;LOLCats&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Leet"&gt;L33 speak&lt;/a&gt;, And all the &lt;a href="http://pt.wikipedia.org/wiki/Internet%C3%AAs"&gt;Portuguese internet expressions&lt;/a&gt; too.&lt;br /&gt;If fact there's a whole list of words I've never heard before to describe these things: &lt;a href="http://en.wikipedia.org/wiki/Backronym"&gt;backcronyms&lt;/a&gt; (and &lt;a href="http://en.wikipedia.org/wiki/Backronym#anacronym"&gt;anacronyms&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Backronym#Apronym"&gt;apronyms&lt;/a&gt;) , &lt;a href="http://en.wikipedia.org/wiki/List_of_snowclones"&gt;snowclones&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Image_macro"&gt;image macros&lt;/a&gt;, and other forms of &lt;a href="http://en.wikipedia.org/wiki/Patois"&gt;patois&lt;/a&gt;.&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://www.urbandictionary.com/define.php?term=kthxbye"&gt;&lt;span style="font-weight: bold;"&gt;kthxbye&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;shortening of "k thx bye". The K is short for OK, which is short for oll korrect, which is a facetious alteration of All Correct. thx is short for thanx which is a facetious alteration of thanks which is short for thank you. Bye is short for goodbye, which is an alteration of alteration of God be with you. "kthxbye" is the pinnacle of English's advancement, shortening "All correct, Thank you, God be with you." into seven lowercase letters. Humanity is doomed. Obviously, it is used to end a conversation *fast* that you don't want to be in anymore.&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-6410435940620891382?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/6410435940620891382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=6410435940620891382' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/6410435940620891382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/6410435940620891382'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/06/its-hard-to-keep-up.html' title='It&apos;s Hard to Keep Up'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-7166375350565597110</id><published>2007-06-10T19:11:00.000-03:00</published><updated>2007-06-10T19:13:57.380-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sports'/><category scheme='http://www.blogger.com/atom/ns#' term='funny'/><title type='text'>I'm Not Playing Tennis the Way I Used To</title><content type='html'>I played two sets over the weekend and noticed where I used to grunt like Nadal when hitting the ball, now I only grunt when I pick up the ball.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-7166375350565597110?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/7166375350565597110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=7166375350565597110' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/7166375350565597110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/7166375350565597110'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/06/im-not-playing-tennis-way-i-used-to.html' title='I&apos;m Not Playing Tennis the Way I Used To'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-901363849767636775</id><published>2007-06-04T19:07:00.000-03:00</published><updated>2007-06-04T19:12:42.290-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='sony'/><category scheme='http://www.blogger.com/atom/ns#' term='nintendo'/><title type='text'>Why would I ever want to listen to 'static' music again?</title><content type='html'>I've been playing &lt;a href="http://en.wikipedia.org/wiki/Guitar_Hero_II"&gt;Guitar Hero&lt;/a&gt; ( at work of course ;-) ), and &lt;a href="http://en.wikipedia.org/wiki/Elite_Beat_Agents"&gt;Elite Beat Agents&lt;/a&gt; on the DS and I'm thinking to myself, "Why would I want to listen to music that I can't interact with ever again?".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-901363849767636775?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/901363849767636775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=901363849767636775' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/901363849767636775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/901363849767636775'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/06/why-would-i-ever-want-to-listen-to.html' title='Why would I ever want to listen to &apos;static&apos; music again?'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-5951334854341845127</id><published>2007-06-03T14:14:00.000-03:00</published><updated>2007-06-03T14:30:04.593-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='usa'/><title type='text'>American's Don't Read?</title><content type='html'>This &lt;a href="http://www.humorwriters.org/startlingstats.html"&gt;page summarizes&lt;/a&gt; some startling fact about Americans and books.  Most of these facts come from the Jenkins group, and to me, don't make a lot of sense:&lt;br /&gt;&lt;blockquote&gt;33% of high school graduates never read another book after high school&lt;br /&gt;42% of college graduates never read another book after college.&lt;/blockquote&gt;So, on the surface, it looks like college students read less high school graduates.  I think you want to count only the high school graduates that never went to college and try and get people at nearly the same age group.  An 50 year old is more likely to have read a book since high school than a 20 year old.&lt;br /&gt;&lt;br /&gt;Also, according to Jenkins, 80% of the US population want to &lt;span style="font-style: italic;"&gt;write&lt;/span&gt; a book, but 80% of the population has not bought or read a book in the past year.  70% have not bought a book in the past 5 years.  That's even more bizarre, everyone wants to publish but are too lazy to read?  Are they going to write a book and never proof read it?&lt;br /&gt;I think I'd be more alarmed if the facts showed some coherency and if they included other forms of reading, like reading my blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-5951334854341845127?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/5951334854341845127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=5951334854341845127' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/5951334854341845127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/5951334854341845127'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/06/americans-dont-read.html' title='American&apos;s Don&apos;t Read?'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-4917020019027134378</id><published>2007-06-03T12:28:00.000-03:00</published><updated>2007-06-03T13:16:33.257-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ui'/><title type='text'>File Rename Anyone?</title><content type='html'>I was in a meeting, editing a file and realized that the filename had a typo.  To fix this I have only two choices, either do a "Save As..." which is probably the best solution, but then I would have to remember to delete the original file at some later point.  Or I can quit the program, rename the file at the command line, load up the program and load up the new filename, ugh.&lt;br /&gt;Why doesn't all software have File|Rename... menu option?  Seems like such a common need, and it's lack encourages the use of bad filenames, it's just too much work to fix.&lt;br /&gt;After programs like eclipse added the ability to rename variables and methods, the names I end up using are greatly improved.  I don't need to add comments for most of my code because the names are self documenting.&lt;br /&gt;Please, spend the extra hour to allow renaming in your app.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-4917020019027134378?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/4917020019027134378/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=4917020019027134378' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/4917020019027134378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/4917020019027134378'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/06/file-rename-anyone.html' title='File Rename Anyone?'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-2355258215668760861</id><published>2007-06-02T16:04:00.000-03:00</published><updated>2007-06-02T17:53:39.006-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='opensource'/><title type='text'>I'm now a Vi user</title><content type='html'>&lt;img src="http://lh6.google.com/image/scottakirkwood/RmHXlycVfmI/AAAAAAAAABk/9OOweclJKJ4/vi-gang-sign.jpg" alt="Vi Gang Sign" title="Vi Gang Sign" align="right" /&gt;I've used my fair share of text editors including Emacs for 2 years and Eclipse several years.&lt;br /&gt;My favorite open source program has always been &lt;a href="http://www.scintilla.org/SciTE.html"&gt;Scite&lt;/a&gt;, and I still have it on my launch panel.  But now I'm a vi man.&lt;br /&gt;I tried to go back to &lt;a href="http://www.gnu.org/software/emacs/emacs.html"&gt;Emacs&lt;/a&gt;, but it takes so long to get used to and there are too many funny keystrokes.  Emacs users tend to get an &lt;a href="http://en.wikipedia.org/wiki/Emacs#Emacs_Pinky"&gt;Emacs Pinky&lt;/a&gt; from using the Ctrl key so much, which was not a problem I was looking forward to. Emacs also seems to have too many choices, too many cool downloads to get, each of which slows down the startup time.&lt;br /&gt;I liked Scite because the keyboard was setup similar to Visual Studviio, which I had used for years.  It is also a solid program that is very customizable.  Also, being open source is great, I even contributed some code to the project.&lt;br /&gt;But after reading &lt;a href="http://www.viemu.com/a-why-vi-vim.html"&gt;this article&lt;/a&gt; I decided to give vim another try.  What got me interested again was the suggestion to always be in 'normal' mode and to be in insert mode only for short bursts.&lt;br /&gt;And then I tried gvim, i.e. the graphic version of vim.  What a joy to use. Cut and paste actually works!  Even selecting and middle clicking for paste works correctly.  Being able to edit, move around without taking your hands off the home row is wonderful, especially when you are on a laptop, which always seems to place the keys in funny locations.&lt;br /&gt;When did they add visual mode?  It's great, I type V, j, j, j, &gt; and it indents three lines.  The other trick I really like is press c, t, and ', say  and quickly replace everything up until the the ' (quote).  A feature I also like is pressing &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Ctrl&lt;/span&gt;-P or &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Ctrl&lt;/span&gt;-N (in insert mode) to complete the text I'm on using the closest match (previous or next in the text).  If you haven't tried vi in a few years and touch type, I'd give vim another shot.  It's has really aged well and all&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-2355258215668760861?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/2355258215668760861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=2355258215668760861' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/2355258215668760861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/2355258215668760861'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/06/im-now-vi-user.html' title='I&apos;m now a Vi user'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-4116758017975920913</id><published>2007-05-09T22:50:00.000-03:00</published><updated>2007-05-09T23:10:16.516-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='science'/><title type='text'>Python is great for Science</title><content type='html'>&lt;a href="http://www.scipy.org/Cookbook/OLS"&gt;SciPy&lt;/a&gt; is very useful for doing matrix like operations.&lt;br /&gt;And Python out of the box you can do thing like:&lt;br /&gt;In [1]: 2**3000&lt;br /&gt;Out[2]: 123023192216111717693155881327675251464071389573683371576&lt;br /&gt;611802916005880061467294877536006783859345958242964925405180490&lt;br /&gt;851288418089823682358508248206534833123495935035584501741302332&lt;br /&gt;011136066692262472823975688041643447831569367501341309075720869&lt;br /&gt;037679329665881066294182449348845172650530371291600534674790862&lt;br /&gt;370267348091935393681310573662040235274477690384047788365110032&lt;br /&gt;240930198348836380293054048248790976348409825394072868513204440&lt;br /&gt;886373475427121259247177864394948668851172105156197043278074745&lt;br /&gt;482377680846418069710308386181218434856552274019579668262220551&lt;br /&gt;184551208055201031005025580158934964592800113374547422071501368&lt;br /&gt;341390754277906375983387610135423518424509667004216072062941158&lt;br /&gt;150237124800843044718484209861032058041799220666224732872212208&lt;br /&gt;851364368390767036020916265367064113093699700217050067550137472&lt;br /&gt;399876600582757930072325347489061225013517188917489907991129151&lt;br /&gt;2399773872178519018229989376L&lt;br /&gt;&lt;br /&gt;Now with &lt;a href="http://projects.hepforge.org/pyfeyn/"&gt;PyFen&lt;/a&gt; we have Feynman diagrams!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://projects.hepforge.org/pyfeyn/pyfeyn-test1-small.png"&gt;&lt;img style="cursor: pointer;" src="http://projects.hepforge.org/pyfeyn/pyfeyn-test1-small.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Is there anything Python can't do?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-4116758017975920913?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/4116758017975920913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=4116758017975920913' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/4116758017975920913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/4116758017975920913'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/05/python-is-great-for-science.html' title='Python is great for Science'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-6552410848184624179</id><published>2007-04-20T10:35:00.000-03:00</published><updated>2007-04-20T11:01:38.836-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='opensource'/><title type='text'>And now, for something completely different</title><content type='html'>I've launched another Python&lt;sup&gt;&lt;a href="http://en.wikipedia.org/wiki/And_Now_For_Something_Completely_Different"&gt;*&lt;/a&gt;&lt;/sup&gt;  open source program called &lt;a href="http://code.google.com/p/mm2notes/"&gt;mm2notes&lt;/a&gt;.&lt;br /&gt;I can sure pick those product names can't I: I've launched &lt;a href="http://code.google.com/p/mm2s5/"&gt;mm2s5&lt;/a&gt;, &lt;a href="http://xml2ddl.berlios.de/"&gt;xml2ddl&lt;/a&gt;, &lt;a href="http://wxoptparse.berlios.de/"&gt;wxOptParse&lt;/a&gt; maybe I should work for HP so I can name their products like the "HP xw9300".  In my defense, at least my names are easy to google.&lt;br /&gt;Anyway, the idea is to take notes during a meeting using the excellent &lt;a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page"&gt;FreeMind&lt;/a&gt; program, and my software will convert those notes into a nicely formatted "meeting minutes".  The cool part is that even if you fill the nodes of the mind-map under different locations at different times, the program will unroll these nodes based on the time the node was created.&lt;br /&gt;I guess a picture will help out.  Look at the FreeMind document which is a little hard to understand and the meeting notes, which is organized by time.&lt;br /&gt;&lt;img src="http://mm2notes.googlecode.com/svn/trunk/doc/free-mind-shot.png" alt="freemind screen shot" /&gt;&lt;br /&gt;&lt;img src="http://mm2notes.googlecode.com/svn/trunk/doc/html-shot.png" alt="mm2notes output screen shot" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-6552410848184624179?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/6552410848184624179/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=6552410848184624179' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/6552410848184624179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/6552410848184624179'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/04/and-now-for-something-completely.html' title='And now, for something completely different'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-2114562142744211647</id><published>2007-04-20T08:11:00.000-03:00</published><updated>2007-04-20T08:23:11.503-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='opensource'/><title type='text'>MyZones launched</title><content type='html'>I've posted another open source Python program called &lt;a href="http://code.google.com/p/myzones/"&gt;MyZones&lt;/a&gt;.&lt;br /&gt;&lt;img src="http://myzones.googlecode.com/svn/trunk/doc/screen-shot.png" alt="Screenshot" /&gt;&lt;br /&gt;I basically had the desire to know what time it is in another timezone and feel confident that the answer is true.  By using &lt;a href="http://pytz.sourceforge.net/"&gt;pytz&lt;/a&gt;, I feel much more confidant that I will always have the correct time for the various timezones. The program is simple and simply works, but I have some additional things I'd like to add.&lt;br /&gt;Right now you can change the time in any timezone shown and the clock will stop updating and all the other zones will be synchronized correctly.   But changing the time is a little clumzy, maybe a dropdown of hours in 30 minute increments might be nicer.&lt;br /&gt;The program is a little plain, could use some sprucing up and wxPython has analog clocks and "digital" displays that I can use for that purpose.&lt;br /&gt;I think I've caught an OpenSource bug, I keep writing these little programs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-2114562142744211647?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/2114562142744211647/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=2114562142744211647' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/2114562142744211647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/2114562142744211647'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/04/myzones-launched.html' title='MyZones launched'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-2593803864722643524</id><published>2007-04-19T21:52:00.000-03:00</published><updated>2007-04-19T23:12:53.779-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>First time upgrading Ubuntu successfully</title><content type='html'>The last two time I upgrade Ubuntu I had a lot of problems.   After rebooting, my X windows was usually messed up and I had additional problems with the last upgrade.&lt;br /&gt;However, this last upgrade was relatively painless, but it did fail the upgrade and then leave the Update Manager without any hint what to do. Of course, now I'm pretty experienced and know all the apt commands by heart.  I ran "sudo apt-get -f install" to find the problem then "sudo apt-get remove python-setuptools" which seemed to be the problem package.  Then I ran the Update Manager again and it went on it's way.&lt;br /&gt;For some reason, after installing everything the Update Manager said it was finished and never asked me if I wanted to reboot so I was a little extra hesitant the first time I rebooted. I crossed my fingers and rebooted and a new Ubuntu came out without any errors.&lt;br /&gt;I'd say the nicest thing I've seen so far with the new Feisty Fawn is running "python" and seeing version 2.5 come up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-2593803864722643524?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/2593803864722643524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=2593803864722643524' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/2593803864722643524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/2593803864722643524'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/04/first-time-upgrading-ubuntu.html' title='First time upgrading Ubuntu successfully'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-8807590221126889434</id><published>2007-04-09T22:11:00.000-03:00</published><updated>2007-04-09T22:58:26.747-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Another reason I like working at Google</title><content type='html'>Another &lt;a href="http://www.norvig.com/spell-correct.html"&gt;great post&lt;/a&gt; from Peter Norvig makes me proud to be a googler. In this article (which he wrote most of the code on a plane ride) he shows in 20 lines how to write a spell corrector similar to the "Did you mean: ....?" spelling corrector in the Google search page. Just like his &lt;a href="http://norvig.com/sudoku.html"&gt;Sudoku solver&lt;/a&gt; earlier, his code is both clear and concise (without being overly cryptic).  By the end of the article you feel like you would have been able to write the code yourself.  One thing I like about his articles is I often learn something new about Python like the: &lt;blockquote&gt;collections.defaultdict(lambda:1)&lt;br /&gt;&lt;/blockquote&gt;snippet in this article.  Also, he goes into some of the theory, like the &lt;a href="http://en.wikipedia.org/wiki/Bayes%27_theorem"&gt;Bayesian theory&lt;/a&gt; in this case.  His links were useful too, like the &lt;a href="http://ota.ahds.ac.uk/texts/0643.html"&gt;Spelling Error Corpus&lt;/a&gt;, and Google's trillion word &lt;a href="http://googleresearch.blogspot.com/2006/08/all-our-n-gram-are-belong-to-you.html"&gt;N-gram corpus&lt;/a&gt;.  Peter is the director of research so you might expect him to be smarter than the average bear, but there are an amazing number of very bright lights here at Google who I have the honor to work with daily.&lt;br /&gt;If you are interesting in learning a little more Python and some very useful programming methodologies (Bayes' Theorem, probability, constraint propagation and search - for Sudoku) you really should read his articles.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-8807590221126889434?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/8807590221126889434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=8807590221126889434' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/8807590221126889434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/8807590221126889434'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/04/another-reason-i-like-working-at-google.html' title='Another reason I like working at Google'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-144135200387088067</id><published>2007-04-02T22:47:00.000-03:00</published><updated>2007-04-02T22:54:11.133-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='utility'/><title type='text'>dos2unix</title><content type='html'>The other day I was going through some of my files and noticed that some files had the DOS style CR/LF lines, ugh.  I couldn't remember what the standard tool in linux is to convert this, turns out it's dos2unix which is linked to fromdos command.&lt;br /&gt;The package is called, forgettably, tofromdos, i.e. to install it you need to call:&lt;br /&gt;&lt;blockquote&gt;sudo apt-get install tofromdos&lt;/blockquote&gt;For such a simple utility it doesn't provide very much, there's no man page and only -h works and not the more common --help, but it does work as advertised. I was surprised that it isn't included in the standard Linux install.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-144135200387088067?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/144135200387088067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=144135200387088067' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/144135200387088067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/144135200387088067'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/04/dos2unix.html' title='dos2unix'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-9078143559367437327</id><published>2007-04-01T18:41:00.000-03:00</published><updated>2007-04-01T18:50:33.809-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='utility'/><title type='text'>Released Clipboard Modifier</title><content type='html'>I released another open source program called &lt;a href="http://code.google.com/p/clipboard-modifier/"&gt;Clipboard Modifier&lt;/a&gt;. I guess I'm amortizing all the effort it takes to open source a program my doing them back-to-back, when all the details are still fresh in my mind.&lt;br /&gt;This little utility uses wxPython and modifies your clipboard using plugins that you provide. &lt;br /&gt;I needed this at work to copy and paste a spreadsheet into a Wiki.  Wiki's aren't very good at making tables and this little program leverages the capabilities of a spreadsheet to insert columns rows, etc..  Basically, I create the spreadsheet in OpenOffice and then using Clipboard Modifier copy and paste a wiki style table into the Wiki.&lt;br /&gt;To make the program a little more complete, I've also added some other plugins.  For example, there is one that takes some text and converts it into something that Java or Python would like (in double quotes, etc.).&lt;br /&gt;I have more ideas of this type. Looks like I'm going for quantity, instead of quality.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-9078143559367437327?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/9078143559367437327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=9078143559367437327' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/9078143559367437327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/9078143559367437327'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/04/released-clipboard-modifier.html' title='Released Clipboard Modifier'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-5079878002915721719</id><published>2007-03-26T18:40:00.000-03:00</published><updated>2007-03-26T18:53:36.011-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='utility'/><title type='text'>Created open source utility 'mm2s5'</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_UJUFZU670Yc/RghAfIk-cfI/AAAAAAAAAA4/veaspM3CWb4/s1600-h/Sample+Presentation.png"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_UJUFZU670Yc/RghAfIk-cfI/AAAAAAAAAA4/veaspM3CWb4/s400/Sample+Presentation.png" alt="" id="BLOGGER_PHOTO_ID_5046354286091334130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I just finished posting &lt;a href="http://code.google.com/p/mm2s5/"&gt;mm2s5&lt;/a&gt; to code.google.com this weekend.  It's a small Python utility to convert a &lt;a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page"&gt;FreeMind&lt;/a&gt; mind-map (.mm) file into an S5 presentation.  It was a little hack that I put together to make presentations quickly and somebody else found it useful, so I decided to put it on the net.&lt;br /&gt;You can see an example presentation &lt;a href="http://www.forusers.com/static/html/sample.html"&gt;here&lt;/a&gt; and a picture of what that same presentation looks like in FreeMind &lt;a href="http://www.forusers.com/static/html/sample-freemind.png"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-5079878002915721719?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/5079878002915721719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=5079878002915721719' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/5079878002915721719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/5079878002915721719'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/03/created-open-source-utility-mm2s5.html' title='Created open source utility &apos;mm2s5&apos;'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_UJUFZU670Yc/RghAfIk-cfI/AAAAAAAAAA4/veaspM3CWb4/s72-c/Sample+Presentation.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-7317800874935409170</id><published>2007-03-18T18:18:00.000-03:00</published><updated>2007-03-19T17:27:33.821-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='olpc'/><title type='text'>Received my OLPC</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_UJUFZU670Yc/Rf6SEjKjOaI/AAAAAAAAAAY/y0kjLG58WD4/s1600-h/00033.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp1.blogger.com/_UJUFZU670Yc/Rf6SEjKjOaI/AAAAAAAAAAY/y0kjLG58WD4/s320/00033.jpg" alt="Victor playing with the OLPC" id="BLOGGER_PHOTO_ID_5043629239558158754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I asked for and got an OLPC to test and work on.  My first impressions are very  favorable.  It's very small and cute and something that kids are immediately drawn to, because it's not adult sized.  My 6 year old son has been playing with it on and off and I just saw him today explaining how to play on the laptop. I even overheard him saying that the laptop connects to other laptops which he must have overheard me mentioning to someone else.&lt;br /&gt;The keyboard is very small, but it's perfectly acceptable for two finger typing. My only &lt;a href="http://dev.laptop.org/ticket/1033"&gt;complaint&lt;/a&gt; is that the space bar and enter keys have dead areas in it, but that ought to be fixed pretty soon.&lt;br /&gt;The biggest complaint from my son is the trackpad.  He was almost brought to tears trying to use it.  It was frustrating for him because he would try to move right and it would move left.  Even build 303 seems to have that problem on occasion.  I never had problems with it, but I'm more used to using a trackpad.  It looks like he was starting his finger on the stylus area and then moving on to the trackpad which confused the laptop.  There is still some heavy development being done in this area and will probably be resolved soon.&lt;br /&gt;The display works briliantly even in bright sunlight. You should be able in the picture below that with the OLPC you can see the Google search page and on the IBM you can see nothing.   I took this picture in bright sunlight that would be too bright to even read a book comfortably.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_UJUFZU670Yc/Rf6TdDKjObI/AAAAAAAAAAg/Dx1ngci71j4/s1600-h/00039.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp3.blogger.com/_UJUFZU670Yc/Rf6TdDKjObI/AAAAAAAAAAg/Dx1ngci71j4/s320/00039.jpg" alt="" id="BLOGGER_PHOTO_ID_5043630759976581554" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I'm glad to be involved in the project and hope that I can make a positive contribution in some way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-7317800874935409170?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/7317800874935409170/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=7317800874935409170' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/7317800874935409170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/7317800874935409170'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/03/received-my-olpc.html' title='Received my OLPC'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_UJUFZU670Yc/Rf6SEjKjOaI/AAAAAAAAAAY/y0kjLG58WD4/s72-c/00033.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-7442227928470541145</id><published>2007-03-01T19:14:00.000-03:00</published><updated>2007-03-01T19:22:32.749-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='olpc'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>I'm getting an OLPC</title><content type='html'>I've asked for and looks like will receive an &lt;a href="http://wiki.laptop.org/go/Hardware_specification"&gt;BTest-1&lt;/a&gt; OLPC laptop for development and testing.  My son is working through letters and numbers so I'm looking on adapting a program for that.   It should be very interesting seeing how he uses the laptop as my tester.  Perhaps I can convince some of my colleagues at Google Brazil to contribute some time as well, it's a very exciting project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-7442227928470541145?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/7442227928470541145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=7442227928470541145' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/7442227928470541145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/7442227928470541145'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/03/im-getting-olpc.html' title='I&apos;m getting an OLPC'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-5254866711623178213</id><published>2007-02-25T17:50:00.000-03:00</published><updated>2007-02-25T18:48:36.346-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='olpc'/><title type='text'>OLPC and Security</title><content type='html'>The One Laptop Per Child (&lt;a href="http://wiki.laptop.org/go/Home"&gt;OLPC&lt;/a&gt;) project has an interesting take on building security for the laptop.  Here is my list of why the OLPC is especially vulnerable to security issues.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;100's of millions of these near identical laptops will be produced, making it a target for crackers.&lt;/li&gt;&lt;li&gt;The OLPC group want the child to be able to hack their own laptops, get right down to the code.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Some of the children are going to be very young, entering a password or even replying to dialog prompts may be asking too much.&lt;/li&gt;&lt;li&gt;These devices automatically connect to each other and automatically connect to the Internet.&lt;/li&gt;&lt;/ul&gt;So what will they be doing to improve security? They have a system called &lt;a href="http://dev.laptop.org/git.do?p=security;a=blob;h=96f4997602d817abf7be90a00bf68b3a79a73005;hb=HEAD;f=bitfrost.txt"&gt;Bitfrost&lt;/a&gt;, which comes from Norse mythology, where Bitfröst is the bridge which keeps mortals who live in Midgard from venturing into Asgrad, the realm of the gods.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Nearly all programs running on the laptop will be running in a fortified chroot, sort of like BSD jail.&lt;/li&gt;&lt;li&gt;Programs will store their data on a new object oriented filesystem.  This filesystem will automatically keep backups and store different versions of the files.  There are limits on what directories a program can read or write to.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Most programs can only access a file through a file open dialog.  So a malicious program can't secretly read private data on the laptop without the user knowing about it.&lt;/li&gt;&lt;li&gt;There are limits to how many times a file can be written to per minute.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Network utilization will be limited for each program. Each program can have a different set of settings:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Network on/off restriction&lt;/li&gt;&lt;li&gt;Bandwidth throttling with burst allowance&lt;/li&gt;&lt;li&gt;Connection rate limiting&lt;/li&gt;&lt;li&gt;IP/port destination restrictions&lt;/li&gt;&lt;li&gt;Time of day restrictions&lt;/li&gt;&lt;li&gt;Server port listening restrictions&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Each laptop has an id that is also held by the government.  If a laptop is stolen the next time it connects to the internet it will discover that fact and disable itself. If the laptop doesn't connect after a period of time (say 40 days) it also disables itself until you connect to the internet.&lt;/li&gt;&lt;li&gt;The laptop will use the &lt;a href="http://openid.net/"&gt;OpenId&lt;/a&gt; specification and will automatically authenticate the laptop for the child when going to OpenId sites.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;When connected to a network that has a backup service, the laptop will automatically backup it's files there in a secure manner.&lt;/li&gt;&lt;/ul&gt;When the child uses the machine for the first time the laptop will create a public private key and store it on their filesystem.  The private key won't be readable except through an API which the project is capable of enforcing, since it's a new filesystem.  Programs that need to be able to read more files (like a picture viewer) would have to be digitally signed by the OLPC group to have slightly elevated privileges (at least that's what I understood).&lt;br /&gt;They recognize that there are two kinds of ways of breaking into a computer:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;A user downloads a malicious program and runs it (thinking it's something else)&lt;/li&gt;&lt;li&gt;A hole is found in an non-malicious program and a program can install itself via that hole&lt;/li&gt;&lt;/ol&gt;All program on the laptop will have the minimum number of permissions in order to run properly. So even if a program like solitaire is taken over, it can't do much harm since solitaire wouldn't have access to the internet or the filesystem - it doesn't need it.&lt;br /&gt;Being able to brick a laptop that has been stolen should greatly reduce laptop theft (once the thieves learn that they can't use it or sell it).&lt;br /&gt;I think it's great that the OLPC project wants the child to be able to hack their laptops. This forces them to think better about how to make the laptop secure.   The knee-jerk method would be to lock the machine so the child can't do very much which would make the laptop far less useful. Older kids can even get a developer key so they can create slightly more powerful programs, but still security is not compromised.   Good job guys.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-5254866711623178213?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/5254866711623178213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=5254866711623178213' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/5254866711623178213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/5254866711623178213'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/02/olpc-and-security.html' title='OLPC and Security'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-7908757767479489088</id><published>2007-02-25T16:11:00.000-03:00</published><updated>2007-02-25T17:04:37.163-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ps3'/><category scheme='http://www.blogger.com/atom/ns#' term='sony'/><title type='text'>Sony's Culture and the PS3</title><content type='html'>I think I've been vindicated when I &lt;a href="http://scottkirkwood.blogspot.com/2006/03/tough-times-for-sony.html"&gt;said&lt;/a&gt; that the Sony PS3 would be a failure. The main issue with the console was the insistence of putting a BluRay player on the device.  I think it shows how there's an organizational/cultural problem at Sony.  They insist on putting an expensive add-on  to the game simply to satisfy some people in the media division of the company.  The BluRay player does nothing to improve the gaming experience and in fact it a little slower than a fast DVD player. The rationalization was that some people would by the PS3 &lt;span style="font-weight: bold;"&gt;just for the BluRay player&lt;/span&gt;.  And maybe, they might buy a game too.  What kind of game do you sell to someone who doesn't really want to play games?&lt;br /&gt;&lt;br /&gt;In a related note you can buy the PS3 with &lt;a href="http://www.linuxdevices.com/news/NS7863481537.html"&gt;Linux pre-installed&lt;/a&gt;.  Although that's really neat, it means there's one more reason to buy a PS3 and not play games!&lt;br /&gt;&lt;br /&gt;Every current PS3 sold is sold at a loss.  The only way Sony can recoup that money lost is by the licensing money from PS3 games and BluRay disks. For them to really make a lot of money both BluRay and the PS3 needed to be a success, and that was Sony's deluded dream.&lt;br /&gt;&lt;br /&gt;The problem is, Sony should not be a media company and a hardware company at the same time.  They need to make devices that people want without trying to tie the customers virtually by incorporating proprietary formats (DRM, Memory Stick, BluRay, etc.). They need to make consumer electronics that people want, again.  They need to ditch Sony/BMG and Sony Pictures those divisions - they are like that cool friend you want to impress, but he keeps getting you in trouble.&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;&lt;a href="http://arstechnica.com/journals/thumbs.ars/2007/2/23/7197"&gt;PS3 is proof positive: bad things happen when gaming isn't the focus&lt;br /&gt;&lt;/a&gt;&lt;a href="http://arstechnica.com/journals/thumbs.ars/2007/2/23/7197"&gt;Sony's PS3 gamble: should the optical revolution have been optional?&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-7908757767479489088?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/7908757767479489088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=7908757767479489088' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/7908757767479489088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/7908757767479489088'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/02/sonys-culture-and-ps3.html' title='Sony&apos;s Culture and the PS3'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8709811.post-6354592003514611238</id><published>2007-01-31T10:03:00.000-02:00</published><updated>2007-01-31T10:27:40.695-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blogging'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Google Notebook, great for blogging</title><content type='html'>I just discovered &lt;a href="http://google.com/notebook"&gt;Google Notebook&lt;/a&gt; that I knew existed but had never tried it, I heard it referred to as a post-it note type tool, but it's more useful than that (I'm not a big Post-it™ fan).  If you install the extension, you can quickly select and gather snippets from a web page and throw it in your &lt;span style="font-style: italic;"&gt;notebook&lt;/span&gt;.  It automatically keeps track of the originating link and the date you clipped it.  The notebook supports rich text and images, in that sense it's quite complete.&lt;br /&gt;The only thing missing is the ability to take an entire notebook and make a blog entry for it. Maybe I could make it my &lt;a href="http://googleblog.blogspot.com/2006/05/googles-20-percent-time-in-action.html"&gt;20% project&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8709811-6354592003514611238?l=www.scottkirkwood.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.scottkirkwood.com/feeds/6354592003514611238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8709811&amp;postID=6354592003514611238' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/6354592003514611238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8709811/posts/default/6354592003514611238'/><link rel='alternate' type='text/html' href='http://www.scottkirkwood.com/2007/01/google-notebook-great-for-blogging.html' title='Google Notebook, great for blogging'/><author><name>Scott Kirkwood</name><uri>http://www.blogger.com/profile/01644448074431939072</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.forusers.com/static/images/MeAndVictorCropped.jpg'/></author><thr:total>1</thr:total></entry></feed>
