<?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-7419827258262914945</id><updated>2011-11-29T13:14:29.409-08:00</updated><category term='linus'/><category term='fish'/><category term='books'/><category term='dogpile'/><category term='firebug'/><category term='boost'/><category term='robot'/><category term='dbus'/><category term='nerd'/><category term='dfwpythoneers'/><category term='array'/><category term='python optimization'/><category term='first post'/><category term='css'/><category term='wpa_supplicant'/><category term='netflix'/><category term='virtual'/><category term='.net'/><category term='unicode'/><category term='c++'/><category term='parser cssutils'/><category term='flatpage'/><category term='xml'/><category term='cheeseshop'/><category term='multiprocessing'/><category term='helixplayer'/><category term='ntfs'/><category term='schema'/><category term='webcam'/><category term='utf-8'/><category term='more'/><category term='battery'/><category term='django'/><category term='mochikit'/><category term='vlc'/><category term='yaml'/><category term='pydotorg'/><category term='filesystem'/><category term='ups'/><category term='mac'/><category term='optimization'/><category term='power'/><category term='bradallen'/><category term='tuxdroid'/><category term='byte'/><category term='gotcha'/><category term='madness'/><category term='munin'/><category term='compiler'/><category term='google'/><category term='motion'/><category term='ruby'/><category term='yahoo'/><category term='education'/><category term='helios'/><category term='mistake'/><category term='javascript'/><category term='debugging'/><category term='pcre'/><category term='bitset'/><category term='perl'/><category term='python jobs pyjobo'/><category term='python c string format'/><category term='mplayer'/><category term='gnome'/><category term='nokia'/><category term='rectangle'/><category term='unit test'/><category term='cms'/><category term='python'/><category term='mako'/><category term='monitor'/><category term='codec'/><category term='distutils'/><category term='livecd'/><category term='surver'/><category term='git firewall'/><category term='pyjobo'/><category term='linux'/><category term='eric'/><category term='plotkit'/><category term='easy_installl'/><category term='meghan'/><category term='gdb'/><category term='law'/><category term='silverlight'/><category term='ajax'/><category term='sqlite'/><category term='nagios'/><category term='web2py'/><category term='meeting'/><category term='mapping'/><category term='bnf'/><category term='blog'/><category term='quiz'/><category term='kde'/><category term='regex'/><category term='recipe'/><category term='ElementTree'/><category term='wireless'/><category term='binary search'/><category term='twitter'/><category term='parrot'/><category term='spatial'/><category term='search'/><category term='wep'/><category term='qemu'/><category term='OLPC'/><category term='mono'/><category term='cactus'/><category term='ftp'/><category term='profile'/><title type='text'>Duck Typing</title><subtitle type='html'>"When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck."
&lt;br /&gt;
  -- Alex Martelli</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>56</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-2291962744238570193</id><published>2010-11-08T14:55:00.000-08:00</published><updated>2010-11-09T06:57:16.878-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python jobs pyjobo'/><title type='text'>Updating the Python Job Board</title><summary type='text'>Have you ever looked at the Python.org Job Board? It lists in chronological order postings sent by recruiters and employers looking for developers with skills and interests in Python. 

The Job Board has been around since at least 1997 (I checked using the WayBack Machine just to see what it looked like) and not too much has changed since then. New postings are sent by email and a volunteer cuts </summary><link rel='related' href='http://www.python.org/community.jobs' title='Updating the Python Job Board'/><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/2291962744238570193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=2291962744238570193' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/2291962744238570193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/2291962744238570193'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2010/11/updating-python-job-board.html' title='Updating the Python Job Board'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-1919513197981587570</id><published>2010-11-08T12:34:00.000-08:00</published><updated>2010-11-08T12:34:56.598-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='more'/><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><title type='text'>one of those days..</title><summary type='text'>I have not written anything in here for a while because:

1) I'm too busy
2) I don't have anything interesting to say
3) No-one reads this, right?

A funny thing happened today.. I found this post from Steve Yegge that brushed aside my dejected writer's block and reminded me why I started blogging in the first place - partly to help me remember interesting things and partly to improve my writing </summary><link rel='related' href='http://sites.google.com/site/steveyegge2/you-should-write-blogs' title='one of those days..'/><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/1919513197981587570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=1919513197981587570' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/1919513197981587570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/1919513197981587570'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2010/11/one-of-those-days.html' title='one of those days..'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-5566833284911138216</id><published>2010-07-12T12:33:00.000-07:00</published><updated>2010-07-12T12:33:40.174-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mako'/><category scheme='http://www.blogger.com/atom/ns#' term='pydotorg'/><category scheme='http://www.blogger.com/atom/ns#' term='yaml'/><title type='text'>Moving House</title><summary type='text'>Not literally moving house but I decided it was time to upgrade my python.org local build machine from Redhat ES4 to something more recent so I fired up a Fedora Core 11 VM that I haven't been using so far, copied over my SSH keys and started checking out the website svn repository.

There was nothing wrong particularly with ES4 but Xemacs is a little long in the tooth now and didn't want to mess</summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/5566833284911138216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=5566833284911138216' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/5566833284911138216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/5566833284911138216'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2010/07/moving-house.html' title='Moving House'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-1667615116582077224</id><published>2010-06-26T10:48:00.000-07:00</published><updated>2010-06-26T10:48:19.385-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pyjobo'/><title type='text'>Python Job Board Tag Cloud</title><summary type='text'>Using TagCrowd (http://www.tagcrowd.com), I created this visualisation of the most common words on the Python Job Board (after removing meaningless, high-frequency words like contact, description, e-mail etc).


&lt;!-- #htmltagcloud{

