<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2890218256643380401</id><updated>2011-07-28T18:59:46.901-07:00</updated><category term='yahoo pipes rss atom'/><category term='quotes'/><category term='google wave future technology demo'/><category term='netaddr cidr ipv4 ipv6'/><category term='sony vaio tz recall repair inspection customer satisfaction'/><category term='netaddr setuptools easy_install'/><category term='ipv4 address allocation depletion'/><category term='nih syndrome python web frameworks'/><title type='text'>Rambling On ...</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://drkjam.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://drkjam.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>DrKJam</name><uri>http://www.blogger.com/profile/17930124567171106000</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2890218256643380401.post-4989359327002419906</id><published>2011-03-17T15:10:00.000-07:00</published><updated>2011-03-17T15:20:16.149-07:00</updated><title type='text'>PyCon 2011 - Hopefully The First Of Many</title><content type='html'>Well, &lt;a href="http://us.pycon.org/2011/"&gt;PyCon&lt;/a&gt; is over and it's back to life, back to reality (back to the hear and noooooooooooow, oh yeah). Before it all becomes a distant memory I thought I'd put down a few words in writing to record my first impressions of the event.&lt;br /&gt;&lt;br /&gt;As a bit of background this was my first visit to the US and also my first Python conference. I've been watching the videos online for at least the last 3 years and have wanted to attend the last 2 conferences. I finally made it this year mainly due to the dates not falling on any critical family birthdays - yes, that'd be you Ollie ;-)&lt;br /&gt;&lt;br /&gt;PyCon 2011 was a truly rewarding experience. There nothing quite like getting to rub shoulders with the greats of the Python world (and very frequently bump into them in the lift)! I met a nice bunch of people and forged new friendships. What strikes me most about my time there is how friendly everyone was. It is an amazing feeling to be part of such a community and a flourishing one at that. Seeing other people leveraging Python to literally change the world is mind blowing and a great inspiration for me to go out and do the same. It's as close as you can get to a religious experience ;-) It just helps to cement the feeling that doing Python is the right thing and that it is very much a technology for "getting things done", quickly and efficiently. As a good friend Tim Couper asserts, it is the perfect match for Agile development.&lt;br /&gt;&lt;br /&gt;The biggest revelation for me at the conference was the fact that I've been using &lt;a href="http://www.dropbox.com/"&gt;Dropbox&lt;/a&gt; for the last two years and I didn't have a clue that it was built entirely on Python (both on the client and server side). Awesome work guys, keep up the good work!&lt;br /&gt;&lt;br /&gt;I have been following the progress of &lt;a href="http://codespeak.net/pypy/"&gt;PyPy&lt;/a&gt; since I started using Python and even more closely after watching Maciej's talk on it last year. It was extremely pleasing to see the team receive the recognition they wholly deserve from the PSF in the form of funding for the next year's work. This is surely a big step forward for Python. Go PyPy!&lt;br /&gt;&lt;br /&gt;One of the many great experiences of PyCon for me was the Lightning Talk sessions. Concise, extremely funny and wholely informative, these are a great part of an already impressive offering. Witty presentations are great because it's so easy to bore your audience to death with page after page of bullet points. The quality of the presenting for the most part was excellent and there was good tips to be had from attending on how to present well to an audience. Most of the time I felt like a kid in a candy store with a limited amount of money to spend. On several occasions I found myself wanting to go to 3 or 4 out of the 5 talks within the same time slot. Being spoilt for choice is a very good thing in my book and I can't wait for the videos to be posted on online. I'm going to be spending a good while catching up on all the talks I missed out on. The long thin tail of the PyCon experience!&lt;br /&gt;&lt;br /&gt;The only real disappointment was having to leave on Sunday and miss out on the sprints. I'm going to try and factor in at least a couple of sprint days into my next PyCon (Santa Clara here we come).&lt;br /&gt;&lt;br /&gt;In closing I'd like to send out a big shout to the PyCon organisers and a very special thanks to Steve Holden (lovely chap), for his stewardship and navigation of the PSF through very difficult waters in recent years. Keep up the good work!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2890218256643380401-4989359327002419906?l=drkjam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drkjam.blogspot.com/feeds/4989359327002419906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2890218256643380401&amp;postID=4989359327002419906' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/4989359327002419906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/4989359327002419906'/><link rel='alternate' type='text/html' href='http://drkjam.blogspot.com/2011/03/pycon-2011-hopefully-first-of-many.html' title='PyCon 2011 - Hopefully The First Of Many'/><author><name>DrKJam</name><uri>http://www.blogger.com/profile/17930124567171106000</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2890218256643380401.post-5344843099152311338</id><published>2010-01-05T09:09:00.000-08:00</published><updated>2010-01-05T09:13:45.920-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ipv4 address allocation depletion'/><title type='text'>A decade's worth of IPv4 allocation</title><content type='html'>An interesting retrospective article on about the depletion of IPv4 address space over the last decade :-&lt;br /&gt;&lt;br /&gt;&lt;a href="http://arstechnica.com/tech-policy/news/2010/01/dont-publish-the-decade-in-ipv4-addresses.ars"&gt;http://arstechnica.com/tech-policy/news/2010/01/dont-publish-the-decade-in-ipv4-addresses.ars&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The shift to IPv6 is certainly increasingly pressing and will no doubt end up being very expensive!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2890218256643380401-5344843099152311338?l=drkjam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drkjam.blogspot.com/feeds/5344843099152311338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2890218256643380401&amp;postID=5344843099152311338' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/5344843099152311338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/5344843099152311338'/><link rel='alternate' type='text/html' href='http://drkjam.blogspot.com/2010/01/decades-worth-of-ipv4-allocation.html' title='A decade&apos;s worth of IPv4 allocation'/><author><name>DrKJam</name><uri>http://www.blogger.com/profile/17930124567171106000</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2890218256643380401.post-7542181893618701138</id><published>2009-08-29T11:45:00.000-07:00</published><updated>2009-08-29T11:48:30.864-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='quotes'/><title type='text'>Quotable Quotes no. 368</title><content type='html'>&lt;blockquote&gt;&lt;p&gt;Progress is impossible without change, and those who cannot change their minds cannot change anything.&lt;/p&gt; &lt;p&gt;–George Bernard Shaw&lt;/p&gt;&lt;/blockquote&gt;&lt;a class="sqa" href="http://thinkexist.com/quotes/carl_gustav_jung/"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2890218256643380401-7542181893618701138?l=drkjam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drkjam.blogspot.com/feeds/7542181893618701138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2890218256643380401&amp;postID=7542181893618701138' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/7542181893618701138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/7542181893618701138'/><link rel='alternate' type='text/html' href='http://drkjam.blogspot.com/2009/08/quotable-quotes-no-368.html' title='Quotable Quotes no. 368'/><author><name>DrKJam</name><uri>http://www.blogger.com/profile/17930124567171106000</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2890218256643380401.post-6629461039711934150</id><published>2009-08-02T13:35:00.001-07:00</published><updated>2009-08-19T12:19:00.061-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='netaddr setuptools easy_install'/><title type='text'>easy_install (mis)behaviour</title><content type='html'>Version 0.7 of netaddr, a major milestone release went out recently. It marked the library's status moving from beta to production/stable as I'm fairly happy now with its interface and implementation.&lt;br /&gt;&lt;br /&gt;There was a lot of change involved in this release due to some major refactoring work. I thought it best to put together a series of pre-release snapshot tarballs to give interested users an early look at the upcoming changes and a chance to hopefully squash any bugs before the main release.&lt;br /&gt;&lt;br /&gt;The download page on the Google code hosting site seemed like a fairly safe bet for publishing these files. I purposefully didn't post them on PyPI in an attempt to limit the audience to which they would be made available.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;BIG&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; mistake!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A kind user raised the following bug report - &lt;a href="http://code.google.com/p/netaddr/issues/detail?id=41"&gt;http://code.google.com/p/netaddr/issues/detail?id=41&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;They used &lt;span style="font-family:courier new;"&gt;easy_install&lt;/span&gt; to install &lt;span style="font-family:courier new;"&gt;netaddr&lt;/span&gt; and, unbeknown to me, in the background it was going off to the code hosting site, picking up the release candidate packages, and trying to dynamically build eggs based on them to provide to users!&lt;br /&gt;&lt;br /&gt;The question is "&lt;span style="font-weight: bold;"&gt;why would you choose to do this&lt;/span&gt;"?! Hey, I'm all for software being clever and helpful, but this choice of behaviour seems a bit clever for its own good. It wantonly broke a seemingly sane way of releasing code and really seems to try hard to break the &lt;a href="http://www.faqs.org/docs/artu/ch01s06.html"&gt;Rule of Least Surprise&lt;/a&gt;. This kind of thing is actually the opposite of helpful.&lt;br /&gt;&lt;br /&gt;OK, so the easy fix would probably be to remove or change the explicit link between PyPI and the code hosting download page by editing the &lt;span style="font-weight: bold;"&gt;Download URL&lt;/span&gt; parameter in the &lt;span style="font-weight: bold;"&gt;PKG_INFO&lt;/span&gt; file, but the fact remains that this functionality seems to be trying a little too hard to be useful.&lt;br /&gt;&lt;br /&gt;It seems that &lt;a href="http://groups.google.com/group/netaddr/browse_thread/thread/7b02504137eb753c"&gt;my misgivings on supporting &lt;span style="font-family:courier new;"&gt;setuptools&lt;/span&gt;&lt;/a&gt; are not entirely without justification ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2890218256643380401-6629461039711934150?l=drkjam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drkjam.blogspot.com/feeds/6629461039711934150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2890218256643380401&amp;postID=6629461039711934150' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/6629461039711934150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/6629461039711934150'/><link rel='alternate' type='text/html' href='http://drkjam.blogspot.com/2009/08/easyinstall-misbehaviour.html' title='easy_install (mis)behaviour'/><author><name>DrKJam</name><uri>http://www.blogger.com/profile/17930124567171106000</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2890218256643380401.post-4922663981586275407</id><published>2009-05-30T14:46:00.000-07:00</published><updated>2009-05-30T15:35:05.305-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google wave future technology demo'/><title type='text'>The Wave is coming ...</title><content type='html'>Google Wave that is ;-)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://wave.google.com/"&gt;http://wave.google.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here's a direct link to the Tech Preview video :-&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=v_UyVmITiYQ"&gt;http://www.youtube.com/watch?v=v_UyVmITiYQ&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;(Skip forward to 7:30 if you prefer to leave out some of the marketing and introduction at the start)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The video is an hour and 20 minute demo on a product that Google has been working on for the last 2 years or so. It is a view on how the way we communicate using computers is likely to change in the very near future.&lt;br /&gt;&lt;br /&gt;Seeing this, I am really beginning to believe some of the hype about Google becoming a true Microsoft killer. This doesn't even take into account all the hard work Google is doing to supplant Microsoft's products through software vendors with their own paid for products (an issue for another blog post). With technology like Wave, Google totally outclasses pretty much anything anyone else is doing right now.&lt;br /&gt;&lt;br /&gt;Interestingly, Google is putting the protocol behind Wave forward as an open standard so other software vendors can build their own interoperable (and possibly competing) systems and products with it :-&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.waveprotocol.org/"&gt;http://www.waveprotocol.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is all very altruistic but it does beg the question, "how do they make any money out of this"? I guess we'll be finding out in the months ahead.&lt;br /&gt;&lt;br /&gt;Maybe it's just paranoid old me but aspects of Wave are also a little scary. It opens up a whole Pandora's box of new possible security and privacy issues (much as any new technology does). Some of those bots look real friendly in a demo setting (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Spelly&lt;/span&gt;, Buggy, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Tweety&lt;/span&gt; etc) but ones could also be built for less savoury purposes in the wrong hands.&lt;br /&gt;&lt;br /&gt;On the whole though this is really cool technology and opens up some very interesting possibilities for new and better ways of working (in &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;real time&lt;/span&gt;) collaboratively in the future.&lt;br /&gt;&lt;br /&gt;Nice work &lt;a href="http://googleblog.blogspot.com/2009/05/went-walkabout-brought-back-google-wave.html"&gt;Lars&lt;/a&gt; and team!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2890218256643380401-4922663981586275407?l=drkjam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drkjam.blogspot.com/feeds/4922663981586275407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2890218256643380401&amp;postID=4922663981586275407' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/4922663981586275407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/4922663981586275407'/><link rel='alternate' type='text/html' href='http://drkjam.blogspot.com/2009/05/wave-is-coming.html' title='The Wave is coming ...'/><author><name>DrKJam</name><uri>http://www.blogger.com/profile/17930124567171106000</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2890218256643380401.post-6482526164069386218</id><published>2009-05-24T10:47:00.000-07:00</published><updated>2009-05-24T12:11:37.943-07:00</updated><title type='text'>Wingsuit Base Jumping - the new extreme sport</title><content type='html'>This has to be one of the most extreme sports of all time. It takes base jumping to a whole new level by combining this already dangerous pastime with the latest advances in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;wingsuit&lt;/span&gt; technology developed over the last 10 years.&lt;br /&gt;&lt;br /&gt;The most dangerous part has to be the practice known as "proximity flying" where the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;wingsuit&lt;/span&gt; base jumper glides over the mountain side on the way down only a few metres above the ground!&lt;br /&gt;&lt;br /&gt;You really have to see it to know what I'm talking about :-&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=QiXNxlM4BeE"&gt;http://www.youtube.com/watch?v=QiXNxlM4BeE&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=3ycBGkLkEkg" target="_blank"&gt;http://www.youtube.com/watch?&lt;wbr&gt;v=3&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;ycBGkLkEkg&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It literally makes your hairs stand up watching it!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;See Also&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.loicjeanalbert.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Loic&lt;/span&gt; Jean Albert's Homepage&lt;/a&gt; - great details on the history of this sport, starting with Icarus :-) and the evolution of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;wingsuit&lt;/span&gt; technology.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2890218256643380401-6482526164069386218?l=drkjam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drkjam.blogspot.com/feeds/6482526164069386218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2890218256643380401&amp;postID=6482526164069386218' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/6482526164069386218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/6482526164069386218'/><link rel='alternate' type='text/html' href='http://drkjam.blogspot.com/2009/05/wingsuit-base-jumping-new-extreme-sport.html' title='Wingsuit Base Jumping - the new extreme sport'/><author><name>DrKJam</name><uri>http://www.blogger.com/profile/17930124567171106000</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2890218256643380401.post-884535305964997408</id><published>2009-05-16T02:53:00.001-07:00</published><updated>2009-05-19T12:29:10.277-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='yahoo pipes rss atom'/><title type='text'>Yahoo Pipes - a web service for the customisation of RSS and Atom feeds</title><content type='html'>In the last couple of years I've started subscribing to more and more &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;RSS&lt;/span&gt; and Atom feeds preferring interesting articles and information to come to me rather than having to go out trawling a list of well known websites on a fairly ad &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;hoc&lt;/span&gt; basis for new articles of interest.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://reader.google.com/"&gt;Google Reader&lt;/a&gt; is my feed reader of choice mainly because it's online and I can access it from anywhere without having to maintain multiple installs of feed reader software and settings.&lt;br /&gt;&lt;br /&gt;I'm fairly ruthless with my feed subscriptions preferring feeds that are reasonably low volume (1 of 2 posts a week) with high quality content. There is usually a single human being on the other end with a limited amount of bandwidth.&lt;br /&gt;&lt;br /&gt;Quite a few feeds are aggregates of multiple contributions (e.g. news websites) or are automated to provide information when changes to some underlying system occur (e.g. &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;check ins&lt;/span&gt; for a code hosting site). They contain useful information but you sometimes quickly get bogged down by the sheer volume and frequency of updates coming through. I don't stay subscribed to these feeds for long when all I'm doing is clicking on "Mark All As Read" as hundreds of unread entries pile up.&lt;br /&gt;&lt;br /&gt;There are certain feeds in this latter category that I would still like to follow, &lt;span style="font-weight: bold; font-style: italic;"&gt;if only&lt;/span&gt; I could reduce the noise by either adding an include or exclude filter and possibly generating sub feeds that I could publish and make available to myself and others.&lt;br /&gt;&lt;br /&gt;This was a pipe dream until this morning when I came across &lt;a href="http://pipes.yahoo.com/pipes/"&gt;Yahoo Pipes&lt;/a&gt; :-)&lt;br /&gt;&lt;br /&gt;You rarely come across technology that does &lt;span style="font-weight: bold; font-style: italic;"&gt;exactly&lt;/span&gt; what you want out of the box without requiring a decent amount of customisation first, either through configuration or some coding. Yahoo Pipes allowed me solve a problem that has been nagging me for ages and it was dead simple to do.&lt;br /&gt;&lt;br /&gt;As its name suggests Yahoo Pipes makes use concepts familiar to those who know and love UNIX command line with I/O processing pipelines, redirection and a set of options similar to tools like &lt;span style="font-family:courier new;"&gt;grep&lt;/span&gt;, &lt;span style="font-family:courier new;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;sed&lt;/span&gt;&lt;/span&gt; and &lt;span style="font-family:courier new;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;awk&lt;/span&gt;&lt;/span&gt;. These are all provided through a great visual designer and editor that make settings up and publishing your own custom feeds really easy and most importantly very quick to crank out. You can literally build and publish a custom feed in 5 minutes or less without much prior experience of Yahoo Pipes. That is real power (hats off to the designers - this kind of thing is not easy to do).&lt;br /&gt;&lt;br /&gt;Here is a sample feed that is already saving me loads of time filtering out stuff I'm not interested in :-&lt;br /&gt;&lt;br /&gt;Source feed :-&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;PyPI&lt;/span&gt; Package Update &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;RSS&lt;/span&gt; feed&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://pypi.python.org/pypi?%3Aaction=rss" target="_blank"&gt;http:&lt;wbr&gt;/&lt;wbr&gt;/pypi.python.org&lt;wbr&gt;/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;pypi&lt;/span&gt;?%3&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;Aaction&lt;/span&gt;=&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;rss&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Resulting feed :-&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;PyPI&lt;/span&gt; Package Update &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;RSS&lt;/span&gt; feed (without &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;Zope&lt;/span&gt; or &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;Plone&lt;/span&gt; packages)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pipes.yahoo.com/drkjam/pypi_updates_no_zope_or_plone"&gt;&lt;span id="perma1mkJ0PtB3hGjOwCg3XBDOQ1148640893"&gt;http://pipes.yahoo.com/drkjam/pypi_updates_no_zope_or_plone&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can organise your new feeds by giving them sensible and meaningful URLs too (another great feature).&lt;br /&gt;&lt;br /&gt;So, if you subscribe to a lot of feeds and find that you want to tame them this is definitely &lt;span style="font-weight: bold;"&gt;the way forward™&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Check out these impressive tech demo videos for some real "wow" moments :-&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a class="blocklink" target="_new" href="http://www.jumpcut.com/fullscreen?id=F4396574585311DC87A2000423CF0184&amp;amp;type=clip"&gt;Learn How to Build a Pipe in Just a Few Minutes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a target="_new" href="http://www.jumpcut.com/fullscreen?id=C086AA92568811DCAB02000423CF381C&amp;amp;type=movie"&gt;How to Translate Your Feed&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2890218256643380401-884535305964997408?l=drkjam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drkjam.blogspot.com/feeds/884535305964997408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2890218256643380401&amp;postID=884535305964997408' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/884535305964997408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/884535305964997408'/><link rel='alternate' type='text/html' href='http://drkjam.blogspot.com/2009/05/yahoo-pipes-web-service-for.html' title='Yahoo Pipes - a web service for the customisation of RSS and Atom feeds'/><author><name>DrKJam</name><uri>http://www.blogger.com/profile/17930124567171106000</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2890218256643380401.post-6842137915644730495</id><published>2009-02-15T09:48:00.000-08:00</published><updated>2009-02-15T12:35:03.872-08:00</updated><title type='text'>TestDisk: *the* cross-platform data recovery tool</title><content type='html'>&lt;span style="font-size:85%;"&gt;A few months ago, I lost &lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;both&lt;/span&gt;&lt;span style="font-size:85%;"&gt; disks &lt;/span&gt;&lt;span style="font-size:85%;"&gt;at the &lt;/span&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;same time&lt;/span&gt; &lt;span style="font-size:85%;"&gt;in the RAID 1 mirror running on my &lt;a href="http://www.qnap.com/pro_detail_feature.asp?p_id=82"&gt;QNAP TS-209&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;!&lt;br /&gt;&lt;br /&gt;I get the feeling hardware manufacturers that extol the virtues of RAID would like you to believe that this sort of event is extremely uncommon. However, judging by how hot the disks were running (I couldn't hold them for more than a few seconds comfortably) the likelihood of both failing was probably quite high. The QNAP's cooling fan obviously wasn't able to provide sufficient airflow over the disks in question (a couple of Hiatchi &lt;/span&gt;&lt;span style="font-size:85%;"&gt;Deskstar &lt;/span&gt;&lt;span style="font-size:85%;"&gt;1Tb 7K1000's) which probably had a lot to do with the failures and data corruption. In hindsight, &lt;/span&gt;&lt;span style="font-size:85%;"&gt;I'm amazed they lasted as long as they did.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;I had been running an rsync job between the QNAP and my main PC fairly frequently. Just prior to the disk fatalities I'd been running short of disk space on my main machine and hadn't run the sync job for about six weeks. Annoyingly, when it failed there were still some files on the QNAP that I wanted.&lt;br /&gt;&lt;br /&gt;At the time I had a brief search around for some free data recovery tools using all of the keyword variations you might expect to pull up something useful via a search engine. I tried a few I came across and was left distinctly unimpressed by what was on offer. So, I decided to shelve the disks until I could find the time and a suitable tool to try and get at least some of the data back.&lt;br /&gt;&lt;br /&gt;Then, last week, I came across Victor Stinner's excellent library, &lt;a href="http://hachoir.org/"&gt;hachoir&lt;/a&gt;. On that project's wiki I noticed the rather intriguing entry simply &lt;/span&gt;&lt;span style="font-size:85%;"&gt;titled &lt;/span&gt;&lt;span style="font-size:85%;"&gt;'&lt;a href="http://hachoir.org/wiki/Forensics"&gt;forensics&lt;/a&gt;' which in turn led me to the &lt;a href="http://www.cgsecurity.org/wiki/TestDisk"&gt;TestDisk&lt;/a&gt; homepage. &lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;What a find!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I haven't been more impressed with a bit of software since someone introduced me to &lt;a href="http://www.videolan.org/vlc/"&gt;VLC&lt;/a&gt; several years ago. TestDisk runs on an impressive array of platforms (&lt;span style="font-style: italic;"&gt;Linux, BSD, Solaris, Mac OS X, Windows&lt;/span&gt;) and supports the drive formats you'd expect to come across - &lt;span style="font-style: italic;"&gt;FAT12/16/32, &lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;NTFS, &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;EXT2/3, ReiserFS&lt;/span&gt; etc. I was running TestDisk on Windows Vista 64-bit retrieving data from an Ext3 partition.&lt;br /&gt;&lt;br /&gt;Even better, it's free (GPL licensed). I think you'd be hardpressed to find a better free tool. Even paid for tools would likely struggle to match TestDisk's impressive list of features. I'm frankly astounded at how hard it is to find such a good tool via a search engine unless you know it by name (which is ridiculous).&lt;br /&gt;&lt;br /&gt;This tale does have a happy ending. I managed to retrieve about 80% of the files for what I believe is only some partition corruption. I've yet to ascertain if there is any physical damage to the disks. TestDisk was able to dig up the partition table that the QNAP managed to trash somehow and even allowed me to get back copies of files that had previous been deleted when the disks were still functioning. Truly amazing. I'm also hoping there is some life left in my Hitachi Deskstar disks. Mind you, I intend to give them a thorough soak test before trusting them with any serious data.&lt;br /&gt;&lt;br /&gt;I really recommend checking out the TestDisk web page and downloading it if you have spare 5 mins.&lt;br /&gt;&lt;br /&gt;A &lt;span style="font-weight: bold;"&gt;big&lt;/span&gt; thank you to Christophe Grenier for all his efforts in creating a truly great piece of software!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2890218256643380401-6842137915644730495?l=drkjam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drkjam.blogspot.com/feeds/6842137915644730495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2890218256643380401&amp;postID=6842137915644730495' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/6842137915644730495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/6842137915644730495'/><link rel='alternate' type='text/html' href='http://drkjam.blogspot.com/2009/02/testdisk-cross-platform-data-recovery.html' title='TestDisk: *the* cross-platform data recovery tool'/><author><name>DrKJam</name><uri>http://www.blogger.com/profile/17930124567171106000</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2890218256643380401.post-5669870674921772624</id><published>2009-01-21T16:43:00.000-08:00</published><updated>2009-02-05T02:08:33.300-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='netaddr cidr ipv4 ipv6'/><title type='text'>netaddr 0.6 released</title><content type='html'>For those who are interested &lt;a href="http://netaddr.googlecode.com/"&gt;netaddr&lt;/a&gt; 0.6 has just been released.&lt;br /&gt;&lt;br /&gt;A couple of nights ago, I hit a very important personal milestone.&lt;br /&gt;&lt;br /&gt;One of the killer features I've wanted since starting on netaddr back in January of 2008 is now in the bag! It ended up being one of the more tricky problems I've had to deal with but has been worth the effort. It will also prove extremely useful in my day-to-day work.&lt;br /&gt;&lt;br /&gt;Essentially, you can now take an arbitrary start and end IP address (versions 4 and 6), and formulate a list of intervening CIDRs that exactly bridge the two with no overlaps.&lt;br /&gt;&lt;br /&gt;A lot of infrastructure code had to be built before I was at a point where this could be implemented elegantly. The wait is (finally) over. It has also allowed me to kill some really ugly code based on &lt;span style="font-family: courier new;"&gt;math.frexp()&lt;/span&gt; which didn't work for IPv6 as it died somewhere around 2^54 due to rounding issues.&lt;br /&gt;&lt;br /&gt;So, here is the result of the (worst case) scenario in the IPv4 address space (IPv6 would take up too much screen space) :-&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;In [1]: from netaddr import *&lt;br /&gt;&lt;br /&gt;In [2]: cidrs = IPRange('0.0.0.1', '255.255.255.254').cidrs()&lt;br /&gt;&lt;br /&gt;In [3]: print "\n".join(["%-18s: %-15s -&gt; %-15s" % (str(c), c[0], c[-1]) for c in cidrs])&lt;br /&gt;0.0.0.1/32        : 0.0.0.1         -&gt; 0.0.0.1&lt;br /&gt;0.0.0.2/31        : 0.0.0.2         -&gt; 0.0.0.3&lt;br /&gt;0.0.0.4/30        : 0.0.0.4         -&gt; 0.0.0.7&lt;br /&gt;0.0.0.8/29        : 0.0.0.8         -&gt; 0.0.0.15&lt;br /&gt;0.0.0.16/28       : 0.0.0.16        -&gt; 0.0.0.31&lt;br /&gt;0.0.0.32/27       : 0.0.0.32        -&gt; 0.0.0.63&lt;br /&gt;0.0.0.64/26       : 0.0.0.64        -&gt; 0.0.0.127&lt;br /&gt;0.0.0.128/25      : 0.0.0.128       -&gt; 0.0.0.255&lt;br /&gt;0.0.1.0/24        : 0.0.1.0         -&gt; 0.0.1.255&lt;br /&gt;0.0.2.0/23        : 0.0.2.0         -&gt; 0.0.3.255&lt;br /&gt;0.0.4.0/22        : 0.0.4.0         -&gt; 0.0.7.255&lt;br /&gt;0.0.8.0/21        : 0.0.8.0         -&gt; 0.0.15.255&lt;br /&gt;0.0.16.0/20       : 0.0.16.0        -&gt; 0.0.31.255&lt;br /&gt;0.0.32.0/19       : 0.0.32.0        -&gt; 0.0.63.255&lt;br /&gt;0.0.64.0/18       : 0.0.64.0        -&gt; 0.0.127.255&lt;br /&gt;0.0.128.0/17      : 0.0.128.0       -&gt; 0.0.255.255&lt;br /&gt;0.1.0.0/16        : 0.1.0.0         -&gt; 0.1.255.255&lt;br /&gt;0.2.0.0/15        : 0.2.0.0         -&gt; 0.3.255.255&lt;br /&gt;0.4.0.0/14        : 0.4.0.0         -&gt; 0.7.255.255&lt;br /&gt;0.8.0.0/13        : 0.8.0.0         -&gt; 0.15.255.255&lt;br /&gt;0.16.0.0/12       : 0.16.0.0        -&gt; 0.31.255.255&lt;br /&gt;0.32.0.0/11       : 0.32.0.0        -&gt; 0.63.255.255&lt;br /&gt;0.64.0.0/10       : 0.64.0.0        -&gt; 0.127.255.255&lt;br /&gt;0.128.0.0/9       : 0.128.0.0       -&gt; 0.255.255.255&lt;br /&gt;1.0.0.0/8         : 1.0.0.0         -&gt; 1.255.255.255&lt;br /&gt;2.0.0.0/7         : 2.0.0.0         -&gt; 3.255.255.255&lt;br /&gt;4.0.0.0/6         : 4.0.0.0         -&gt; 7.255.255.255&lt;br /&gt;8.0.0.0/5         : 8.0.0.0         -&gt; 15.255.255.255&lt;br /&gt;16.0.0.0/4        : 16.0.0.0        -&gt; 31.255.255.255&lt;br /&gt;32.0.0.0/3        : 32.0.0.0        -&gt; 63.255.255.255&lt;br /&gt;64.0.0.0/2        : 64.0.0.0        -&gt; 127.255.255.255&lt;br /&gt;128.0.0.0/2       : 128.0.0.0       -&gt; 191.255.255.255&lt;br /&gt;192.0.0.0/3       : 192.0.0.0       -&gt; 223.255.255.255&lt;br /&gt;224.0.0.0/4       : 224.0.0.0       -&gt; 239.255.255.255&lt;br /&gt;240.0.0.0/5       : 240.0.0.0       -&gt; 247.255.255.255&lt;br /&gt;248.0.0.0/6       : 248.0.0.0       -&gt; 251.255.255.255&lt;br /&gt;252.0.0.0/7       : 252.0.0.0       -&gt; 253.255.255.255&lt;br /&gt;254.0.0.0/8       : 254.0.0.0       -&gt; 254.255.255.255&lt;br /&gt;255.0.0.0/9       : 255.0.0.0       -&gt; 255.127.255.255&lt;br /&gt;255.128.0.0/10    : 255.128.0.0     -&gt; 255.191.255.255&lt;br /&gt;255.192.0.0/11    : 255.192.0.0     -&gt; 255.223.255.255&lt;br /&gt;255.224.0.0/12    : 255.224.0.0     -&gt; 255.239.255.255&lt;br /&gt;255.240.0.0/13    : 255.240.0.0     -&gt; 255.247.255.255&lt;br /&gt;255.248.0.0/14    : 255.248.0.0     -&gt; 255.251.255.255&lt;br /&gt;255.252.0.0/15    : 255.252.0.0     -&gt; 255.253.255.255&lt;br /&gt;255.254.0.0/16    : 255.254.0.0     -&gt; 255.254.255.255&lt;br /&gt;255.255.0.0/17    : 255.255.0.0     -&gt; 255.255.127.255&lt;br /&gt;255.255.128.0/18  : 255.255.128.0   -&gt; 255.255.191.255&lt;br /&gt;255.255.192.0/19  : 255.255.192.0   -&gt; 255.255.223.255&lt;br /&gt;255.255.224.0/20  : 255.255.224.0   -&gt; 255.255.239.255&lt;br /&gt;255.255.240.0/21  : 255.255.240.0   -&gt; 255.255.247.255&lt;br /&gt;255.255.248.0/22  : 255.255.248.0   -&gt; 255.255.251.255&lt;br /&gt;255.255.252.0/23  : 255.255.252.0   -&gt; 255.255.253.255&lt;br /&gt;255.255.254.0/24  : 255.255.254.0   -&gt; 255.255.254.255&lt;br /&gt;255.255.255.0/25  : 255.255.255.0   -&gt; 255.255.255.127&lt;br /&gt;255.255.255.128/26: 255.255.255.128 -&gt; 255.255.255.191&lt;br /&gt;255.255.255.192/27: 255.255.255.192 -&gt; 255.255.255.223&lt;br /&gt;255.255.255.224/28: 255.255.255.224 -&gt; 255.255.255.239&lt;br /&gt;255.255.255.240/29: 255.255.255.240 -&gt; 255.255.255.247&lt;br /&gt;255.255.255.248/30: 255.255.255.248 -&gt; 255.255.255.251&lt;br /&gt;255.255.255.252/31: 255.255.255.252 -&gt; 255.255.255.253&lt;br /&gt;255.255.255.254/32: 255.255.255.254 -&gt; 255.255.255.254&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I am now officially proud of this project ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2890218256643380401-5669870674921772624?l=drkjam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drkjam.blogspot.com/feeds/5669870674921772624/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2890218256643380401&amp;postID=5669870674921772624' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/5669870674921772624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/5669870674921772624'/><link rel='alternate' type='text/html' href='http://drkjam.blogspot.com/2009/01/netaddr-06-released.html' title='netaddr 0.6 released'/><author><name>DrKJam</name><uri>http://www.blogger.com/profile/17930124567171106000</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2890218256643380401.post-625566792903210731</id><published>2009-01-16T16:01:00.001-08:00</published><updated>2009-01-16T16:22:15.694-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nih syndrome python web frameworks'/><title type='text'>"Not Invented Here" is a powerful force</title><content type='html'>A link to this 2006 blog post came up on my feeds recently :-&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.pythonisito.com/2006/01/three-reasons-why-you-shouldnt-write.html"&gt;http://blog.pythonisito.com/2006/01/three-reasons-why-you-shouldnt-write.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's a great article (with excellent commentary) on reasons for (and against) starting your own code project versus joining an &lt;span style="font-weight: bold;"&gt;existing&lt;/span&gt; one. Things are certainly not as clear cut as they might appear at first. It uses the umpteenth Python web frameworks spawned (prior to the arrival of &lt;a href="http://www.djangoproject.com/"&gt;Django&lt;/a&gt;) as a basis for discussion but is good general advice for those thinking about contributing to the pool of open source software.&lt;br /&gt;&lt;br /&gt;Certainly food for thought.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2890218256643380401-625566792903210731?l=drkjam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drkjam.blogspot.com/feeds/625566792903210731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2890218256643380401&amp;postID=625566792903210731' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/625566792903210731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/625566792903210731'/><link rel='alternate' type='text/html' href='http://drkjam.blogspot.com/2009/01/not-invented-here-is-powerful-force.html' title='&quot;Not Invented Here&quot; is a powerful force'/><author><name>DrKJam</name><uri>http://www.blogger.com/profile/17930124567171106000</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2890218256643380401.post-7176505371733013619</id><published>2008-09-17T04:41:00.000-07:00</published><updated>2008-09-17T05:42:23.963-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sony vaio tz recall repair inspection customer satisfaction'/><title type='text'>Sony Customer Service; second to none?</title><content type='html'>Recently, I got caught in the whole &lt;a href="http://www.engadget.com/2008/09/04/sony-recalling-vaio-tz-models-due-to-overheating-risk/"&gt;Sony Vaio TZ fiasco&lt;/a&gt; and had to send off my machine for inspection and repair. While annoying that I should be subject to this at all, my experience with the resolution to the problem is actually worth blogging about ;-)&lt;br /&gt;&lt;br /&gt;I am &lt;span style="font-weight: bold; font-style: italic;"&gt;extremely&lt;/span&gt; impressed with Sony's approach to customer service. They did (almost) everything right :-&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the 3 working day turnaround (they could easily have made me wait weeks)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;an apologetic letter enclosed with the returned hardware&lt;/li&gt;&lt;li&gt;complimentary 2Gb Sony Microvault memory stick (nice)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;new Vaio branded screen cleaning cloth (very nice as the one that came with it has seen better days)&lt;/li&gt;&lt;li&gt;friendly, helpful and &lt;span style="font-weight: bold;"&gt;local&lt;/span&gt; call centre staff on hand when I called up to check on progress with the repair&lt;br /&gt;&lt;/li&gt;&lt;li&gt;and last but not least, a nice clean machine and screen with problems resolved (laptops do get gunky after a while)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The only negative thing about the whole process was having to read about the problem in the press rather than being contacted directly by Sony themselves, even though they have my contact details that were registered when I bought the product. OK, it's a voluntary programme so I guess I can let this last point slide.&lt;br /&gt;&lt;br /&gt;As far as I am concerned, this is the benchmark by which other companies should do business with their customers. OK, so the hardware isn't cheap, but I think this proves that you do get what you pay for (at least some of the time). It also shows that Sony actually care about and have respect for their customers feelings and opinions.&lt;br /&gt;&lt;br /&gt;All this of course, means that Sony will keep their existing customers with the added bonus of the word of mouth effect working in their favour. It is so refreshing to see a company of this size still realising the importantance of customer satisfaction and having a duty of care *after* the sale, rather than stomping all over them or even worse, just ignoring them altogether.&lt;br /&gt;&lt;br /&gt;Large unnamed corporates in competing hardware businesses would do well to take note of Sony's impressive example.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2890218256643380401-7176505371733013619?l=drkjam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drkjam.blogspot.com/feeds/7176505371733013619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2890218256643380401&amp;postID=7176505371733013619' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/7176505371733013619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/7176505371733013619'/><link rel='alternate' type='text/html' href='http://drkjam.blogspot.com/2008/09/sony-customer-service-second-to-none.html' title='Sony Customer Service; second to none?'/><author><name>DrKJam</name><uri>http://www.blogger.com/profile/17930124567171106000</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2890218256643380401.post-6580370028242144777</id><published>2008-08-10T16:07:00.000-07:00</published><updated>2008-08-11T14:45:00.582-07:00</updated><title type='text'>Time for a real blog</title><content type='html'>I've been hobbling along with an extremely basic &lt;a href="http://pages.google.com/"&gt;Google Pages&lt;/a&gt; &lt;span style="font-style: italic;"&gt;'blog'&lt;/span&gt; (I use the term lightly) for a little while now.&lt;br /&gt;&lt;br /&gt;Sadly, it doesn't have any of the features that I'll probably find rather useful going forward. Time for a change! So here I am, with a proper blog this time. The back-dated post feature on Blogger is great!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2890218256643380401-6580370028242144777?l=drkjam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/6580370028242144777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/6580370028242144777'/><link rel='alternate' type='text/html' href='http://drkjam.blogspot.com/2008/08/time-for-real-blog.html' title='Time for a real blog'/><author><name>DrKJam</name><uri>http://www.blogger.com/profile/17930124567171106000</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2890218256643380401.post-2135138623388123769</id><published>2008-08-07T23:53:00.000-07:00</published><updated>2008-08-11T14:50:33.740-07:00</updated><title type='text'>netaddr release 0.4 is available</title><content type='html'>All the features I wanted are now in and tested, so I've packaged them up and uploaded the various packages to &lt;a href="http://pypi.python.org/pypi/netaddr"&gt;PyPI&lt;/a&gt; and the &lt;a href="http://code.google.com/p/netaddr/downloads/list"&gt;hosting site download page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;A decent number of changes have made their way into this release. Please see the &lt;a href="http://code.google.com/p/netaddr/wiki/CHANGELOG"&gt;CHANGELOG&lt;/a&gt; for full details.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2890218256643380401-2135138623388123769?l=drkjam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drkjam.blogspot.com/feeds/2135138623388123769/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2890218256643380401&amp;postID=2135138623388123769' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/2135138623388123769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/2135138623388123769'/><link rel='alternate' type='text/html' href='http://drkjam.blogspot.com/2008/08/netaddr-release-04-is-available.html' title='netaddr release 0.4 is available'/><author><name>DrKJam</name><uri>http://www.blogger.com/profile/17930124567171106000</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2890218256643380401.post-4022006088866433197</id><published>2008-07-16T00:55:00.000-07:00</published><updated>2008-08-11T14:40:09.414-07:00</updated><title type='text'>netaddr release 0.3.1</title><content type='html'>&lt;p&gt;I ran pylint over my project and fixed a several errors and warnings. I decided not to get upset when it told me off for having module files that were greater than 1000 lines! So what?"&lt;br /&gt;&lt;br /&gt;I also squashed my first very small officially reported bug :-)&lt;br /&gt;&lt;/p&gt;&lt;blockquote style="font-style: italic; font-weight: bold;"&gt;Build It, and They Will Come"&lt;/blockquote&gt;Well, I guess we'll have to put that theory to the test. I've now created a project page on &lt;a href="http://pypi.python.org/pypi"&gt;PyPI&lt;/a&gt;, sent an announcement to &lt;a href="http://groups.google.com/group/comp.lang.python.announce/"&gt;comp.lang.python.announce&lt;/a&gt; and created a &lt;a href="http://groups.google.com/group/netaddr"&gt;NetAddr Google Group&lt;/a&gt; to discuss all things related to this shiny new library.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2890218256643380401-4022006088866433197?l=drkjam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drkjam.blogspot.com/feeds/4022006088866433197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2890218256643380401&amp;postID=4022006088866433197' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/4022006088866433197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/4022006088866433197'/><link rel='alternate' type='text/html' href='http://drkjam.blogspot.com/2008/07/netaddr-release-031.html' title='netaddr release 0.3.1'/><author><name>DrKJam</name><uri>http://www.blogger.com/profile/17930124567171106000</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2890218256643380401.post-3184693737963454264</id><published>2008-07-10T23:45:00.000-07:00</published><updated>2008-08-11T14:27:40.589-07:00</updated><title type='text'>netaddr 0.2 is available</title><content type='html'>Hot on the heels of 0.1 is release 0.2 with some bug fixes and a couple of new features.&lt;br /&gt;&lt;p&gt;The release tarball is available here - &lt;a href="http://netaddr.googlecode.com/files/netaddr-0.2.tar.gz"&gt;netaddr-0.2.tar.gz&lt;/a&gt; Alternatively, check out the latest changes from the &lt;a href="http://code.google.com/p/netaddr/source/checkout"&gt;subversion repository&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I need to announce this on the Python announce mailing list and &lt;a href="http://pypi.python.org/pypi"&gt;PyPI&lt;/a&gt;, but I must first spruce up the wiki example pages before I do.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2890218256643380401-3184693737963454264?l=drkjam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drkjam.blogspot.com/feeds/3184693737963454264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2890218256643380401&amp;postID=3184693737963454264' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/3184693737963454264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/3184693737963454264'/><link rel='alternate' type='text/html' href='http://drkjam.blogspot.com/2008/07/netaddr-02-is-available.html' title='netaddr 0.2 is available'/><author><name>DrKJam</name><uri>http://www.blogger.com/profile/17930124567171106000</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2890218256643380401.post-2241678374981441175</id><published>2008-07-08T01:01:00.000-07:00</published><updated>2008-08-11T14:23:40.065-07:00</updated><title type='text'>netaddr 0.1 is ready</title><content type='html'>&lt;p&gt;So after months of hard work, the first release of &lt;b&gt;&lt;code&gt;netaddr&lt;/code&gt;&lt;/b&gt; is finally up on the code &lt;a href="http://netaddr.googlecode.com/"&gt;hosting page&lt;/a&gt;. It took slightly longer than anticipated but it's all the better for the extra time spent before release it.&lt;br /&gt;&lt;br /&gt;Get it while it's hot - &lt;a href="http://netaddr.googlecode.com/files/netaddr-0.1.tar.gz"&gt;netaddr-0.1.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;See the &lt;a href="http://code.google.com/p/netaddr/w/list"&gt;wiki&lt;/a&gt; on the code hosting page for examples of how to use &lt;b&gt;&lt;code&gt;netaddr &lt;/code&gt;&lt;/b&gt;and it's API.&lt;br /&gt;&lt;br /&gt;It's really late and I need to get some sleep ;-) &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2890218256643380401-2241678374981441175?l=drkjam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drkjam.blogspot.com/feeds/2241678374981441175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2890218256643380401&amp;postID=2241678374981441175' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/2241678374981441175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/2241678374981441175'/><link rel='alternate' type='text/html' href='http://drkjam.blogspot.com/2008/07/netaddr-01-is-ready.html' title='netaddr 0.1 is ready'/><author><name>DrKJam</name><uri>http://www.blogger.com/profile/17930124567171106000</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2890218256643380401.post-510531725042314632</id><published>2008-06-26T23:14:00.001-07:00</published><updated>2008-08-11T14:42:33.143-07:00</updated><title type='text'>A new Python library</title><content type='html'>&lt;p&gt;I'm putting the finishing touches on a new, open source, network address library for Python. It is (somewhat un-imaginatively) called &lt;b&gt;&lt;code&gt;netaddr&lt;/code&gt;&lt;/b&gt; and will be released under the &lt;a href="http://www.opensource.org/licenses/bsd-license.php"&gt;BSD license.&lt;/a&gt;&lt;/p&gt;&lt;h4&gt;Perl and Ruby do it better&lt;/h4&gt;&lt;p&gt;About 3 months ago, I became frustrated with the lack of robust, quality Python code for doing various kinds of network address manipulations. What I needed was the Pythonic equivalent of what Perl and Ruby have had for years. I sadly, failed to find anything that entirely lived up to my expectations.&lt;/p&gt;&lt;blockquote style="font-style: italic; font-weight: bold;"&gt;"If you are going to re-invent the wheel, at least try and invent a better one."&lt;span style="font-weight: normal;"&gt; - Larry Wall&lt;/span&gt;&lt;/blockquote&gt;&lt;p&gt;Having decided to take up Larry's sage advice the overall goal was to reddress this imbalance by releasing my own library.&lt;/p&gt;&lt;h4&gt;A Pythonic solution&lt;/h4&gt;&lt;p&gt;Early on, I decided not to look too closely at the implementation or interfaces in other languages. I believed that doing so would have a detrimental effect on my code, diluting the elusive Pythonic flavour being sought.&lt;/p&gt;&lt;p&gt;This meant a not unreasonable amount of extra time and effort being spent reading RFCs and IEEE standards (zzzzzzzzzzzzz) to get to the source of what should be provided by a network address library, rather than picking up on things 3rd hand from others. I also spent a decent amount of time researching as many libraries as I could get my hands on (in all 3 languages) to see what worked and what didn't.&lt;/p&gt;&lt;h4&gt;Benefits&lt;/h4&gt;&lt;p&gt;Thankfully, the effort has proven a very worthwhile experience. Python is a great language for implementing a lot of the ideas I've had.&lt;br /&gt;&lt;br /&gt;My Python skills have benefitted a great deal and I've learnt a lot about network addressing too (IPv6 in particular). It'll certainly improve the overall quality and effectiveness of my current and future projects. If it ends up benefitting other members of the Python community as well, that would be a big bonus. Hopefully it will give systems administrators and developers using Python a boost and end up being appreciated by more than just this &lt;a href="http://www.javaworld.com/javaworld/jw-06-2008/jw-06-oneman.html"&gt;party of one&lt;/a&gt;!&lt;br /&gt;&lt;/p&gt;&lt;h4&gt;So, where too next?&lt;/h4&gt;&lt;p&gt;In my next post, I'll be providing details on where you can get your hands on &lt;b&gt;&lt;code&gt;netaddr&lt;/code&gt;&lt;/b&gt; along with examples showing you how to put it through its paces.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2890218256643380401-510531725042314632?l=drkjam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drkjam.blogspot.com/feeds/510531725042314632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2890218256643380401&amp;postID=510531725042314632' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/510531725042314632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2890218256643380401/posts/default/510531725042314632'/><link rel='alternate' type='text/html' href='http://drkjam.blogspot.com/2008/06/new-python-library.html' title='A new Python library'/><author><name>DrKJam</name><uri>http://www.blogger.com/profile/17930124567171106000</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
