<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CkAFSXYyeip7ImA9WxJUE0w.&quot;"><id>tag:blogger.com,1999:blog-496482</id><updated>2009-07-11T07:11:58.892-04:00</updated><title>For Some Value of "Magic"</title><subtitle type="html">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;An occasional weblog from Steve Holden&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;"Any sufficiently advanced technology is indistinguishable from magic"&lt;/b&gt;&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;i&gt;Arthur C. Clarke&lt;/i&gt; Profiles of The Future, &lt;i&gt;1961&lt;/i&gt;</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://holdenweb.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://holdenweb.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Steve</name><uri>http://www.blogger.com/profile/15732819755000554717</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>364</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://feeds.feedburner.com/ForSomeValueOfMagic" type="application/atom+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry gd:etag="W/&quot;CEMHSXo7fSp7ImA9WxJVEU0.&quot;"><id>tag:blogger.com,1999:blog-496482.post-3964580746485607317</id><published>2009-06-27T07:29:00.003-04:00</published><updated>2009-06-27T07:33:58.405-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-27T07:33:58.405-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="United" /><category scheme="http://www.blogger.com/atom/ns#" term="web design" /><category scheme="http://www.blogger.com/atom/ns#" term="fail" /><category scheme="http://www.blogger.com/atom/ns#" term="testing" /><category scheme="http://www.blogger.com/atom/ns#" term="user interface" /><title>Another United Web Screw-Up</title><content type="html">So, wanting to answer a question about my flight times for EuroPython I clicked on an email link to "My Itineraries". Thanks, United, this couldn't be clearer.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JT1n2tt-4Wg/SkYDPUgKe4I/AAAAAAAAAUo/g3eOyMCE490/s1600-h/UnitedFail.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 211px;" src="http://4.bp.blogspot.com/_JT1n2tt-4Wg/SkYDPUgKe4I/AAAAAAAAAUo/g3eOyMCE490/s400/UnitedFail.png" alt="" id="BLOGGER_PHOTO_ID_5351968768912948098" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/496482-3964580746485607317?l=holdenweb.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=IH6G09zk6yU:3gciRZAXjcU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=IH6G09zk6yU:3gciRZAXjcU:Jy2wSXVWK38"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=IH6G09zk6yU:3gciRZAXjcU:Jy2wSXVWK38" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/IH6G09zk6yU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://holdenweb.blogspot.com/feeds/3964580746485607317/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=496482&amp;postID=3964580746485607317&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/3964580746485607317?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/3964580746485607317?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/IH6G09zk6yU/another-uniter-web-screw-up.html" title="Another United Web Screw-Up" /><author><name>Steve</name><uri>http://www.blogger.com/profile/15732819755000554717</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06082303989241762039" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_JT1n2tt-4Wg/SkYDPUgKe4I/AAAAAAAAAUo/g3eOyMCE490/s72-c/UnitedFail.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://holdenweb.blogspot.com/2009/06/another-uniter-web-screw-up.html</feedburner:origLink></entry><entry><title type="text">Links for 2009-06-25 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/jY5emILWb_o/steve.holden" /><updated>2009-06-26T00:00:00-07:00</updated><id>http://del.icio.us/steve.holden#2009-06-25</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://sethgodin.typepad.com/seths_blog/2009/06/priming-the-pump-of-efficiency.html"&gt;Priming the pump of efficiency&lt;/a&gt;&lt;br/&gt;
An interesting take on change and inertia&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/jY5emILWb_o" height="1" width="1"/&gt;</content><feedburner:origLink>http://del.icio.us/steve.holden#2009-06-25</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUMQHc-eCp7ImA9WxJWGEw.&quot;"><id>tag:blogger.com,1999:blog-496482.post-1746560497388856215</id><published>2009-06-23T22:56:00.004-04:00</published><updated>2009-06-23T23:14:41.950-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-23T23:14:41.950-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="delicious" /><category scheme="http://www.blogger.com/atom/ns#" term="fans" /><title>My God, I Have Fans</title><content type="html">I've been putting out &lt;a href="http://delicious.com/steve.holden"&gt;links on delicious.com&lt;/a&gt; for a while now (when I started it was del.icio.us, which I personally still prefer as a domain name, though probably it was too esoteric for the non-geeks). It's a great system, and I have a program that searches my feed for the last seven items I tagged with "python" and makes those the front-page news item on &lt;a href="http://holdenweb.com/"&gt;holdenweb.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Most of my interactions with delicious go through the Firefox add-on, so I was a little surprised today to discover that my &lt;a href="http://delicious.com/network/steve.holden"&gt;delicious network page&lt;/a&gt; shows that my feed has 44 fans. This means I now have a bunch of feeds to start looking at. I am going to have to stop sleeping ...&lt;br /&gt;&lt;br /&gt;Looking at the network page I was also quite interested to see the top 10 tags list of the things I have tagged most frequently.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;python           194 &lt;br /&gt;web               96 &lt;br /&gt;programming       80 &lt;br /&gt;design            71 &lt;br /&gt;development       58 &lt;br /&gt;tools&lt;            49 &lt;br /&gt;politics          46 &lt;br /&gt;webdesign         44 &lt;br /&gt;marketing         40 &lt;br /&gt;open&lt;             40 &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;That gives you a fair idea of my interests. Don't tell Guido about the marketing ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/496482-1746560497388856215?l=holdenweb.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=MvS8R1lCK8Y:3qvcxA0LBe4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=MvS8R1lCK8Y:3qvcxA0LBe4:Jy2wSXVWK38"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=MvS8R1lCK8Y:3qvcxA0LBe4:Jy2wSXVWK38" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/MvS8R1lCK8Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://holdenweb.blogspot.com/feeds/1746560497388856215/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=496482&amp;postID=1746560497388856215&amp;isPopup=true" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/1746560497388856215?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/1746560497388856215?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/MvS8R1lCK8Y/my-god-i-have-fans.html" title="My God, I Have Fans" /><author><name>Steve</name><uri>http://www.blogger.com/profile/15732819755000554717</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06082303989241762039" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://holdenweb.blogspot.com/2009/06/my-god-i-have-fans.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MHRHs-eCp7ImA9WxJWFEk.&quot;"><id>tag:blogger.com,1999:blog-496482.post-4665310237493539241</id><published>2009-06-19T18:09:00.001-04:00</published><updated>2009-06-19T18:10:35.550-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-19T18:10:35.550-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="confidentiality" /><category scheme="http://www.blogger.com/atom/ns#" term="legal" /><category scheme="http://www.blogger.com/atom/ns#" term="advice" /><category scheme="http://www.blogger.com/atom/ns#" term="privacy" /><category scheme="http://www.blogger.com/atom/ns#" term="freedom" /><title>What Would We Do ...</title><content type="html">... without the &lt;a href="http://www.eff.org/press/archives/2009/06/16"&gt;EFF&lt;/a&gt;?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/496482-4665310237493539241?l=holdenweb.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=sqS9cwAWn4M:e6yI4-pz9I0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=sqS9cwAWn4M:e6yI4-pz9I0:Jy2wSXVWK38"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=sqS9cwAWn4M:e6yI4-pz9I0:Jy2wSXVWK38" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/sqS9cwAWn4M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://holdenweb.blogspot.com/feeds/4665310237493539241/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=496482&amp;postID=4665310237493539241&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/4665310237493539241?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/4665310237493539241?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/sqS9cwAWn4M/what-would-we-do.html" title="What Would We Do ..." /><author><name>Steve</name><uri>http://www.blogger.com/profile/15732819755000554717</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06082303989241762039" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://holdenweb.blogspot.com/2009/06/what-would-we-do.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8BRH06cSp7ImA9WxJWE0k.&quot;"><id>tag:blogger.com,1999:blog-496482.post-680539498517898055</id><published>2009-06-18T13:45:00.004-04:00</published><updated>2009-06-18T13:57:35.319-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-18T13:57:35.319-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="simon" /><category scheme="http://www.blogger.com/atom/ns#" term="open" /><category scheme="http://www.blogger.com/atom/ns#" term="willison" /><category scheme="http://www.blogger.com/atom/ns#" term="corruption" /><category scheme="http://www.blogger.com/atom/ns#" term="government" /><category scheme="http://www.blogger.com/atom/ns#" term="politics" /><category scheme="http://www.blogger.com/atom/ns#" term="guardian" /><category scheme="http://www.blogger.com/atom/ns#" term="accounting" /><title>Technology for Keeping People Honest?</title><content type="html">Simon Willison and his team at the Guardian in the UK have brought a dream a step nearer to becoming true for me with his new &lt;a href="http://mps-expenses.guardian.co.uk/"&gt;&lt;span style="font-style: italic;"&gt;Investigate Your MP's Expenses&lt;/span&gt;&lt;/a&gt; site. After looking at government profligacy in the USA I decided the only thing to do was &lt;a href="http://yorksamerica.blogspot.com/2009/01/opening-up-compliance-checking.html"&gt;to open up public accounts to public scrutiny&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Simon's site (quite independently conceived) is a practical demonstration of the idea's feasibility on a large scale. All we need now is a sponsor with deep pockets and an interface to &lt;a href="http://aws.amazon.com/mturk/"&gt;Mechanical Turk&lt;/a&gt;. The next election is going to be &lt;a href="http://www.mirror.co.uk/news/top-stories/2009/06/15/gord-won-t-win-115875-21441645/"&gt;&lt;span style="font-style: italic;"&gt;interesting&lt;/span&gt;&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/496482-680539498517898055?l=holdenweb.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=q2oiJZjO_oY:2LEvKWvyK2E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=q2oiJZjO_oY:2LEvKWvyK2E:Jy2wSXVWK38"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=q2oiJZjO_oY:2LEvKWvyK2E:Jy2wSXVWK38" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/q2oiJZjO_oY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://holdenweb.blogspot.com/feeds/680539498517898055/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=496482&amp;postID=680539498517898055&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/680539498517898055?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/680539498517898055?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/q2oiJZjO_oY/technology-for-keeping-people-honest.html" title="Technology for Keeping People Honest?" /><author><name>Steve</name><uri>http://www.blogger.com/profile/15732819755000554717</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06082303989241762039" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://holdenweb.blogspot.com/2009/06/technology-for-keeping-people-honest.html</feedburner:origLink></entry><entry><title type="text">Links for 2009-06-17 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/8l_prGkODcE/steve.holden" /><updated>2009-06-18T00:00:00-07:00</updated><id>http://del.icio.us/steve.holden#2009-06-17</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://remark.wordpress.com/articles/embedding-ironpython-as-a-scripting-language/"&gt;Embedding IronPython as a scripting language&lt;/a&gt;&lt;br/&gt;
Nice demonstration of scripting Windows applications in IronPython&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/8l_prGkODcE" height="1" width="1"/&gt;</content><feedburner:origLink>http://del.icio.us/steve.holden#2009-06-17</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUGRXw5eip7ImA9WxJWEkQ.&quot;"><id>tag:blogger.com,1999:blog-496482.post-5335457961276015247</id><published>2009-06-17T23:49:00.003-04:00</published><updated>2009-06-17T23:53:44.222-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-17T23:53:44.222-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="community" /><category scheme="http://www.blogger.com/atom/ns#" term="mattering" /><category scheme="http://www.blogger.com/atom/ns#" term="marketing" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><title>Seth Godin Says A Mouthful</title><content type="html">You will probably be aware if you are a regular reader that while I'm not wild about marketing generally, I do see value in some things some marketers do and say. Seth Godin had a blog post recently called &lt;a href="http://sethgodin.typepad.com/seths_blog/2009/06/you-matter.html"&gt;You Matter&lt;/a&gt; that describes quite well the kind of spirit I want to foster in the Python community.&lt;br /&gt;&lt;br /&gt;As tummy.com said on their PyCon sticker this year: "Python will save the world! I don't know how, but it will." Isn't it up to us all to  help Python do that?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/496482-5335457961276015247?l=holdenweb.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=ScMjNj6UC0w:I4q9YgoaJ_Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=ScMjNj6UC0w:I4q9YgoaJ_Q:Jy2wSXVWK38"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=ScMjNj6UC0w:I4q9YgoaJ_Q:Jy2wSXVWK38" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/ScMjNj6UC0w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://holdenweb.blogspot.com/feeds/5335457961276015247/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=496482&amp;postID=5335457961276015247&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/5335457961276015247?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/5335457961276015247?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/ScMjNj6UC0w/seth-godin-says-mouthful.html" title="Seth Godin Says A Mouthful" /><author><name>Steve</name><uri>http://www.blogger.com/profile/15732819755000554717</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06082303989241762039" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://holdenweb.blogspot.com/2009/06/seth-godin-says-mouthful.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8HRHgyfSp7ImA9WxJVGUU.&quot;"><id>tag:blogger.com,1999:blog-496482.post-416205522371616356</id><published>2009-06-11T08:42:00.006-04:00</published><updated>2009-07-07T13:30:35.695-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-07T13:30:35.695-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu wireless lazyweb help" /><title>Ubuntu 9.04 Wireless on Dell Precision M6300</title><content type="html">The best laid plans of mice and men have yet again gone agley. For a couple of years now I have been running Vista on my Precision workstation. In order to move to the Linux platform I bought a 320 GB 2.5" disk (amazing value at $90) and planned to install Ubuntu Jaunty Jackalope on it then migrate the Vista disk to a VirtualBox virtual machine accessing a raw patition which contained a Ghost copy of the original Windows partition.&lt;br /&gt;&lt;br /&gt;Alas I couldn't get the virtual to boot, and anyway the Vista load is starting to show signs of instability (hardly surprising in a Windows installation that's been poked and prodded as heavily as mine has), so I have bitten the bullet and am reinstalling Vista from scratch with a virtual filesystem. The partition that was going to host Vista is now an ext4 filsystem which can host whatever I want or need to put on  it. I have installed VirtualBox, and Vista loaded up like a champ.&lt;br /&gt;&lt;br /&gt;The only (current) fly in the ointment is that for the life of me I can't get wireless networking to work. Unfortunately &lt;a href="http://www.commandlineidiot.com/blog/2007/linux-users-are-all-crazy-fundamentalists/"&gt;Command Line Idiot&lt;/a&gt; appears to be right when he or she writes:&lt;br /&gt;&lt;blockquote&gt;There are roughly 19 billion tutorials for how to do anything you would ever want to do with Ubuntu. Unfortunately, they are all written by a 12 year old who knows even less than you.&lt;/blockquote&gt;Some of the advice I have seen is so cryptic as to be incomprehensible, some refer to drivers I don't have and don't seem to be able to download, the majority of it its either apparently irrelevant or clearly wrong.&lt;br /&gt;&lt;br /&gt;So, crazy fundamentalist or not, I'll be happy to hear from you if you can tell me how to get the wireless networking going.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/496482-416205522371616356?l=holdenweb.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=7cEDGo9ZZZ0:QcoCmy7O7ew:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=7cEDGo9ZZZ0:QcoCmy7O7ew:Jy2wSXVWK38"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=7cEDGo9ZZZ0:QcoCmy7O7ew:Jy2wSXVWK38" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/7cEDGo9ZZZ0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://holdenweb.blogspot.com/feeds/416205522371616356/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=496482&amp;postID=416205522371616356&amp;isPopup=true" title="11 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/416205522371616356?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/416205522371616356?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/7cEDGo9ZZZ0/ubuntu-904-wireless-on-dell-precision.html" title="Ubuntu 9.04 Wireless on Dell Precision M6300" /><author><name>Steve</name><uri>http://www.blogger.com/profile/15732819755000554717</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06082303989241762039" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">11</thr:total><feedburner:origLink>http://holdenweb.blogspot.com/2009/06/ubuntu-904-wireless-on-dell-precision.html</feedburner:origLink></entry><entry><title type="text">Links for 2009-06-14 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/rde68BkISq4/steve.holden" /><updated>2009-06-15T00:00:00-07:00</updated><id>http://del.icio.us/steve.holden#2009-06-14</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://flowplayer.org/tools/demos/index.html"&gt;jQuery TOOLS - The missing UI library for the Web&lt;/a&gt;&lt;br/&gt;
Nice addition to the jQuery stable&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/rde68BkISq4" height="1" width="1"/&gt;</content><feedburner:origLink>http://del.icio.us/steve.holden#2009-06-14</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUHQ3c9fCp7ImA9WxJXFkU.&quot;"><id>tag:blogger.com,1999:blog-496482.post-2275469372177478358</id><published>2009-06-10T22:20:00.005-04:00</published><updated>2009-06-10T22:27:12.964-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-10T22:27:12.964-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="microsofct sharepoint liveid fail" /><title>Not My Day with Microsoft</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_JT1n2tt-4Wg/SjBqTx54JEI/AAAAAAAAAUQ/1uCH8_dFU7M/s1600-h/EvilEmpire.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 120px;" src="http://2.bp.blogspot.com/_JT1n2tt-4Wg/SjBqTx54JEI/AAAAAAAAAUQ/1uCH8_dFU7M/s320/EvilEmpire.png" alt="" id="BLOGGER_PHOTO_ID_5345889645734929474" border="0" /&gt;&lt;/a&gt;Well, I guess I won't be downloading SharePoint Designer just yet, then ... even the best-run and largest organizations have problems.&lt;br /&gt;&lt;br /&gt;You know, I really wish the free software/open source world would come up with something as easy and effective as SharePoint. Maybe it will soon. SharePoint has become as popular as it is (and it's making Microsoft over $1 billion a year now) because, like Office, it's broad enough to meet the majority of most people's needs.&lt;br /&gt;&lt;br /&gt;It's complex, but not really complicated, and I know it's not beyond the skills of the free software/open source community. Support, of course, would be something else. Now &lt;span style="font-style: italic;"&gt;that&lt;/span&gt; would be a company I'd like to start ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/496482-2275469372177478358?l=holdenweb.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=Rt3T9RwuWVQ:Vxj-ErjrLbg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=Rt3T9RwuWVQ:Vxj-ErjrLbg:Jy2wSXVWK38"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=Rt3T9RwuWVQ:Vxj-ErjrLbg:Jy2wSXVWK38" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/Rt3T9RwuWVQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://holdenweb.blogspot.com/feeds/2275469372177478358/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=496482&amp;postID=2275469372177478358&amp;isPopup=true" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/2275469372177478358?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/2275469372177478358?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/Rt3T9RwuWVQ/not-my-day-with-microsoft.html" title="Not My Day with Microsoft" /><author><name>Steve</name><uri>http://www.blogger.com/profile/15732819755000554717</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06082303989241762039" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_JT1n2tt-4Wg/SjBqTx54JEI/AAAAAAAAAUQ/1uCH8_dFU7M/s72-c/EvilEmpire.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">7</thr:total><feedburner:origLink>http://holdenweb.blogspot.com/2009/06/not-my-day-with-microsoft.html</feedburner:origLink></entry><entry><title type="text">Links for 2009-06-09 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/8uCNggYqTcI/steve.holden" /><updated>2009-06-10T00:00:00-07:00</updated><id>http://del.icio.us/steve.holden#2009-06-09</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://google-opensource.blogspot.com/2009/06/introducing-android-scripting.html"&gt;Google Open Source Blog: Introducing Android Scripting Environment&lt;/a&gt;&lt;br/&gt;
Android apps for the rest of us? Now script Android apps in Python!&lt;/li&gt;
&lt;li&gt;&lt;a href="http://css-tricks.com/the-css-box-model/"&gt;The CSS Box Model&lt;/a&gt;&lt;br/&gt;
Good box model explanation&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dmiessler.com/study/lsof/"&gt;An lsof Tutorial / Primer&lt;/a&gt;&lt;br/&gt;
Worth a read, especially if you are new to lsof&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.hackerfactor.com/GenderGuesser.html"&gt;Gender Guesser&lt;/a&gt;&lt;br/&gt;
Interesting Javascript application: does it know what gender you are?&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/8uCNggYqTcI" height="1" width="1"/&gt;</content><feedburner:origLink>http://del.icio.us/steve.holden#2009-06-09</feedburner:origLink></entry><entry><title type="text">Links for 2009-06-08 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/K64_FST_ZHw/steve.holden" /><updated>2009-06-09T00:00:00-07:00</updated><id>http://del.icio.us/steve.holden#2009-06-08</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://stevesmithblog.com/files/media/image/WindowsLiveWriter/DRYDontRepeatYourselfMotivator_BA85/dontrepeatyourself_motivator_2.jpg"&gt;DRY Poster&lt;/a&gt;&lt;br/&gt;
To remind us not to repeat ourselves :)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nerdmodo.com/2009/05/top-ten-images-of-hubble-telescope/"&gt;Top Ten Images from The Hubble Space Telescope&lt;/a&gt;&lt;br/&gt;
Awesome. No need to invent a God to create all this - just wonder at its splendor. It dwarfs all out piddling human aspirations.&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/K64_FST_ZHw" height="1" width="1"/&gt;</content><feedburner:origLink>http://del.icio.us/steve.holden#2009-06-08</feedburner:origLink></entry><entry><title type="text">Links for 2009-06-07 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/lBt1-dKqnqo/steve.holden" /><updated>2009-06-08T00:00:00-07:00</updated><id>http://del.icio.us/steve.holden#2009-06-07</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://net.tutsplus.com/tutorials/javascript-ajax/20-excellent-ajax-effects-you-should-know/"&gt;20 Excellent AJAX Effects You Should Know&lt;/a&gt;&lt;br/&gt;
Some interesting features for web sites here&lt;/li&gt;
&lt;li&gt;&lt;a href="http://net.tutsplus.com/articles/web-roundups/20-more-excellent-ajax-effects-you-should-know/"&gt;20 More Excellent AJAX Effects You Should Know&lt;/a&gt;&lt;br/&gt;
More of the same - great stuff again, though not AJAX&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.sillywalksgenerator.com/"&gt;Monty Python's Silly Walks Generator&lt;/a&gt;&lt;br/&gt;
Very Pythonesque&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/lBt1-dKqnqo" height="1" width="1"/&gt;</content><feedburner:origLink>http://del.icio.us/steve.holden#2009-06-07</feedburner:origLink></entry><entry><title type="text">Links for 2009-06-06 [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/whBbNYPkKgA/steve.holden" /><updated>2009-06-07T00:00:00-07:00</updated><id>http://del.icio.us/steve.holden#2009-06-06</id><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.gapingvoid.com/"&gt;gapingvoid posters coming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.popsci.com/scitech/article/2009-06/real-or-digital-water-its-getting-harder-tell-difference"&gt;An Algorithm That Synthesizes the Soothing Gurgles of Virtual Water | Popular Science&lt;/a&gt;&lt;br/&gt;
Interesting computations here&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ukimagehost.com/uploads/fff9652d04.jpg"&gt;Beautiful HTML&lt;/a&gt;&lt;br/&gt;
Some suggestions for HTML authors and tool writers&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.gruppo4.com/~tobia/cross-slide.shtml"&gt;CrossSlide - A jQuery plugin to create pan and cross-fade animations&lt;/a&gt;&lt;br/&gt;
Nice jQuery plugin&lt;/li&gt;
&lt;li&gt;&lt;a href="http://liberty.hypermart.net/voices/2003/Actual_Cost_Of_Making_These_Popular_Prescription_Drugs.htm"&gt;Manufacturing Cost of Prescription Drugs&lt;/a&gt;&lt;br/&gt;
Makes you think. Even factoring in research costs, how is this right?&lt;/li&gt;
&lt;li&gt;&lt;a href="http://winearth.terc.edu/appISSFlight/index.html"&gt;ISS Now&lt;/a&gt;&lt;br/&gt;
Interesting simulation fo the current view from the International Space Station&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/whBbNYPkKgA" height="1" width="1"/&gt;</content><feedburner:origLink>http://del.icio.us/steve.holden#2009-06-06</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQDQX08fCp7ImA9WxJXEkg.&quot;"><id>tag:blogger.com,1999:blog-496482.post-101043953568451550</id><published>2009-06-05T23:02:00.002-04:00</published><updated>2009-06-05T23:19:30.374-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-05T23:19:30.374-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="web development" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="futures" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="wave" /><title>Google Wave: A Reason to Learn Java?</title><content type="html">I've just (finally!) finished viewing the developer preview video of Google's Wave project from the recent &lt;a href="http://code.google.com/events/io/"&gt;Google I/O&lt;/a&gt; gathering. If I had time I would be brushing up my Java right now. I understand that the Java world was somewhat upset that Google App Engine supported only Python as a programming language for so long. Well, Wave is based on the &lt;a href="http://code.google.com/webtoolkit/"&gt;Google Web Toolkit (GWT)&lt;/a&gt;, a fascinating development platform that allows you to program in Java and deliver AJAX applications automatically translated (on the client side) into JavaScript. So now it's time for us Python guys to stand in line.&lt;br /&gt;&lt;br /&gt;Wave is an amazing demonstration of where the web is going, and our lives are going to be richer for it. It's an entirely new approach to personal communication, and clearly demonstrates that open architectures are (pun intended) the wave of the future. Google are actively looking for people to get involved with the project already.&lt;br /&gt;&lt;br /&gt;More later. For now I am too blown away to do much more than sit here thinking about the potential. I am also excited that this represents a bundle of opportunities for the open source world to demonstrate technical leadership. Unless other vendors have come up with some competing web-based technology I'm not aware of, and I'd be happy to learn about that too.&lt;br /&gt;&lt;br /&gt;Information about the Wave platform (and, of course, the open source code) is &lt;a href="http://code.google.com/apis/wave"&gt;on Google Code&lt;/a&gt;. The &lt;a href="http://www.waveprotocol.org/"&gt;open Wave protocol details&lt;/a&gt; are on a separate site.  Look for Wave's &lt;a href="http://wave.google.com"&gt;public arrival later in the year&lt;/a&gt;. Nice job, Google.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/496482-101043953568451550?l=holdenweb.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=EgTsaO-CqWg:XuhmGhEVUSo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=EgTsaO-CqWg:XuhmGhEVUSo:Jy2wSXVWK38"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=EgTsaO-CqWg:XuhmGhEVUSo:Jy2wSXVWK38" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/EgTsaO-CqWg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://holdenweb.blogspot.com/feeds/101043953568451550/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=496482&amp;postID=101043953568451550&amp;isPopup=true" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/101043953568451550?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/101043953568451550?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/EgTsaO-CqWg/google-wave-reason-to-learn-java.html" title="Google Wave: A Reason to Learn Java?" /><author><name>Steve</name><uri>http://www.blogger.com/profile/15732819755000554717</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06082303989241762039" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://holdenweb.blogspot.com/2009/06/google-wave-reason-to-learn-java.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IGRn0yfSp7ImA9WxJXEE4.&quot;"><id>tag:blogger.com,1999:blog-496482.post-5353803870978663609</id><published>2009-06-03T07:20:00.004-04:00</published><updated>2009-06-03T08:18:47.395-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-03T08:18:47.395-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="intel" /><category scheme="http://www.blogger.com/atom/ns#" term="netbook" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="asus" /><category scheme="http://www.blogger.com/atom/ns#" term="windows" /><category scheme="http://www.blogger.com/atom/ns#" term="microsoft" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Something Smells</title><content type="html">If you were at PyCon you probably noticed that netbooks are becoming more popular. PyCon delegates being geeks, I don't remember seeing a single one that wasn't running some form of Linux, though Microsoft do support the little machines with Windows XP. This in itself is an admission that Vista, their current operating system, is a resource hog. As a Vista user all I am prepared to say is "get me out of here", though the day-to-day experience is made bearable [short pause while all applications lock up for 90 seconds and the disk hammers away madly at I know not what] by the (open source) Cygwin command shell and the (open source) VirtualBox virtual machine that lets me operate virtual Linux hosts.&lt;br /&gt;&lt;br /&gt;I don't have a netbook yet (though I have already bought one for my wife), but it's only a matter of time. I currently lug 6.6 pounds of laptop around with me for the large 17" screen that I find useful for development and the 4GB of memory, which was a lot for a laptop a couple of years ago. I may extend the life of the machine by upsizing the drive to 500GB, but I definitely want my next portable machine to be lighter, and lighter means smaller (though nowadays not necessarily much less powerful). In other words, it's the coming trend.&lt;br /&gt;&lt;br /&gt;The manufacturers (who are all in the far East, naturally) have detected this trend, and are pushing out new hardware faster than a sow can push piglets. All of this new hardware can run at  least three different operating systems: Linux, Windows and Android. Users have been expressing their discontent with the higher price of Windows systems in the desktop market, but didn't have a lot of alternative. However, Microsoft realized that if they charged their usual premium for Windows XP on the netbooks people would just laugh and buy a system with one of the alternatives loaded.&lt;br /&gt;&lt;br /&gt;So the bottom line is that Microsoft are almost giving XP away (and why wouldn't they, the money it's already made them) just as a damage-control measure. &lt;span style="font-style: italic;"&gt;It's vital to Microsoft that Linux and Android aren't seen as viable alternatives to Windows&lt;/span&gt;, particularly since the beta program of Windows 7 is making it seem like an operating system whose principal selling-point is the ability to switch its features off.&lt;br /&gt;&lt;br /&gt;Enter the Taiwanese &lt;a href="http://www.computextaipei.com.tw/"&gt;Computex&lt;/a&gt; trade show that opened yesterday. Qualcomm were showing a new Asus netbook running the Android operating system, but on the Asus stand there was &lt;a href="http://blogs.computerworld.com/microsoft_strikes_back_at_linux_netbook_push"&gt;no sign at all of this startling new development&lt;/a&gt;. In fact Asustek's vice chairman John Tsang said, shortly after sharing the stage with Intel and Microsoft representatives, that &lt;a href="http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9133813"&gt;the Android notebook was not a priority&lt;/a&gt;. Android still &lt;a href="http://venturebeat.com/2009/01/02/an-faq-about-those-android-netbooks/"&gt;has a way to go to be totally user-friendly&lt;/a&gt; on a netbook, but if Qualcomm could show it, why couldn't Asus? Were they, perhaps, being polite to a major business partner?&lt;br /&gt;&lt;br /&gt;The UK PCWorld chain also said it is stopping selling anything but Windows through itsbricks-and-mortar stores, though mail-order buyers still have the Linux option. When I see &lt;a href="http://www.dsgiplc.com/layout.aspx?CatID=%7B5be82fd3-0659-4b26-8392-2339d0249e97%7D&amp;amp;ID=%7B0ab79c7b-f8b4-4aab-bcab-d083e7f23611%7D"&gt;press releases like that&lt;/a&gt; I am always intrigued about whether they are induced purely by market forces or whether some backroom maneuvering isn't involved.&lt;br /&gt;&lt;br /&gt;One thing's certain. No matter what they have done for Mac sales, Apple's long-running TV adverts have positioned Windows (synonymous in the public mind with "PC") as an unstable, unreliable, bug-ridden inconvenient platform. Now it's beginning to look as though the hardware industry is becoming more independent of Microsoft for the software necessary to run its devices, which I see as a good thing.&lt;br /&gt;&lt;br /&gt;Microsoft stockholders may, of course, disagree. I wouldn't necessarily sell your Microsoft stock right now. Just don't buy too much more.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/496482-5353803870978663609?l=holdenweb.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=IveWxEGkDa4:Q98Q4KsNIKQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=IveWxEGkDa4:Q98Q4KsNIKQ:Jy2wSXVWK38"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=IveWxEGkDa4:Q98Q4KsNIKQ:Jy2wSXVWK38" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/IveWxEGkDa4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://holdenweb.blogspot.com/feeds/5353803870978663609/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=496482&amp;postID=5353803870978663609&amp;isPopup=true" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/5353803870978663609?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/5353803870978663609?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/IveWxEGkDa4/something-smells.html" title="Something Smells" /><author><name>Steve</name><uri>http://www.blogger.com/profile/15732819755000554717</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06082303989241762039" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://holdenweb.blogspot.com/2009/06/something-smells.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4ASH8zfip7ImA9WxJQGEw.&quot;"><id>tag:blogger.com,1999:blog-496482.post-3713580817934540403</id><published>2009-05-31T15:04:00.004-04:00</published><updated>2009-05-31T19:02:29.186-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-31T19:02:29.186-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="video" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="pycon" /><title>PyCon is Popular!</title><content type="html">Regular readers will know that this year's PyCon went extremely well. Not only was it &lt;a href="http://holdenweb.blogspot.com/2009/03/pycon-proves-its-worth.html"&gt;excellent value for money&lt;/a&gt;, but we finally got our video recording act together, to the point where most sessions' video was available on &lt;a href="http://pycon.blip.tv/"&gt;blip.tv&lt;/a&gt; less than a week after the end of the conference.&lt;br /&gt;&lt;br /&gt;I just learned that there have already been over &lt;span style="font-style: italic;"&gt;180,000&lt;/span&gt; views of the material since it was uploaded roughly two months ago, which works out at around 3,000 per day. It just goes to show that there is a lot of demand for material about Python!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/496482-3713580817934540403?l=holdenweb.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=DLzNhl4CrcI:JC4aiGG4KxA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=DLzNhl4CrcI:JC4aiGG4KxA:Jy2wSXVWK38"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=DLzNhl4CrcI:JC4aiGG4KxA:Jy2wSXVWK38" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/DLzNhl4CrcI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://holdenweb.blogspot.com/feeds/3713580817934540403/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=496482&amp;postID=3713580817934540403&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/3713580817934540403?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/3713580817934540403?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/DLzNhl4CrcI/pycon-is-popular.html" title="PyCon is Popular!" /><author><name>Steve</name><uri>http://www.blogger.com/profile/15732819755000554717</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06082303989241762039" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://holdenweb.blogspot.com/2009/05/pycon-is-popular.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEEQXs_eip7ImA9WxJQEk8.&quot;"><id>tag:blogger.com,1999:blog-496482.post-2075317206560175928</id><published>2009-05-25T01:00:00.001-04:00</published><updated>2009-05-25T01:00:00.542-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-25T01:00:00.542-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="service" /><category scheme="http://www.blogger.com/atom/ns#" term="loss" /><category scheme="http://www.blogger.com/atom/ns#" term="armed forces" /><category scheme="http://www.blogger.com/atom/ns#" term="condolence" /><category scheme="http://www.blogger.com/atom/ns#" term="memory" /><category scheme="http://www.blogger.com/atom/ns#" term="memorial day" /><title>Memorial Day</title><content type="html">No matter what you think about the US's current wars (and I think they are an abomination) one can have only the utmost respect for those who choose to serve their country in the armed forces. This post is published as an expression of my admiration for the country's servicemen and women, with sympathy and deepest condolences to all families whose loved ones have been lost in action.&lt;br /&gt;&lt;br /&gt;&lt;div style="display: inline;"&gt;&lt;a href="http://www.cagle.com/news/MemorialDay09/1.asp" title="Cartoon by J.D. Crowe"&gt;&lt;img src="http://www.cagle.com/news/MemorialDay09/images/crowe.jpg" alt="Cartoon by J.D. Crowe" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.cagle.com/politicalcartoons/pccartoons/archives/crowe.asp" title="See Cartoons by Cartoon by J.D. Crowe"&gt;See Cartoons by Cartoon by J.D. Crowe&lt;/a&gt; - &lt;a href="http://politicalcartoons.com/" title="Politicalcartoons.com Cartoon"&gt;Courtesy of Politicalcartoons.com&lt;/a&gt; - &lt;a href="http://cagle.com/caglecards/main.asp?image=http://www.cagle.com/news/MemorialDay09/images/crowe.jpg" title="Cagle.com"&gt;Email this Cartoon&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/496482-2075317206560175928?l=holdenweb.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=BAlmQm2KFO4:0E_V-HfZFfU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=BAlmQm2KFO4:0E_V-HfZFfU:Jy2wSXVWK38"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=BAlmQm2KFO4:0E_V-HfZFfU:Jy2wSXVWK38" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/BAlmQm2KFO4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://holdenweb.blogspot.com/feeds/2075317206560175928/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=496482&amp;postID=2075317206560175928&amp;isPopup=true" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/2075317206560175928?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/2075317206560175928?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/BAlmQm2KFO4/memorial-day.html" title="Memorial Day" /><author><name>Steve</name><uri>http://www.blogger.com/profile/15732819755000554717</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06082303989241762039" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">6</thr:total><feedburner:origLink>http://holdenweb.blogspot.com/2009/05/memorial-day.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQGQno7cCp7ImA9WxJQEE8.&quot;"><id>tag:blogger.com,1999:blog-496482.post-7516872765043209364</id><published>2009-05-22T17:14:00.003-04:00</published><updated>2009-05-22T17:22:03.408-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-22T17:22:03.408-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="conference" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="europython" /><title>EuroPython Booked</title><content type="html">So the flights and hotel are booked and it's confirmed: I &lt;span style="font-style: italic;"&gt;am&lt;/span&gt; going to &lt;a href="http://europython.eu/"&gt;EuroPython&lt;/a&gt;. This will only be my second attendance, and since it's in England this year close to where my one of my sisters lives I expect to feel reasonably at home. It won't be a long trip, but John Pinner tells me he'd like me to give a talk about the PSF and an after-dinner speech, and that "we may like you to join a panel or two, Open Space etc as well if that's OK".&lt;br /&gt;&lt;br /&gt;Since the conference is paying my travel and accommodation it would seem ungracious to refuse. So it looks like I'll be busy. I am already looking forward to it!&lt;br /&gt;&lt;br /&gt;One of the nice parts of visiting the Midlands will be a chance to sample some British beers. If you have any recommendations or suggestions please be sure to let me know!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/496482-7516872765043209364?l=holdenweb.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=16JPazNPAkI:SIbHrkwfxJU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=16JPazNPAkI:SIbHrkwfxJU:Jy2wSXVWK38"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=16JPazNPAkI:SIbHrkwfxJU:Jy2wSXVWK38" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/16JPazNPAkI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://holdenweb.blogspot.com/feeds/7516872765043209364/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=496482&amp;postID=7516872765043209364&amp;isPopup=true" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/7516872765043209364?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/7516872765043209364?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/16JPazNPAkI/europython-booked.html" title="EuroPython Booked" /><author><name>Steve</name><uri>http://www.blogger.com/profile/15732819755000554717</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06082303989241762039" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://holdenweb.blogspot.com/2009/05/europython-booked.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcBQns6cCp7ImA9WxJRGEQ.&quot;"><id>tag:blogger.com,1999:blog-496482.post-7450828245076822975</id><published>2009-05-21T03:06:00.004-04:00</published><updated>2009-05-21T03:14:13.518-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-21T03:14:13.518-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Blogger" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="annoyances" /><title>Trying Again</title><content type="html">I believe my typesetting confusion of recent days was due not, as I had feared, to my advancing years and inability to solve technical problems, but rather to a discrepancy between Blogger's preview and the final display of the blog, plus the absence of &lt;span style="font-weight: bold;"&gt;div&lt;/span&gt; tags.&lt;br /&gt;&lt;br /&gt;The output of the program in &lt;a href="http://holdenweb.blogspot.com/2009/05/blogging-python-output-challenge.html"&gt;&lt;span style="font-style: italic;"&gt;Blogging Python Output: A Challenge&lt;/span&gt;&lt;/a&gt; should have displayed as&lt;br /&gt;&lt;div&gt;&lt;pre&gt;&amp;lt;__main__.MyCls object at 0x024217F0&gt;&lt;/pre&gt;&lt;/div&gt;Let's see if this survives being saved and published, as so few have before it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/496482-7450828245076822975?l=holdenweb.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=1wcqdplAWeY:qX2SgCa_x0M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=1wcqdplAWeY:qX2SgCa_x0M:Jy2wSXVWK38"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=1wcqdplAWeY:qX2SgCa_x0M:Jy2wSXVWK38" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/1wcqdplAWeY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://holdenweb.blogspot.com/feeds/7450828245076822975/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=496482&amp;postID=7450828245076822975&amp;isPopup=true" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/7450828245076822975?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/7450828245076822975?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/1wcqdplAWeY/trying-again.html" title="Trying Again" /><author><name>Steve</name><uri>http://www.blogger.com/profile/15732819755000554717</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06082303989241762039" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://holdenweb.blogspot.com/2009/05/trying-again.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IER3o_fSp7ImA9WxJRGEU.&quot;"><id>tag:blogger.com,1999:blog-496482.post-6982463086489242320</id><published>2009-05-21T01:03:00.005-04:00</published><updated>2009-05-21T03:05:06.445-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-21T03:05:06.445-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="classes" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="mixin" /><category scheme="http://www.blogger.com/atom/ns#" term="functions" /><title>Factory Functions</title><content type="html">In the last entry we discussed passing callables (using functions and classes) as arguments to functions, and calling them within the body of the function. This time we'll  look at how functions can return more esoteric objects - again including functions and classes.&lt;br /&gt;&lt;br /&gt;Beginners sometimes ask how a function can be made to return "more than one object". The strict answer is that it can't. The single object it returns can be a container, though, allowing several values to be extracted from the returned object. If you want a function to return three values the easiest way to arrange this is to have it return a three-element tuple, and then extract the individual values using an unpacking assignment. Here's a simple example.&lt;br /&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;powers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;br /&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;square&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cube&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;powers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;square&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cube&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;This prints &lt;span style="font-weight: bold;"&gt;10 100 1000&lt;/span&gt;, showing that the three returned values have indeed been assigned to individual variables. Functions can return more complex objects than simple containers, though. A frequent example in the programming literature is a function that returns some newly-created function each time it is called.  Typically the function returned will vary according to one or more of the arguments passed to the call that creates it.&lt;br /&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;make_fun&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;power&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;debug&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;br /&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;pow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;br /&gt;  &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="n"&gt;power&lt;/span&gt;&lt;br /&gt;  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;br /&gt;      &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"power(&lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s"&gt;) returned"&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;power&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;br /&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;pow&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;squarer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;make_fun&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;cuber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;make_fun&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;9&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;squarer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cuber&lt;/span&gt;&lt;span class="p"&gt;)])&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;A call to &lt;span style="font-weight: bold;"&gt;make_fun()&lt;/span&gt; results in a function being defined as &lt;span style="font-weight: bold;"&gt;make_fun&lt;/span&gt;'s function body is being executed.  This function (whose local name is &lt;span style="font-weight: bold;"&gt;pow&lt;/span&gt;) contains references to the arguments passed to &lt;span style="font-weight: bold;"&gt;make_fun&lt;/span&gt;, and is returned by the call to &lt;span style="font-weight: bold;"&gt;make_fun&lt;/span&gt; to be assigned and eventually called. The calls to the function are inside a list comprehension just because that's the easiest way to call a set of functions with the same argument(s).&lt;br /&gt;&lt;br /&gt;The output from this is&lt;br /&gt;&lt;div&gt;&lt;pre&gt;power(9, 3) returned 729&lt;br /&gt;[81, 729]&lt;/pre&gt;&lt;/div&gt;The debugging output from &lt;span style="font-weight: bold;"&gt;cuber&lt;/span&gt; is seen before the list comprehension because all calls have to return their values before the list comprehension is complete and ready for printing.&lt;br /&gt;&lt;br /&gt;You may be familiar with the concept of a &lt;span style="font-style: italic;"&gt;mixin class&lt;/span&gt;. Such classes are designed to take advantage of Python's multiple inheritance features to add functionality to any chosen classes, by creating a new class which is a subclass of both the mixin and the chosen class. You can see an exellent example of this in the &lt;span style="font-weight: bold;"&gt;socket&lt;/span&gt; library, where a &lt;span style="font-weight: bold;"&gt;ThreadingMixIn&lt;/span&gt; class is defined and can be used to extend the features of the basic &lt;span style="font-weight: bold;"&gt;UDPServer&lt;/span&gt; class like this:&lt;br /&gt;&lt;div&gt;&lt;pre&gt;class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;Note that the newly-declared &lt;span style="font-weight: bold;"&gt;ThreadingUDPServer&lt;/span&gt; class doesn't specify any behavior of its own, it merely inherits - first from the mixin and then from the base class, meaning that methods defined in the mixin take precedence over those defined in the base server class. One problem with this, however, is that it doesn't allow for any variation in the mixin classes - by the time you use them they are already created, and it's too late.&lt;br /&gt;&lt;br /&gt;In the same way that we can parameterize functions, however, we can parameterize classes as well. Suppose we want to provide a trivial mixin to print the class's name in either upper- or lower-case. Not very inspiring, but the simplest example I could think of to get the point over, so please bear with me if you can think of simpler ways to do this. One possibility is this.&lt;br /&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;mixin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cls&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lcase&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;br /&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Mixin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;br /&gt;     &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;nprint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;br /&gt;         &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;lcase&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;br /&gt;             &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cls&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;br /&gt;         &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;br /&gt;             &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cls&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;upper&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;br /&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Result&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Mixin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cls&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;br /&gt;     &lt;span class="k"&gt;pass&lt;/span&gt;&lt;br /&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Result&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;FirstClass&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;br /&gt; &lt;span class="k"&gt;pass&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;Cl1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mixin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FirstClass&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;cl1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Cl1&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span class="n"&gt;cl1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nprint&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;mixin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FirstClass&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nprint&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Here the function first defines a mixin class, then creates a new class from the mixin and the base class provided as an argument. The interpreter cares not at all where the class definitions come from - classes are first-class objects just like functions and strings, and can just as easily be passed as function arguments as obtained any other way.&lt;br /&gt;&lt;br /&gt;The output from the program, which I am sure you are waiting for with bated breath, is&lt;br /&gt;&lt;div&gt;&lt;pre&gt;&amp;lt;class '__main__.firstclass'&gt;&lt;br /&gt;&amp;lt;CLASS '__MAIN__.FIRSTCLASS'&gt;&lt;/pre&gt;&lt;/div&gt;which shows that the program runs, and that the mixin class's behavior is conditioned by the function's second argument.&lt;br /&gt;&lt;br /&gt;Now you might choose to argue that this isn't a very natural example, and I'd be inclined to agree with you. All I have to say besides that is, you try coming up with these examples and see how you like it. If anyone chooses to contribute a more natural example that can be expressed without too much extra code I'll be happy to write about it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/496482-6982463086489242320?l=holdenweb.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=CVXBgLsxUNM:P0zbnV0P25M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=CVXBgLsxUNM:P0zbnV0P25M:Jy2wSXVWK38"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=CVXBgLsxUNM:P0zbnV0P25M:Jy2wSXVWK38" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/CVXBgLsxUNM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://holdenweb.blogspot.com/feeds/6982463086489242320/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=496482&amp;postID=6982463086489242320&amp;isPopup=true" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/6982463086489242320?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/6982463086489242320?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/CVXBgLsxUNM/factory-functions.html" title="Factory Functions" /><author><name>Steve</name><uri>http://www.blogger.com/profile/15732819755000554717</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06082303989241762039" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://holdenweb.blogspot.com/2009/05/factory-functions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQGR3k_eSp7ImA9WxJRGEs.&quot;"><id>tag:blogger.com,1999:blog-496482.post-4482681951205016217</id><published>2009-05-20T07:45:00.009-04:00</published><updated>2009-05-20T21:12:06.741-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-20T21:12:06.741-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="annoyance" /><category scheme="http://www.blogger.com/atom/ns#" term="Blogger" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><title>Blogging Python Output: A Challenge</title><content type="html">I spent half an hour yesterday in a battle with Bogger, trying to get it to render the output of this Python 3 program:&lt;br /&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyCls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;br /&gt;   &lt;span class="k"&gt;pass&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MyCls&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;Unfortunately, despite batting to with HTML entities for less than and the like, and even changing all spaces to non-breaking spaces*, the best I seem to be able to do is:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;&lt;__main__.mycls&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It starts out looking OK, but once I preview it, or publish it, Blogger just throws away everything after the first space up to the closing angle. Who can tell me what I am doing wrong? Or is Blogger being unfair.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;* don't even &lt;span style="font-style: italic;"&gt;think&lt;/span&gt; about blogging the actual entity codes: they'll be mangled too.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;[The program will run, producing slightly different output, under Python 2. I suspect Blogger will mangle that output too]&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/496482-4482681951205016217?l=holdenweb.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=C29ebPXc1EI:ZFbeDw-jGao:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=C29ebPXc1EI:ZFbeDw-jGao:Jy2wSXVWK38"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=C29ebPXc1EI:ZFbeDw-jGao:Jy2wSXVWK38" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/C29ebPXc1EI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://holdenweb.blogspot.com/feeds/4482681951205016217/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=496482&amp;postID=4482681951205016217&amp;isPopup=true" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/4482681951205016217?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/4482681951205016217?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/C29ebPXc1EI/blogging-python-output-challenge.html" title="Blogging Python Output: A Challenge" /><author><name>Steve</name><uri>http://www.blogger.com/profile/15732819755000554717</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06082303989241762039" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">8</thr:total><feedburner:origLink>http://holdenweb.blogspot.com/2009/05/blogging-python-output-challenge.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04GSX8_fSp7ImA9WxJRGEo.&quot;"><id>tag:blogger.com,1999:blog-496482.post-4541412213750855382</id><published>2009-05-20T01:22:00.015-04:00</published><updated>2009-05-20T23:18:48.145-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-20T23:18:48.145-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="function" /><category scheme="http://www.blogger.com/atom/ns#" term="object" /><category scheme="http://www.blogger.com/atom/ns#" term="polymorphism" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><title>Everything's an Object</title><content type="html">"Everything's an object" is a truism for truly object-oriented languages, and Python is truly object-oriented. You may meet some purists who try to tell you that only [&lt;span style="font-style: italic;"&gt;their favorite language&lt;/span&gt;] can really be called object-oriented, because Python doesn't have this feature or that feature, but don't take any notice of them. Religious zealots are everywhere, and their only interest is to convert you to their faith. In the Python world we don't tend to hold with religious zeal, and much prefer irreverent comedy sketches and making fun of things. Particularly religious zealots.&lt;br /&gt;&lt;br /&gt;Newcomers to the language are sometimes surprised to find that you can pass all kinds of things as arguments to functions, and use them quite naturally inside the functions. The classic example is functions themselves. Let's write a program containing an innocuous little function that takes a function as its first argument and returns the result of calling the function on its second and third arguments.&lt;br /&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;caller&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;br /&gt;   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;adder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;br /&gt;   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;caller&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adder&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"abc"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"def"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;br /&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;caller&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;adder&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;123&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;456&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyCls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;br /&gt;   &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;br /&gt;       &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt;&lt;br /&gt;       &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt;&lt;br /&gt;   &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;method&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;br /&gt;       &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="n"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;caller&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MyCls&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"="&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;method&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;The &lt;span style="font-weight: bold;"&gt;adder&lt;/span&gt; function adds two arguments, and pass that as the first argument to caller a couple of times. If all has gone to plan the first two lines of output will look like this:&lt;br /&gt;&lt;pre&gt;abcdef&lt;br /&gt;579&lt;br /&gt;&lt;/pre&gt;The first argument to &lt;span style="font-weight: bold;"&gt;adder&lt;/span&gt; isn't constrained to be a function. It just has to be something that can be called.We can take advantage of the fact that a call to a class creates an instance of the class to have &lt;span style="font-weight: bold;"&gt;caller&lt;/span&gt; create the instance for us. The &lt;span style="font-weight: bold;"&gt;MyCls&lt;/span&gt; class has an &lt;span style="font-weight: bold;"&gt;__init__()&lt;/span&gt; method that takes two arguments (as well as the ubiquitous &lt;span style="font-weight: bold;"&gt;self&lt;/span&gt; that the zealots will try and persuade you isn't necessary).&lt;br /&gt;&lt;br /&gt;The call to &lt;span style="font-weight: bold;"&gt;caller&lt;/span&gt; returns an instance of &lt;span style="font-weight: bold;"&gt;MyCls&lt;/span&gt;. When that instance's &lt;span style="font-weight: bold;"&gt;method()&lt;/span&gt; is called it uses the remembered arguments to print out a string of ten equals signs:&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;==========&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The generality that this demonstrates can be difficult to get used to if you haven't come across anything like it before. Once you appreciate it, though, it gives you a flexibility that is hard to match in many other languages. That's one of the reasons why the Python world often talks about "callables": we don't care whether it's a function or a class, we only care that it can be called.&lt;br /&gt;&lt;br /&gt;This is one aspect of polymorphism, one of the foundations of object-oriented programming.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;[The code will run under Python 2, but the output shown here was produce by Python 3. The output&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt; from Python 2&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt; will differ slightly].&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/496482-4541412213750855382?l=holdenweb.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=Di5BRH_mFqo:OnGtAP1Zbv4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=Di5BRH_mFqo:OnGtAP1Zbv4:Jy2wSXVWK38"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=Di5BRH_mFqo:OnGtAP1Zbv4:Jy2wSXVWK38" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/Di5BRH_mFqo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://holdenweb.blogspot.com/feeds/4541412213750855382/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=496482&amp;postID=4541412213750855382&amp;isPopup=true" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/4541412213750855382?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/4541412213750855382?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/Di5BRH_mFqo/everythings-object.html" title="Everything's an Object" /><author><name>Steve</name><uri>http://www.blogger.com/profile/15732819755000554717</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06082303989241762039" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://holdenweb.blogspot.com/2009/05/everythings-object.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMDQns8fSp7ImA9WxJRF00.&quot;"><id>tag:blogger.com,1999:blog-496482.post-8789064532695302471</id><published>2009-05-19T07:00:00.001-04:00</published><updated>2009-05-19T00:47:53.575-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-19T00:47:53.575-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sponsorship" /><category scheme="http://www.blogger.com/atom/ns#" term="speed" /><category scheme="http://www.blogger.com/atom/ns#" term="needforspeed" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="sprint" /><title>Who's Up for a Sprint, Then?</title><content type="html">It's now a good long time since &lt;a href="http://wiki.python.org/moin/NeedForSpeed"&gt;&lt;span style="font-style: italic;"&gt;Need for Speed&lt;/span&gt;&lt;/a&gt; (three years, I find, rather to my surprise), and I have settled back into a more or less regular routine after my move back to the USA. So I am starting to wonder whether it might not be time for another speed-focused sprint, and this post represents a first attempt to run the idea up the flagpole and see if anyone salutes.&lt;br /&gt;&lt;br /&gt;There have been many interesting developments on the VM front in the intervening years, and it seems like there's a distinct possibility that the current speed limits are going to be history in a year's time. That being the case, I would be prepared to put some effort into getting sponsorship and doing the administration and organization.&lt;br /&gt;&lt;br /&gt;I was wondering about Amsterdam as a venue. Given the required lead times to recruit sponsors, get sprinters on board and ensure adequate accommodation I am thinking that the best time might betowards the end of the year - say October or November.&lt;br /&gt;&lt;br /&gt;Who thinks this could be helpful? Who'd like to join in and sprint? Who would contribute funding to make it happen? All these questions are important, and only you can answer them!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/496482-8789064532695302471?l=holdenweb.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=Gk2YALAzf00:A3M0_PrQgE4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=Gk2YALAzf00:A3M0_PrQgE4:Jy2wSXVWK38"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=Gk2YALAzf00:A3M0_PrQgE4:Jy2wSXVWK38" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/Gk2YALAzf00" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://holdenweb.blogspot.com/feeds/8789064532695302471/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=496482&amp;postID=8789064532695302471&amp;isPopup=true" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/8789064532695302471?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/8789064532695302471?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/Gk2YALAzf00/whos-up-for-sprint-then.html" title="Who's Up for a Sprint, Then?" /><author><name>Steve</name><uri>http://www.blogger.com/profile/15732819755000554717</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06082303989241762039" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://holdenweb.blogspot.com/2008/04/whos-up-for-sprint-then.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUEQX0-eyp7ImA9WxJRF08.&quot;"><id>tag:blogger.com,1999:blog-496482.post-6201226485434764316</id><published>2009-05-19T06:00:00.001-04:00</published><updated>2009-05-19T06:00:00.353-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-19T06:00:00.353-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="easy_install" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><title>Is It Installed or Not?</title><content type="html">&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;[Notes for a while back, as can be seen by the version numbering]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Hmm. What could be the problem here?&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sholden@bigboy ~&lt;br /&gt;$ easy_install-2.5 SQLAlchemy&lt;br /&gt;Searching for SQLAlchemy&lt;br /&gt;Best match: sqlalchemy 0.4.2dev-r3811&lt;br /&gt;Processing sqlalchemy-0.4.2dev_r3811-py2.5.egg&lt;br /&gt;sqlalchemy 0.4.2dev-r3811 is already the active version in easy-install.pth&lt;br /&gt;&lt;br /&gt;Using c:\python25\lib\site-packages\sqlalchemy-0.4.2dev_r3811-py2.5.egg&lt;br /&gt;Processing dependencies for SQLAlchemy&lt;br /&gt;Finished processing dependencies for SQLAlchemy&lt;br /&gt;&lt;br /&gt;sholden@bigboy ~&lt;br /&gt;$ python&lt;br /&gt;Python 2.5.1 (r251:54863, May 18 2007, 16:56:43)&lt;br /&gt;[GCC 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)] on cygwin&lt;br /&gt;Type "help", "copyright", "credits" or "license" for more information.&lt;br /&gt;&gt;&gt;&gt; import sqlalchemy    &lt;br /&gt;Traceback (most recent call last):&lt;br /&gt;File "&lt;stdin&gt;", line 1, in &lt;module&gt;&lt;br /&gt;ImportError: No module named sqlalchemy&lt;br /&gt;&gt;&gt;&gt;&lt;br /&gt;&lt;/module&gt;&lt;/stdin&gt;&lt;/pre&gt;Simple, once realized: the easy_install I was running was based on Python for Windows, so running it under Cygwin still reported the state of the Windows installation! That's one slight down-side to Cygwin picking up so mcuh from the Windows side of things: sometimes it gets holds of things it shouldn't.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/496482-6201226485434764316?l=holdenweb.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=0z4VjtAPRPw:1kTBW1YADhI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=0z4VjtAPRPw:1kTBW1YADhI:Jy2wSXVWK38"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=0z4VjtAPRPw:1kTBW1YADhI:Jy2wSXVWK38" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/0z4VjtAPRPw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://holdenweb.blogspot.com/feeds/6201226485434764316/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=496482&amp;postID=6201226485434764316&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/6201226485434764316?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/6201226485434764316?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/0z4VjtAPRPw/is-it-installed-or-not.html" title="Is It Installed or Not?" /><author><name>Steve</name><uri>http://www.blogger.com/profile/15732819755000554717</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06082303989241762039" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://holdenweb.blogspot.com/2009/05/is-it-installed-or-not.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYGRHY7eSp7ImA9WxJRF00.&quot;"><id>tag:blogger.com,1999:blog-496482.post-7682918950917959491</id><published>2009-05-18T22:32:00.004-04:00</published><updated>2009-05-18T23:35:25.801-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-18T23:35:25.801-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="classes" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="interaction" /><category scheme="http://www.blogger.com/atom/ns#" term="garbage" /><category scheme="http://www.blogger.com/atom/ns#" term="cyclic" /><title>Simple Object Interactions</title><content type="html">Here's a relatively simple piece of code that shows how easy it is to have Python objects interact. It's fairly standard stuff, so it probably won't be interesting to old hands, but if you haven't been using object-oriented programming very long then it might make a point or two.&lt;br /&gt;&lt;br /&gt;Note that the code is in Python 3, though it will actually run on earlier versions, the printing will just be slightly different.&lt;br /&gt;&lt;pre&gt;#&lt;br /&gt;# Calling all reactive agents (with apologies to William Burroughs)&lt;br /&gt;#&lt;br /&gt;class Simulation:&lt;br /&gt;&lt;br /&gt;def __init__(self, howmany):&lt;br /&gt;    self.agents = []&lt;br /&gt;    for i in range(howmany):&lt;br /&gt;        self.agents.append(Agent(self, i))&lt;br /&gt;&lt;br /&gt;def showImportant(self, agent):&lt;br /&gt;    return "Agent: %d simulation: %d" % (agent.number, id(self))&lt;br /&gt;&lt;br /&gt;def listAgents(self):&lt;br /&gt;    for a in self.agents:&lt;br /&gt;        a.showMe()&lt;br /&gt;&lt;br /&gt;class Agent:&lt;br /&gt;&lt;br /&gt;def __init__(self, sim, number):&lt;br /&gt;    self.sim = sim&lt;br /&gt;    self.number = number&lt;br /&gt;&lt;br /&gt;def showMe(self):&lt;br /&gt;    print("Agent", self.number, "reporting:")&lt;br /&gt;    result = self.sim.showImportant(self)&lt;br /&gt;    print(result)&lt;br /&gt;&lt;br /&gt;s = Simulation(3)&lt;br /&gt;s.listAgents()&lt;br /&gt;&lt;/pre&gt;So, we start out with a class whose &lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;__init__()&lt;/span&gt;&lt;/span&gt; method is called with one argument, the number of agents to create. It creates a list of that many agents as its &lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;agents&lt;/span&gt;&lt;/span&gt; attribute. Note that when the &lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;Agent&lt;/span&gt;&lt;/span&gt; is created the &lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;Simulation&lt;/span&gt;&lt;/span&gt; instance passes itself as an argument to the &lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;Agent&lt;/span&gt;&lt;/span&gt; creator, and the &lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;Agent.__init__()&lt;/span&gt;&lt;/span&gt; method saves the reference to the &lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;Simulation&lt;/span&gt;&lt;/span&gt;  instance as the &lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;Agent&lt;/span&gt;&lt;/span&gt;'s &lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;sim&lt;/span&gt;&lt;/span&gt; instance variable.&lt;br /&gt;&lt;br /&gt;Colloquially we could say that each &lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt; Agent&lt;/span&gt;&lt;/span&gt; "knows" which &lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;Simulation&lt;/span&gt;&lt;/span&gt;   it's a part of. So an &lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;Agent&lt;/span&gt;&lt;/span&gt; is able to call the methods of the simulation that it's a part of. This makes it possible to devise agents that call various simulation methods, and to incorporate them in several different simulations which implement those methods differently.&lt;br /&gt;&lt;br /&gt;When building large data structures with this kind of pattern, by the way, it's important to note that the references are circular (simulations refer to agents, and agents refer to simulations). The garbage collector in older versions of Python would have real difficulties with structures such as the ones created in the code above. In essence it would say to itself "Well, I can't delete the simulation until I have deleted all the agents it refers to." Then it would look at all the agents, and for each one it would say to itself "I can't delete this until I have deleted the simulation it refers to". An unintelligent  garbage collection might get stuck in an infinite loop here, but Python's garbage collector has never been &lt;span style="font-style: italic;"&gt;that&lt;/span&gt; stupid.&lt;br /&gt;&lt;br /&gt;Nowadays, I am happy to say, in Python 2 or 3 the collector is able to recognize these cyclic references and, as long as there are no references to such a structure from the outside, will (eventually) reclaim the space.&lt;br /&gt;&lt;br /&gt;Next time we'll consider how a simulation might use several types of agents, still providing common behavior for them all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/496482-7682918950917959491?l=holdenweb.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=3YECl8YSR5o:g6l8rQKooco:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=3YECl8YSR5o:g6l8rQKooco:Jy2wSXVWK38"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=3YECl8YSR5o:g6l8rQKooco:Jy2wSXVWK38" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/3YECl8YSR5o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://holdenweb.blogspot.com/feeds/7682918950917959491/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=496482&amp;postID=7682918950917959491&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/7682918950917959491?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/7682918950917959491?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/3YECl8YSR5o/simple-object-interactions.html" title="Simple Object Interactions" /><author><name>Steve</name><uri>http://www.blogger.com/profile/15732819755000554717</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06082303989241762039" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://holdenweb.blogspot.com/2009/05/simple-object-interactions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEHQnYzfyp7ImA9WxJRFkk.&quot;"><id>tag:blogger.com,1999:blog-496482.post-5290666028489437191</id><published>2009-05-17T23:36:00.005-04:00</published><updated>2009-05-18T06:47:13.887-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-18T06:47:13.887-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="django" /><category scheme="http://www.blogger.com/atom/ns#" term="bioinformatics" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="pdf" /><category scheme="http://www.blogger.com/atom/ns#" term="flash" /><category scheme="http://www.blogger.com/atom/ns#" term="applications" /><category scheme="http://www.blogger.com/atom/ns#" term="plone" /><category scheme="http://www.blogger.com/atom/ns#" term="zope" /><title>Python is So Versatile</title><content type="html">Even though I use Python all the time, and I am well-connected in the Python world, so  much is happening that it's difficult to stay in touch with everything Python. Taking a look at the &lt;a href="http://pypi.python.org/pypi"&gt;Python Package Index&lt;/a&gt;, in just the last 24 hours there have been over 40 submissions. Not all of them will be new releases, but it's instructive to take a look at what's come in to PyPI as an indication of the breadth of applications in which Python is used. Rather than list all 40 submissions available from the RSS feed, let's just take a look at some of the more interesting items.&lt;br /&gt;&lt;br /&gt;You could use the new release of &lt;a href="http://last.fm/dumbo"&gt;Dumbo&lt;/a&gt; to write programs in Hadoop, the language for specifying massively parallel map-reduce computations. With &lt;a href="http://code.google.com/p/amfast/"&gt;AMFast&lt;/a&gt; you could create rich Internet applications using Flash remoting. If you wanted to write a Unix daemon in Python you could use the &lt;a href="http://pypi.python.org/pypi/python-daemon/1.4.5"&gt;python-daemon&lt;/a&gt; library that implements &lt;a class="reference external" href="http://www.python.org/dev/peps/pep-3143"&gt;PEP 3143&lt;/a&gt;. You could write a network time client with &lt;a href="http://pypi.python.org/pypi/ntplib/0.1.2"&gt;ntplib&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you wanted to add automated image processing to your Django web application you could do it with &lt;a href="http://pypi.python.org/pypi/django-imagekit/0.3.1"&gt;django-imagekit&lt;/a&gt;, or you could add AJAX with &lt;a href="http://code.google.com/p/dajaxproject/"&gt;Dajax&lt;/a&gt;. To make it useful to a broader audience you could add &lt;a href="http://pypi.python.org/pypi/django-bidi-utils/0.2.1"&gt;django-bidi-utils&lt;/a&gt; to handle bi-directional text.&lt;br /&gt;&lt;br /&gt;You might want to analyze some PDF files, in which case you could use &lt;a href="http://www.unixuser.org/%7Eeuske/python/pdfminer/index.html"&gt;pdfminer&lt;/a&gt;. If you are more interested in structural bioinformatics research then &lt;a href="http://biskit.pasteur.fr/"&gt;Biskit&lt;/a&gt; might be more your cup of tea. With all this complex software flying around you might need a program to handle a structured to-do list, and &lt;a href="http://www.taskcoach.org/"&gt;Task Coach&lt;/a&gt; would be ready and waiting for you.&lt;br /&gt;&lt;br /&gt;There's also a slew of &lt;a href="http://zope.org/"&gt;Zope&lt;/a&gt; and &lt;a href="http://plone.org/"&gt;Plone&lt;/a&gt; components to add to these already very capable systems. Python is just so versatile!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/496482-5290666028489437191?l=holdenweb.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=A9tTMbHwroU:Xoe7iCi4WEM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=A9tTMbHwroU:Xoe7iCi4WEM:Jy2wSXVWK38"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=A9tTMbHwroU:Xoe7iCi4WEM:Jy2wSXVWK38" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/A9tTMbHwroU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://holdenweb.blogspot.com/feeds/5290666028489437191/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=496482&amp;postID=5290666028489437191&amp;isPopup=true" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/5290666028489437191?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/5290666028489437191?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/A9tTMbHwroU/python-is-so-versatile.html" title="Python is So Versatile" /><author><name>Steve</name><uri>http://www.blogger.com/profile/15732819755000554717</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06082303989241762039" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://holdenweb.blogspot.com/2009/05/python-is-so-versatile.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MFRXw7cCp7ImA9WxJRFU0.&quot;"><id>tag:blogger.com,1999:blog-496482.post-134886260408807999</id><published>2009-05-16T17:10:00.003-04:00</published><updated>2009-05-16T17:30:14.208-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-16T17:30:14.208-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="marketing" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="oscon" /><category scheme="http://www.blogger.com/atom/ns#" term="advocacy" /><title>Python Booth at OSCON</title><content type="html">For the first time this year Python will have a booth at OSCON, thanks to the good offices of Aahz. If you'd like to keep the Python banner flying over the exhibition hall I am sure he could do with some help.&lt;br /&gt;&lt;br /&gt;What's the point? Well, certainly it will help to raise awareness of the language, which can only be a good thing. Having a booth puts a human face on Python and gives people a chance to get first-hand information rather than being filtered through other people's prejudices. OSCON is probably the largest open source conference in the world, so it's a good place to advertise the best open source language in the world.&lt;br /&gt;&lt;br /&gt;The Python Software Foundation will be funding a large banner, and whatever else is required. I am sure Aahz will be happy to have suggestions and (most especially) offers of assistance. I've spent time in the past manning exhibition stands, and while it's interesting to meet a wide range of people it can be surprisingly tiring, so a one-man effort won't be enough. You can subscribe to the &lt;a href="http://mail.python.org/mailman/listinfo/oscon"&gt;Python OSCON mailing list&lt;/a&gt; if you are interested in helping with either or both of the planning and execution.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/496482-134886260408807999?l=holdenweb.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=_MOGHxE-KgU:S-5lWvTu_N4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=_MOGHxE-KgU:S-5lWvTu_N4:Jy2wSXVWK38"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=_MOGHxE-KgU:S-5lWvTu_N4:Jy2wSXVWK38" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/_MOGHxE-KgU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://holdenweb.blogspot.com/feeds/134886260408807999/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=496482&amp;postID=134886260408807999&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/134886260408807999?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/134886260408807999?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/_MOGHxE-KgU/python-booth-at-oscon.html" title="Python Booth at OSCON" /><author><name>Steve</name><uri>http://www.blogger.com/profile/15732819755000554717</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06082303989241762039" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://holdenweb.blogspot.com/2009/05/python-booth-at-oscon.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMAQn45eSp7ImA9WxJRE0k.&quot;"><id>tag:blogger.com,1999:blog-496482.post-3651731413422344348</id><published>2009-05-14T10:49:00.008-04:00</published><updated>2009-05-14T19:24:03.021-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-14T19:24:03.021-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="documentation" /><category scheme="http://www.blogger.com/atom/ns#" term="frustration" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="gnome" /><title>Help Files Should Help, Right?</title><content type="html">&lt;span style="font-weight: bold;"&gt;Microsoft Documentation Sucks&lt;br /&gt;&lt;/span&gt;God knows I've had my complaints about Microsoft documentation in the past. Often about manuals consisting mostly of descriptions of the following nature:&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt;Threep Nardling&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;To nardle threeps, select the &lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;Threep&lt;/span&gt;&lt;span style="font-size:85%;"&gt; tab and check the &lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;Nardling&lt;/span&gt;&lt;span style="font-size:85%;"&gt; checkbox.&lt;/span&gt;&lt;/blockquote&gt;Frankly this kind of documentation is worse than useless - it elevates statement of the bleeding obvious to new heights, and frustrates all users with at least one eye and half a brain. If you don't know what a threep is, or when it might usefully be nardled, the implication is that you are in the wrong place (though quite where else you would be expected to go for this information escapes me).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ubuntu/Gnome Documentation Sucks&lt;br /&gt;&lt;/span&gt;That said, I &lt;span style="font-style: italic;"&gt;hope&lt;/span&gt; I am setting myself up for a fall here. I've just installed a number of Ubuntu 8.04 virtuals (because I want to be compatible with a client environment, since you ask), and I have been having problems getting the network interfaces to behave. So I go to the help file for the GUI-based networking tool so kindly provided, and the main portion is filled with this sort of idiocy:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_JT1n2tt-4Wg/Sgw01o6O8nI/AAAAAAAAAUI/ixe2CubXycs/s1600-h/BleedingObvious.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 303px;" src="http://3.bp.blogspot.com/_JT1n2tt-4Wg/Sgw01o6O8nI/AAAAAAAAAUI/ixe2CubXycs/s320/BleedingObvious.png" alt="" id="BLOGGER_PHOTO_ID_5335697754646573682" border="0" /&gt;&lt;/a&gt;The really annoying piece is that I went to the help file to try and get an understanding of the &lt;span style="font-style: italic;"&gt;roaming mode&lt;/span&gt;, only to discover that this steaming pile of placemarkers* masquerading as documentation contains zero mention of the one interface feature I needed to know about. They could at least have had a section saying "Check this box to put the interface into roaming mode".&lt;br /&gt;&lt;br /&gt;I am &lt;span style="font-style: italic;"&gt;really&lt;/span&gt; hoping that this documentation has improved a lot in the two versions of Ubuntu that have been released since 8.04. If not, then it's time somebody (either at the Gnome Foundation or at Canonical) started to give some serious attention to documentation. Help files that don't help are a major source of end-user frustration.&lt;br /&gt;&lt;br /&gt;Somebody, please put me out of my misery and tell me that this nonsense is gone in more recent releases. Otherwise I might just have to go home and bang my head against the wall.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Real Problem&lt;/span&gt;&lt;br /&gt;All of this is merely subsidiary to the real issue, which is how to I get a VirtualBox Ubuntu guest running under a Windows Vista host to track changes in the Vista internet connectivity. It seems like every time I change locations I have to spend time tweaking settings on the virtuals, rebooting uselessly and generally poking things until I get them to work without any clear idea of the eventually successful strategy.&lt;br /&gt;&lt;br /&gt;So, dear lazyweb, please help me. If there's a manual that explains this I'd be happy to make a donation to its author. The open source world should, in my less than humbe opinion, value good documentation as much as (or more than) good code. Once you get past the obvious, the docs help you more than the code.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;* Admit it, you though I was going to write "dung" there, didn't you? I am trying to eschew the obvious.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/496482-3651731413422344348?l=holdenweb.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=aEVuReLIbl4:Hc8vqFmOifg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=aEVuReLIbl4:Hc8vqFmOifg:Jy2wSXVWK38"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=aEVuReLIbl4:Hc8vqFmOifg:Jy2wSXVWK38" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/aEVuReLIbl4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://holdenweb.blogspot.com/feeds/3651731413422344348/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=496482&amp;postID=3651731413422344348&amp;isPopup=true" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/3651731413422344348?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/3651731413422344348?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/aEVuReLIbl4/help-files-should-help-right.html" title="Help Files Should Help, Right?" /><author><name>Steve</name><uri>http://www.blogger.com/profile/15732819755000554717</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06082303989241762039" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_JT1n2tt-4Wg/Sgw01o6O8nI/AAAAAAAAAUI/ixe2CubXycs/s72-c/BleedingObvious.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://holdenweb.blogspot.com/2009/05/help-files-should-help-right.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YAQXY6eSp7ImA9WxJSGUQ.&quot;"><id>tag:blogger.com,1999:blog-496482.post-6245261144938171753</id><published>2009-05-10T17:16:00.003-04:00</published><updated>2009-05-10T17:32:20.811-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-10T17:32:20.811-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sco" /><category scheme="http://www.blogger.com/atom/ns#" term="open source" /><category scheme="http://www.blogger.com/atom/ns#" term="bankruptcy" /><category scheme="http://www.blogger.com/atom/ns#" term="futility" /><title>SCO's Inevitable End Moves Closer</title><content type="html">A recent development in SCO's Chapter 11 bankruptcy takes the company still closer to its inevitable final demise. &lt;a href="http://www.groklaw.net/article.php?story=2009050519075131"&gt;Groklaw reports&lt;/a&gt; that the US trustee has filed a motion to convert the bankruptcy proceedings from Chapter 11 (reorganization under protection from creditors) to Chapter 7 (liquidation of the business).&lt;br /&gt;&lt;br /&gt;Darl McBride, somewhat predictably, is quoted as saying he was surprised by the decision, and that the company will fight it. This doesn't hide the fact that a banrupt strategy will lead to a bankrupts company. The current stock price of $0.15 capitalizes the company at just over $3 million. How are the mighty fallen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/496482-6245261144938171753?l=holdenweb.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=Pbv6yxy0XC4:5Ez_wljd2mQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=Pbv6yxy0XC4:5Ez_wljd2mQ:Jy2wSXVWK38"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=Pbv6yxy0XC4:5Ez_wljd2mQ:Jy2wSXVWK38" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/Pbv6yxy0XC4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://holdenweb.blogspot.com/feeds/6245261144938171753/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=496482&amp;postID=6245261144938171753&amp;isPopup=true" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/6245261144938171753?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/6245261144938171753?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/Pbv6yxy0XC4/scos-inevitable-end-moves-closer.html" title="SCO's Inevitable End Moves Closer" /><author><name>Steve</name><uri>http://www.blogger.com/profile/15732819755000554717</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06082303989241762039" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://holdenweb.blogspot.com/2009/05/scos-inevitable-end-moves-closer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QGSXcyfSp7ImA9WxJSEUU.&quot;"><id>tag:blogger.com,1999:blog-496482.post-2052126073531000428</id><published>2009-04-30T20:48:00.004-04:00</published><updated>2009-05-01T10:48:48.995-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-01T10:48:48.995-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="journal" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="award" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><title>Another Award for Python</title><content type="html">With the month of May comes notification from &lt;span style="font-style: italic;"&gt;Linux Journal&lt;/span&gt; that Python has won their 2009 &lt;a href="http://www.linuxjournal.com/article/10451"&gt;Readers' Choice Award&lt;/a&gt; for Favorite Programming Language, narrowly beating C++ and Java. The favorite scripting language was bash.&lt;br /&gt;&lt;br /&gt;Last year there were some fairly obscure rules about what constituted a programming language and a scripting language. This year the readers themselves decided, and Python also did quite well in the second category.&lt;br /&gt;&lt;br /&gt;“In an industry conceived, created and driven by peers, an accolade from the community is the highest compliment you can get,” said Linux Journal publisher Carlie Fairchild. She's right, and it's nice to know that Python's &lt;a href="http://en.wikipedia.org/wiki/Mind_share"&gt;mindshare&lt;/a&gt; continues to increase.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/496482-2052126073531000428?l=holdenweb.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=VY3yh-64kyE:fn8CPgAM6tY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=VY3yh-64kyE:fn8CPgAM6tY:Jy2wSXVWK38"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=VY3yh-64kyE:fn8CPgAM6tY:Jy2wSXVWK38" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/VY3yh-64kyE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://holdenweb.blogspot.com/feeds/2052126073531000428/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=496482&amp;postID=2052126073531000428&amp;isPopup=true" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/2052126073531000428?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/2052126073531000428?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/VY3yh-64kyE/another-award-for-python_30.html" title="Another Award for Python" /><author><name>Steve</name><uri>http://www.blogger.com/profile/15732819755000554717</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06082303989241762039" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://holdenweb.blogspot.com/2009/04/another-award-for-python_30.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8MRnY8eip7ImA9WxJTGUs.&quot;"><id>tag:blogger.com,1999:blog-496482.post-8404673380484667983</id><published>2009-04-28T18:55:00.006-04:00</published><updated>2009-04-28T19:21:27.872-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-28T19:21:27.872-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="appeal" /><category scheme="http://www.blogger.com/atom/ns#" term="childbirth" /><category scheme="http://www.blogger.com/atom/ns#" term="charity" /><category scheme="http://www.blogger.com/atom/ns#" term="poverty" /><category scheme="http://www.blogger.com/atom/ns#" term="donations" /><title>God Bless, Mum</title><content type="html">You may remember that last year I entered (walked) the &lt;a href="http://www.braintumorcommunity.org/site/PageServer?pagename=RFHDC09_Homepage"&gt;&lt;span style="font-style: italic;"&gt;Race for Hope&lt;/span&gt;&lt;/a&gt;, a charity even in support of the attempt to find a cure for brain tumors. It was particularly appropriate as a family friend had recently been diagnosed with a brain tumor, and we didn't at that time know what her prognosis was. Happily it looks as though she will survive, albeit with some attendant problems.&lt;br /&gt;&lt;br /&gt;I am entering the walk again, but this year I will be making a personal contribution as I have another charity in mind for a more public appeal. Some readers may know that my mother died recently (on Saturday March 28, in fact, the middle day of PyCon). She'd been in failing health, so her death didn't come as a surprise, but if you'd been wondering why I wasn't my usual bubbly self at PyCon that was the reason why.&lt;br /&gt;&lt;br /&gt;Rather than have people send flowers to the funeral the family decided we would look for a deserving charity, and ask people to make contributions to that instead. Mum was a midwife, with a healthy interest in the third world—she even took Urdu lessons at one point, and so the charity we chose was &lt;a href="http://www.safehands.org/"&gt;Safe Hands for Mothers&lt;/a&gt;. I hope that readers will &lt;a href="http://www.safehands.org/index.php?option=com_content&amp;amp;task=view&amp;amp;id=13&amp;amp;Itemid=31"&gt;support them through this page&lt;/a&gt; (for US donors the CAF link is easiest if you want to give money, just remember to click the "I don't live in the UK" button before entering your address).They are trying to help communities like those in sub-Saharan Africa, where mothers face a 1 in 16 chance of dying during pregnancy and childbirth.&lt;br /&gt;&lt;br /&gt;Their web site doesn't have any way to record donations against a particular name, so I'd appreciate it if you would add a comment here should you decide to make a donation. We have so much in the way of material wealth in the United States and the rest of the Western world, and our gifts can make a huge difference to less fortunate individuals. Over 1,400 mothers die every day, many of them from avoidable complications. Please try and help them if you can. Thanks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/496482-8404673380484667983?l=holdenweb.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=SugE_w0G3Rk:fmL0pf3bByM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?a=SugE_w0G3Rk:fmL0pf3bByM:Jy2wSXVWK38"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ForSomeValueOfMagic?i=SugE_w0G3Rk:fmL0pf3bByM:Jy2wSXVWK38" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ForSomeValueOfMagic/~4/SugE_w0G3Rk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://holdenweb.blogspot.com/feeds/8404673380484667983/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=496482&amp;postID=8404673380484667983&amp;isPopup=true" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/8404673380484667983?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/496482/posts/default/8404673380484667983?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ForSomeValueOfMagic/~3/SugE_w0G3Rk/god-bless-mum.html" title="God Bless, Mum" /><author><name>Steve</name><uri>http://www.blogger.com/profile/15732819755000554717</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06082303989241762039" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://holdenweb.blogspot.com/2009/04/god-bless-mum.html</feedburner:origLink></entry></feed>