/******************************************
 * CUSTOMIZE CLOUD CSS BELOW (optional)
 */
 font-size: 100%;
 width: auto;  /* auto or fixed width, e.g. 500px   */
 </summary><link rel='related' href='http://www.python.org/community/jobs/' title='Python Job Board Tag Cloud'/><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/1667615116582077224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=1667615116582077224' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/1667615116582077224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/1667615116582077224'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2010/06/python-job-board-tag-cloud.html' title='Python Job Board Tag Cloud'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-3286353802453446017</id><published>2010-01-27T06:43:00.000-08:00</published><updated>2010-01-27T06:49:27.095-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git firewall'/><title type='text'>Using Git Behind a  Firewall</title><summary type='text'>I am doing a lot of work involving the Samba code base right now and it has frustrated me that I cannot check out the trunk using git because I am behind a firewall.. then again the tarballs for the stable releases have been adequate until I realised that my tinker toy modifications needed to be made into patches and that was tricky..Long story short:if you try 'git clone git://git.samba.org/</summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/3286353802453446017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=3286353802453446017' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/3286353802453446017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/3286353802453446017'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2010/01/using-git-behind-firewall.html' title='Using Git Behind a  Firewall'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-6771226581238986311</id><published>2009-07-21T20:35:00.000-07:00</published><updated>2010-05-06T11:43:09.065-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='mono'/><title type='text'>Python in a web page</title><summary type='text'>"Gestalt is a library released by MIX Online Labs that allows you to write Ruby, Python &amp; XAML code in your (X)HTML pages. It enables you to build richer and more powerful web applications by marrying the benefits of expressive languages, modern compilers, AJAX &amp; RIAs with the write » save » refresh development model of the web."

