<?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-3711269760993993197</id><updated>2011-12-17T05:40:24.530Z</updated><category term='home'/><category term='PSU DIY'/><category term='holiday snow'/><category term='diy'/><category term='phones'/><category term='Cats'/><category term='vala'/><category term='software'/><category term='quiet week'/><category term='garage'/><category term='entropy'/><category term='change'/><category term='music'/><category term='reprap'/><category term='weekend'/><category term='wind'/><category term='c programming'/><category term='kids'/><category term='time'/><category term='car'/><title type='text'>Vincents Random Waffle</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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>36</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-3497393055403107338</id><published>2011-12-09T16:46:00.003Z</published><updated>2011-12-09T17:07:32.970Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='change'/><title type='text'>And one man in his time plays many parts</title><content type='html'>Perhaps the immortal bard was making a more noble and deep reference to the stages of ones life but I feel no compunction lifting the line for my purpose.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And it is about changes in my own life I wish to speak. I have been employed by Simtec for more than a decade now. There have been great changes in  the embedded electronics industry in that time, especially for those using open source software. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A decade ago we were considered cutting edge and strange for advocating and using NetBSD and Linux, especially for our committing of our changes back upstream, today that is considered normal behaviour.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Alas the last couple of years have shown that Simtec is not the best place for me to continue, so I have  decided to move on to pastures new. From the new year I will be working with a great bunch of people at &lt;a href="http://www.collabora.com/"&gt;Collabora&lt;/a&gt;. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This should not have any great detrimental impact on my open source activities but as with any big life change, it may take a while to settle down and I apologize in advance if I am not as responsive as usual.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-3497393055403107338?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/3497393055403107338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2011/12/and-one-man-in-his-time-plays-many.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/3497393055403107338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/3497393055403107338'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2011/12/and-one-man-in-his-time-plays-many.html' title='And one man in his time plays many parts'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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-3711269760993993197.post-335707163101600429</id><published>2011-10-27T11:59:00.008+01:00</published><updated>2011-10-30T23:14:27.021Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Software that adds another dimension to things</title><content type='html'>I think that it will come as no surprise to my fellow software engineers if I note that I almost never write new software any more. I maintain, I augment, I refactor, I debug but very, very rarely do I start something new. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This probably has something to do with my maturity as a code monkey, my immediate reaction is to seek out a solution to a problem that already exists and perhaps extend it to fulfil my requirements. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Partially this comes from my innate laziness but also over time I have discovered that I am a "finisher" the role I invariably end up in involves doing all the final bits to make the client accept a project. Because I know my reaction is to always finish something I start, I avoid starting things.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anyhow, enough introspection, a couple of months ago I was talking on IRC about my 3D printer and was asked "can you print the Debian logo?". So I hunted around for software that would let me convert a bitmap into a suitable 3d format. The result was rather disappointing, the few tools I could find were generally python scripts which simply generated a matrix of cuboids, one for each pixel their heights corresponding to the pixel value.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I used one such script to generate a file for the Debian swirl and imported it into the &lt;a href="http://www.openscad.org/"&gt;OpenScad&lt;/a&gt; 3d modelling application. I got an inkling of the issues involved after the scene render took over half an hour. The resulting print was blocky and overall I was not terribly happy with the outcome.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So I decided I would write a program to convert images into a 3D representation. I asked myself, how hard can it be? &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sometimes starting from an utterly naive approach with no knowledge of a problem can lead to new insights. In this case I have spent all my free coding time for a month producing a program which I am now convinced has barely even scratched the surface of the possible solutions.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Having said that I have started from a blank editor window and a manual gcc command line compilation and progressed to an &lt;a href="http://kyllikki.github.com/png23d/"&gt;actually useful tool&lt;/a&gt; and, arguably, of more import to me I have learned and implemented a load of new algorithms which has actually been mentally stimulating and fun!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The basic premise of the tool is to take a PNG image, quantise it into a discrete number of levels , convert that as a height map into a triangle mesh, index that mesh (actually a &lt;i&gt;very&lt;/i&gt; hard problem to solve efficiently), simplify the indexed mesh and output the result in a selection of 3D file formats.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The mesh generation alone is a complex field which it appears often devolves into the&lt;a href="http://en.wikipedia.org/wiki/Marching_cubes"&gt; marching cubes&lt;/a&gt; algorithm simply out of despair of anything better ;-) I have failed to implement marching cubes so far (though I have partially implemented marching squares, an altogether simpler algorithm)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The mesh indexing creates an indexed list of vertices from the generated mesh and back annotates it with which faces are connected to which vertices. This effectively generates a useful representation of the meshes topology which can then be used to reduce the complexity of the mesh, or at least describe it. To gain efficiency I implemented my first ever bloom filter as part of my solution. I also learned that generating a plausible hash for said filter is a &lt;i&gt;lot&lt;/i&gt; harder than it would seem. In the end I simply used the FNV hash which produces excellent results for very little computation cost.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The mesh simplification area is awash with academic research, most of which I ended up skipping and simply went for the absolute simplest edge removal algorithm. Implementing even this and maintaining a valid mesh topology was challenging.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;By comparison the output of the various formats was positively trivial, mainly littered with head scratching over the bizzare de-facto "extensible" formats where only one trivial corner is ever actually implemented.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;All in all I have had fun creating the &lt;a href="http://kyllikki.github.com/png23d/"&gt;PNG23D&lt;/a&gt; project and have actually used it to generate some useful output. I have even printed some of it to generate a &lt;a href="http://www.flickr.com/photos/29254252@N06/sets/72157627707283440/"&gt;lithophane&lt;/a&gt; of Turing. I now look forward to several years of maintaining and debugging it and doing all the other things I do instead of writing new software ;-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-335707163101600429?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/335707163101600429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2011/10/software-that-adds-another-dimension-to.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/335707163101600429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/335707163101600429'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2011/10/software-that-adds-another-dimension-to.html' title='Software that adds another dimension to things'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-700736691933487063</id><published>2011-10-12T17:47:00.067+01:00</published><updated>2011-10-22T21:34:58.580+01:00</updated><title type='text'>I do not want anything NASty to happen</title><content type='html'>&lt;div&gt;I have a lot of digital data to store, like most people I have photos, music, home movies, email and lots of other random data. Being a programmer I also tend to have huge piles of source code and builds lying about. If all that was not enough I work from home so I have copious mountains of work data too.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Many years ago I decided I wanted a single robust, backed up, file server for all of this. So I slapped together a machine from leftovers stuffed some drives in a software RAID array, served over NFS and CIFS and never looked back.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Over time the hardware has changed and the system upgraded but the basic approach of a custom built server has remained. When I needed a build engine to churn out hundreds of kernels a day for the ARM Linux autobuilder the system was expanded to cope and mid 2009 the current instantiation was created.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://2.bp.blogspot.com/-O8-zEfBHBsI/TqMh-MC8AAI/AAAAAAAAAGU/Eh-PDV4X1LE/s1600/tower.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 90px; height: 200px;" src="http://2.bp.blogspot.com/-O8-zEfBHBsI/TqMh-MC8AAI/AAAAAAAAAGU/Eh-PDV4X1LE/s200/tower.jpg" border="0" alt="Current full height tower fileserver" title="Current full height tower fileserver" id="BLOGGER_PHOTO_ID_5666410108431368194" /&gt;&lt;/a&gt;The current system is a huge tower case (courtesy of Mark Hymers) containing a Core 2 Quad 2.33GHz (8 threads) with 8Gigabytes of memory and 13 drives across four SATA controllers split into several RAID arrays. Despite buying new drives at higher capacities I have tended to keep the old drives around for extra storage resulting in what you see here.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;I recently looked at the power usage of this monster and realised I was paying a lot of money to spin rust which was simply uneconomic. Seriously, why did I have six sub 200Gigabyte drives running when a single 2T to replace them would pay for itself in power saved in under a month! In addition I no longer required the compute power available either, most definitely time for a downsize!&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Several friends suggested a HP micro server might be just the thing. After examining and evaluating some other options (Thecus and QNAP NAS) I decided the HP route was most definitely the best value for money. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The HP Proliant micro server is a dual core Athlon II 1.3GHz system with a Gigabyte of memory, space for four SATA hard drives and a single 5¼ inch bay for an optical drive. All this in a roughly 250mm on a side cube.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://2.bp.blogspot.com/-kIHXz2VzKiU/TqMjWe_j4qI/AAAAAAAAAGg/Er_WdMrIXW8/s1600/microserver-closed.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 162px; height: 200px;" src="http://2.bp.blogspot.com/-kIHXz2VzKiU/TqMjWe_j4qI/AAAAAAAAAGg/Er_WdMrIXW8/s200/microserver-closed.jpg" border="0" alt="My HP proliant microserver" title="My HP proliant microserver" id="BLOGGER_PHOTO_ID_5666411625345966754" /&gt;&lt;/a&gt;I went out and bought the server from ebuyer for £235 with free shipping and £100 cashback. I Immediately sent off the cash back paperwork so I would not forget(what an odd way to get discount) so total cost for the unit was £135. I then used Crucial to select a suitable memory upgrade to take the total to 2 Gigabytes of RAM for £14&lt;/div&gt;&lt;br /&gt;&lt;div&gt;The final piece of the solution was the drives for the storage. I decided the best capacity to cost ratio could be had from 2 TB drives and with four bays available would give a raw capacity of 8 TB or more usefully for this discussion 7.8 TiB&lt;/div&gt;&lt;br /&gt;&lt;div&gt;I did an experiment with 3x1 TB 7200 RPM drives from the existing server and determined that The overall system would not really benefit enough to justify the 50% price premium of 7200 RPM drives over 5400 RPM devices. I ended up getting four Samsung Spinpoint F4EG 2 TB drives for £230.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;I also bought a black LG DVD-RW drive for £16 I would have also required a SATA data cable and a molex to SATA power cable if I had not already got them.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/-TwPAGlcJKAc/TqMlxK8-dTI/AAAAAAAAAGs/eryI6hIuJEY/s1600/microserver-open.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 196px; height: 200px;" src="http://4.bp.blogspot.com/-TwPAGlcJKAc/TqMlxK8-dTI/AAAAAAAAAGs/eryI6hIuJEY/s200/microserver-open.jpg" border="0" alt="My HP microserver with the front door open" title="My HP microserver with the front door open" id="BLOGGER_PHOTO_ID_5666414282846139698" /&gt;&lt;/a&gt;Putting the components together was really simple. The internal layout and design of the enclosure mean it is easy to work with and has the feel of build quality I usually associate with HP and IBM server kit not something this small and inexpensive. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The provided documentation is good but unnecessary as most operations are obvious. They even provide the bolts to attach all the drives along with a wrench in the lockable front door, how thoughtful is that!&lt;/div&gt;&lt;br /&gt;&lt;div&gt;I then installed the system with Debian squeeze from the optical drive. Principally because I happened to have a network installer CD to hand although the BIOS does have network boot capability.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;I used the installer to put the whole initial system together and did not have to resort to the command line even once, very impressed with how far D-I has come.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;After asking several people for advice the general consensus was that I should create two partitions on each drive one for a RAID 1 /boot and one for a RAID 5 LVM area.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;I did have to perform the entire install a second time because there is a gotcha with GUID Partition Table, RAID 1 boot drives and GRUB. You &lt;span style="font-style:italic;"&gt;must&lt;/span&gt; have a small "BIOS" partition on the front of the drive or GRUB cannot install in the MBR and your system will not boot!&lt;/div&gt;&lt;br /&gt;&lt;div&gt;The partition layout I ended up with looks like:&lt;br /&gt;&lt;pre&gt;Model: ATA SAMSUNG HD204UI (scsi)&lt;br /&gt;Disk /dev/sda: 2000GB&lt;br /&gt;Sector size (logical/physical): 512B/512B&lt;br /&gt;Partition Table: gpt&lt;br /&gt;&lt;br /&gt;Number  Start   End     Size    File system  Name  Flags&lt;br /&gt;1      17.4kB  32.0MB  32.0MB                     bios_grub&lt;br /&gt;3      32.0MB  1000MB  968MB                      raid&lt;br /&gt;2      1000MB  2000GB  1999GB                     raid&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;The small Gigabyte partition was configured as a RAID 1 across all four drives and formatted with ext2 and mount point of /boot. The large space was configured as RAID 5 across all four drives with LVM on top. Logical volumes were allocated formatted ext3 (on advice from seevral people about ext4 instability they had observed) for 50 GiB root, 4 GiB swap and 1 TiB home space.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;The normal Debian install proceeded and after the post install reboot I was presented with a login prompt. Absolutely no surprises at all no additional drivers required and a correctly running system.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Over the next few days I did the usual sysadmin stuff, rsynced data from the old fileserver including creating logical volumes for the various arrays from the old server none of which presented much of a problem. The 5.5TiB Raid 5 did however take a day or so to sync!&lt;/div&gt;&lt;br /&gt;&lt;div&gt;I used the microservers eSATA port to attach external drives I use for backup purposes which has also not been an issue so far.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;I am currently running both the new and old systems for a few days and rsyncing data to the microserver until I am sure of it. Actually I will make the switch this weekend and shut the old system down and leave it till next weekend before I scrub the old drives. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Before I made it live I decided to run some benchmarks and gather some data just for interest.&lt;/div&gt;&lt;div&gt;Bonnie (Version  1.96) was run in the root logical volume (I repeated the tests in other volumes, there is sub 1% variation) the test used a 4GiB size and 16 files&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th colspan="3"&gt;Sequential Output&lt;/th&gt;&lt;th colspan="2"&gt;Sequential Input&lt;/th&gt;&lt;th&gt;Random Seeks&lt;/th&gt;&lt;th colspan="3"&gt;Sequential Create&lt;/th&gt;&lt;th colspan="3"&gt;Random Create&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Per Chr&lt;/th&gt;&lt;th&gt;Block&lt;/th&gt;&lt;th&gt;Rewrite&lt;/th&gt;&lt;th&gt;Per Chr&lt;/th&gt;&lt;th&gt;Block&lt;/th&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Create&lt;/th&gt;&lt;th&gt;Read&lt;/th&gt;&lt;th&gt;Delete&lt;/th&gt;&lt;th&gt;Create&lt;/th&gt;&lt;th&gt;Read&lt;/th&gt;&lt;th&gt;Delete&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;/sec&lt;/th&gt;&lt;td&gt;378K&lt;/td&gt;&lt;td&gt;41M&lt;/td&gt;&lt;td&gt;37M&lt;/td&gt;&lt;td&gt;2216K&lt;/td&gt;&lt;td&gt;330M&lt;/td&gt;&lt;td&gt;412.8&lt;/td&gt;&lt;td&gt;11697&lt;/td&gt;&lt;td&gt;+++++&lt;/td&gt;&lt;td&gt;18330&lt;/td&gt;&lt;td&gt;14246&lt;/td&gt;&lt;td&gt;+++++&lt;/td&gt;&lt;td&gt;14371&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;%CPU&lt;/th&gt;&lt;td&gt;97&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;91&lt;/td&gt;&lt;td&gt;30&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;+++&lt;/td&gt;&lt;td&gt;28&lt;/td&gt;&lt;td&gt;29&lt;/td&gt;&lt;td&gt;+++&lt;/td&gt;&lt;td&gt;22&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Latency&lt;/th&gt;&lt;td&gt;109ms&lt;/td&gt;&lt;td&gt;681ms&lt;/td&gt;&lt;td&gt;324ms&lt;/td&gt;&lt;td&gt;116ms&lt;/td&gt;&lt;td&gt;93389µs&lt;/td&gt;&lt;td&gt;250ms&lt;/td&gt;&lt;td&gt;29021µs&lt;/td&gt;&lt;td&gt;814µs&lt;/td&gt;&lt;td&gt;842µs&lt;/td&gt;&lt;td&gt;362µs&lt;/td&gt;&lt;td&gt;51µs&lt;/td&gt;&lt;td&gt;61µs&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Does not seem to be any notable issues there, the write speeds are a little lower than I might like but that is the cost of RAID 5 and 5400 RPM drives.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The rsync operations used to sync up the live data seem to manage just short of 20MiB/s for the home partition comprising of 250GiB in two and a half million files with the expected mix of file sizes.  The video partition managed 33MiB/s on 1TiB of data in nine thousand files.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;The bonnie tests were performed accessing the server over NFS with 24GiB size and 16 files.&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th colspan="3"&gt;Sequential Output&lt;/th&gt;&lt;th colspan="2"&gt;Sequential Input&lt;/th&gt;&lt;th&gt;Random Seeks&lt;/th&gt;&lt;th colspan="3"&gt;Sequential Create&lt;/th&gt;&lt;th colspan="3"&gt;Random Create&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Per Chr&lt;/th&gt;&lt;th&gt;Block&lt;/th&gt;&lt;th&gt;Rewrite&lt;/th&gt;&lt;th&gt;Per Chr&lt;/th&gt;&lt;th&gt;Block&lt;/th&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Create&lt;/th&gt;&lt;th&gt;Read&lt;/th&gt;&lt;th&gt;Delete&lt;/th&gt;&lt;th&gt;Create&lt;/th&gt;&lt;th&gt;Read&lt;/th&gt;&lt;th&gt;Delete&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;/sec&lt;/th&gt;&lt;td&gt;1733K&lt;/td&gt;&lt;td&gt;29M&lt;/td&gt;&lt;td&gt;19M&lt;/td&gt;&lt;td&gt;4608K&lt;/td&gt;&lt;td&gt;106M&lt;/td&gt;&lt;td&gt;358.3&lt;/td&gt;&lt;td&gt;1465&lt;/td&gt;&lt;td&gt;3714&lt;/td&gt;&lt;td&gt;2402&lt;/td&gt;&lt;td&gt;1576&lt;/td&gt;&lt;td&gt;4082&lt;/td&gt;&lt;td&gt;1529&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;%CPU&lt;/th&gt;&lt;td&gt;98&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;93&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Latency&lt;/th&gt;&lt;td&gt;10894µs&lt;/td&gt;&lt;td&gt;23242ms&lt;/td&gt;&lt;td&gt;69159ms&lt;/td&gt;&lt;td&gt;49772µs&lt;/td&gt;&lt;td&gt;224ms&lt;/td&gt;&lt;td&gt;250ms&lt;/td&gt;&lt;td&gt;148ms&lt;/td&gt;&lt;td&gt;24821µs&lt;/td&gt;&lt;td&gt;157ms&lt;/td&gt;&lt;td&gt;108ms&lt;/td&gt;&lt;td&gt;2074µs&lt;/td&gt;&lt;td&gt;719ms&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;or alternatively as percentages against the previous direct access values&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th colspan="3"&gt;Sequential Output&lt;/th&gt;&lt;th colspan="2"&gt;Sequential Input&lt;/th&gt;&lt;th&gt;Random Seeks&lt;/th&gt;&lt;th colspan="3"&gt;Sequential Create&lt;/th&gt;&lt;th colspan="3"&gt;Random Create&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Per Chr&lt;/th&gt;&lt;th&gt;Block&lt;/th&gt;&lt;th&gt;Rewrite&lt;/th&gt;&lt;th&gt;Per Chr&lt;/th&gt;&lt;th&gt;Block&lt;/th&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Create&lt;/th&gt;&lt;th&gt;Read&lt;/th&gt;&lt;th&gt;Delete&lt;/th&gt;&lt;th&gt;Create&lt;/th&gt;&lt;th&gt;Read&lt;/th&gt;&lt;th&gt;Delete&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;/sec&lt;/th&gt;&lt;td&gt;464&lt;/td&gt;&lt;td&gt;68&lt;/td&gt;&lt;td&gt;51&lt;/td&gt;&lt;td&gt;213&lt;/td&gt;&lt;td&gt;32&lt;/td&gt;&lt;td&gt;87&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;+++&lt;/td&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;+++&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;CPU&lt;/th&gt;&lt;td&gt;101&lt;/td&gt;&lt;td&gt;18&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;104&lt;/td&gt;&lt;td&gt;34&lt;/td&gt;&lt;td&gt;71&lt;/td&gt;&lt;td&gt;33&lt;/td&gt;&lt;td&gt;+++&lt;/td&gt;&lt;td&gt;32&lt;/td&gt;&lt;td&gt;31&lt;/td&gt;&lt;td&gt;+++&lt;/td&gt;&lt;td&gt;31&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Latency&lt;/th&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;2512&lt;/td&gt;&lt;td&gt;13248&lt;/td&gt;&lt;td&gt;93&lt;/td&gt;&lt;td&gt;227&lt;/td&gt;&lt;td&gt;79&lt;/td&gt;&lt;td&gt;509&lt;/td&gt;&lt;td&gt;3049&lt;/td&gt;&lt;td&gt;18646&lt;/td&gt;&lt;td&gt;29834&lt;/td&gt;&lt;td&gt;4066&lt;/td&gt;&lt;td&gt;1178688&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Not that that tells us much aside from that write is a bit slower over the network, read is gigabit network bandwidth limited and latency of disc over the network is generally poorer than direct.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;In summary the total cost was £395 for a complete ready to use system with 5.5TiB of RAID 5 storage which can be NFS served at nearly 900Mbit/s. Overall I am happy with the result, my only real issue is the write performance is a little disappointing but it is good enough for what I need.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-700736691933487063?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/700736691933487063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2011/10/i-do-not-want-anything-nasty-to-happen.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/700736691933487063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/700736691933487063'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2011/10/i-do-not-want-anything-nasty-to-happen.html' title='I do not want anything NASty to happen'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-O8-zEfBHBsI/TqMh-MC8AAI/AAAAAAAAAGU/Eh-PDV4X1LE/s72-c/tower.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-6575956377192125647</id><published>2011-10-11T15:19:00.014+01:00</published><updated>2011-10-11T16:53:01.135+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c programming'/><title type='text'>Sometimes I am just dumb</title><content type='html'>I have recently been working on some code for &lt;a href="http://www.netsurf-browser.org/"&gt;NetSurf&lt;/a&gt; which builds up an output buffer by repeatedly calling snprintf(); No great shock there, well understood trivial pattern that has been used repeatedly for ages. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Of course I discovered a buffer overflow, which to be fair had already been pointed out to me by another developer and I just failed to see it...Can I blame my old age? no? bah, get off my lawn!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Basically it boils down to me simply not seeing where C helpfully let me subtract one size_t typed value from another for a length and me completely forgetting that a negative result would simply become a large positive value...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I (erroneously) beleived snprintf took a (signed) int as the buffer length, of course it returns one, but it takes a size_t which is, of course unsigned.&lt;/div&gt;Gosh I feel silly now, in fact I was so convinced I was right I wrote a program to "prove" it.&lt;br /&gt;&lt;div style="background-color:lightgrey; font-family:monospace;"&gt;&lt;a name="line1"&gt; 1&lt;/a&gt; &lt;font color="#444444"&gt;/* snprintf.c&lt;br /&gt;&lt;a name="line2"&gt; 2&lt;/a&gt;  *&lt;br /&gt;&lt;a name="line3"&gt; 3&lt;/a&gt;  * snprintf example &lt;br /&gt;&lt;a name="line4"&gt; 4&lt;/a&gt;  * &lt;br /&gt;&lt;a name="line5"&gt; 5&lt;/a&gt;  * Public domain (really I do not think its even copyrightable anyway)&lt;br /&gt;&lt;a name="line6"&gt; 6&lt;/a&gt;  *&lt;br /&gt;&lt;a name="line7"&gt; 7&lt;/a&gt;  * cc -Wall -o snprintf-ex snprintf-ex.c&lt;br /&gt;&lt;a name="line8"&gt; 8&lt;/a&gt;  */&lt;/font&gt;&lt;br /&gt;&lt;a name="line9"&gt; 9&lt;/a&gt; &lt;br /&gt;&lt;a name="line10"&gt;10&lt;/a&gt; &lt;font color="0000ff"&gt;&lt;strong&gt;#include &lt;font color="#008000"&gt;&amp;lt;stdio.h&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;a name="line11"&gt;11&lt;/a&gt; &lt;font color="0000ff"&gt;&lt;strong&gt;#include &lt;font color="#008000"&gt;&amp;lt;string.h&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;a name="line12"&gt;12&lt;/a&gt; &lt;br /&gt;&lt;a name="line13"&gt;13&lt;/a&gt; &lt;font color="0000ff"&gt;&lt;strong&gt;#define SHOW printf(&lt;font color="#008000"&gt;&amp;quot;%3ld  %.*s*%s&lt;font color="#77dd77"&gt;\n&lt;/font&gt;&amp;quot;&lt;/font&gt;, string_len - slen, (int)slen, string, string + strlen(string) + 1 )&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;a name="line14"&gt;14&lt;/a&gt; &lt;br /&gt;&lt;a name="line15"&gt;15&lt;/a&gt; &lt;br /&gt;&lt;a name="line16"&gt;16&lt;/a&gt; &lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;main&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;argc&lt;/font&gt;, &lt;strong&gt;char&lt;/strong&gt;&lt;font color="4444FF"&gt;*&lt;/font&gt;&lt;font color="4444FF"&gt;*&lt;/font&gt;&lt;font color="#2040a0"&gt;argv&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;a name="line17"&gt;17&lt;/a&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;a name="line18"&gt;18&lt;/a&gt;     &lt;strong&gt;char&lt;/strong&gt; &lt;font color="#2040a0"&gt;string&lt;/font&gt;&lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#FF0000"&gt;64&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;a name="line19"&gt;19&lt;/a&gt;     &lt;font color="#2040a0"&gt;size_t&lt;/font&gt; &lt;font color="#2040a0"&gt;string_len&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;strong&gt;sizeof&lt;/strong&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;string&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt; / &lt;font color="#FF0000"&gt;2&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;a name="line20"&gt;20&lt;/a&gt;     &lt;strong&gt;int&lt;/strong&gt; &lt;font color="#2040a0"&gt;bloop&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;a name="line21"&gt;21&lt;/a&gt;     &lt;font color="#2040a0"&gt;size_t&lt;/font&gt; &lt;font color="#2040a0"&gt;slen&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#FF0000"&gt;0&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;a name="line22"&gt;22&lt;/a&gt; &lt;br /&gt;&lt;a name="line23"&gt;23&lt;/a&gt;     &lt;font color="#444444"&gt;/* initialise string */&lt;/font&gt;&lt;br /&gt;&lt;a name="line24"&gt;24&lt;/a&gt;     &lt;strong&gt;for&lt;/strong&gt; &lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;bloop&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#FF0000"&gt;0&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt; &lt;font color="#2040a0"&gt;bloop&lt;/font&gt; &lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt; &lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;strong&gt;sizeof&lt;/strong&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;string&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt; &lt;font color="4444FF"&gt;-&lt;/font&gt; &lt;font color="#FF0000"&gt;1&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt; &lt;font color="#2040a0"&gt;bloop&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;a name="line25"&gt;25&lt;/a&gt;         &lt;font color="#2040a0"&gt;string&lt;/font&gt;&lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#2040a0"&gt;bloop&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#008000"&gt;'0'&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;bloop&lt;/font&gt; &lt;font color="4444FF"&gt;%&lt;/font&gt; &lt;font color="#FF0000"&gt;10&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;a name="line26"&gt;26&lt;/a&gt;     &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;a name="line27"&gt;27&lt;/a&gt;     &lt;font color="#2040a0"&gt;string&lt;/font&gt;&lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#2040a0"&gt;bloop&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#FF0000"&gt;0&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt; &lt;font color="#444444"&gt;/* null terminate */&lt;/font&gt;&lt;br /&gt;&lt;a name="line28"&gt;28&lt;/a&gt; &lt;br /&gt;&lt;a name="line29"&gt;29&lt;/a&gt;     &lt;font color="#2040a0"&gt;printf&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;%3ld  %s&lt;font color="#77dd77"&gt;\n&lt;/font&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#2040a0"&gt;string_len&lt;/font&gt;, &lt;font color="#2040a0"&gt;string&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;a name="line30"&gt;30&lt;/a&gt; &lt;br /&gt;&lt;a name="line31"&gt;31&lt;/a&gt;     &lt;font color="#444444"&gt;/* try an empty string */&lt;/font&gt;&lt;br /&gt;&lt;a name="line32"&gt;32&lt;/a&gt;     &lt;font color="#2040a0"&gt;slen&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;snprintf&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;string&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;slen&lt;/font&gt;, &lt;font color="#2040a0"&gt;string_len&lt;/font&gt; &lt;font color="4444FF"&gt;-&lt;/font&gt; &lt;font color="#2040a0"&gt;slen&lt;/font&gt;, &lt;font color="#008000"&gt;&amp;quot;%s&amp;quot;&lt;/font&gt;, &lt;font color="#008000"&gt;&amp;quot;&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;a name="line33"&gt;33&lt;/a&gt; &lt;br /&gt;&lt;a name="line34"&gt;34&lt;/a&gt;     &lt;font color="#2040a0"&gt;SHOW&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;a name="line35"&gt;35&lt;/a&gt; &lt;br /&gt;&lt;a name="line36"&gt;36&lt;/a&gt;     &lt;font color="#444444"&gt;/* blah blah */&lt;/font&gt;&lt;br /&gt;&lt;a name="line37"&gt;37&lt;/a&gt;     &lt;font color="#2040a0"&gt;slen&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;snprintf&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;string&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;slen&lt;/font&gt;, &lt;font color="#2040a0"&gt;string_len&lt;/font&gt; &lt;font color="4444FF"&gt;-&lt;/font&gt; &lt;font color="#2040a0"&gt;slen&lt;/font&gt;, &lt;font color="#008000"&gt;&amp;quot;Lorem ipsum dolor&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;a name="line38"&gt;38&lt;/a&gt; &lt;br /&gt;&lt;a name="line39"&gt;39&lt;/a&gt;     &lt;font color="#2040a0"&gt;SHOW&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;a name="line40"&gt;40&lt;/a&gt; &lt;br /&gt;&lt;a name="line41"&gt;41&lt;/a&gt;     &lt;font color="#444444"&gt;/* this one should exceed the allowed length */&lt;/font&gt;&lt;br /&gt;&lt;a name="line42"&gt;42&lt;/a&gt;     &lt;font color="#2040a0"&gt;slen&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;snprintf&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;string&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;slen&lt;/font&gt;, &lt;font color="#2040a0"&gt;string_len&lt;/font&gt; &lt;font color="4444FF"&gt;-&lt;/font&gt; &lt;font color="#2040a0"&gt;slen&lt;/font&gt;, &lt;font color="#008000"&gt;&amp;quot;Lorem ipsum dolor&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;a name="line43"&gt;43&lt;/a&gt; &lt;br /&gt;&lt;a name="line44"&gt;44&lt;/a&gt;     &lt;font color="#2040a0"&gt;SHOW&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;a name="line45"&gt;45&lt;/a&gt; &lt;br /&gt;&lt;a name="line46"&gt;46&lt;/a&gt;     &lt;font color="#444444"&gt;/* should not call snprintf up if slen exceeds string_len as the&lt;br /&gt;&lt;a name="line47"&gt;47&lt;/a&gt;      * subtraction results in a negative length and snprintf takes a unisigned&lt;br /&gt;&lt;a name="line48"&gt;48&lt;/a&gt;      * size! &lt;br /&gt;&lt;a name="line49"&gt;49&lt;/a&gt;      */&lt;/font&gt;&lt;br /&gt;&lt;a name="line50"&gt;50&lt;/a&gt; &lt;br /&gt;&lt;a name="line51"&gt;51&lt;/a&gt;     &lt;font color="#444444"&gt;/* this one starts exceeding the allowed length */&lt;/font&gt;&lt;br /&gt;&lt;a name="line52"&gt;52&lt;/a&gt;     &lt;font color="#2040a0"&gt;slen&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt;&lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;snprintf&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;string&lt;/font&gt; &lt;font color="4444FF"&gt;+&lt;/font&gt; &lt;font color="#2040a0"&gt;slen&lt;/font&gt;, &lt;font color="#2040a0"&gt;string_len&lt;/font&gt; &lt;font color="4444FF"&gt;-&lt;/font&gt; &lt;font color="#2040a0"&gt;slen&lt;/font&gt;, &lt;font color="#008000"&gt;&amp;quot;Lorem ipsum dolor&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;a name="line53"&gt;53&lt;/a&gt; &lt;br /&gt;&lt;a name="line54"&gt;54&lt;/a&gt;     &lt;font color="#2040a0"&gt;SHOW&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;a name="line55"&gt;55&lt;/a&gt; &lt;br /&gt;&lt;a name="line56"&gt;56&lt;/a&gt;     &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#FF0000"&gt;0&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;a name="line57"&gt;57&lt;/a&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Of course all this really proved was that I was wrong and I needed to clean up the original code as soon as possible.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A good lesson to learn here is that no matter how experienced you are, you can be mistaken and that, perhaps, some redemption I can take from this is I have matured enough as a programmer to write a test program to prove myself wrong!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-6575956377192125647?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/6575956377192125647/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2011/10/sometimes-i-am-just-dumb.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/6575956377192125647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/6575956377192125647'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2011/10/sometimes-i-am-just-dumb.html' title='Sometimes I am just dumb'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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-3711269760993993197.post-8297561442767368082</id><published>2011-10-06T11:55:00.015+01:00</published><updated>2011-10-06T16:43:22.826+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reprap'/><title type='text'>Introduction to printing in another dimension</title><content type='html'>Mankind, it would appear, owe a great deal of their evolutionary advantage to using &lt;a href="http://en.wikipedia.org/wiki/Tool"&gt;tools&lt;/a&gt;. This ability appears to have been massively amplified by our creation of &lt;a href="http://en.wikipedia.org/wiki/Machine_tool"&gt;machine tools&lt;/a&gt;. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A machine tool is widely defined to be a machine where the movement of the tool (the tool path) is  not directly controlled by a human. One of the first known examples is a late 15th century lathe used to cut screw threads . The Industrial revolution was intimately interconnected with the creation of new machine tools and arguably by the mid 19th century all the distinct subtractive machine tool types had been discovered.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I ought to explain the word &lt;a href="http://en.wikipedia.org/wiki/Subtractive_manufacturing"&gt;subtractive&lt;/a&gt; in this context, it is a pretty simple and rather arbitrary distinction (but important for this discussion). Traditional machining removes or subtracts material to obtain a finished item akin to a sculptor revealing the statute from within a block of stone by using a chisel and hammer. The corollary to this is, unsurprisingly, the additive process where material is added to create the finished item.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The machine tools from the 19th centuary were primarily single use devices controlled by gears and link mechanisms. Although the &lt;a href="http://en.wikipedia.org/wiki/Jacquard_loom"&gt;Jacquard loom&lt;/a&gt; was well known, because of the physical engineering difficulties, combining the concept with a machine tool to create a programmable tool path was not fully realised until the opening of the 20th century. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the late 1940s electrical motors and punch cards/tape made machine tools Numerically Controlled (NC) and when computers arrived in the 60s we gained &lt;a href="http://en.wikipedia.org/wiki/Numerical_control"&gt;Computer Numerical Control&lt;/a&gt; (CNC) and the opportunity to completely &lt;a href="http://www.youtube.com/watch?v=gPPp1A1gj2M&amp;amp;feature=results_main&amp;amp;playnext=1&amp;amp;list=PL908A41AFEE5449E8"&gt;screw things up&lt;/a&gt; with software became available. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With the advent of CNC&lt;a href="http://en.wikipedia.org/wiki/Additive_manufacturing"&gt; additive systems&lt;/a&gt; became practical and by the late 1980s these machines were being widely used used for &lt;a href="http://en.wikipedia.org/wiki/Rapid_prototyping"&gt;Rapid Prototyping&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The first additive systems generally used was the simple pen plotter which added ink on top of paper and became popular in draughting offices for producing blueprints etc. Though more generally thought of as computer printing technique plotters owe their heritage to CNC machines.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next came prototyping systems based on &lt;a href="http://en.wikipedia.org/wiki/Layered_Object_Manufacturing"&gt;layered object manufacture&lt;/a&gt; which cut shapes in a thin flat material (paper or plastic) and glued them together. These systems were expensive compared to casting processes (use a subtractive machine to make a mould and cast the part), extremely wasteful of source material and the results can be of variable quality. Systems based on this process are &lt;a href="http://www.mcortechnologies.com/products"&gt;still manufactured&lt;/a&gt; and used.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then came the &lt;a href="http://en.wikipedia.org/wiki/Stereolithography"&gt;stereolithography&lt;/a&gt; approach which scans a focused UV laser to cure resin and build up an object. There are several commercial machines available and even some &lt;a href="http://3dhomemade.blogspot.com/"&gt;home built systems&lt;/a&gt; but the costs of the resin have not yet made this approach generally cost effective.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Currently the most common commercial rapid prototyping additive systems are&lt;a href="http://en.wikipedia.org/wiki/Selective_laser_sintering"&gt; selective sintering&lt;/a&gt; processes where either an electron beam or a high power laser melt a layer of powdered material on a bed, the bed is lowered, more powder added and the process repeated. This process can use many different types of material and is very flexible as the power used can be plastic or metals. The quality is very high and high resolutions are available. Unfortunately these machines are expensive and generally start around £20,000 which puts them out of most individuals reach.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If anyone is still reading here is the summary of what we have covered so far:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Humans have used tools since they stopped being monkeys.&lt;/li&gt;&lt;li&gt;More than a century back we figured out how to make machines control the tools.&lt;/li&gt;&lt;li&gt;Fifty years back we made computers control the tools, before this all tools were subtractive.&lt;/li&gt;&lt;li&gt;In the last twenty years we have discovered several expensive ways to make objects with additive methods.&lt;/li&gt;&lt;/ul&gt;Now we get to the promise of the title, in the last few years &lt;a href="http://en.wikipedia.org/wiki/Fused_deposition_modeling"&gt;Fused Filament Fabrication&lt;/a&gt; has become a viable option for a hobbyist. This method extrudes a thermoplastic through a nozzle and constructs an object one layer at a time from the bottom up. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The &lt;a href="http://www.reprap.org/wiki/Main_Page"&gt;RepRap&lt;/a&gt; project at Bath university helped kickstart development of a &lt;a href="http://www.reprap.org/wiki/RepRap_Family_Tree"&gt;plethora&lt;/a&gt; of practical operational 3D printers that can be built or bought. These machines are relatively inexpensive (starting from £400 if you build it yourself) and the feedstock is also reasonably inexpensive.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In another post I will discuss the actual practicalities of building and running one of these devices and looking at their software.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-8297561442767368082?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/8297561442767368082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2011/10/introduction-to-printing-in-another.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/8297561442767368082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/8297561442767368082'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2011/10/introduction-to-printing-in-another.html' title='Introduction to printing in another dimension'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-5008601147474253160</id><published>2011-09-13T21:08:00.011+01:00</published><updated>2011-09-13T22:56:00.851+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PSU DIY'/><title type='text'>Electricity is really just organized lightning.</title><content type='html'>&lt;div&gt;I have recently been working on a project that requires a 12V supply. Ordinarily this is no problem my selection of bench supplies are generally more than a match for anything I throw at them. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://2.bp.blogspot.com/-dYB4_xlqMs0/Tm_QXdTP5OI/AAAAAAAAAFY/7dlp2ij7cfY/s1600/thandar-ts3022s.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="float:right; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 126px;" src="http://2.bp.blogspot.com/-dYB4_xlqMs0/Tm_QXdTP5OI/AAAAAAAAAFY/7dlp2ij7cfY/s200/thandar-ts3022s.jpg" border="0" alt="My TS3022S Bench Supply" title="My TS3022S Bench Supply" id="BLOGGER_PHOTO_ID_5651965158794192098" /&gt;&lt;/a&gt;This project however needed a little more "oomph" than usual, specifically 200W more. Funnily enough a precision variable output bench supply capable of supplying 20A are rare and *very* expensive beasties.&lt;/div&gt; &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So we turn to a fixed output supply, after all I will want to run my project without hogging my bench supplies anyway. These can be bought from various electronics suppliers like Farnell from around the £50 mark and Chinese imports from Ebay sellers start around the £20 mark.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;All very well and good but that is money I was not planning on spending and possibly a month of waiting for an already badly delayed project. So I decided to Convert an old ATX PSU into a 12V source. This is not a new idea and a quick search revealed many suitable guides online. I had a quick skim, decided I did understand the general idea and ploughed ahead.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Wikipedia has a very useful page on the &lt;a href="http://en.wikipedia.org/wiki/ATX"&gt;ATX standard&lt;/a&gt; complete with pinout diagrams and colour codes. The pile of grey box ATX supplies available on my shelf was examined and one was helpfully labelled with a sticker proclaiming 22A@12V and we had a winner.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Opening the case of the donor 450W CIT branded supply revealed a mostly empty enclosure with the usual basic switching arrangement. I removed most of the wire loom aside from two of each output voltage (3.3V, 5V and 12V i figured the other voltages might be useful in future) and three commons, the 3.3V and 5V sense lines were also kept. Each of these pairs were cut to length and leads were wired to 4mm sockets.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The "PWR_EN" line was wired via a toggle switch to ground so the output can be switched on and off easily. The 5V standby and a 5V output line were wired to a green/red bi-colour LED (via 270Ω current limit resistors) to give indication that mains is present and when the output is on.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Holes were drilled for four 4mm sockets an indicator LED and a switch. The connectors and switches were all mounted in the PSU casework. I plugged it all in, put an 8.2Ω load resistor on the 5V line with an ammeter in line and a voltmeter across the 12V rail. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://1.bp.blogspot.com/-BnOACzi7mOs/Tm_NLng96RI/AAAAAAAAAFQ/PdCrtJoC5PA/s1600/atx-bench-psu-outputon.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 142px;" src="http://1.bp.blogspot.com/-BnOACzi7mOs/Tm_NLng96RI/AAAAAAAAAFQ/PdCrtJoC5PA/s200/atx-bench-psu-outputon.jpg" border="0" alt="ATX bench power supply " title="ATX bench power supply" id="BLOGGER_PHOTO_ID_5651961656842774802" /&gt;&lt;/a&gt;I turned the mains on and the LED lit up green (5V standby worked) and when I flicked the output switch the LED turned orange, the 12V line went to 12V and the expected 0.6A flowed through the load resistor. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;Basically, Success!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have since loaded the supply up to the 200W operating load and nothing unexpected has happened so I am happy. Seems converting an ATX PSU is a perfectly good way of getting a 200W 12V supply and I can recommend it for anyone as cheap as me willing to put an hour or so into such a project.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-5008601147474253160?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/5008601147474253160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2011/09/electricity-is-really-just-organized.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/5008601147474253160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/5008601147474253160'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2011/09/electricity-is-really-just-organized.html' title='Electricity is really just organized lightning.'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-dYB4_xlqMs0/Tm_QXdTP5OI/AAAAAAAAAFY/7dlp2ij7cfY/s72-c/thandar-ts3022s.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-4817122561511609186</id><published>2011-08-21T18:07:00.028+01:00</published><updated>2011-08-21T21:50:25.956+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='entropy'/><title type='text'>A year of entropy</title><content type='html'>&lt;div&gt;&lt;a href="http://3.bp.blogspot.com/-12WLGpWQO48/TlFIah6ljpI/AAAAAAAAAEQ/ZozuGfKgNg0/s1600/ekey-in-router.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 136px;" src="http://3.bp.blogspot.com/-12WLGpWQO48/TlFIah6ljpI/AAAAAAAAAEQ/ZozuGfKgNg0/s200/ekey-in-router.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5643371428689841810" /&gt;&lt;/a&gt;It has been a couple of years now since the release of the &lt;a href="http://www.entropykey.co.uk/"&gt;Entropy Key&lt;/a&gt; Around a year ago we finally managed to have enough stock on hand that I obtained a real production unit and installed it in my border router.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;I installed the Debian packages, configured the ekeyd into EGD server mode and installed the EGD client packages on my other machines and pretty much forgot about it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The recent new release of the ekey host software (version 1.1.4)  reminded me that I had been quietly collecting statistics for almost a whole year and had some munin graphs to share.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://2.bp.blogspot.com/-_g1tJ14GKZ8/TlFWunII3FI/AAAAAAAAAEY/9B1wYwXIxIg/s1600/ekeyd_stat_total_TotalEntropy-year.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 112px;" src="http://2.bp.blogspot.com/-_g1tJ14GKZ8/TlFWunII3FI/AAAAAAAAAEY/9B1wYwXIxIg/s200/ekeyd_stat_total_TotalEntropy-year.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5643387166849031250" /&gt;&lt;/a&gt;The munin graphs of the generated output is pretty dull. Aside from the minor efficiency improvement in the 1.1.3 release installed mid December the generated rate has been a flat 3.93 Kilobytes a second.&lt;/div&gt;&lt;div style="clear:both"&gt;&lt;a href="http://4.bp.blogspot.com/-ZJnb__3NICk/TlFfa1xVD4I/AAAAAAAAAEg/K-na2mw_q-k/s1600/ekeyd_stat_KeyTemperatureC-year.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 112px;" src="http://4.bp.blogspot.com/-ZJnb__3NICk/TlFfa1xVD4I/AAAAAAAAAEg/K-na2mw_q-k/s200/ekeyd_stat_KeyTemperatureC-year.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5643396722787159938" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/-ji8m8V2o7h8/TlFf0wcoysI/AAAAAAAAAEo/RulZ5rg_g-0/s1600/jennifer-sensors_temp-year.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 112px;" src="http://3.bp.blogspot.com/-ji8m8V2o7h8/TlFf0wcoysI/AAAAAAAAAEo/RulZ5rg_g-0/s200/jennifer-sensors_temp-year.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5643397168034794178" /&gt;&lt;/a&gt;The temperature sensor on the Entropy key shows a good correlation with the on-board CPU thermal sensors within the host system.&lt;/div&gt;&lt;div style="clear:both"&gt;&lt;a href="http://2.bp.blogspot.com/-41GLxD5mdUM/TlFjxZ0t-JI/AAAAAAAAAEw/IV6seumvcTw/s1600/jennifer-entropy-year.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 112px;" src="http://2.bp.blogspot.com/-41GLxD5mdUM/TlFjxZ0t-JI/AAAAAAAAAEw/IV6seumvcTw/s200/jennifer-entropy-year.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5643401508468684946" /&gt;&lt;/a&gt;The host border router/server is a busy box which provides most network services including secure LDAP and SSL web services, it shows no sign of not having enough entropy at any point in the year.&lt;/div&gt;&lt;div style="clear:both"&gt;&lt;a href="http://1.bp.blogspot.com/-z6R3bF6q3ok/TlFmxmWr9PI/AAAAAAAAAE4/0u30SgsMXGc/s1600/gerald-entropy-year.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 112px;" src="http://1.bp.blogspot.com/-z6R3bF6q3ok/TlFmxmWr9PI/AAAAAAAAAE4/0u30SgsMXGc/s200/gerald-entropy-year.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5643404810367268082" /&gt;&lt;/a&gt;The sites main file server and compile engine is a 4 core 8 gigabyte system with 12 drives. This system is heavily used with high load almost all the time but without the EGD client running has almost no entropy available.&lt;/div&gt;&lt;div style="clear:both"&gt;&lt;a href="http://3.bp.blogspot.com/-hbGTgbXNZ9U/TlFqFt_tsnI/AAAAAAAAAFA/b4IqRIFoFiI/s1600/derik-entropy-year.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 112px;" src="http://3.bp.blogspot.com/-hbGTgbXNZ9U/TlFqFt_tsnI/AAAAAAAAAFA/b4IqRIFoFiI/s200/derik-entropy-year.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5643408454550663794" /&gt;&lt;/a&gt;The next system is my personal workstation. This machine often gets rebooted and is usually turned off overnight which is why there are gaps in the graph and odd discontinuities. Nonetheless entropy is always available just like the rest of my systems ;-)&lt;/div&gt;&lt;div style="clear:both"&gt;&lt;a href="http://3.bp.blogspot.com/-HpyzYSR7Bq8/TlFtqdBGiwI/AAAAAAAAAFI/447CI2P6d7M/s1600/heket-entropy-year.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 112px;" src="http://3.bp.blogspot.com/-HpyzYSR7Bq8/TlFtqdBGiwI/AAAAAAAAAFI/447CI2P6d7M/s200/heket-entropy-year.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5643412384183126786" /&gt;&lt;/a&gt;And almost as a "control" here is a file server on the same network which has not been running EGD client (Ok, Ok already it was misconfigured and I am an idiot ;-)&lt;/div&gt;&lt;div style="clear:both"&gt;In conclusion it seems an entropy key can keep at least this small network completely filled up with all the entropy it needs without much fuss. YAY!&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-4817122561511609186?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/4817122561511609186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2011/08/year-of-entropy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/4817122561511609186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/4817122561511609186'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2011/08/year-of-entropy.html' title='A year of entropy'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-12WLGpWQO48/TlFIah6ljpI/AAAAAAAAAEQ/ZozuGfKgNg0/s72-c/ekey-in-router.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-65405985337780454</id><published>2011-05-31T11:08:00.006+01:00</published><updated>2011-05-31T11:49:06.411+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='diy'/><category scheme='http://www.blogger.com/atom/ns#' term='garage'/><title type='text'>Can you just...</title><content type='html'>&lt;div&gt;I should have learned by now, no sentence that starts "Can you just" ever ends well. In my experience it means someone else has misunderstood the problem at hand. Then we proceed to the part of the project where (according to my lovely wife) I end up using my condescending voice. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I work through what I have been asked for and eventually, if it goes well you end up defining what the actual, real job needs to be done is. And almost envitably the "Can you just" has become a major job.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Most of us I fear recognise this "pattern" from our working lives with software. Well I am glad to report this pattern exists in real, physical world too.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Last week we took a trip to my parents in law, two thoroughly nice people (I lucked out, no evil mother in law here). I had been asked before I went "Can you just fix the garage door, it sticks". So I took along some basic tools expecting to lubricate a hinge or something.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Turns out it was the garage back door (for humans to get in and out) and...well there were bigger issues. The door frame was rotten and the door had pulled it away from the wall. So a new door frame you say? ah, well, yes&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;At some point in the past someone had fitted a double glazed window and had, kinda removed the lintle above the door and window! Yes there were several courses of brick masonry wall resting on top of a upvc window frame. The door frame had provided some support till it rotted and fell apart. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The window was under a huge strain and was actually 5cm shorter at one end than the other. The brickwork was no longer mortared and could better be described as a pile of bricks held together with caulking.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://4.bp.blogspot.com/-KnCNnzvRlio/TeTE785KlWI/AAAAAAAAAEE/3evmSF_MJiY/s1600/IMAG0051.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 241px;" src="http://4.bp.blogspot.com/-KnCNnzvRlio/TeTE785KlWI/AAAAAAAAAEE/3evmSF_MJiY/s320/IMAG0051.jpg" border="0" alt="Vincent fitting the latch to the new door frame" title="Vincent fitting the latch to the new door frame" id="BLOGGER_PHOTO_ID_5612827569847702882" /&gt;&lt;/a&gt;&lt;div&gt;So my bank holiday weekend was spent removing those bricks, making good, building a frame from 44x97mm planed timber bolted into the walls and covering it with weatherboard. OK it is not masonry but on the other hand it will not be falling on anyone's head any-time soon.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And before anyone comments, yes that frame is true, the spirit level says so. Alas that window frame is very, very wonky indeed and the wall it is sitting on is 4cm out too, so It looks a bit off. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Possibly not my best work but you can hang a couple of hundred kilos from the frame and it not budge so I think its solid enough for this purpose.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Providing my father in law keeps treating it with the wood preserver every couple of years it will not go rotten either and should last a long time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-65405985337780454?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/65405985337780454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2011/05/can-you-just.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/65405985337780454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/65405985337780454'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2011/05/can-you-just.html' title='Can you just...'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-KnCNnzvRlio/TeTE785KlWI/AAAAAAAAAEE/3evmSF_MJiY/s72-c/IMAG0051.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-6302048391103362426</id><published>2011-02-18T11:30:00.010Z</published><updated>2011-02-18T12:11:51.505Z</updated><title type='text'>Shedding</title><content type='html'>&lt;div&gt;For some time now Melodie has wanted more outside storage.&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-Mu821HWIUUk/TV5ZMRtcJaI/AAAAAAAAADs/Lmnfs-4uMWc/s1600/waterfight.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 189px;" src="http://2.bp.blogspot.com/-Mu821HWIUUk/TV5ZMRtcJaI/AAAAAAAAADs/Lmnfs-4uMWc/s200/waterfight.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5574991456178546082" /&gt;&lt;/a&gt;&lt;div&gt;The current outhouse is an 3 foot by 8 foot converted outside toilet. Due to its age (built 1884) this building is no longer watertight and is generally disintegrating at an alarming rate. One day soon it will have to be demolished. That day has not yet arrived, instead we purchased a plastic shed.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Unfortunately the only viable place for the new shed was next to the old one, this required removing a six foot section of flower bed complete with ivy, bamboo and an old sink.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Last Saturday I completed this removal and lay a concrete base ready to take the new shed. You would not think such a small area (2.8m square) would require so much material and effort to concrete over. 300Kg of 3:2:1 aggregate:sand:cement concrete mix went into the hole along with 100Kg of instant set concrete (for a rapid surface in the changable weather).&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-sDyb3nh_hKc/TV5ZSrYDs6I/AAAAAAAAAD0/YB-4fBIYnC0/s1600/newshed.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 200px;" src="http://2.bp.blogspot.com/-sDyb3nh_hKc/TV5ZSrYDs6I/AAAAAAAAAD0/YB-4fBIYnC0/s200/newshed.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5574991566147400610" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Thursday afternoon Geoff (my nice helpful neighbour) offered to assist me in the assembly of the shed. I re-arranged my work schedule (yay home working) and after three hours the shed was assembled.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;This morning it occurred to me that my webcam had recorded a time-lapse movie of the construction. I uploaded it to YouTube and present it here for your amusement.&lt;/div&gt;&lt;br /&gt;&lt;iframe title="YouTube video player" width="320" height="240" src="http://www.youtube.com/embed/brTXLO2R5D0?rel=0" frameborder="0" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-6302048391103362426?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/6302048391103362426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2011/02/shedding.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/6302048391103362426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/6302048391103362426'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2011/02/shedding.html' title='Shedding'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-Mu821HWIUUk/TV5ZMRtcJaI/AAAAAAAAADs/Lmnfs-4uMWc/s72-c/waterfight.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-154616673138817756</id><published>2011-02-07T22:29:00.011Z</published><updated>2011-02-07T23:39:22.129Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='wind'/><title type='text'>It is a bit breezy</title><content type='html'>&lt;div&gt;The weather has been a bit odd round here for a while now. The snow storms in December and early January were a mild inconvenience for me but as I work from home the advice not to travel was not too much of a problem.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_A79BgnRJV_g/TVB1HT7XOPI/AAAAAAAAADU/U6b56H0vQIE/s1600/00000761.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 131px; height: 98px;" src="http://3.bp.blogspot.com/_A79BgnRJV_g/TVB1HT7XOPI/AAAAAAAAADU/U6b56H0vQIE/s320/00000761.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5571081507526097138" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;It seems however that now February is here and the snow is gone we are in for some &lt;a href="http://www.bbc.co.uk/news/uk-england-12380299"&gt;pretty strong storms&lt;/a&gt;. This actually affected me today when my neighbours garden wall was blown over!&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_A79BgnRJV_g/TVB1TnaytkI/AAAAAAAAADc/lxeR_pec7js/s1600/00000762.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 131px; height: 98px;" src="http://3.bp.blogspot.com/_A79BgnRJV_g/TVB1TnaytkI/AAAAAAAAADc/lxeR_pec7js/s200/00000762.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5571081718916625986" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;As you can see my &lt;a href="http://www.kyllikki.org/gatecam.jpg"&gt;nice new IP camera&lt;/a&gt; captured the event, well OK the frame before and after but you get the idea. Unfortunately for my neighbour the wall collapsed onto his pickup causing extensive damage. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A short time later when my weather station was recording gusts well over 50mph nearby drains started flowing the wrong way and it became a case of water, water everywhere! &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_A79BgnRJV_g/TVB7wH0fHHI/AAAAAAAAADk/phiRTtpwPWA/s1600/windtunnel.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 82px; height: 200px;" title="The Gap between 14 and 16 Green Lane" src="http://2.bp.blogspot.com/_A79BgnRJV_g/TVB7wH0fHHI/AAAAAAAAADk/phiRTtpwPWA/s200/windtunnel.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5571088805720431730" /&gt;&lt;/a&gt;&lt;div&gt;It seems that when the new buildings were erected a few years ago that the architect while maximising used space on the building plot may have inadvertently created something of a wind tunnel. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The Gap between our properties is on a parallel (north to south) to the valley below. The wind seems to travel along the crest of the valley and be funnelled through any spaces between the houses. Fortunately the rest of the properties on green lane are pretty old and the spacing between is very generous and the funnelling effect is minimal.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;I wonder if we could fit a wind turbine in there? Alas it was too much for my secondary anemometer which is now smashed in three parts.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Also gaining access to the gable end wall of my property has become somewhat perilous (Hence the wonky APT antenna I cannot get fixed). Yes that really is a guy balancing on a ladder 10m high in a strong wind. And indeed the platform the ladder is resting on is built from scaffolding board wedged between the houses. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I guess the hospital emergency room being 300m away means medical assistance is on hand, even so he is braver than I am. So my weather satellite imagery will just have to come from the internet like everyone else's for a while.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-154616673138817756?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/154616673138817756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2011/02/it-is-bit-breezy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/154616673138817756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/154616673138817756'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2011/02/it-is-bit-breezy.html' title='It is a bit breezy'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_A79BgnRJV_g/TVB1HT7XOPI/AAAAAAAAADU/U6b56H0vQIE/s72-c/00000761.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-7790256478268120297</id><published>2010-12-06T17:23:00.007Z</published><updated>2010-12-06T17:43:03.744Z</updated><title type='text'>New Video Camera</title><content type='html'>&lt;div&gt;Last week they boys were playing with their remote control car in the snow (which was fun) and Alex wanted to record what his car saw. I immediately dissuaded him from the idea that he can use the family's DV camcorder taped to his car!&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_A79BgnRJV_g/TP0e656dYrI/AAAAAAAAADE/TKKjvSa9EuE/s1600/tinycam.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 287px; height: 320px;" src="http://4.bp.blogspot.com/_A79BgnRJV_g/TP0e656dYrI/AAAAAAAAADE/TKKjvSa9EuE/s320/tinycam.jpg" border="0" title="The camera and a UK penny" alt="The camera and a UK penny" id="BLOGGER_PHOTO_ID_5547624313317581490" /&gt;&lt;/a&gt;&lt;div&gt;Later on that day though I saw a &lt;a href="http://letsmakerobots.com/node/23612"&gt;rocket project&lt;/a&gt; on LMR which used a micro camera and suggested such cameras were available from ebay very cheaply. I did a quick search and ordered on from a UK seller at £15 plus £2.99 pnp and thought no more of it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This afternoon the camera arrived and it really is tiny and Alex is already scheming of ways to use it in addition to attaching it to his RC car. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The video output is  low quality (very blurry in low light) and I have yet to figure out how to disable the time stamp (which is wrong) but it does indeed record video to the storage and can download it via USB and played using VLC.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So if you want a tiny video camera (and an 8Gig micro SD card) which is so cheap you do not care if it gets broken, I can recommend these.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-e10aebbc1dd937ed" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v7.nonxt4.googlevideo.com/videoplayback?id%3De10aebbc1dd937ed%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330175735%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D2D0215A74557050CB0949037016382A6BF764F22.52D733626A2909AC58B40E0E5CF2E4380F1A0FF8%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3De10aebbc1dd937ed%26offsetms%3D5000%26itag%3Dw160%26sigh%3Dx99eVmNAybTlHHC3EkTV9GH9eUI&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v7.nonxt4.googlevideo.com/videoplayback?id%3De10aebbc1dd937ed%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330175735%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D2D0215A74557050CB0949037016382A6BF764F22.52D733626A2909AC58B40E0E5CF2E4380F1A0FF8%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3De10aebbc1dd937ed%26offsetms%3D5000%26itag%3Dw160%26sigh%3Dx99eVmNAybTlHHC3EkTV9GH9eUI&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-7790256478268120297?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/7790256478268120297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2010/12/new-video-camera.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/7790256478268120297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/7790256478268120297'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2010/12/new-video-camera.html' title='New Video Camera'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_A79BgnRJV_g/TP0e656dYrI/AAAAAAAAADE/TKKjvSa9EuE/s72-c/tinycam.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-5697487984505330158</id><published>2010-11-29T13:12:00.008Z</published><updated>2010-11-29T14:26:43.166Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='phones'/><title type='text'>Mobile Telecommunication Luddite</title><content type='html'>&lt;div&gt;Actually I can not really be called a Luddite because I am not really against telecommunication progress nor do I fear it will negatively effect my employment...but the title sounded good? ;-)&lt;/div&gt;&lt;div&gt;Anyhow, I have a strange relationship with mobile phones. My ability to have a functioning device has historically limited their usefulness to me. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Because of my low usage and odd attitude for a techie I have always used PAYG for my personal phone. Work may have provided me with a device with a contract for being on-call etc. but in general its been PAYG all the way. My first phone was a Nokia 1610 back in the late nineties, second user after my employer at the time contract upgraded and had a load of "leftovers". I paid 50quid for it and bought a ten quid SIM and ten pounds credit. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_A79BgnRJV_g/TPO26UpnRmI/AAAAAAAAAC8/WcBsqi8g-Hw/s1600/phones.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 170px; height: 320px;" src="http://2.bp.blogspot.com/_A79BgnRJV_g/TPO26UpnRmI/AAAAAAAAAC8/WcBsqi8g-Hw/s320/phones.jpg" border="0" alt="My phones" title="Some of my past phones" id="BLOGGER_PHOTO_ID_5544976679315129954" /&gt;&lt;/a&gt;&lt;div&gt;The standing joke among my friends for the next decade has been that whatever provider I moved to they would go out of business within the year. I went through about eight providers in ten years. And for the first six the same tenner credit went with me! Each time the PAYG provider folded etc. I would be moved on to someone new with a tenners credit and a new SIM and number.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After Easy Mobile closed they did not have an option of a new provider with credit and the "recommended" provider was very poor, so this time I shopped around and went with Tesco mobile but remembered to take my number, which did at least stop my colleagues making fun of me for &lt;i&gt;another&lt;/i&gt; move. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;During this period my phones were no better than my providers. I bought a Nokia 1100 and used other peoples leftovers. Culminating in Daniel Silverstone taking pity on me and giving me his Sony Ericsson K800 at the end of his contract, despite acquiring an ADP1 and a G1 (both have which have dropped dead) this is the phone I have been using for three years now.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Due to my dreadful relationship I did not get the most from the technology and felt like I was missing out. Over the last few years to try and address this I have set myself a target of having a phone physically with me, turned on and in credit at all times. This I have finally managed for a whole six month stretch and as a reward I have bought myself a nice Android based smartphone on contract with T-Mobile.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have done all the administrative things to port the number so no-one will need to alter their address books :-) &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After only a few days of usage I have already discovered why the combination of smart phone and decent contract are so appealing. The freedom to just call and text and use the internet wherever you are without stopping to worry if you have enough credit is a wonderful thing. And decent hardware with the guarantee that if it breaks all I have to do is go into the store and they give me a new one.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I went for the HTC Wildfire instead of the Desire on cost grounds (100 pounds up front instead of 290) which seems perfectly reasonable hardware performance wise. My one and only niggle is T-mobile have nobbled the media player so it only plays some mp3s and not oggs or flacs. No real challenge, just a bit disappointing that vendurs seem to think they need to fiddle.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-5697487984505330158?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/5697487984505330158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2010/11/mobile-telecommunication-luddite.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/5697487984505330158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/5697487984505330158'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2010/11/mobile-telecommunication-luddite.html' title='Mobile Telecommunication Luddite'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_A79BgnRJV_g/TPO26UpnRmI/AAAAAAAAAC8/WcBsqi8g-Hw/s72-c/phones.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-9160544539407643222</id><published>2010-11-05T11:54:00.012Z</published><updated>2010-11-05T16:58:14.657Z</updated><title type='text'>Keeping kindling dry</title><content type='html'>&lt;div&gt;I, along with a great number of people I know, now posses a 3rd generation Kindle. It seems Amazon have found a feature set and price point which makes this device a winning solution.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_A79BgnRJV_g/TNQXdNHszMI/AAAAAAAAACk/t1MHNGhUMc0/s1600/bookshelf.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 227px;" src="http://3.bp.blogspot.com/_A79BgnRJV_g/TNQXdNHszMI/AAAAAAAAACk/t1MHNGhUMc0/s320/bookshelf.jpg" border="0" alt="My bookshelf complete with covered kindle" title="My office bookshelf complete with covered kindle" id="BLOGGER_PHOTO_ID_5536075632450784450" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;I did look at a huge number of alternatives like the Sony PRS600 and others but they were all more expensive than the £110 for the Kindle and did not have enough features to make a compelling argument for spending more.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Yes it has DRM. Yes it "only" supports PDF, MOBI and mp3. Yes it will not win any style or usability awards. But I went into this eyes open the device is "good enough". &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The device lets me read books from a reasonable display. The integration with amazon.com is so seamless it poses a serious danger to my bank account. I should expand on that last point :-) Amazon have got the whole spending money for a book thing executed so well that you do not think twice about a couple of pounds here and there, this soon adds up. I have set myself a rigid budget.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My main complaints are really just niggles:&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Another different USB connector! Wahh, I thought everyone had agreed on mini USB? seems that I now have to have yet another lead for micro USB&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The commercial book selection is a bit limited and missing a surprising number of popular titles. Some of this appears to be the publishers and authors simply clinging to their old business model. I fear some of them might not survive and early indications are they are behaving like the music industry did...Guys you are selling an infinite good a scarcity model is going to fail!&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The price of some of the books is absurd...they are asking &lt;b&gt;hardback&lt;/b&gt; prices for the electronic edition! Seriously? how on earth can that possibly be justified? I can see that a hardback book with its print run could cost £5 per physical item (going from hulu print on demand prices as a worst case) plus shipping and stocking fees. So how can you possibly justify charging the same price for a pile of bits where none of that applies? Also the pile of bits cannot be lent or sold, not impressed.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;eBook formatting is generally dreadful. I do not know who is mastering these books but they need to do a better job. If they tried to pull this in the physical editions they would get a seriously large number of returns.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I still have to pay for whispernet delivery fees even though, because its the wi-fi model, I am providing the bandwidth myself. I can see that differentiating between 3G and wi-fi delivery is a bit hard for them though.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;However my one and only real complaint with the offering as a whole is the astronomical asking price for the leather cover. The cover is currently 25% of the price of the kindle itself! (£30 cover £110 kindle) which is just silly. It is a pretty nice cover and the clever clip attachment means it does offer an integrated solution to protecting your kindle, but not £30 nice.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_A79BgnRJV_g/TNQiG_eTmaI/AAAAAAAAACs/U3ELaP804Ms/s1600/kindlesock.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 150px;" src="http://1.bp.blogspot.com/_A79BgnRJV_g/TNQiG_eTmaI/AAAAAAAAACs/U3ELaP804Ms/s320/kindlesock.jpg" border="0" alt="Kindle in a sock cover" title="Kindle in a sock cover" id="BLOGGER_PHOTO_ID_5536087345458289058" /&gt;&lt;/a&gt;&lt;div&gt;So my lovely wife (her kindle was bought with the cover) made me a sock for mine. This is great for casual round the house usage to stop me scuffing the screen but was a bit lightweight for protecting the kindle when out and about.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One day last week I had an idea. I would make my own protective cover by crafting something I had wanted to do for ages. And the (unoriginal I am sure) project of a hollowed out book for housing my kindle was implemented.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_A79BgnRJV_g/TNQubzoCWXI/AAAAAAAAAC0/OEs5ga3g-Jg/s1600/kindle-inbook.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 264px;" src="http://4.bp.blogspot.com/_A79BgnRJV_g/TNQubzoCWXI/AAAAAAAAAC0/OEs5ga3g-Jg/s320/kindle-inbook.jpg" border="0" alt="My hollowed out book kindle cover" title="My hollowed out book kindle cover" id="BLOGGER_PHOTO_ID_5536100897194662258" /&gt;&lt;/a&gt;&lt;div&gt;A quick Google later and I had a set of &lt;a href="http://www.wikihow.com/Make-a-Hollow-Book"&gt;plausible instructions&lt;/a&gt; to follow. I used possibly the most out of date book ever (published 1981) on electronic test equipment, partly because it was a ex library sell off book which cost 10pence back in 1995 but mainly because it was the right size to just enclose the kindle without adding to much size.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div clear="both"&gt;I learnt a couple of things doing this:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Do not let your pva (white) glue mix get too runny, you want it fluid enough to be easily absorbed but not watery - this is important because otherwise the paper absorbs too much water and crinkles&lt;/li&gt;&lt;li&gt;Do not use a book where the binding has gone bad already and select a "clean" book. The spine of this book was yellowed and cracking before I started. This means the book spine simply cracks open at the hollowed out bit and it is very obvious.&lt;/li&gt;&lt;li&gt;Work out where the "solid" part at the back is going to be and treat that separately so you get a nice solid base at the back of the hole. In mine its not all stuck together and is a bit wavy. Do be sure you left enough depth for the kindle though.&lt;/li&gt;&lt;li&gt;Take your time and be careful with the glue, it is amazing how obvious even a simple splash of glue in the wrong place is. Use a small brush for this a paint brush is fast but sloppy.&lt;/li&gt;&lt;li&gt;Measure carefully and cut only a few pages at a time, it takes a bit longer but looks much better. Also I did not drill the corners of my hole which means they are  a little scruffy.&lt;/li&gt;&lt;li&gt;Use the sharpest thinnest knife you can, this really helps. I started with a small stanley knife but switching to my hobby scalpel gave much better results.&lt;/li&gt;&lt;li&gt;If you have some, use woodworking clamps to clamp a bit of timber (I had some offcuts of shelving) around the book to compress it while the glue dries. Do not clamp the spine if you can avoid it. This method ensures:&lt;ol&gt;&lt;li&gt;Heavy things do not fall off the book while it dries.&lt;/li&gt;&lt;li&gt;An even strong pressure is applied.&lt;/li&gt;&lt;li&gt;The book does not warp or bend while the glue dries&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;  &lt;/ul&gt;&lt;/div&gt;&lt;div&gt;All in all I kinda like the results and I think I will try again with a more modern book where the spine is not so broken to begin with.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-9160544539407643222?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/9160544539407643222/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2010/11/keeping-kindling-dry.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/9160544539407643222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/9160544539407643222'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2010/11/keeping-kindling-dry.html' title='Keeping kindling dry'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_A79BgnRJV_g/TNQXdNHszMI/AAAAAAAAACk/t1MHNGhUMc0/s72-c/bookshelf.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-7781076240248995733</id><published>2010-10-16T03:00:00.027+01:00</published><updated>2010-10-16T05:32:14.594+01:00</updated><title type='text'>Coming to terms</title><content type='html'>&lt;div&gt;Yesterday was not a great day. One of the family's cats died.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_A79BgnRJV_g/TLkJSEHdfgI/AAAAAAAAAB0/R0depQM6BC0/s1600/molly1.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 270px;" src="http://1.bp.blogspot.com/_A79BgnRJV_g/TLkJSEHdfgI/AAAAAAAAAB0/R0depQM6BC0/s320/molly1.jpg" border="0" alt="Molly just after she arrived 26th September 2000" title="Molly just after she arrived 26th September 2000" id="BLOGGER_PHOTO_ID_5528460223521324546" /&gt;&lt;/a&gt;&lt;div&gt;Molly, for that was her name, came to us the week Melodie and I moved into our first house together. September 15th 2000,&lt;a href="http://en.wikipedia.org/wiki/UK_fuel_protest"&gt; in the middle of the fuel protests which were raging at the time&lt;/a&gt;, we hired a van and moved in.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Most people would have considered that enough for one week! We happened to be in &lt;a href="http://en.wikipedia.org/wiki/Halifax,_West_Yorkshire"&gt;Halifax&lt;/a&gt; on the Sunday afternoon at the supermarket and decided to visit the &lt;a href="http://maps.google.co.uk/maps?layer=c&amp;amp;cbll=53.724921,-1.85692&amp;amp;cbp=12,6.55,,0,8.33&amp;amp;cid=2362691749454924517&amp;amp;ved=0CHkQ2wU&amp;amp;ei=EAu5TLTPHp_LjAfd-oDKCg&amp;amp;ie=UTF8&amp;amp;hnear=&amp;amp;ll=53.724888,-1.85699&amp;amp;spn=0.008697,0.019119&amp;amp;t=h&amp;amp;z=16&amp;amp;panoid=H5_Pfu8-M-Ur--2nYqvt0w"&gt;RSPCA&lt;/a&gt; because somehow we decided what our new home needed was a cat.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;On that day a decade ago we saw Molly and Lucy, a pair of cats who needed a new home as their previous owners had a baby who was allergic to them. I still recall them skulking at the back of their cage in the cattery, Lucy who was reluctant to come down of a perch to be petted and Molly looking generally unhappy. No-one else wanted this misfit pair because they were already both over 5 years old, the warden despairing of ever finding them a home.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Of course they were obviously the right animals for us! ;-) So by the end of the week we had taken them home. Molly immediately showed how things were going to be by shredding her way out of the RSPCA provided double walled cardboard carrier. To the day she died she detested being placed inside a carrier, funny that.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_A79BgnRJV_g/TLkRMUl_gNI/AAAAAAAAAB8/CyJLH1M9Y8w/s1600/molly2.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 312px;" src="http://4.bp.blogspot.com/_A79BgnRJV_g/TLkRMUl_gNI/AAAAAAAAAB8/CyJLH1M9Y8w/s320/molly2.jpg" border="0" alt="Melodie and Molly in the snow 28th December 2000" title="Melodie and Molly in the snow 28th December 2000" id="BLOGGER_PHOTO_ID_5528468920958157010" /&gt;&lt;/a&gt;&lt;div&gt;By the end of the year, when the snow came, the cats ruled the house and we were all happy together.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Little did we realise that soon in the summer of 2001 there would be another arrival to the family. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_A79BgnRJV_g/TLkT8EBQwqI/AAAAAAAAACE/LPEkH_ZjkYo/s1600/molly3.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 266px;" src="http://4.bp.blogspot.com/_A79BgnRJV_g/TLkT8EBQwqI/AAAAAAAAACE/LPEkH_ZjkYo/s320/molly3.jpg" border="0" title="Molly with Melodie and Alex 2001" alt="Molly with Melodie and Alex 2001" id="BLOGGER_PHOTO_ID_5528471940166107810" /&gt;&lt;/a&gt;&lt;div&gt;The arrival of our first child in June 2001 was a complete change in all our lives but we all managed to settle back into a routine. Although the banishment of the cats from upstairs remained a point of disagreement for a long time. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;As Alex grew up the cats learned that feeding times for Alex could result in all manner of things falling from above. Soon Alex was mobile which resulted in different lessons on cats being sharp objects if not treated with respect. In February 2003 our family grew once more with the arrival of Joshua. The cats, now used to infants, took this in their stride.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_A79BgnRJV_g/TLkZpcEDjBI/AAAAAAAAACM/Mw1JDL6nUVY/s1600/molly4.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 256px;" src="http://4.bp.blogspot.com/_A79BgnRJV_g/TLkZpcEDjBI/AAAAAAAAACM/Mw1JDL6nUVY/s320/molly4.jpg" border="0" alt="Molly in Febuary 2004 hiding on a windowsill" title="Molly in Febuary 2004 hiding on a windowsill" id="BLOGGER_PHOTO_ID_5528478217272527890" /&gt;&lt;/a&gt;&lt;div&gt;While still about day to day the cats are not captured on camera so often form this point on.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Over the forthcoming months they ensured they were out of reach of the newborn and the precocious toddler.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;By the time of Joshuas first birthday in 2004 Molly had taken to hiding "out of the way" as much as possible but remained as affectionate as ever.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_A79BgnRJV_g/TLkjGI-Su0I/AAAAAAAAACU/Y3SSBEFh0eE/s1600/dscf1097.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_A79BgnRJV_g/TLkjGI-Su0I/AAAAAAAAACU/Y3SSBEFh0eE/s320/dscf1097.jpg" border="0" alt="Molly in a box March 2007" title="Molly in a box March 2007" id="BLOGGER_PHOTO_ID_5528488605968939842" /&gt;&lt;/a&gt;&lt;div&gt;As the children grew up and life progressed Molly became ever more at home and developed the odd aggravating trait like taking clean washing off airers and dragging it out the window, through the cat flap and upstairs so she could sleep on it!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;She still enjoyed participating in claiming boxes and defending them vigorously though!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The kids took on the job of feeding the cats which made their bond closer ensuring they were greeted by happy cats sitting lookout as they came home from school each day.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Molly continued to be a good companion and an infuriating self centred animal like all good cats.&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_A79BgnRJV_g/TLklMzoR97I/AAAAAAAAACc/QuCdy-flftg/s1600/molly-in-sink.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 186px;" src="http://4.bp.blogspot.com/_A79BgnRJV_g/TLklMzoR97I/AAAAAAAAACc/QuCdy-flftg/s320/molly-in-sink.jpg" border="0" alt="Molly asleep in the kitchen sink " id="BLOGGER_PHOTO_ID_5528490919521810354" /&gt;&lt;/a&gt;&lt;div&gt;Then on Tuesday evening our Neighbour knocked on our front door. They gave us the news that one of our cats had been run over and taken to the Vet. I immediately went to the back door and called and shook the treat box.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lucy came running, but molly did not. We rang the vets who confirmed they had molly (we had them electronically tagged back in Halifax) and that they advised we did not come and see her until they had chance to asses her and deal with the shock.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As the days progressed her prognosis improved and then sank. She had a broken jaw, broken teeth, a dislocated hip, extensive bruising and something was definitely wrong with her kidney function.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thursday evening the whole family went to see her and she purred and seemed happy to see us, she looked as bad as I feared though and somehow I knew there and then that this was probably goodbye. The children stroked her and petted her for a while and we left with an odd sadness, oh and to the sound of molly trying to gouge the veterinary nurse.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Yesterday she was due to have surgery to fix her jaw and hip...Alas when she was anaesthetised and x-rayed once more it became evident the hip was not just dislocated but her femur was fractured and there was additional damage. So just after midday came the call to ask what we wanted to do. The vet could attempt the repairs but due to her age and the other complications it was probably futile. So with heavy heart we agreed the best thing was not to revive her and she died a short time later.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I shall miss her morning greetings, her demands for attention, her sleeping in odd places and her companionship. I keep calling for her at meal times forgetting she will never come. I think Lucy  is upset too, after spending their lives together her friend is gone and I cannot explain that to her.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So that is the end of Molly, a good cat.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-7781076240248995733?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/7781076240248995733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2010/10/coming-to-terms.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/7781076240248995733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/7781076240248995733'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2010/10/coming-to-terms.html' title='Coming to terms'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_A79BgnRJV_g/TLkJSEHdfgI/AAAAAAAAAB0/R0depQM6BC0/s72-c/molly1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-8614145503328429660</id><published>2010-10-05T18:57:00.009+01:00</published><updated>2010-10-05T20:11:16.746+01:00</updated><title type='text'>Compiling!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_A79BgnRJV_g/TKtoa_nlfEI/AAAAAAAAABE/MkuxV-ha1_c/s1600/vince-sabre.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 250px; height: 170px;" src="http://2.bp.blogspot.com/_A79BgnRJV_g/TKtoa_nlfEI/AAAAAAAAABE/MkuxV-ha1_c/s200/vince-sabre.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5524624180863401026" /&gt;&lt;/a&gt;When I am writing software sometimes &lt;a href="http://xkcd.com/303/"&gt;XKCD is accurate&lt;/a&gt;! &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Alas I can only fully participate in that activity when the boys get home from school. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The rest of the time I have to make do with other distractions.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I am currently participating in a "higher" speed broadband trial (I already have a 50Mbit service). This appears to involve the drastic step of remotely reconfiguring my Cable Modem :-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the last week there has been the odd request from the trial organisers to test throughput using various website based testing applications. These applications seem completely unable to cope with these 50Mbit+ connections and the results are as unreliable as expected.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To address this the trial organisers asked us to time downloading of a gigabyte file from one of their servers. I was surprised to discover that it took over 350 seconds to download the example file giving a less than stellar 3Megabyte/second rate.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So I used some "compiling" time today to look at what was going on. Firstly I went looking for an iperf like tool for http. Turns out there isn't one which came as a bit of a surprise...oh well with a little help from my friends I came up with&lt;/div&gt;&lt;div&gt;&lt;blockquote style="font-family:monospace"&gt;curl -o /dev/null http://target.domain/1GB.bin 2&gt;&amp;amp;1 | tr "\r" "\n" |awk '{print $12 }' &gt;test1.dat&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;Which gets a file with a "Current transfer speed" for each second of the transfer. Well ok so lets do the transfer a few times and collect the output so we have a reasonable data set.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So we have a pile of numbers...not terribly useful, lets visualise them! to the gnuplot mobile!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We need a gnuplot script something like say this:&lt;/div&gt;&lt;div&gt;&lt;blockquote style="font-family:monospace"&gt;&lt;div&gt;set terminal png nocrop enhanced font arial 8 size 1024,600 xffffff&lt;/div&gt;&lt;div&gt;set output 'xfer.png'&lt;/div&gt;&lt;div&gt;set style data linespoints&lt;/div&gt;&lt;div&gt;set title "1Gigabyte file transfer throughput"&lt;/div&gt;&lt;div&gt;set ylabel "Throughput in Kilobytes per second"&lt;/div&gt;&lt;div&gt;set y2label "Speed in Megabits per second"&lt;/div&gt;&lt;div&gt;set xlabel "Seconds of transfer"&lt;/div&gt;&lt;div&gt;set ytics 1024&lt;/div&gt;&lt;div&gt;set y2tics ("10" 1220, "20" 2441, "50" 6102, "100" 12204)&lt;/div&gt;&lt;div&gt;set grid noxtics y2tics&lt;/div&gt;&lt;div&gt;set yrange [0:13000]&lt;/div&gt;&lt;div&gt;set datafile missing "-"&lt;/div&gt;&lt;div&gt;plot 'test1.dat' using 1 title 'Test1', \&lt;/div&gt;&lt;div&gt;     'test2.dat' using 1 title 'Test2', \&lt;/div&gt;&lt;div&gt;     'test3.dat' using 1 title 'Test3'&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Once run through gnuplot I extracted a lovely graph which shows a couple of things.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_A79BgnRJV_g/TKtyL3XB7OI/AAAAAAAAABc/5ltUFgnZcUY/s1600/xfer.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 234px;" src="http://2.bp.blogspot.com/_A79BgnRJV_g/TKtyL3XB7OI/AAAAAAAAABc/5ltUFgnZcUY/s320/xfer.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5524634916064718050" /&gt;&lt;/a&gt;&lt;div&gt;Mainly that even with a nice fat downstream you are unlikely to realise the maximum throughput very often even from a server on your ISP local network.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;On the other hand I now have a way to examine throughput of downloads ;-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-8614145503328429660?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/8614145503328429660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2010/10/compiling.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/8614145503328429660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/8614145503328429660'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2010/10/compiling.html' title='Compiling!'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_A79BgnRJV_g/TKtoa_nlfEI/AAAAAAAAABE/MkuxV-ha1_c/s72-c/vince-sabre.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-6391428856426391415</id><published>2010-09-22T23:24:00.003+01:00</published><updated>2010-09-23T00:32:28.386+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='car'/><title type='text'>I like driving in my car. It is not quite a Jaguar</title><content type='html'>I work from home, this is a good thing. I benefit from a 20 metre commute, comfortable working environment and generally low carbon lifestyle. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Except on Wednesdays, on Wednesday I have to get up early and go to the office, this is not usually too much of a chore and takes around 90 minutes each way.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Today was different, I made a small five minute diversion to collect a colleague to whom I was giving a lift and then due to a &lt;a href="http://www.blackburncitizen.co.uk/news/8406033.Lorry_fire_causes_chaos_on_Lancashire_motorways/"&gt;little problem near the M6/M61 junction&lt;/a&gt; spent a fun filled three hours sitting in traffic crawling along the M56. At least I had company instead of being on my own.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Before I did the return journey I decided to check the traffic news sites. Oh dear&lt;a href="http://menmedia.co.uk/manchestereveningnews/news/s/1328568_20_miles_of_tailbacks_on_m60_after_lorry_crash"&gt; now the M60 was stuffed&lt;/a&gt;, I altered the route and only had to queue on the M56 for twenty minutes or so. I dropped my colleague off at his place (avoiding the worst bits of the M62/M66 junctions by use of a rather convoluted back route) and proceeded to queue on the M62 for a while for no apparent reason.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Basically I have spent almost seven hours in the car today to do a 150 miles or a little over 20 miles per hour average. I was just going to rant about the dreadful lack of any redundancy or resilience in the UK road system which often grinds to a complete and utter halt if there is a single failure. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However a different thought has wandered across my travel weary mind. It has occurred to me that this average speed is faster than anyone could reasonably expect to do this trip for the majority of human existence. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In 1810 and indeed for all time before, your best possible speed by good horse, for 150 miles, would have been two days (and your horse would have probably been very poorly afterwards) This assumes your horse could do the 75miles (120km) each way in times consistent with modern world endurance trials... across a mountain range! Yes the &lt;a href="http://en.wikipedia.org/wiki/Pennines"&gt;Pennines&lt;/a&gt; are only tiny but even so!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A hundred years later, in 1910, the &lt;a href="http://www.lostrailwayswestyorkshire.co.uk/"&gt;British railway network was nearing its zenith&lt;/a&gt; in most measurable terms. The influence across the north of England was profound and pushed the industrial revolution ever faster towards its climax before the first world war. Even at this point in time my best reading of the available timetables says I would have needed to change trains four times each way, purchased eight separate tickets from six different companies and taken around nine hours to make the journey allowing for hanging around on platforms.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another fifty years on, in 1960, the trans-pennine car journey would have been on poorly maintained trunk routes through the decaying cores of the declining post-industrial northern cities. The route would probably have involved the A646, A59 or the A58 which at this time were not the well maintained (if slightly shabby) roads of today but instead were dangerous twisty and, from the looks of the archive photographs, positively heaving with traffic. On these pre-motorway strips of tarmac the 150 mile round trip would have taken in excess of seven hours (even today's mapping systems suggest over four and a half hours would be needed) &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So instead of being frustrated that my commute took an extended period today I have instead decided that I shall enjoy the fact it was faster and certainly more comfortable than at any time in the past. Well that and I need to get the cars air-conditioning fixed ;-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-6391428856426391415?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/6391428856426391415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2010/09/i-like-driving-in-my-car-it-is-not.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/6391428856426391415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/6391428856426391415'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2010/09/i-like-driving-in-my-car-it-is-not.html' title='I like driving in my car. It is not quite a Jaguar'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-2796044282723285307</id><published>2010-09-16T09:32:00.005+01:00</published><updated>2010-09-16T14:13:16.001+01:00</updated><title type='text'>The turmoil of an entropy key release.</title><content type='html'>Last week we released 1.1.3 of the &lt;a href="http://www.entropykey.org/"&gt;Entropy Key&lt;/a&gt; software. Poor Daniel struggled for days to get this out the door but finally he managed to build all the various debs, rpms and tars for the supported platforms and Rob got it all uploaded and announced.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The release is kinda strange in that it was the first in which the main changes were for performance. OK there is an improvement to resilience in the face of failed re-keying which some users were seeing in high load situations, but that high load was (in some cases) being caused by the daemon itself. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The process was mainly driven by one of our users, Nix, who was experiencing ekeyd using "too much" CPU on his system. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Of course on our servers during testing ekeyd it had used around a percent of CPU, certainly nothing that flagged as a problem in our own use (yes we eat our own dogfood ;-) Alas for this user on a 500MHz geode it was guzzling down 10% of his CPU which was clearly unacceptable. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This user however instead of guessing what the problem might be or simply leaving it up to us did something about it. He instrumented ekeyd, located the garbage collector tuning parameters as being incorrectly set and supplied a patch. Did he stop there? no! he then went on to profile the code further and clean up the hotspots. This resulted in ekeyd falling to less than 1% of the runtime of his system.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;By reducing the CPU usage of ekeyd to this level it became more apparent where a &lt;a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=577600"&gt;previously reported&lt;/a&gt; bug was coming from, which enabled me to address it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I know sometimes I complain about Open Source software but at times like this it makes me happy that we released the ekeyd software freely. This is how its supposed to be! Everyone working to make better software and benefiting together. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It has not just been on this occasion either, throughout the last year since our very first 1.0 release there has been helpful and useful feedback, patches from several users and even the odd thankyou mail. This project then has been a positive Open Source experience and I look forward to another constructive year maintaining this software.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-2796044282723285307?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/2796044282723285307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2010/09/turmoil-of-entropy-key-release.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/2796044282723285307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/2796044282723285307'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2010/09/turmoil-of-entropy-key-release.html' title='The turmoil of an entropy key release.'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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-3711269760993993197.post-3707193260788457288</id><published>2010-09-02T17:04:00.002+01:00</published><updated>2010-09-02T17:18:01.518+01:00</updated><title type='text'>You shall go to the ball!</title><content type='html'>Contrary to my last post I was able to attend the Debian UK BBQ at the weekend. My wonderful wife ditched me at Portsmouth station with permission to go play with my friends ;-) &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Perhaps a bit more explanation is warranted about that last statement! We travelled back from France last Saturday. We were on the 12:15 (CET) ferry so had to be awake and on the road for the five hour France drive at "oh my gosh its early" time. The crossing to Portsmouth was slow as it was very choppy and we were leaving the Port at 15:30 at which point Melodie was good enough to let me go play with my friends while she drove home.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I did have the "fun" of doing the Portsmouth-&gt;London-&gt;Cambridge trip on UK public transport but it went pretty smoothly. Walking from Cambridge station to the BBQ location was a bit dumb, next time I am taking a cab!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The BBQ was excellent fun and big thanks for Steve for holding it again. Its always fun to meet the usual suspects. We also got to set a new occupancy record at Steves house Saturday night and discovered that certain members of Debian UK snore rather loudly (I think at one point we could measure it on the Richter scale). &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Back home now of course. Work is the same as when I left so no change there and the Boys first day back at school seems to have gone smoothly too.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-3707193260788457288?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/3707193260788457288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2010/09/you-shall-go-to-ball.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/3707193260788457288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/3707193260788457288'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2010/09/you-shall-go-to-ball.html' title='You shall go to the ball!'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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-3711269760993993197.post-2614185746649005395</id><published>2010-08-26T10:43:00.003+01:00</published><updated>2010-08-26T11:11:14.661+01:00</updated><title type='text'>Sunny Brittany</title><content type='html'>&lt;div&gt;Alas I did not go to Debconf 10 which looked like everyone had a blast, congratulations to the organisers. Nor will I be able to attend the traditional Steve McIntyre BBQ at the weekend, hope everyone has fun.&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_A79BgnRJV_g/THY5YaexB2I/AAAAAAAAAA8/nwGe8PAzpIU/s1600/grey_brittany_sky.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 180px;" src="http://3.bp.blogspot.com/_A79BgnRJV_g/THY5YaexB2I/AAAAAAAAAA8/nwGe8PAzpIU/s320/grey_brittany_sky.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5509654285722388322" /&gt;&lt;/a&gt;On the other hand I have managed to take a family holiday in sunny Brittany...&lt;div&gt;&lt;br /&gt;&lt;div&gt;OK perhaps sunny is pushing it, we did have several nice days last week which we spent on the Le Pouldu plages but this week has been more challenging.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Fortunately the camp site where we are staying has reasonable bandwidth so I can continue to waste time online.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;This has given me time to look at some Debian packaging. Specifically the mingw32-runtime packages. Their maintainer seems to be unwilling to allow an updated version to be uploaded despite there being numerous upstream releases since the last packaged release in 2007. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The packaging manual &lt;a href="http://www.debian.org/doc/manuals/developers-reference/pkgs.html#adopting"&gt;makes it clear&lt;/a&gt; that hijacking is not permitted and I discover my desire for having a huge, unhelpful argument about maintaining a package is non existent. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I guess when I have my updated packages available I will maybe announce them but its not the same. I guess this is one of those problems with being a Debian maintainer, we all have to rub along even with decisions we disagree with. Hmm thought I had more to say on the subject ...perhaps next time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anyway must go and entertain the kids for an hour or two, maybe go to the beach in the rain, hell they cannot get any soggier ;-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-2614185746649005395?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/2614185746649005395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2010/08/sunny-brittany.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/2614185746649005395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/2614185746649005395'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2010/08/sunny-brittany.html' title='Sunny Brittany'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_A79BgnRJV_g/THY5YaexB2I/AAAAAAAAAA8/nwGe8PAzpIU/s72-c/grey_brittany_sky.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-9200895280981182240</id><published>2010-06-30T13:22:00.007+01:00</published><updated>2010-06-30T14:35:20.485+01:00</updated><title type='text'>Programmers are suckers for a meme</title><content type='html'>Many Open Source projects have and IRC # for developers. The &lt;a href="http://netsurf-browser.org/"&gt;NetSurf&lt;/a&gt; project is no different. During a discussion someone jokingly suggested that one contributor should be asked to take the &lt;a href="http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html"&gt;FizzBuzz&lt;/a&gt; test. Can you guess what happened next?&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ten minutes later Michael Drake posted this solid example in C which is where it all ought to have ended.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;iframe src="http://pastebin.com/embed_iframe.php?i=MesmvSjk" style="border:none;width:100%;height:200px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Being programmers, of course this had a predictable result. The original question, the reason for asking it and any the serious point being made in the original article were discarded. Just so everyone (including myself) could play silly buggers over our lunch break. Coders, it would seem, simply like to produce a solution even if it is only for fun. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;None of these programs took more than ten minutes (except the JAVA monstrosity), are reproduced with permission and I am to blame for none of them (ok maybe just the one ;-). &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;First up was Rob Kendrick with the classic solution in C (his day job is as a support team lead which seems to make those programmers who cannot do this seem even more scary bad.)&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;iframe src="http://pastebin.com/embed_iframe.php?i=EaQ2414U" style="border:none;width:100%;height:200px;"&gt;&lt;/iframe&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;Next was Daniel Silverstone who turned this Lua solution out very quickly and berated the rest of us for not following the rules ;-)&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;iframe src="http://pastebin.com/embed_iframe.php?i=cYY0YDYM" style="border:none;width:100%;height:220px;"&gt;&lt;/iframe&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;The final C solution was my own uber silly sieve implementation&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;iframe src="http://pastebin.com/embed_iframe.php?i=5w5BhKt3" style="border:none;width:100%;height:200px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Peter Howkins decided the world required a solution in PHP&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;iframe src="http://pastebin.com/embed_iframe.php?i=h2aQ5eXM" style="border:none;width:100%;height:200px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;When pointed out that his solution stopped at 50 he presented this vastly superior and obviously idiomatic solution&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;iframe src="http://pastebin.com/embed_iframe.php?i=k8T6VtJu" style="border:none;width:100%;height:200px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Finally after a long time James Shaw caused mental anguish and wailing with this abomination unto Nuggin.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;iframe src="http://pastebin.com/embed_iframe.php?i=GFeHdJdr" style="border:none;width:100%;height:200px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With Luck everyone has now got it out of their system and we will never have to put up with this again (yeah right). And now you also know why Open Source projects sometimes take ages to release ;-)&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-9200895280981182240?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/9200895280981182240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2010/06/programmers-are-suckers-for-meme.html#comment-form' title='29 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/9200895280981182240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/9200895280981182240'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2010/06/programmers-are-suckers-for-meme.html' title='Programmers are suckers for a meme'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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>29</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-2569796024833960690</id><published>2010-05-27T14:03:00.002+01:00</published><updated>2010-05-27T14:26:37.811+01:00</updated><title type='text'>Ex Phone</title><content type='html'>I went to the Linux Plumbers Conference (LPC) last year (which was very interesting and productive). While I was there Qualcomm were in attendance giving out penguin mints and running a competition. The lucky winners of this draw were to receive an ADP1 Android phone. So I dutifully filled in the entry form, handed it in and thought no more about it.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the break after attending a particularly interesting workshop on the last day of the conference several other people congratulated me on winning the Qualcomm draw, this was the first I knew about it! I went in search of the nice people from Qualcomm and sure enough they handed over an ADP1 after getting a couple of photos. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Once I returned home I switched to using ADP1 as my phone and started experimenting with Android kernel stuff. Then one day the Wi-Fi stopped working which while odd could be overcome by repeatedly unloading and reloading the driver until it worked once more. Then one day the USB stopped working, no more ADB, no more console, no more debugging, no more hacking.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then one day it turned itself off and never came back. I have been forced to return to using a hand me down, very kindly given to me by Daniel Silverstone. Alas it is not a smart phone of any kind and my finances do not allow for me to spend the money to replace it. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have repeatedly tried to contact Qualcomm open source to see if there is any kind of warranty I might be able to use to get the phone repaired alas all the contact addresses I have are now simply returning SMTP errors. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So this is pretty much a tale without a happy ending, unless anyone out there knows the right people to contact? Perhaps someone at Google maybe? I only revisit the subject at all because of the recent announcement of an Android 2.1 based edition for these devices which reminded me I like to play with these things.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-2569796024833960690?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/2569796024833960690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2010/05/ex-phone.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/2569796024833960690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/2569796024833960690'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2010/05/ex-phone.html' title='Ex Phone'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-5826275067191944878</id><published>2010-04-25T21:09:00.003+01:00</published><updated>2010-04-25T21:51:23.142+01:00</updated><title type='text'>XCB programming is hard</title><content type='html'>I have been looking at writing a program with XCB today. I seem to pick projects that are an exercise in undocumented frustration. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;All I wanted to do was have an x window open and be able to plot an arbitrary changeable image to it (no I am not writing yet another image viewer!). The XCB documentation seems to be a cross between "good luck with that" and some rather erratic &lt;a href="http://xcb.freedesktop.org/"&gt;doxygen output&lt;/a&gt;. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The utility libraries are rather skimpy on examples and its tiresome worrying that when you feed any of the xcb function names into Google (web or codesearch) there are very, very few hits beyond the freedesktop API docs.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My favourite has to be the &lt;a href="http://xcb.freedesktop.org/XcbUtil/api/group__xcb____image__t.html#g1db19b77fbeb38552d41bb3c623d5343"&gt;xcb_image_create&lt;/a&gt; documentation, go on I challenge anyone to follow that logic without going and reading the sources! The answer (afaict) is that if you pass a pointer in base that pointer will be freed by xcb_image_destroy otherwise the data pointer will be used, unless the bytes value is too small in which case memory will be allocated with malloc and the passed pointer ignored.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Anyhow, I have succeeded and the result is below, mainly so I do not loose it :-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;pre&gt;/* XCB application drawing an updating bitmap in a window&lt;br /&gt;*&lt;br /&gt;* Inspired by the xcb black rectangle in a window example&lt;br /&gt;*&lt;br /&gt;* Copyright 2010 V. R. Sanders, released under the MIT licence&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;/* compile with:&lt;br /&gt;*   gcc -Wall -lxcb-icccm -lxcb -lxcb-image -o disp disp.c&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;#include &amp;lt;string.h&gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;xcb/xcb.h&gt;&lt;br /&gt;#include &amp;lt;xcb/xcb_image.h&gt;&lt;br /&gt;#include &amp;lt;xcb/xcb_atom.h&gt;&lt;br /&gt;#include &amp;lt;xcb/xcb_icccm.h&gt;&lt;br /&gt;#include &amp;lt;stdio.h&gt;&lt;br /&gt;#include &amp;lt;stdlib.h&gt;&lt;br /&gt;#include &amp;lt;sys/types.h&gt;&lt;br /&gt;&lt;br /&gt;static xcb_format_t *&lt;br /&gt;find_format (xcb_connection_t * c, uint8_t depth, uint8_t bpp)&lt;br /&gt;{&lt;br /&gt; const xcb_setup_t *setup = xcb_get_setup(c);&lt;br /&gt; xcb_format_t *fmt = xcb_setup_pixmap_formats(setup);&lt;br /&gt; xcb_format_t *fmtend = fmt + xcb_setup_pixmap_formats_length(setup);&lt;br /&gt; for(; fmt != fmtend; ++fmt)&lt;br /&gt;  if((fmt-&gt;depth == depth) &amp;amp;&amp;amp; (fmt-&gt;bits_per_pixel == bpp)) {&lt;br /&gt;   /* printf("fmt %p has pad %d depth %d, bpp %d\n",&lt;br /&gt;      fmt,fmt-&gt;scanline_pad, depth,bpp); */&lt;br /&gt;   return fmt;&lt;br /&gt;  }&lt;br /&gt; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void&lt;br /&gt;fillimage(unsigned char *p, int width, int height)&lt;br /&gt;{&lt;br /&gt; int i, j;&lt;br /&gt; for(i=0; i &amp;lt; width; i++)&lt;br /&gt; {&lt;br /&gt;  for(j=0; j &amp;lt; height; j++)&lt;br /&gt;  {&lt;br /&gt;   if((i &amp;lt; 256)&amp;amp;&amp;amp;(j &amp;lt; 256))&lt;br /&gt;   {&lt;br /&gt;    *p++=rand()%256; // blue&lt;br /&gt;    *p++=rand()%256; // green&lt;br /&gt;    *p++=rand()%256; // red&lt;br /&gt;   } else {&lt;br /&gt;    *p++=i%256; // blue&lt;br /&gt;    *p++=j%256; // green&lt;br /&gt;    if(i &amp;lt; 256)&lt;br /&gt;     *p++=i%256; // red&lt;br /&gt;    else if(j &amp;lt; 256)&lt;br /&gt;     *p++=j%256; // red&lt;br /&gt;    else&lt;br /&gt;     *p++=(256-j)%256; // red&lt;br /&gt;   }&lt;br /&gt;   p++; /* unused byte */&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;xcb_image_t *&lt;br /&gt;CreateTrueColorImage(xcb_connection_t *c,&lt;br /&gt;       int width,&lt;br /&gt;       int height)&lt;br /&gt;{&lt;br /&gt; const xcb_setup_t *setup = xcb_get_setup(c);&lt;br /&gt; unsigned char *image32=(unsigned char *)malloc(width*height*4);&lt;br /&gt; xcb_format_t *fmt = find_format(c, 24, 32);&lt;br /&gt; if (fmt == NULL)&lt;br /&gt;  return NULL;&lt;br /&gt;&lt;br /&gt; fillimage(image32, width, height);&lt;br /&gt;&lt;br /&gt; return xcb_image_create(width,&lt;br /&gt;    height,&lt;br /&gt;    XCB_IMAGE_FORMAT_Z_PIXMAP,&lt;br /&gt;    fmt-&gt;scanline_pad,&lt;br /&gt;    fmt-&gt;depth,&lt;br /&gt;    fmt-&gt;bits_per_pixel,&lt;br /&gt;    0,&lt;br /&gt;    setup-&gt;image_byte_order,&lt;br /&gt;    XCB_IMAGE_ORDER_LSB_FIRST,&lt;br /&gt;    image32,&lt;br /&gt;    width*height*4,&lt;br /&gt;    image32);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int&lt;br /&gt;main (int argc, char **argv)&lt;br /&gt;{&lt;br /&gt; xcb_connection_t *c;&lt;br /&gt; xcb_screen_t *s;&lt;br /&gt; xcb_window_t w;&lt;br /&gt; xcb_pixmap_t pmap;&lt;br /&gt; xcb_gcontext_t gc;&lt;br /&gt; xcb_generic_event_t *e;&lt;br /&gt; uint32_t mask;&lt;br /&gt; uint32_t values[2];&lt;br /&gt; int done=0;&lt;br /&gt; xcb_image_t *image;&lt;br /&gt; uint8_t *image32;&lt;br /&gt; xcb_expose_event_t *ee;&lt;br /&gt; char *title="Hello World!";&lt;br /&gt; xcb_size_hints_t *hints;&lt;br /&gt;&lt;br /&gt; /* open connection with the server */&lt;br /&gt; c = xcb_connect (NULL, NULL);&lt;br /&gt;&lt;br /&gt; if (!c) {&lt;br /&gt;  printf ("Cannot open display\n");&lt;br /&gt;  exit (1);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; s = xcb_setup_roots_iterator (xcb_get_setup (c)).data;&lt;br /&gt;&lt;br /&gt; /* printf("root depth %d\n",s-&gt;root_depth); */&lt;br /&gt;&lt;br /&gt; /* create image */&lt;br /&gt; image = CreateTrueColorImage(c, 640, 480);&lt;br /&gt; if (image == NULL) {&lt;br /&gt;  printf ("Cannot create iamge\n");&lt;br /&gt;  xcb_disconnect(c);&lt;br /&gt;  return 1;&lt;br /&gt; }&lt;br /&gt; image32 = image-&gt;data;&lt;br /&gt;&lt;br /&gt; /* create window */&lt;br /&gt; mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK;&lt;br /&gt; values[0] = s-&gt;white_pixel;&lt;br /&gt; values[1] = XCB_EVENT_MASK_EXPOSURE |&lt;br /&gt;  XCB_EVENT_MASK_KEY_PRESS |&lt;br /&gt;  XCB_EVENT_MASK_BUTTON_PRESS;&lt;br /&gt;&lt;br /&gt; w = xcb_generate_id (c);&lt;br /&gt; xcb_create_window (c, XCB_COPY_FROM_PARENT, w, s-&gt;root,&lt;br /&gt;      10, 10, image-&gt;width, image-&gt;height, 1,&lt;br /&gt;      XCB_WINDOW_CLASS_INPUT_OUTPUT,&lt;br /&gt;      s-&gt;root_visual,&lt;br /&gt;      mask, values);&lt;br /&gt;&lt;br /&gt; /* set title on window */&lt;br /&gt; xcb_set_wm_name(c, w, STRING, strlen(title), title);&lt;br /&gt;&lt;br /&gt; /* set size hits on window */&lt;br /&gt; hints = xcb_alloc_size_hints();&lt;br /&gt; xcb_size_hints_set_max_size(hints, image-&gt;width,image-&gt;height);&lt;br /&gt; xcb_size_hints_set_min_size(hints, image-&gt;width,image-&gt;height);&lt;br /&gt; xcb_set_wm_size_hints(c, w, WM_NORMAL_HINTS, hints);&lt;br /&gt;&lt;br /&gt; /* create backing pixmap */&lt;br /&gt; pmap = xcb_generate_id(c);&lt;br /&gt; xcb_create_pixmap(c, 24, pmap, w, image-&gt;width, image-&gt;height);&lt;br /&gt;&lt;br /&gt; /* create pixmap plot gc */&lt;br /&gt; mask = XCB_GC_FOREGROUND | XCB_GC_BACKGROUND;&lt;br /&gt; values[0] = s-&gt;black_pixel;&lt;br /&gt; values[1] = 0xffffff;&lt;br /&gt;&lt;br /&gt; gc = xcb_generate_id (c);&lt;br /&gt; xcb_create_gc (c, gc, pmap, mask, values);&lt;br /&gt;&lt;br /&gt; /* put the image into the pixmap */&lt;br /&gt; xcb_image_put(c, pmap, gc, image, 0, 0, 0);&lt;br /&gt;&lt;br /&gt; /* show the window */&lt;br /&gt; xcb_map_window (c, w);&lt;br /&gt; xcb_flush (c);&lt;br /&gt;&lt;br /&gt; /* event loop */&lt;br /&gt; while (!done &amp;amp;&amp;amp; (e = xcb_wait_for_event (c))) {&lt;br /&gt;  switch (e-&gt;response_type) {&lt;br /&gt;  case XCB_EXPOSE:&lt;br /&gt;   ee=(xcb_expose_event_t *)e;&lt;br /&gt;   /* printf ("expose %d,%d - %d,%d\n",&lt;br /&gt;      ee-&gt;x,ee-&gt;y,ee-&gt;width,ee-&gt;height); */&lt;br /&gt;   xcb_copy_area(c, pmap, w, gc,&lt;br /&gt;          ee-&gt;x,&lt;br /&gt;          ee-&gt;y,&lt;br /&gt;          ee-&gt;x,&lt;br /&gt;          ee-&gt;y,&lt;br /&gt;          ee-&gt;width,&lt;br /&gt;          ee-&gt;height);&lt;br /&gt;   xcb_flush (c);&lt;br /&gt;   image32+=16;&lt;br /&gt;   break;&lt;br /&gt;&lt;br /&gt;  case XCB_KEY_PRESS:&lt;br /&gt;   /* exit on keypress */&lt;br /&gt;   done = 1;&lt;br /&gt;   break;&lt;br /&gt;&lt;br /&gt;  case XCB_BUTTON_PRESS:&lt;br /&gt;   fillimage(image-&gt;data, image-&gt;width, image-&gt;height);&lt;br /&gt;   memset(image-&gt;data, 0, image32 - image-&gt;data);&lt;br /&gt;   xcb_image_put(c, pmap, gc, image, 0, 0, 0);&lt;br /&gt;   xcb_copy_area(c, pmap, w, gc, 0,0,0,0,image-&gt;width,image-&gt;height);&lt;br /&gt;   xcb_flush (c);&lt;br /&gt;   break;&lt;br /&gt;  }&lt;br /&gt;  free (e);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /* free pixmap */&lt;br /&gt; xcb_free_pixmap(c, pmap);&lt;br /&gt;&lt;br /&gt; /* close connection to server */&lt;br /&gt; xcb_disconnect (c);&lt;br /&gt;&lt;br /&gt; return 0;&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-5826275067191944878?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/5826275067191944878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2010/04/xcb-programming-is-hard.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/5826275067191944878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/5826275067191944878'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2010/04/xcb-programming-is-hard.html' title='XCB programming is hard'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-1587762535289023312</id><published>2010-04-16T22:36:00.007+01:00</published><updated>2010-04-16T23:56:34.078+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vala'/><title type='text'>Claudia black makes this look good</title><content type='html'>OK maybe the title is a bit of a reach, but she is pretty and my topic is dull.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It is the school holidays and between entertaining the kids I have been experimenting with the vala (see there is the link to the title) language. Overall I &lt;b&gt;really&lt;/b&gt; like it, building a usable graphical GTK application is a snap and that side of it works well.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unfortunately, and here comes a a whole pile of fail, the documentation is lacking, not just poor but mostly non-existent. You rapidly discover yourself using the Glib and GTK library documentation to try and infer how things work. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Underneath, the vala compiler is clever, it is really a c code generator. It takes your vala source file converts it to c and compiles it. When it works smoothly it works very well, when something is not quite right you can end up with a large pile of pieces complete with the C compiler spitting out cryptic nonsense.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is all exasperated to new heights of madness when you want to access a simple c library. I say simple because if you want to access a Glib based library its easy and "there is an app for that". Because vala is object oriented c interfaces must be described as an object. This description is performed using vapi files. The file format is documented by the simple approach of "we already wrapped a load of libs go look at their vapi files"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For my small starter project I wanted to access a tiny c library I had written. The entire interface described in a single header header (excluding copyright) is:&lt;/div&gt;&lt;div&gt;&lt;pre&gt;typedef enum motor_dir {&lt;br /&gt; motor_off = 0,&lt;br /&gt; motor_forward = 1,&lt;br /&gt; motor_back = 2,&lt;br /&gt; motor_brake = 3,&lt;br /&gt;} motor_dir;&lt;br /&gt;&lt;br /&gt;int edgerbtarm_init(void);&lt;br /&gt;int edgerbtarm_close(void);&lt;br /&gt;void edgerbtarm_ctrl_motor(int motorn, motor_dir direction);&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Yes that is it! one enum, an initialise a finalise and a single operation function. The vapi file I came up with after a great deal of trial, error and head scratching was.&lt;/div&gt;&lt;div&gt;&lt;pre&gt;[CCode(cheader_filename = "libedgerbtarm.h",&lt;br /&gt;    lower_case_cprefix = "edgerbtarm_",&lt;br /&gt;    cprefix = "")]&lt;br /&gt;    namespace edgerbtarm {&lt;br /&gt; [CCode(cprefix = "motor_")]&lt;br /&gt; public enum motor_dir {&lt;br /&gt;     off,&lt;br /&gt;     forward,&lt;br /&gt;     back,&lt;br /&gt;     brake&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;  public int init();&lt;br /&gt;  public int close();&lt;br /&gt;  public void ctrl_motor(int motorn, motor_dir direction);&lt;br /&gt;}&lt;/pre&gt;This seemed to work until I tried to use the motor_dir type within my vala code at which point the c compiler started throwing errors about undeclared macros&lt;/div&gt;&lt;div&gt;&lt;pre&gt;arm.vala.c:297: error: ‘EDGERBTARM_TYPE_MOTOR_DIR’ undeclared (first use in this function)&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;I struggled for some time and finally ended up asking my friend &lt;a href="http://www.enricozini.org/blog/pdo/"&gt;Enrico&lt;/a&gt; for help. He initially suggested I simply use an int instead of the motor_dir type and cast when I needed to. This approch worked and let me compile the program, it did however seem a bit grubby and removed the type safety of the enum.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then Enrico came up with the "correct" solution. the enum description in the in the vapi file needed an extra parameter so vala would know the enum did not have a Glib type...yeah it was obvious to me too :-/&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;so by altering the vapi file enum declaration to&lt;/div&gt;&lt;div&gt;&lt;pre&gt;[CCode(cprefix = "motor_", has_type_id = false)]&lt;br /&gt;public enum motor_dir {&lt;br /&gt;   off,&lt;br /&gt;   forward,&lt;br /&gt;   back,&lt;br /&gt;   brake&lt;br /&gt;}&lt;/pre&gt;Everything works as you might expect and the motor_dir enum can be used as a type within the vala program with no more fuss.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So the outcome of all this is that while vala is an interesting language which I may well use again in future, one should be aware that it is still very immature as a solution and has nowhere near enough documentation especially round the awkward stuff where it needs it most.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-1587762535289023312?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/1587762535289023312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2010/04/claudia-black-makes-this-look-good.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/1587762535289023312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/1587762535289023312'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2010/04/claudia-black-makes-this-look-good.html' title='Claudia black makes this look good'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-5056451990362955319</id><published>2010-03-08T18:32:00.004Z</published><updated>2010-03-08T19:23:52.248Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>Music hath charms to soothe a savage breast, to soften rocks, or bend a knotted oak.</title><content type='html'>Since I last mentioned music back in January I have accumulated another ten albums and unlike last time where there were only a couple of stand outs, this time I have he opposite problem.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The unordered list:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Justin Sandercoe - "Small town eyes"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I am learning to play the guitar, I have been using Justins' course, it is very very good, this album? Also very good. If you like melodic guitar lead music with varied influences this is for you. A couple of tracks made me immediately think of some Crowded House riffs (which is not a bad thing). Only minor niggle is the uneven levels on some of the louder pieces, but it really is a minor observation on an otherwise fine first album.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Molly Lewis - "I made you a CD, but I eated it." &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Although this is only a short selection of original material from Molly, it is a very promising first album. I really like her voice and although a ukulele is not generally the most well respected of instruments, in her hands, it has an odd charm. This album is available from DFTBA records.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Rhett and Link - "Up to this point"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A pair of talented comedians who use music very effectively to highlight their humour. I originally stumbled across them on youtube and decided to take a punt. The album is 27 short pieces which fit together surprisingly well. Difficult to categorise but think a cross between Flight of the Choncords and  Jonathan Coulton with a dash of youtube immediacy. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;They Might Be Giants - "Flood", "Apollo 18" and "John Henry"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Strictly a replacement of the old tapes which have completely disintegrated in the intervening couple of decades since first purchased. Flood is still one of my favourite albums ever, certainly in my top 10. If you do not know them TMBG are just ace, please try their music!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Seasick Steve - "Started out with nothin and i still got most of it left"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well its a kinda fun album primarily based on blues electric "guitar" (some of the instruments are little more than a stick with a nail in and a guitar pickup.) Nothing bad, easy to get along with, definitely worth a listen.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;La Roux - "La Roux"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This synth pop album was on remainder in ASDA and I took a gamble. Its OK I guess and for 3quid I cannot really complain.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Red Hot Chili Peppers - "By the way"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Not their best, but competent enough.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Aqua - "Aquarium" , "Aquarius"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Um...yes, I have a soft spot for 90's cheese OK? Nothing more than a gross self indulgence of my silly side. But they are fun ;-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So that is my new music since January all 166 tracks of it . Most of it pretty good, certainly no lemons (well aside from the Aqua but that is supposed to be silly!) &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Oh and The XX has really grown on me from last time and I am looking forward to their next release.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-5056451990362955319?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/5056451990362955319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2010/03/music-hath-charms-to-soothe-savage.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/5056451990362955319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/5056451990362955319'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2010/03/music-hath-charms-to-soothe-savage.html' title='Music hath charms to soothe a savage breast, to soften rocks, or bend a knotted oak.'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-1096265369023389672</id><published>2010-03-08T12:36:00.000Z</published><updated>2010-03-08T12:52:36.295Z</updated><title type='text'>Squashfs</title><content type='html'>Well my last post elicited a response from Mr Lougher the squashfs author. Just not one I was expecting. Apparently he did receive one of my emails (I sent five in total) to which he has not replied as I have accidentally come across as critical. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is absolutely not my intent and I wish to publicly say that, It would have perhaps been more constructive to actually tell me this by email and this misunderstanding could have been avoided.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For reference The final email in the series is reproduced below, if I have been overly unhelpful please let me know in the comments so I can avoid this mistake in future.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Hi, we are using Squashfs and have come across several issues. We&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;initialy tried to use the Debian source package of the 4.0 release but&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;then moved to using the the CVS edition which fixed some bugs but had&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;issues of its own.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Couple of things to start with:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; - The commit you made recently titled "Change get_basename() to use&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   getcwd rather than getting the PWD env var." does not seem to be&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   what you intended?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   http://squashfs.cvs.sourceforge.net/viewvc/squashfs/squashfs/squashfs-tools/mksquashfs.c?r1=1.145&amp;amp;r2=1.146&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; - I would like to assist in improving these tools so they work better&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   for our use cases. To aid in this have you considered updating the&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   revision control system the project is kept in? an SVN or GIT&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   repository is much easier to work with than CVS.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; - I will probably assist with maintainership of the Debian and Ubuntu&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   packages (I am a Debian Developer &lt;vince@debian.org&gt; ) and would&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   like to bring a couple of patches to your attention, one to avoid a&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   division by zero error and a second to enable building with&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   alternative libc. These are both attached to this mail.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; - The tools currently make a number of assumptions about structure&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   alignment which are incorrect on some architectures. I am crafting &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   a patch to address this which should make the tools work correctly &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   on ARM (they currently simply segfault).&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;I hope this is seen as constructive and we can work together to&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;improve this software. If you do not feel you want to interact with me&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;and choose to take a differnt route, please let me know at your earliest&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;conveniance.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I do hope that Mr. Lougher will accept that I intended to be helpful and constructive and not cause offence. I have chosen to use the blog format for this as that is the form I made the previous complaint and also email between myself and Mr. Lougher appears somewhat erratic.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It should be noted that some of there points have already been addressed, however there are several more issues which I hope to be able to contribute towards.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-1096265369023389672?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/1096265369023389672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2010/03/squashfs.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/1096265369023389672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/1096265369023389672'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2010/03/squashfs.html' title='Squashfs'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-2957665307512239933</id><published>2010-03-03T22:14:00.000Z</published><updated>2010-03-03T22:37:42.114Z</updated><title type='text'>Limited Success</title><content type='html'>I spent the day working with Daniel. He has been trying to get the correct runes for a GCC build in a strange environment. Turns out all he needed was me to throw stupid ideas at him until one caused him to examine some of the generated intermediate symbol maps...&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Turns out that busybox awk fails in an interesting way which (eventually) causes half the symbols to be missing in the stage 1 libgcc.so object. Switched to using gawk and managed a successful build.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Seems to be a relatively good time for solutions, last week I managed to make squashfs-tools work on ARM. Unfortunately the author seems to be completely unresponsive to my (repeated) emails (if anyone wants the patch series feel free to mail me). The main issue with the tools is their complete blind assumption that a c structure can simply be cast to an arbitrary character array and get sensible results. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The structure casting method simply does not work on ARM (or indeed any platform which has alignment restrictions) without at least adhering to some minimal rules, primary among these is that the structure *must* be aligned to a word (32bit) boundary and that if you have 16bit or 8bit quantities within the structure they may cause gaps between members i.e. the structures are not packed by default. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;No this behaviour is not a bug, it is perfectly acceptable by the c standard. Just because on x86 the practice of arbitrary casting works does not mean it is safe or sensible. Nonetheless many programmers simply do not want to believe its wrong.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anyhow, rant over, back to work!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-2957665307512239933?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/2957665307512239933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2010/03/limited-success.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/2957665307512239933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/2957665307512239933'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2010/03/limited-success.html' title='Limited Success'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-4489215652764294813</id><published>2010-02-16T13:31:00.000Z</published><updated>2010-02-16T13:41:41.876Z</updated><title type='text'>Tempus fugit</title><content type='html'>Seems I managed to loose a month in there. Been working very hard on a project with an improbable deadline which has not left much time for anything else.&lt;br /&gt;&lt;br /&gt;Finally brought to a standstill this weekend by something Joshua brought home (I think it was some form of micro biological warfare agent, judging by how I feel) It is incrediably hard to shrug off the lethargy of illness when you realize all you have to go back to is work.&lt;br /&gt;&lt;br /&gt;On the plus side the project deadline is in three weeks time so whatever happens It will all be over by then! Whereupon I can take some time off, calm down and then start all over on the next project...&lt;br /&gt;&lt;br /&gt;Yay?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-4489215652764294813?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/4489215652764294813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2010/02/tempus-fugit.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/4489215652764294813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/4489215652764294813'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2010/02/tempus-fugit.html' title='Tempus fugit'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-3778109619950373882</id><published>2010-01-05T17:07:00.000Z</published><updated>2010-01-05T18:52:32.196Z</updated><title type='text'>Back to work</title><content type='html'>Well that is the end of my time off, tomorrow it is back to work. However my break started with snow and it seems its finishing that way.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_A79BgnRJV_g/S0OC9MUj_GI/AAAAAAAAAAM/mj4XXkyN4Ss/s1600-h/snowing.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 191px;" src="http://1.bp.blogspot.com/_A79BgnRJV_g/S0OC9MUj_GI/AAAAAAAAAAM/mj4XXkyN4Ss/s320/snowing.jpg" alt="" id="BLOGGER_PHOTO_ID_5423322364075310178" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Unfortunately despite my previous enthusiasm this weather is becoming a little tedious. Schools have been closed today so I had to child mind instead of getting anything done.&lt;br /&gt;&lt;br /&gt;Speaking of getting things done...I have completely failed to do anything productive whatsoever for the last couple of weeks. I have played some computer games, watched some TV read some books and listened to music and you know what? Aside from a tiny guilty feeling, I have thoroughly enjoyed myself.&lt;br /&gt;&lt;br /&gt;I suppose I should apologize for not contributing to all those open source projects that could have used my help, but that would imply remorse which I seem to be lacking. Oh well&lt;br /&gt;&lt;br /&gt;Mentioning music, I have acquired a selection of new music over the holiday which I ought to talk about. In no particular order:&lt;ul&gt;&lt;li&gt;Iron and Wine - "Our Endless, Numbered Days"&lt;/li&gt;&lt;li&gt;Paramore - "All We Know Is Falling", "RIOT" and "Brand new eyes"&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Phoenix - "Wolfgang Amadeus Phoenix"&lt;/li&gt;&lt;li&gt;Lady Gaga  - "The Fame Monster"&lt;/li&gt;&lt;li&gt;The xx - "XX"&lt;/li&gt;&lt;li&gt;Muse - "The Resistance"&lt;/li&gt;&lt;li&gt;Cymbals Eat Guitars - "Why There Are Mountains"&lt;/li&gt;&lt;li&gt;St. Vincent - "Actor"&lt;/li&gt;&lt;li&gt;Carter Burwell - "Twilight-The Score"&lt;/li&gt;&lt;li&gt;The Darkness - "Permission to Land"&lt;/li&gt;&lt;li&gt;Oasis - "Stop the Clocks"&lt;/li&gt;&lt;li&gt;Chameleon Circuit - "Chameleon Circuit"&lt;/li&gt;&lt;li&gt;Hank_Green - "I'm So Bad at This" and "So Jokes"&lt;/li&gt;&lt;/ul&gt;Unfortunately none of it was outstanding which sometimes happens when I take a punt on a large pile of new music. On the upside none of it was particularly bad either, so a kind of "no win" deal. Though on re-listening the "XX" album is starting to grow on me and the albums from the DFTBA label are so inexpensive they are more than worth it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-3778109619950373882?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/3778109619950373882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2010/01/back-to-work.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/3778109619950373882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/3778109619950373882'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2010/01/back-to-work.html' title='Back to work'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_A79BgnRJV_g/S0OC9MUj_GI/AAAAAAAAAAM/mj4XXkyN4Ss/s72-c/snowing.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-4310702779559810221</id><published>2009-12-22T11:11:00.000Z</published><updated>2009-12-22T12:19:35.733Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='holiday snow'/><title type='text'>Time off</title><content type='html'>I have the time over Christmas off, partly because I needed some distance from work but mostly because the children need looking after while their schools are on break.&lt;br /&gt;&lt;br /&gt;Usually switching off from the work mindset is hard for me and I end up "helping" anyway. Not this time...come last Friday at quitting time I was gone. I was apparently in desperate need of this break and spending time with the kids has been great.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kyllikki.org/personal/vince/boys-2009-snowman.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 411px; height: 451px;" src="http://www.kyllikki.org/personal/vince/boys-2009-snowman.jpg" alt="" border="0" /&gt;&lt;/a&gt;It has also been snowing! I used to love the snow when I was a kid and watching the boys build a snowman and have a snowball fight brought back good memories. It somehow has less amusement value when you are older and have to go to work in it and deal with all the problems with transport induces in the UK. Did I mention I was off work? ;-) I had a great time with them...and got a very cold neck.&lt;br /&gt;&lt;br /&gt;I have also managed to solve the cat box problem. Turns out it was not the boxes, their placement or type. It seems they wanted three to choose from! They now have three boxes in which to sprawl and they use the original two in the original locations...just as long as they have the option of a third they are happy.&lt;br /&gt;&lt;br /&gt;Now I have unwound sufficiently I am looking at tackling some Open source projects of my own which I have been neglecting. I am planning on finishing my whether station recording software and feeding my observations to the weather underground. Possibly doing some more work on Netsurf and maybe even fixing some RC bugs for Debian.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-4310702779559810221?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/4310702779559810221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2009/12/time-off.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/4310702779559810221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/4310702779559810221'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2009/12/time-off.html' title='Time off'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-4605552367890336728</id><published>2009-12-17T11:23:00.001Z</published><updated>2009-12-17T14:02:22.403Z</updated><title type='text'>What is it with embedded computing?</title><content type='html'>Last week I was given a development board for a system on chip (SoC) we were looking at using. All i had to do was ensure I could get a reasonable, supportable, bootloader and Linux kernel running on it.&lt;br /&gt;&lt;br /&gt;Now I am a fairly competent engineer, I have worked with the ARM processors and SoC for many years. It should not therefor take me four days of almost continuous frustration to get a bootloader and kernel onto a system, but it has.&lt;br /&gt;&lt;br /&gt;Firstly the system arrives and we look it over, the hardware design is not exactly elegant but seems like it will get the job done. That is at least a step up from several previous offerings which have been just plain broken. So I power it up and it boots into Fedora core 8, possibly not my first OS choice for a diskless system, but it does work.&lt;br /&gt;&lt;br /&gt;Perhaps its worth mentioning that my experience with doing any Open Source development has caused me to have a severe aversion to software which is not upstream, especially kernels. The effort required to run your own patch series and keep it up to date is nothing short of Herculean.&lt;br /&gt;&lt;br /&gt;Let us be honest, how many developers do you know who are talented enough to generate good code and patient enough to separately maintain it over a long period of time? I shall not belabor this point as others have repeatedly made it for me in much more eloquent ways. Lets us just say from my point of view. Upstream - good. Long term forks - bad.&lt;br /&gt;&lt;br /&gt;With this in mind, the solutions Simtec develop are always with a view  to our customers being able to simply download and use the standard upstream software wherever possible.  Here is where the story stops being smooth and becomes a rant.&lt;br /&gt;&lt;br /&gt;The system was running 2.6.22, one that was patched all which ways. "maybe they just shipped an old kernel" I thought. I opened the CD they provided and...oh, OK its just zips and tarballs of the binaries and source they used (actually that in itself is a minor miracle with a lot of vendors right now - see the almost continuous stream of copyright infringement litigation from the FSF) but sill stuck back in July 2007.&lt;br /&gt;&lt;br /&gt;So i did teh normal thing, entered the URL printed on the outside of the box and went looking for the updates. No dice, just the same old stuff. So I contacted the company and recived the news that no there were no updates, that was what was published for the device, thats what I could have.&lt;br /&gt;&lt;br /&gt;My initial reaction was of tired resignation...this would not be my first SoC port (probably around the fifth or sixth!) So I responded with &lt;tt&gt;cd linux-2.6;git checkout master;git pull&lt;/tt&gt; and went to see what I could see. and lo and behold, there in the kernel, was full support for not only the SoC but for the other version of the very board I had.&lt;br /&gt;&lt;br /&gt;Fortunately after mentioning this on IRC &lt;a href="http://www.cyrius.com/journal"&gt;my giraffe loving friend.&lt;/a&gt; pointed me at the correct community git tree to find the tiny patch required to support my board.&lt;br /&gt;&lt;br /&gt;So the vendor was not only shipping old code but actively dissuading customers from even looking for new stuff, which it turns out was mainline anyway! To add to this  somewhere along the lines the company name on the box and contact information has changed and...well confusion reigned.&lt;br /&gt;&lt;br /&gt;Right Plain sailing from here on? not quite...that would have been too easy. So you can build a mainline kernel...but you cannot boot it. you guessed it the bootloader they ship on the board is ancient, specifically a u-boot fork from December 2005. Having finally figured out how this was going to go, I went to the uboot repo, pulled the latest and built it for my target. And then I needed to upgrade the u-boot and joy of joys bricked the system.&lt;br /&gt;&lt;br /&gt;Fortunately the system has a integrated FDTI serial/JTAG port so re-writing the flash should be as simple as running openOCD configured correctly. Of course this did not work...in the end I resorted to running their binary built versions from the CD (tarfile inside a zip inside a tarfile...whatever) and wrote their original image back to the board...which worked.&lt;br /&gt;&lt;br /&gt;Long story short, next day I discover that i need a magic different uboot target (make u-boot.kwb for those that care) write this with the binary openocd build and...success&lt;br /&gt;From then on its all been a bit anticlimactic and straightforward and I now have a system capable of starting a kernel over the network and a root fs on network, disc or flash.&lt;br /&gt;&lt;br /&gt;My main complaint from all of this is what the hell are vendors doing shipping crap like this? Why do they all insist on taking a dreadful code drop from the SoC manufacturer when they first brought the part up and shipping that prototype junk until the part reaches the end of its life?!?&lt;br /&gt;&lt;br /&gt;All the usual excuses about support etc. will come out, but seriously, you recive *no* support from vendors unless you pay for it and even then they will simply tell you whats on the CD is "it".  Btw the diff for u-boot to support this board is larger than the original sources and the 2.6.22 is attacked with a 65MB diff which cannot be good.&lt;br /&gt;&lt;br /&gt;The Open Source option is continuously innovating and improving, producing ever better software...but the embedded world seems to be forever stuck shipping crap. Is this just me? Does anyone have any solutions? Or am I stuck with this until I change profession?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-4605552367890336728?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/4605552367890336728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2009/12/what-is-it-with-embedded-computing.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/4605552367890336728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/4605552367890336728'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2009/12/what-is-it-with-embedded-computing.html' title='What is it with embedded computing?'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-1264937784468609870</id><published>2009-12-14T17:44:00.000Z</published><updated>2009-12-14T18:53:49.842Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cats'/><title type='text'>Two pussies, one box</title><content type='html'>Our household contains two felis catus. These evil creatures (sorry I repeat myself, I already mentioned they were cats) are not sweet kittens, they are grumpy old animals who spend the majority of their lives sleeping indoors and rarely venturing out.&lt;br /&gt;&lt;br /&gt;Historically they have had free reign of the house and slept wherever it suited them but with the arrival of the children they were confined to the lower half of the house and provided simple cardboard boxes in which they can reside completely undisturbed.&lt;br /&gt;&lt;br /&gt;All well and good you might say and indeed this has produced happy cats for the last eight years. however I recently caused a great deal of discord in the household by providing new boxes never imagining this could possibly cause as much trouble as it has. Currently the two of them are &lt;a href="http://www.kyllikki.org/personal/vince/twocatsonebox.jpg"&gt;attempting to occupy a single box&lt;/a&gt; and win some form of passive aggressive fight for occupancy.&lt;br /&gt;&lt;br /&gt;This has been going on for a month now and shows no sign of easing. I do wonder what I need to do to aleviate this situation before it results in a full blown outbreak of evil. Any ideas?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-1264937784468609870?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/1264937784468609870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2009/12/two-pussies-one-box.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/1264937784468609870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/1264937784468609870'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2009/12/two-pussies-one-box.html' title='Two pussies, one box'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-5352919590214957596</id><published>2009-12-04T16:28:00.000Z</published><updated>2009-12-04T16:53:37.819Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='quiet week'/><title type='text'>Where did that that go?</title><content type='html'>Wow. OK, so its a week later and the time seems to have vanished. &lt;br /&gt;&lt;br /&gt;I did get bored of getting nowhere with open source projects though, so last night I went back to the &lt;a href="http://www.netsurf-browser.org/"&gt;Netsurf&lt;/a&gt; browser and fixed a pile of bugs. It is nice to have commit rights to a project where they actually appreciate your contributions.&lt;br /&gt;&lt;br /&gt;Most of the week I have been the only person working at Simtec (only other person about was a director in for a couple of days) so I was supposed to answer all inquiries and support etc. but perversely its been almost silent. Seems no one wants anything doing just before Christmas which suits me just fine ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-5352919590214957596?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/5352919590214957596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2009/12/where-did-that-that-go.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/5352919590214957596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/5352919590214957596'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2009/12/where-did-that-that-go.html' title='Where did that that go?'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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-3711269760993993197.post-8924479464088248314</id><published>2009-11-27T15:47:00.000Z</published><updated>2009-11-27T16:08:01.131Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='weekend'/><title type='text'>Here comes the weekend</title><content type='html'>Well that was an unproductive week. Maybe I can do something interesting over the weekend? Nope, looks like I get to run around after the kids and do household chores.&lt;br /&gt;&lt;br /&gt;Fortunately the interweb is here to entertain you! I am sure most of you have already seen it but the &lt;a href="http://www.youtube.com/watch?v=tgbNymZ7vqY"&gt;Muppets doing bohemian rhapsody&lt;/a&gt; is fun. The Nottingham university scientists explaining the &lt;a href="http://www.youtube.com/watch?v=OzR4eXIz_uA"&gt;small hotrod collider&lt;/a&gt; is amusing and &lt;a href="http://www.youtube.com/watch?v=NdGuv6vIiNk"&gt;two girls, one uke&lt;/a&gt; is safe for work.&lt;br /&gt;&lt;br /&gt;Unfortunately there have been other happenings this week which are not so amusing, the &lt;a href="http://www.youtube.com/watch?v=2kBqLP3H8mo"&gt;extensive&lt;/a&gt; &lt;a href="http://www.youtube.com/watch?v=9R26W3Y0ZYM"&gt;flooding&lt;/a&gt; in &lt;a href="http://www.youtube.com/watch?v=M_2ZJ2gb73c"&gt;parts&lt;/a&gt; of the UK has caused many people a great deal of harm and in one case a policeman, protecting others, was &lt;a href="http://news.bbc.co.uk/1/hi/england/cumbria/8382259.stm"&gt;swept to his death from a collapsing bridge&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Unfortunately due to a confluence of events I will not be able to attend the Bug Squashing Party (BSP) in Cambridge this weekend as I had originally intended. I do hope to be able to contribute some work on Sunday from here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-8924479464088248314?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/8924479464088248314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2009/11/here-comes-weekend.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/8924479464088248314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/8924479464088248314'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2009/11/here-comes-weekend.html' title='Here comes the weekend'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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-3711269760993993197.post-6877005877944046367</id><published>2009-11-26T13:08:00.000Z</published><updated>2009-11-26T14:25:46.789Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Sometimes it don't come easy, sometimes it don't come at all</title><content type='html'>My work sometimes causes me to have reason to change small things in open source projects which I then have to submit for consideration upstream. Often this is as simple as providing a patch on the relevant mailing list and moving on.&lt;br /&gt;&lt;br /&gt;Sometimes however the change is larger and I really would like to see the feature or bug fix accepted by the project. I am fortunate that my employer is enlightened enough to not only accept this but actively encourage participation in open source communities.&lt;br /&gt;&lt;br /&gt;Most of the time the patches are accepted, with changes or updates, in a reasonable timescale. Certainly for kernel work I have got used to a submission/accept time measured in hours!&lt;br /&gt;&lt;br /&gt;On occasion the change gets dropped on the floor or missed and you have to resubmit (even if its just to get told its uninteresting and to go away ;-). Unfortunately there are a small number of projects where getting something merged is an experience in frustration.&lt;br /&gt;&lt;br /&gt;The particular project which has caused me the most trouble along these lines is Qemu. &lt;a href="http://blog.digital-scurf.org/"&gt;Daniel&lt;/a&gt; and I did the work to support the Samsung ARM based 2410 and 2440 System on Chip (SoC) and a couple of boards they were used on. Of course we then presented the patch to the Qemu mailing list. That was in November...No, not this year, or even last, we are talking 2006!&lt;br /&gt;&lt;br /&gt;Unsurprisingly there were numerous issues with our first cut, we improved the patches and resubmitted them and received absolutely no feedback. Eventually we provoked the maintainer to respond, we took his feedback into account and resubmitted. After a year of so of this Daniel got bored and gave up.&lt;br /&gt;&lt;br /&gt;Being a complete idiot and apparently sucker for punishment I decided to re-try. I completely restructured the port and started by just trying to get the absolute minimal core changed accepted. It took some time to provoke a response (oh and they altered RCS which meant I had to change my submission again, but they did change to git so that is acceptable ;-)&lt;br /&gt;&lt;br /&gt;Earlier this year resulted in my all time &lt;a href="http://lists.gnu.org/archive/html/qemu-devel/2009-04/msg01947.html"&gt;favorite maintainer response&lt;/a&gt;. Eventually I managed to find out he actually objected to the patch because the SoC we were using actually required a slightly different processor capability set (the emulation is ARMv5 by default and the SoC in question is ARM v4te, hey I had not noticed any practical difference, and Qemu is an emulator not a simulator...but OK)&lt;br /&gt;&lt;br /&gt;Remember this is the first time this objection has been raised in 30months of patch submission. Fine, I create a patch which adds V4te emulation and submit that. I eventually get a response, to which &lt;a href="http://lists.gnu.org/archive/html/qemu-devel/2009-05/msg01594.html"&gt;my reply is a little frustrated&lt;/a&gt; I will admit.&lt;br /&gt;&lt;br /&gt;I have since resubmitted the patch with the corner cases fixed, it has been ignored, and I never have received a reply to my direct questions. On this three year  anniversary of the original submission I am simply going to give up, something I detest doing.&lt;br /&gt;&lt;br /&gt;I am one of those dull people that finishes what he starts, that is pretty much my role in Simtec these days, ensuring stuff we start gets finished or at least drawing the line and calling it complete. To end up with a complete failure offends my personal values.&lt;br /&gt;&lt;br /&gt;Now please do not think I hold any ill feelings towards anyone concerned, open source maintainers perform their roles without pay and, by extension, without responsibility to anyone but themselves. I am sure people are too busy to care about the itch I wanted scratched and that overall their project has not really lost all that much by not having me as a contributor.&lt;br /&gt;&lt;br /&gt;I know I could have forked the project, or maintained my own tree or any number of other technical solutions but at the end of 1,100 days I have finally exhausted my enthusiasm and can move on. Speaking of which, time to resubmit a kbuild change which got dropped ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-6877005877944046367?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/6877005877944046367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2009/11/sometimes-it-dont-come-easy-sometimes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/6877005877944046367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/6877005877944046367'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2009/11/sometimes-it-dont-come-easy-sometimes.html' title='Sometimes it don&apos;t come easy, sometimes it don&apos;t come at all'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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-3711269760993993197.post-2945982561526471673</id><published>2009-11-24T12:21:00.000Z</published><updated>2009-11-24T13:00:41.643Z</updated><title type='text'>Getting things done</title><content type='html'>It seems that despite having a very important work deadline today I am destined to be interrupted every five minutes. Unfortunately I need to concentrate to get this done. And while i managed to get "in the zone" earlier, now I cannot string two words together.&lt;br /&gt;&lt;br /&gt;This seems to be a recurring theme recently, my productivity is horribly low because I get interrupted all the time for "can you just" jobs. I turn the phone ringer off and hide my email window and I get called on my mobile and get asked why don't you answer your phone?&lt;br /&gt;&lt;br /&gt;Its not so much the time lost to answering the specific query or doing the job but more my context switch time to restore to my previous task becomes huge. Somehow my switching time is absolutely non linear and today it has become so large I have decided to dump state altogether.&lt;br /&gt;&lt;br /&gt;Because I know I have to do the school run soon and the interruptions continue I have abandoned the critical task altogether for now in the hope I can get back to it fresh. Do others get this I wonder? or is it a personal fault I should strive to fix? I know I used to be able to deal with this sort of thing with much less trouble, maybe I am getting less flexible as I age?&lt;br /&gt;&lt;br /&gt;Fortunately (umm, you know what I mean) the &lt;a href="http://www.entropykey.co.uk/"&gt;Entropy Key&lt;/a&gt; software has some cleanups required which is an easy job and does not matter if I get interrupted so I do have a productive task to complete.&lt;br /&gt;&lt;br /&gt;Oh speaking of the entropy key &lt;a href="http://blog.halon.org.uk/geek/ekey-02.html"&gt;Niel blogged&lt;/a&gt; something silly I created the other day. I had a senior moment and filked the children's nursery rhyme "If You're happy and you know it" slapping some guitar chords on it.&lt;br /&gt;&lt;br /&gt;It seems I cannot simply leave well enough alone and last Friday night (with the help of Mark Hymers) I made it a whole lot worse. I present to you the score of "&lt;a href="http://www.kyllikki.org/personal/vince/music/IfYoureHappy/IfYoureHappy.pdf"&gt;If you're happy with your ekey, blog your praise&lt;/a&gt;" for piano and guitar. In fact I wrote this out in rosegarden so it can be turned into a midi file etc. all the &lt;a href="http://www.kyllikki.org/personal/vince/music/IfYoureHappy/"&gt;source files&lt;/a&gt; are available. It is released under a CC license so I suppose someone could put the lyrics back to the proper nursery rhyme and use it for something less tacky.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-2945982561526471673?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/2945982561526471673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2009/11/getting-things-done.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/2945982561526471673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/2945982561526471673'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2009/11/getting-things-done.html' title='Getting things done'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3711269760993993197.post-2824336401141236696</id><published>2009-11-23T19:24:00.000Z</published><updated>2009-11-23T20:10:55.875Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='kids'/><category scheme='http://www.blogger.com/atom/ns#' term='time'/><category scheme='http://www.blogger.com/atom/ns#' term='home'/><title type='text'>Fitting Everything In</title><content type='html'>Recently I have been having issues fitting everything I want to do into the time available.&lt;br /&gt;&lt;br /&gt;As my kids grow up they always seem to need to be taken someplace or picked up from an activity and that is on top of the daily school run. I recently worked out I spend over eight hours a week, a whole five hundred minutes, taking them to and fro.&lt;br /&gt;&lt;br /&gt;Now do not get me wrong, I actually enjoy spending time with my children and we do talk and interact during these occasions but it is hardly a stimulating activity walking to school or being driven to a club.&lt;br /&gt;&lt;br /&gt;Add to that my job and its traveling requirements and assuming I want to sleep, eat etc. and all of a sudden I discover I have about forty hours left in a week to share between my family and hobbies.&lt;br /&gt;&lt;br /&gt;Anyone with kids knows they are a wonderful time sink :-) and of course the family home often needs something doing. All of a sudden I realize why I feel like I often end up having to trade sleep for my hobbies!&lt;br /&gt;&lt;br /&gt;As I get older I find I still have the same number of ideas for projects but the realization that even if I find the time to start something I am unlikely to be able to devote the resources to finishing it. Being one of life's boring people who like to finish a project they start (ok at least make something useful) this means I tend not to start new things too often.&lt;br /&gt;&lt;br /&gt;All of this has lead me to become very careful about how I spend my free time and on what. It means my personal involvement in software projects like Debian and the Linux kernel is nowhere near the level I might like. Similarly my music practice (or absolute lack thereof) causes my teacher to get snippy with me.&lt;br /&gt;&lt;br /&gt;As you can imagine starting something like a blog when I do not have enough time for what I am already doing is something of a challenge for me and may indeed falter. However I shall give it a chance as I feel a need for public place to share all those small things which I would probably put on my personal website if I had time to work on it ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3711269760993993197-2824336401141236696?l=vincentsanders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vincentsanders.blogspot.com/feeds/2824336401141236696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vincentsanders.blogspot.com/2009/11/fitting-everything-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/2824336401141236696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3711269760993993197/posts/default/2824336401141236696'/><link rel='alternate' type='text/html' href='http://vincentsanders.blogspot.com/2009/11/fitting-everything-in.html' title='Fitting Everything In'/><author><name>Vincent Sanders</name><uri>http://www.blogger.com/profile/02686407477776093281</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>