Python on a web page! In Silverlight .. which means it is time to </summary><link rel='related' href='http://visitmix.com/labs/gestalt/' title='Python in a web page'/><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/6771226581238986311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=6771226581238986311' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/6771226581238986311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/6771226581238986311'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2009/07/python-in-web-page.html' title='Python in a web page'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-7468430239072440339</id><published>2009-06-18T21:02:00.000-07:00</published><updated>2009-07-20T13:27:42.014-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sqlite'/><category scheme='http://www.blogger.com/atom/ns#' term='gotcha'/><title type='text'>SQLite Gotcha 2</title><summary type='text'>Creating a table with a column of type INT PRIMARY KEY will not result in automatic assignment of a unique value into that column when new rows are added. Why not? In part because INT is not a type in SQLite (but you can use it and the column will have integer affinity but you have to provide the value) and partly because rowid assignment only occurs on columns defined as INTEGER PRIMARY KEY.Take</summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/7468430239072440339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=7468430239072440339' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/7468430239072440339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/7468430239072440339'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2009/06/sqlite-gotcha-2.html' title='SQLite Gotcha 2'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-2705785633470804785</id><published>2009-06-07T15:35:00.001-07:00</published><updated>2009-06-07T16:00:19.312-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sqlite'/><category scheme='http://www.blogger.com/atom/ns#' term='gotcha'/><title type='text'>SQLite Gotcha</title><summary type='text'>ROWID is a reserved word in SQLite which seems reasonable.. but it has a synonym OID so if you declare a table with a column called OID then select from that table without using the table name as a prefix, you will not get what you expect.If you are using an ORM to abstract away the database then you may never realise what is going on..</summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/2705785633470804785/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=2705785633470804785' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/2705785633470804785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/2705785633470804785'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2009/06/sqlite-gotcha.html' title='SQLite Gotcha'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-5520590914280256453</id><published>2009-06-07T15:15:00.000-07:00</published><updated>2009-06-07T15:17:06.362-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unicode'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='gotcha'/><title type='text'>Unicode Gotcha</title><summary type='text'>What will this give you?&gt;&gt;&gt; astring = None&gt;&gt;&gt; print unicode(astring)If you said None then you will be surprised to find the answer is u"None" which is not at all the same thing.  Really messed up my day..</summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/5520590914280256453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=5520590914280256453' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/5520590914280256453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/5520590914280256453'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2009/06/unicode-gotcha.html' title='Unicode Gotcha'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-8402282149007328775</id><published>2009-06-01T07:56:00.000-07:00</published><updated>2009-06-01T10:42:19.198-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dogpile'/><category scheme='http://www.blogger.com/atom/ns#' term='yahoo'/><category scheme='http://www.blogger.com/atom/ns#' term='search'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Bing Sucks</title><summary type='text'>Bing, the new search engine from Microsoft, sucks.  This conclusion is based on one simple test:Enter "internet search" as your search term and the results do not contain Yahoo, Google, Bing or LiveSearch. Dogpile is the number one hit.  Remove the word internet and now you get Yahoo listed top.Try the same test on Yahoo and it lists Bing first in a sponsored results box, followed by Yahoo and </summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/8402282149007328775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=8402282149007328775' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/8402282149007328775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/8402282149007328775'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2009/06/bing-sucks.html' title='Bing Sucks'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-9081405132793967765</id><published>2009-05-10T09:44:00.000-07:00</published><updated>2009-06-01T10:42:56.545-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ftp'/><category scheme='http://www.blogger.com/atom/ns#' term='twitter'/><title type='text'>New Things</title><summary type='text'>I am trying to be more organized on my Mac. As part of this I have added some new apps: Cyber Duck (a pretty good FTP client) and Syrinx for twitter. They work, they don't get in the way and they look they are part of the system.</summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/9081405132793967765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=9081405132793967765' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/9081405132793967765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/9081405132793967765'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2009/05/new-things.html' title='New Things'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-6759024651881699980</id><published>2009-04-12T18:52:00.001-07:00</published><updated>2009-06-01T10:43:45.553-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='regex'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='pcre'/><category scheme='http://www.blogger.com/atom/ns#' term='boost'/><title type='text'>Regex Exploration</title><summary type='text'>The QuestionI was asked a question on the way out of the office at the end of the week: what is the difference between a regex match and a regex search?It didn't seem like a difficult question but it stumped me for a little while. Both a search and a match should use a regular expression and evaluate it against a text.  Perhaps a regex search traverses the input string and returns one result at a</summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/6759024651881699980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=6759024651881699980' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/6759024651881699980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/6759024651881699980'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2009/04/regex-exploration.html' title='Regex Exploration'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-831428781321265578</id><published>2009-04-11T06:40:00.000-07:00</published><updated>2009-04-11T06:54:36.204-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='law'/><category scheme='http://www.blogger.com/atom/ns#' term='eric'/><category scheme='http://www.blogger.com/atom/ns#' term='compiler'/><title type='text'>Eric's Law</title><summary type='text'>If you think the compiler is wrong, you are 99.999% certain to be the problem.*This number may vary according to the platform and the compiler.</summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/831428781321265578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=831428781321265578' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/831428781321265578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/831428781321265578'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2009/04/erics-law.html' title='Eric&apos;s Law'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-7418000130616886516</id><published>2009-04-04T07:47:00.000-07:00</published><updated>2009-04-04T07:56:34.919-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web2py'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Web2py rocks more than the alternatives?</title><summary type='text'>I need to find some spare time, perhaps just some of that discretionary sleeping time, to take a look at web2py.  I have a small project in mind - updating my friends website to have a simple calendar and appointment system - but I have been getting slammed at the office porting an application to AIX (yes, it's still in use) and busy at home with the twins.</summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/7418000130616886516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=7418000130616886516' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/7418000130616886516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/7418000130616886516'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2009/04/web2py-rocks-more-than-alternatives.html' title='Web2py rocks more than the alternatives?'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-3372765532204361103</id><published>2009-01-25T20:56:00.000-08:00</published><updated>2009-01-25T20:58:32.894-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='madness'/><category scheme='http://www.blogger.com/atom/ns#' term='linus'/><category scheme='http://www.blogger.com/atom/ns#' term='kde'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>Linus comes to his senses</title><summary type='text'>According to a link on Slashdot, Linus Torvalds has finally come to his senses and now agrees with me that Gnome is a better choice for a desktop than KDE.</summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/3372765532204361103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=3372765532204361103' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/3372765532204361103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/3372765532204361103'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2009/01/linus-comes-to-his-senses.html' title='Linus comes to his senses'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-803316286134418983</id><published>2008-12-21T08:43:00.000-08:00</published><updated>2008-12-21T08:47:56.889-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bradallen'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><title type='text'>Best Mac Downloads of 2008</title><summary type='text'>Brad added this link for the best Mac downloads of 2008 to his del.icio.us account and it has several interesting entries including Timemachine backups over the network, Dropbox (file synchronization over the net) and XBMC (a very nice looking cross platform media center).</summary><link rel='related' href='http://lifehacker.com/5111727/most-popular-free-mac-downloads-of-2008' title='Best Mac Downloads of 2008'/><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/803316286134418983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=803316286134418983' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/803316286134418983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/803316286134418983'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2008/12/best-mac-downloads-of-2008.html' title='Best Mac Downloads of 2008'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-238644974557575193</id><published>2008-12-21T08:33:00.000-08:00</published><updated>2008-12-21T08:43:22.628-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ntfs'/><category scheme='http://www.blogger.com/atom/ns#' term='filesystem'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><title type='text'>Writable NTFS on Mac</title><summary type='text'>I use an external HD to to carry large files between home and office but the Mac (or at least Leopard) doesn't support NTFS as a writable filesystem so the arrangement is only useful when all the new data is at the office and nothing needs to be changed at home.  Obviously this is not ideal.MacFUSE allows the addition of new fileystems to the Mac including NTFS-3g which originated on Linux (I </summary><link rel='related' href='http://code.google.com/p/macfuse/' title='Writable NTFS on Mac'/><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/238644974557575193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=238644974557575193' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/238644974557575193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/238644974557575193'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2008/12/writable-ntfs-on-mac.html' title='Writable NTFS on Mac'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-759247610151406109</id><published>2008-12-10T12:33:00.000-08:00</published><updated>2008-12-10T12:37:43.691-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='education'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='livecd'/><category scheme='http://www.blogger.com/atom/ns#' term='helios'/><title type='text'>Illegal Use of Linux in the Classroom</title><summary type='text'>A teacher in Austin, TX did not like what she saw when she found a student in her class experimenting with a liveCD from HeliOS.. so she confiscated the CD, reprimanded the student and then wrote a letter to his after explaining he was potentially liable to a civil suit and that the kids should be using Microsoft products which they (MS) would be happy to supply for free..Wow.Breathlessly </summary><link rel='related' href='http://linuxlock.blogspot.com/2008/12/linux-stop-holding-our-kids-back.html' title='Illegal Use of Linux in the Classroom'/><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/759247610151406109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=759247610151406109' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/759247610151406109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/759247610151406109'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2008/12/illegal-use-of-linux-in-classroom.html' title='Illegal Use of Linux in the Classroom'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-1743866719913427468</id><published>2008-12-03T08:29:00.000-08:00</published><updated>2008-12-03T08:35:15.589-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='meghan'/><category scheme='http://www.blogger.com/atom/ns#' term='vlc'/><category scheme='http://www.blogger.com/atom/ns#' term='OLPC'/><category scheme='http://www.blogger.com/atom/ns#' term='mplayer'/><title type='text'>More Uses For An OLPC</title><summary type='text'>Video player for toddler.Meghan likes watching DVDs in the minivan and she likes banging on the keys of the OLPC so I combined the two. I used Handbrake to rip one of her favorite DVDs then loaded mplayer onto the OLPC and played back the movie from a a thumb-drive. VLC and mplayer had similar problems with freezing before announcing the file was longer available.  I  tried turning off power </summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/1743866719913427468/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=1743866719913427468' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/1743866719913427468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/1743866719913427468'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2008/12/more-uses-for-olpc.html' title='More Uses For An OLPC'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-8852279787554373170</id><published>2008-12-03T07:07:00.000-08:00</published><updated>2008-12-03T07:33:03.866-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='surver'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Perl is Dead! Long Live Perl!</title><summary type='text'>This somewhat risible survey reveals that Perl has almost fallen out of the top 10 programming langauges in use. Given the many different ways that statistics can be mashed together and the loose method of collecting the numbers, I think it is unlikely that they can claim 3 decimal places of accuracy for any of this.On the other hand, using activity as a barometer of interest in a langugae and </summary><link rel='related' href='http://use.perl.org/~Ovid/journal/38010?from=rss' title='Perl is Dead! Long Live Perl!'/><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/8852279787554373170/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=8852279787554373170' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/8852279787554373170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/8852279787554373170'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2008/12/perl-is-dead-long-live-perl.html' title='Perl is Dead! Long Live Perl!'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-2487951579665353083</id><published>2008-12-02T18:41:00.000-08:00</published><updated>2008-12-02T18:44:07.491-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wpa_supplicant'/><category scheme='http://www.blogger.com/atom/ns#' term='wireless'/><category scheme='http://www.blogger.com/atom/ns#' term='wep'/><category scheme='http://www.blogger.com/atom/ns#' term='OLPC'/><title type='text'>My First Defect (for the OLPC)</title><summary type='text'>I noticed that turning the radio off and then back on from the OLPC control panel resulted in being endlessly prompted for my WEP password.. so I investigated a little more and then raised this defect .. now I will have to see if there is something similar in Fedora.</summary><link rel='related' href='http://dev.laptop.org/ticket/9060' title='My First Defect (for the OLPC)'/><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/2487951579665353083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=2487951579665353083' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/2487951579665353083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/2487951579665353083'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2008/12/my-first-defect-for-olpc.html' title='My First Defect (for the OLPC)'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-4577754274078175506</id><published>2008-11-30T11:17:00.001-08:00</published><updated>2008-11-30T11:21:33.761-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webcam'/><category scheme='http://www.blogger.com/atom/ns#' term='monitor'/><category scheme='http://www.blogger.com/atom/ns#' term='meghan'/><category scheme='http://www.blogger.com/atom/ns#' term='OLPC'/><category scheme='http://www.blogger.com/atom/ns#' term='motion'/><title type='text'>Other Uses for an OLPC</title><summary type='text'>Baby webcam monitor..Downloaded motion and set it up, put the lpatop on some furniture and left my daughter sleeping while I watched her in a browser window from another room. It worked ok.</summary><link rel='related' href='http://wiki.laptop.org/go/Detect_motion_(activity)' title='Other Uses for an OLPC'/><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/4577754274078175506/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=4577754274078175506' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/4577754274078175506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/4577754274078175506'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2008/11/other-uses-for-olpc.html' title='Other Uses for an OLPC'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-2571355342426811732</id><published>2008-11-12T07:09:00.000-08:00</published><updated>2008-11-12T07:59:51.046-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OLPC'/><title type='text'>New OLPC Spin</title><summary type='text'>Funny thing coincidences.. I was talking to a co-worker about the OLPC and suggesting he avoid vmware images or ISOs and that instead he should use a Fedora system and add Sugar from RPM because the ISOs that I had seen and become out-of-date or unavailable.. and then we found Sebastian Dziallas reports there is a new spin of Sugar available from Fedora.  This is a customized version of Fedora </summary><link rel='related' href='http://sdziallas.joyeurs.com/blog/2008/10/announcing-fedora-sugar-spin.html' title='New OLPC Spin'/><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/2571355342426811732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=2571355342426811732' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/2571355342426811732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/2571355342426811732'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2008/11/new-olpc-spin.html' title='New OLPC Spin'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-6744322933430567743</id><published>2008-11-06T15:07:00.000-08:00</published><updated>2008-11-30T11:23:20.838-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><category scheme='http://www.blogger.com/atom/ns#' term='gdb'/><category scheme='http://www.blogger.com/atom/ns#' term='debugging'/><title type='text'>Ruby Rocks!</title><summary type='text'>About two weeks ago, I was at Nerdbooks (check them out at http://www.nerdbooks.com) and I bought a couple of great books; The Art of Debugging and Programming Ruby. The Art of Debugging by Matloff and Salzman from Nostarch Press. I picked this up off the shelf and found a couple of things I didn't know about using gdb inside a minute so I went ahead and got it.  The plan is to have it around for</summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/6744322933430567743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=6744322933430567743' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/6744322933430567743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/6744322933430567743'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2008/11/ruby-rocks.html' title='Ruby Rocks!'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-4551042479000205786</id><published>2008-10-17T17:44:00.001-07:00</published><updated>2008-10-17T17:45:09.254-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nerd'/><title type='text'>Nerd Score</title><summary type='text'>I just tried the Nerd Quiz and thought I was doing so-so, kind of average (missed some of the questions) so I was surprised to get this:</summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/4551042479000205786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=4551042479000205786' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/4551042479000205786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/4551042479000205786'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2008/10/nerd-score.html' title='Nerd Score'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-1329749309938885607</id><published>2008-08-11T07:19:00.000-07:00</published><updated>2008-08-11T07:38:15.159-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='array'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='byte'/><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='binary search'/><title type='text'>Faster! Faster! And Smaller!</title><summary type='text'>I have been hacking some Python code in a (vain) attempt to get a working algorithm for the Netflix prize and I have something that looks promising but is slow so I have been investigating optimizing it.I got a dramatic speed-up after I noticed that I was searching a list using index when the list was ordered and so amenable to a binary search.Using the  bisect module for this looks like:import </summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/1329749309938885607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=1329749309938885607' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/1329749309938885607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/1329749309938885607'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2008/08/faster-faster-and-smaller.html' title='Faster! Faster! And Smaller!'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-1633718881866320169</id><published>2008-06-11T11:38:00.000-07:00</published><updated>2008-06-24T06:56:45.784-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='multiprocessing'/><title type='text'>MOTD: pyprocessing</title><summary type='text'>I have thought about trying multi-processing in Python before but, sometimes, the heavy lifting of building the infra-structure put me off until I found this:http://pyprocessing.berlios.de/Neat. Off to play with it.</summary><link rel='related' href='http://pyprocessing.berlios.de/' title='MOTD: pyprocessing'/><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/1633718881866320169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=1633718881866320169' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/1633718881866320169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/1633718881866320169'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2008/06/motd-pyprocessing.html' title='MOTD: pyprocessing'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-5136839605533147882</id><published>2008-06-10T13:57:00.000-07:00</published><updated>2008-06-24T07:32:21.656-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='profile'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='python optimization'/><title type='text'>Lxml and a Python Optimization Anecdote</title><summary type='text'>One of my co-workers wrote a Python script to check the contents of an xml file written for an OVAL application and remarked it took nearly 48 hours to finish."Too slow", says I, "you must be doing something wrong"."Make it faster then", he said.My final version completed the same work in under 5 seconds which is an improvement of around 40000 times or 4 orders of magnitude. I was thinking about </summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/5136839605533147882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=5136839605533147882' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/5136839605533147882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/5136839605533147882'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2008/06/lxml-and-python-optimization-anecdote.html' title='Lxml and a Python Optimization Anecdote'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-6014147918474563114</id><published>2008-05-20T19:50:00.000-07:00</published><updated>2008-05-20T20:32:53.771-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='netflix'/><title type='text'>Netflix Submission in 2 lines of awk</title><summary type='text'>Netflix are offering a prize if you can develop an algorithm that improves the accuracy of their suggestion system by 10%.. http://www.netflixprize.comSome people have developed elaborate schemes based around cross-correlation and clustering etc.  I submitted my first results using two lines of awk:NF==2 {print $0} NF==1 {print 3.4}which just scores all movies at 3.4 and gives an RMSE of 1.16.</summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/6014147918474563114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=6014147918474563114' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/6014147918474563114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/6014147918474563114'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2008/05/netflix-submission-in-2-lines-of-awk.html' title='Netflix Submission in 2 lines of awk'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-2204218303497648980</id><published>2008-01-17T08:41:00.000-08:00</published><updated>2008-01-17T08:44:52.924-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='battery'/><category scheme='http://www.blogger.com/atom/ns#' term='nokia'/><title type='text'>Nokia Battery</title><summary type='text'>I have a Nokia 6682 phone and it's great, not just because it can run Python, but all of a sudden the battery seems to last not very long at all. So I need a new battery, a BL-5C, and that battery is available on-line for 5 dollars but is that because they are past their shelf-life? Never mind that the particular was recalled for a slight problem with catching fire.Who can say?</summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/2204218303497648980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=2204218303497648980' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/2204218303497648980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/2204218303497648980'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2008/01/nokia-battery.html' title='Nokia Battery'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-5661858592613211566</id><published>2007-12-17T20:38:00.001-08:00</published><updated>2007-12-17T20:39:08.589-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OLPC'/><title type='text'>The OLPC is here</title><summary type='text'>I haven't been keeping with news so I was surprised and happy to find my new(est) toy on the doorstep tonight - an OLPC XO.  I have been trying to put it down for several hours now so that I can take care of, well, anything else but it's fascinating. Performance wise it is not snappy but I can get on the network, download things, type in the word processor (abiword, I think) and generally fiddle </summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/5661858592613211566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=5661858592613211566' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/5661858592613211566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/5661858592613211566'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2007/12/olpc-is-here.html' title='The OLPC is here'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-6549994630022732340</id><published>2007-12-09T20:52:00.000-08:00</published><updated>2007-12-09T21:12:08.765-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wpa_supplicant'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Starting a wireless interface properly</title><summary type='text'>I added WPA-PSK to my router recently (the wireless connection has been open up to now) and that immediately caused problems because my Linux laptop (running FC6) didn't want to play nice.  My shiny new MacBook had no problems (no surprise there).After some rummaging around, I found that I needed to start wpa_supplicant so I tried that using the init script but had no success.  After some more </summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/6549994630022732340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=6549994630022732340' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/6549994630022732340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/6549994630022732340'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2007/12/starting-wireless-interface-properly.html' title='Starting a wireless interface properly'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-4364554671127928065</id><published>2007-10-02T16:43:00.000-07:00</published><updated>2007-10-02T16:52:30.543-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='munin'/><category scheme='http://www.blogger.com/atom/ns#' term='monitor'/><category scheme='http://www.blogger.com/atom/ns#' term='cactus'/><category scheme='http://www.blogger.com/atom/ns#' term='nagios'/><title type='text'>Simple System Monitoring with Munin</title><summary type='text'>I have a machine that I compile code on and it is very slow, taking 3 hours and more to build.  Using top, vmstat and iostat was fine for a quick examination but I wanted something simpler to set up and with good output.  I have used Nagios before and found it to be great for serious monitoring but it requires some level of effort in setting up that I wasn't ready for here so I tried a more </summary><link rel='related' href='http://munin.sf.net' title='Simple System Monitoring with Munin'/><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/4364554671127928065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=4364554671127928065' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/4364554671127928065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/4364554671127928065'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2007/10/simple-system-monitoring-with-munin.html' title='Simple System Monitoring with Munin'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-1847159012252425306</id><published>2007-09-29T20:04:00.000-07:00</published><updated>2007-09-30T19:13:00.280-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='mochikit'/><category scheme='http://www.blogger.com/atom/ns#' term='plotkit'/><category scheme='http://www.blogger.com/atom/ns#' term='firebug'/><title type='text'>PlotKit and MochiKit</title><summary type='text'>I needed to draw some graphs on a web page dynamically from data from a command line application so I took a look at Plotkit which, apart from having some very nice looking output, has quick methods to draw a graph from the contents of a HTML table on a page (DatasetFromTable - perfect for what I want) or the EasyPlot method that draws a chart in one line of code (or two if you count the HTML).</summary><link rel='related' href='http://www.liquidx.net/plotkit/' title='PlotKit and MochiKit'/><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/1847159012252425306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=1847159012252425306' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/1847159012252425306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/1847159012252425306'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2007/09/plotkit-and-mochikit.html' title='PlotKit and MochiKit'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-691087476134153212</id><published>2007-08-20T19:54:00.000-07:00</published><updated>2007-08-20T20:56:31.523-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python c string format'/><title type='text'>Tips and Tricks:  strings and formats</title><summary type='text'>What if you want to output string data in a formatted fashion?  You could use a format string in the same way that you would if writing PHP, C, Perl etc.. where %s is replaced by a string, %f is a float etc then you could end up with something like:print "%10s is a filename"%stringvarwhich would print the contents right-justified in a 10 character field. What if you wanted left-justified?Well, </summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/691087476134153212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=691087476134153212' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/691087476134153212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/691087476134153212'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2007/08/tips-and-tricks-strings-and-formats.html' title='Tips and Tricks:  strings and formats'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-4156517408126663410</id><published>2007-08-20T07:10:00.000-07:00</published><updated>2007-08-20T07:11:15.130-07:00</updated><title type='text'>Pyglet</title><summary type='text'>Pyglet is a cross-platform windowing and multimedia library for Python.. uses OpenGL and has a clean API.I'll take a look and write it up.</summary><link rel='related' href='http://pyglet.org/' title='Pyglet'/><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/4156517408126663410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=4156517408126663410' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/4156517408126663410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/4156517408126663410'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2007/08/pyglet.html' title='Pyglet'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-6740180945483528493</id><published>2007-07-28T08:14:00.000-07:00</published><updated>2007-07-28T08:14:25.577-07:00</updated><title type='text'>Indexing the Sky</title><summary type='text'>Indexing the SkySETI may be the Search for ExtraTerrestrial Indexes.</summary><link rel='related' href='http://www.star.le.ac.uk/~cgp/ag/skyindex.html' title='Indexing the Sky'/><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/6740180945483528493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=6740180945483528493' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/6740180945483528493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/6740180945483528493'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2007/07/indexing-sky.html' title='Indexing the Sky'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-6329558098662216599</id><published>2007-07-28T06:40:00.000-07:00</published><updated>2007-07-28T06:41:40.809-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='mapping'/><category scheme='http://www.blogger.com/atom/ns#' term='rectangle'/><category scheme='http://www.blogger.com/atom/ns#' term='spatial'/><title type='text'>Rectangle classes in python</title><summary type='text'>This will be useful for mapping applications.. assuming it works well. I keep hoping to find time to build something with Google maps and Python people data. Maybe this will help.</summary><link rel='related' href='http://cheeseshop.python.org/pypi/Rect/4' title='Rectangle classes in python'/><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/6329558098662216599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=6329558098662216599' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/6329558098662216599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/6329558098662216599'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2007/07/rectangle-classes-in-python.html' title='Rectangle classes in python'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-9216684813642011426</id><published>2007-07-15T20:26:00.000-07:00</published><updated>2007-07-15T20:40:57.086-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bnf'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='parrot'/><title type='text'>If it looks like a Duck, it may be a Parrot..</title><summary type='text'>Last Saturday (July 15), the DFW Pythoneers gathered together to hear wise words from Patrick Michaud. "Lo", he said, "it is not an ex-parrot (though it may be pining for the fjords.." and we listened in solemnity.PM gave us another great talk and explained why Perl 6 is important/interesting/intriguing to Python people and how we can get pizza paid for by the Perl foundation while looking at </summary><link rel='related' href='http://wwww.parrotcode.org' title='If it looks like a Duck, it may be a Parrot..'/><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/9216684813642011426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=9216684813642011426' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/9216684813642011426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/9216684813642011426'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2007/07/if-it-looks-like-parrot.html' title='If it looks like a Duck, it may be a Parrot..'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-8322338755369559813</id><published>2007-07-08T19:28:00.000-07:00</published><updated>2007-07-08T20:13:29.926-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='cms'/><category scheme='http://www.blogger.com/atom/ns#' term='flatpage'/><title type='text'>Django Flat Pages are cool</title><summary type='text'>Turn your ever-growing linear website into a Django website with all that leading edge buzzword goodness!I have been helping a friend with a website and it, like Topsy, just growed. It went from being manageably small (not too many pages) to large enough to be a problem (too many pages).  Think it doesn't sound so bad? Imagine having to fix the copyright date on each page.  That's not a good </summary><link rel='related' href='http://www.djangoproject.com/documentation/flatpages/' title='Django Flat Pages are cool'/><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/8322338755369559813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=8322338755369559813' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/8322338755369559813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/8322338755369559813'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2007/07/django-flat-pages-are-cool.html' title='Django Flat Pages are cool'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-329520334750536895</id><published>2007-06-11T18:39:00.000-07:00</published><updated>2007-07-21T20:27:12.258-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cheeseshop'/><category scheme='http://www.blogger.com/atom/ns#' term='helixplayer'/><category scheme='http://www.blogger.com/atom/ns#' term='parser cssutils'/><category scheme='http://www.blogger.com/atom/ns#' term='easy_installl'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Issue Number 2</title><summary type='text'>I discovered cssutils tonight.. I thought there must be a parser for CSS in the Python universe somewhere.. and it's called cssutils, available from the Cheeseshop.I installed it (using the magic of easy_install) and then broke it using the css file from HelixPlayer (the open-source portion of RealPlayer) so I raised an Issue.Issue No. 2 as it turns out.</summary><link rel='related' href='http://code.google.com/p/cssutils/issues/list?thanks=2&amp;ts=1181612305' title='Issue Number 2'/><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/329520334750536895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=329520334750536895' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/329520334750536895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/329520334750536895'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2007/06/issue-number-2.html' title='Issue Number 2'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-8305139871529331548</id><published>2007-06-07T12:25:00.000-07:00</published><updated>2007-06-07T13:08:03.499-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='unit test'/><title type='text'>Unit testing.. why wouldn't you?</title><summary type='text'>Unit testing is a good thing, right? Especially if it is simple to set up, simple to run and simple to read the results.  How do we do it in Python? Simple!Here's a quick example using some pieces from the unit test file I checked in along with the python bitset:import unittestfrom pybitset import Bitset # import class or module under testclass bitset_testcase(unittest.TestCase):   def setUp(self</summary><link rel='related' href='http://pyunit.sourceforge.net/pyunit.html' title='Unit testing.. why wouldn&apos;t you?'/><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/8305139871529331548/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=8305139871529331548' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/8305139871529331548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/8305139871529331548'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2007/06/unit-testing-why-wouldnt-you.html' title='Unit testing.. why wouldn&apos;t you?'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-1301113556968807626</id><published>2007-06-07T06:03:00.000-07:00</published><updated>2007-06-07T06:17:08.197-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='bitset'/><title type='text'>Python bitset checked in (along with unittests)</title><summary type='text'>I have just checked in the python version of bitset (and unittests!) into the boost_python project directory.  Now I need to spend a little time making the API for the python version agree with the C++ version.  Some discrepancies around init/constructor, nothing major.I think I have enough functionality to start on benchmarks.The python bitset uses a list internally to store bits as, can you </summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/1301113556968807626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=1301113556968807626' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/1301113556968807626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/1301113556968807626'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2007/06/python-bitset-checked-in-along-with.html' title='Python bitset checked in (along with unittests)'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-5536273744841387001</id><published>2007-06-06T19:00:00.001-07:00</published><updated>2007-06-06T19:09:49.249-07:00</updated><title type='text'>Pure python bitset</title><summary type='text'>As previously mentioned, I recently hacked up a C++ extension to allow Python to use the dynamic bitset in the Boost libraries and I wanted to compare its performance to a pure Python implementation. Tonight, I sat down and, in about 90 minutes, hacked out a decent looking Python version.I'll check it into the DFW Pythoneers subversion repository in case anyone wants to look at it.Next thing to </summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/5536273744841387001/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=5536273744841387001' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/5536273744841387001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/5536273744841387001'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2007/06/pure-python-bitset.html' title='Pure python bitset'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-3587044596891070016</id><published>2007-05-29T07:40:00.000-07:00</published><updated>2007-06-07T13:06:37.159-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='boost'/><category scheme='http://www.blogger.com/atom/ns#' term='bitset'/><title type='text'>Dynamic bitset for python</title><summary type='text'>I started trying the Python part of Boost C++ libraries recently and found it surprisingly easy to use.  In search of a mini-project, I started coding a Python extension module to expose the Boost dynamic bitset for use in Python.  It started as a novelty for a quick talk at the DFW Python group but I got stumped by adding operators.. until last night.Here's a recap:The constructor can accept a </summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/3587044596891070016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=3587044596891070016' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/3587044596891070016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/3587044596891070016'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2007/05/dynamic-bitset-for-python.html' title='Dynamic bitset for python'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-6948537593192996271</id><published>2007-05-26T14:26:00.000-07:00</published><updated>2007-06-07T13:14:19.213-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dfwpythoneers'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='meeting'/><title type='text'>DFW Pythoneers Meeting</title><summary type='text'>We are winding up the current meeting and I am trying to capture what we talked about so that when newcomers ask, I don't have to scratch my head and say "um, stuff..".As always a lively session, mainly driven by Jeff Rush, it has been a lively one with presentations and ad-hoc chats about topics like:the Forrester Wave work that Jeff did (and I contributed to) about the use of Python for </summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/6948537593192996271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=6948537593192996271' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/6948537593192996271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/6948537593192996271'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2007/05/dfw-pythoneers-meeting.html' title='DFW Pythoneers Meeting'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-3091855147624221765</id><published>2007-05-21T14:24:00.000-07:00</published><updated>2007-05-21T14:42:03.296-07:00</updated><title type='text'>About Python Advocacy: Is(was) Looking For Help</title><summary type='text'>About Python Advocacy: Seeking Four Code Samples for Forrester Research Survey - Jeff was looking for some help with this so I took on the mashup and came up with this: LinkI know it is simple but most of the good work in a mashup is done in javascript and I didn't want to spend too much time distracted from the purpose of demonstrating python.I want to get around to playing with Mochikit and </summary><link rel='related' href='http://python-advocacy.blogspot.com/2007/05/seeking-four-code-samples-for-forrester.html' title='About Python Advocacy: Is(was) Looking For Help'/><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/3091855147624221765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=3091855147624221765' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/3091855147624221765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/3091855147624221765'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2007/05/about-python-advocacy-seeking-four-code.html' title='About Python Advocacy: Is(was) Looking For Help'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-262556779676760850</id><published>2007-05-21T08:49:00.000-07:00</published><updated>2007-05-21T14:31:34.905-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='utf-8'/><category scheme='http://www.blogger.com/atom/ns#' term='codec'/><title type='text'>UTF-8 transcoder</title><summary type='text'>I needed a quick program to convert from one character set to another, specifically from shift-JIS (a Japanese encoding) to UTF-8.  I didn't really need the result but I did want to know if it could be *legally* converted.  So here what I came up with:#!/usr/bin/pythonimport codecsimport sysprint "opening file %s"% sys.argv[1]fi = codecs.open( sys.argv[1],'r', 'shift-jis')data = fi.read()fi.close</summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/262556779676760850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=262556779676760850' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/262556779676760850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/262556779676760850'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2007/05/utf-8-transcoder.html' title='UTF-8 transcoder'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-8729145916192247797</id><published>2007-05-13T07:36:00.000-07:00</published><updated>2007-07-08T20:04:02.932-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='robot'/><category scheme='http://www.blogger.com/atom/ns#' term='fish'/><title type='text'>Mad scientist creates robot fish</title><summary type='text'>A team from Essex university has created a robot carp that can swim around a tank with real fish and avoid collisions.  It hasn't learned to feed yet and the battery life is only 5 hours.Code and chips, anyone?</summary><link rel='related' href='http://news.bbc.co.uk/2/hi/science/nature/4313266.stm' title='Mad scientist creates robot fish'/><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/8729145916192247797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=8729145916192247797' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/8729145916192247797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/8729145916192247797'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2007/05/mad-scientist-creates-robot-fish.html' title='Mad scientist creates robot fish'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-6518713075077497445</id><published>2007-05-12T09:32:00.000-07:00</published><updated>2007-05-21T14:32:33.070-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tuxdroid'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='dbus'/><title type='text'>TuxDroid and D-Bus</title><summary type='text'>D-bus is a local IPC protocol that allows applications on a single machine to signal each other and request or consume each other's services.  Examples include the little notificiation pop-up that tells you your battery is charged.Tuxdroid is a robot version of the linux mascot, available from www.kysoh.com.  Developer pages here: www.tuxisalive.com/Here's a tuxdroid service that lets other </summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/6518713075077497445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=6518713075077497445' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/6518713075077497445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/6518713075077497445'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2007/05/tuxdroid-and-d-bus.html' title='TuxDroid and D-Bus'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-5927530927028161372</id><published>2007-05-10T20:03:00.000-07:00</published><updated>2007-05-21T14:32:56.077-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Snakeskin Pyjamas?</title><summary type='text'>I was browsing around and I came across this project.. which promises that I can  "build AJAX apps in Python (like Google did for Java)". A bold claim.. I'll have to try it out and see if it really is that easy.It's not an encouraging sign that the webpage is borked (most links appear to point to something that went away) but follow the links to download and things improve.. Google Code is </summary><link rel='related' href='http://pyjamas.pyworks.org/' title='Snakeskin Pyjamas?'/><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/5927530927028161372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=5927530927028161372' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/5927530927028161372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/5927530927028161372'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2007/05/snakeskin-pyjamas.html' title='Snakeskin Pyjamas?'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-8635286545968863966</id><published>2007-05-03T08:24:00.000-07:00</published><updated>2007-05-21T14:33:28.964-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='power'/><category scheme='http://www.blogger.com/atom/ns#' term='ups'/><category scheme='http://www.blogger.com/atom/ns#' term='mistake'/><title type='text'>Tip for UPS users</title><summary type='text'>Plug things in the right side!We had a power glitch last night but we were fortunate; currently there are 200,000 homes without power in the Dallas area.  So the power went out for a second or so and the UPS didn't keep the computer alive. Why not? Because I had the PC plugged into the surge protect side, not the UPS side.  Really should check these things..</summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/8635286545968863966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=8635286545968863966' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/8635286545968863966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/8635286545968863966'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2007/05/tip-for-ups-users.html' title='Tip for UPS users'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-3954697146778876858</id><published>2007-05-02T08:13:00.000-07:00</published><updated>2007-05-21T14:34:30.433-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='virtual'/><category scheme='http://www.blogger.com/atom/ns#' term='qemu'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='distutils'/><title type='text'>Running Win2K in Qemu</title><summary type='text'>I need to build a Python package for installation on Windows using distutils but I run Linux.. so I thought I'd try Qemu.I built a disk image for Qemu using qemu-image, made an ISO from a Win2K CD and then installed win2k in a window on my main linux machine.  All went well and the whole thing was installed in a couple of hours.  Then I tried to run Windows Update. Boom.. gone. Hm.. maybe I'll </summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/3954697146778876858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=3954697146778876858' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/3954697146778876858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/3954697146778876858'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2007/05/running-win2k-in-qemu.html' title='Running Win2K in Qemu'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-4485381285590894327</id><published>2007-04-30T10:40:00.000-07:00</published><updated>2007-06-06T18:47:29.952-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ElementTree'/><category scheme='http://www.blogger.com/atom/ns#' term='schema'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='recipe'/><title type='text'>A quick Python recipe for a validating XML parser</title><summary type='text'>ElementTree is now included in Python standard libraries from version 2.5 but as good as it is, it has no support for XMLschema validation and limited support for XPath.  For that you need lxml which builds on the foundation of ElementTree.Here's a few lines of Python to validate an XML document using a schema document using lxml:from lxml import etree# Parse the schema documentxsd = </summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/4485381285590894327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=4485381285590894327' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/4485381285590894327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/4485381285590894327'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2007/04/quick-recipe-for-validating-xml-parser.html' title='A quick Python recipe for a validating XML parser'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-1145130690493543089</id><published>2007-04-29T20:55:00.000-07:00</published><updated>2007-04-29T21:04:06.050-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='quiz'/><title type='text'>What programming language are you?</title><summary type='text'>Ok, a little bit geeky but I saw this on Steve Holden's blog and thought it amusing.  Take a little quiz and find out which programming language you are most like.  I resemble Perl (and Steve is Smalltalk).. let me know if you are Python.Which Programming Language are You?</summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/1145130690493543089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=1145130690493543089' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/1145130690493543089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/1145130690493543089'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2007/04/what-programming-language-are-you.html' title='What programming language are you?'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7419827258262914945.post-5540130526723960555</id><published>2007-04-29T20:24:00.000-07:00</published><updated>2007-05-21T14:34:53.875-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='first post'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>First, pass the post</title><summary type='text'>I thought I'd start a blog about my use Python and things related.. so here I am. Getting started proves to be difficult but I figure if I start typing and then redact, something might come out..On an occasional basis (free time is more scarce since the arrival of baby Meghan), I attend the Dallas-Fort Worth pythoneers saturday sprints at Nerdbooks in Richardson.Yesterday's meeting was covered a </summary><link rel='replies' type='application/atom+xml' href='http://ducktyping.blogspot.com/feeds/5540130526723960555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7419827258262914945&amp;postID=5540130526723960555' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/5540130526723960555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7419827258262914945/posts/default/5540130526723960555'/><link rel='alternate' type='text/html' href='http://ducktyping.blogspot.com/2007/04/first-pass-post.html' title='First, pass the post'/><author><name>Martin Thomas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
