<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CE8DQXcyfip7ImA9WhRVE0o.&quot;"><id>tag:blogger.com,1999:blog-22557003</id><updated>2012-01-12T14:54:30.996+02:00</updated><category term="linux" /><category term="technology" /><category term="finance" /><category term="lifehack" /><category term="python" /><category term="opinion" /><category term="analysis" /><category term="news" /><category term="capetown" /><category term="howto" /><category term="journal" /><category term="windows" /><category term="fail" /><category term="creations" /><category term="philosophy" /><category term="bash" /><category term="review" /><category term="how" /><title>Graham Poulter</title><subtitle type="html">Technical learnings for make benefit glorious blogosphere</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.grahampoulter.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.grahampoulter.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Graham Poulter</name><uri>https://profiles.google.com/116708940210757040686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qCayZZ6Uw3k/AAAAAAAAAAI/AAAAAAAACdk/WJxqm-UsVDo/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>27</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/grahampoulter" /><feedburner:info uri="grahampoulter" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>-33.936</geo:lat><geo:long>18.462</geo:long><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/3.0/" /><feedburner:emailServiceId>grahampoulter</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;DUQEQ388cSp7ImA9WhRSE0g.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-1842626738128927835</id><published>2011-11-15T09:00:00.000+02:00</published><updated>2011-11-15T13:41:42.179+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-15T13:41:42.179+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="how" /><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="windows" /><title>Faster Windows 7 under Ubuntu by using raw SSD access</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-YkFA6_tlSX4/TsJPtkwexSI/AAAAAAAACcQ/X8Cdi4_va-A/s1600/download.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/-YkFA6_tlSX4/TsJPtkwexSI/AAAAAAAACcQ/X8Cdi4_va-A/s200/download.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
This post is about how I made Windows 7 run fast as a guest under Ubuntu by running it from a raw partition of a Solid State Drive under&amp;nbsp;&lt;a href="https://www.virtualbox.org/"&gt;VirtualBox&lt;/a&gt;&amp;nbsp;4.1.6.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
This week I was given an &lt;a href="http://www.adata.com.tw/?action=product_feature&amp;amp;piid=33"&gt;ADATA S599 2.5" SATA II Solid State Drive&lt;/a&gt; in 115GB capacity from &lt;a href="http://www.mantech.co.za/"&gt;Mantech&lt;/a&gt; for my office workstation -- a 2008 &lt;a href="http://www.dell.com/us/dfb/p/precision-t5400/pd"&gt;Dell Precision T5400&lt;/a&gt; specced as quad-Xeon with 4GB RAM, and installed &lt;a href="http://releases.ubuntu.com/11.10/"&gt;Ubuntu 11.10 amd64 desktop&lt;/a&gt; on it. It now boots in 17 seconds, and the previously 30-second-long first-time login now takes less than 5 seconds. I use Python/Linux but most of the other devs use .NET/Windows so I require a Windows 7 virtual machine. &amp;nbsp;In fact, the slowness of my Windows 7 VM on a rotating drive was the main motivator for buying the SSD.&lt;br /&gt;
&lt;br /&gt;
I wanted Windows to take advantage of the &lt;a href="http://en.wikipedia.org/wiki/TRIM"&gt;TRIM&lt;/a&gt; command, to avoid the SSD slowing down once all its blocks have been written to. &amp;nbsp;I created an extra partition for windows during Ubuntu installation rather than have the VM run from a file, because I don't think TRIM issued by the guest OS would be passed down to the SSD if the virtual disk is a file on the host filesystem.&lt;br /&gt;
&lt;br /&gt;
To get ownership of the partition for VirtualBox, I created the following udev rule in &lt;i&gt;/etc/udev/rules.d/customdisk.rules&lt;/i&gt; which permanently gives&amp;nbsp;&lt;i&gt;graham&lt;/i&gt; write permission to the Windows partition which is&amp;nbsp;&lt;i&gt;/dev/sdb1&lt;/i&gt;&amp;nbsp;on my machine. &amp;nbsp;I ran &lt;i&gt;udevadm info -a -n sdb1&lt;/i&gt; to get the start and size attributes to prevent the rule matching any other sdb1. &amp;nbsp;The rule sets UDISKS_PRESENTATION_HIDE to prevent Nautilus from displaying the partition, so I can't corrupt it by&amp;nbsp;accidentally&amp;nbsp;mounting and writing to it while the VM is running.&lt;br /&gt;
&lt;br /&gt;
&lt;tt&gt;KERNEL=="sdb1", SUBSYSTEM=="block", ATTR{start}=="2048", ATTR{size}=="136716288", SYMLINK+="win7", OWNER="graham", GROUP="disk", ENV{UDISKS_PRESENTATION_HIDE}="1"&lt;/tt&gt;&lt;br /&gt;
&lt;br /&gt;
I ran the udevadm test to make the rule to take effect:&lt;br /&gt;
&lt;br /&gt;
&lt;tt&gt;sudo udevadm test "$(udevadm info --query=path --name=sdb1)"&lt;/tt&gt;&lt;br /&gt;
&lt;br /&gt;
Following Virtual Box Manual Chapter 9 on &lt;a href="https://www.virtualbox.org/manual/ch09.html#rawdisk"&gt;Using a raw host hard disk from a guest&lt;/a&gt; I first listed partitions to get the correct partition number:&lt;br /&gt;
&lt;br /&gt;
&lt;tt&gt;sudo VBoxManage internalcommands listpartitions -rawdisk /dev/sdb&lt;/tt&gt;&lt;br /&gt;
&lt;br /&gt;
And created a raw VMDK for partition 1 of sdb:&lt;br /&gt;
&lt;br /&gt;
&lt;tt&gt;sudo VBoxManage internalcommands createrawvmdk -filename /home/graham/.Virtualbox/RawDisks/sdb1.vmdk -rawdisk /dev/sdb  -partitions 1 -relative&lt;/tt&gt;&lt;br /&gt;
&lt;br /&gt;
From virtualbox I created a Windows 7 machine, selecting sdb1.vmdk as the disk. On first run of the VM I added the &lt;a href="http://www.mydigitallife.info/official-windows-7-sp1-iso-from-digital-river/"&gt;Official Windows 7 SP1 ISO from Digital River&lt;/a&gt; to the virtual CD/DVD drive, installed Windows, and installed VirtualBox guest editions with 3D enabled. VirtualBox setting changes included:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;System: Base Memory=1024MB, Enable IO APIC=Ticked, Processors=2&lt;/li&gt;
&lt;li&gt;Storage: SATA Controller: sdb1.vmdk: Solid-state drive=Ticked&lt;/li&gt;
&lt;li&gt;Display: Enable 3D and 2D Acceleration. Video Memory=256MB&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
The 3D isn't perfect: I disabled animations in guest's system settings, the Windows Experience benchmark crashes, and IE9 scrolling is jumpy (turned out to be an IE9 bug).&lt;br /&gt;
&lt;br /&gt;
But in general the VM is snappy and no longer slows down the Ubuntu host much.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22557003-1842626738128927835?l=blog.grahampoulter.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=UZ4pMTVQP2M:O-RG7rm95pI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=UZ4pMTVQP2M:O-RG7rm95pI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=UZ4pMTVQP2M:O-RG7rm95pI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=UZ4pMTVQP2M:O-RG7rm95pI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=UZ4pMTVQP2M:O-RG7rm95pI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=UZ4pMTVQP2M:O-RG7rm95pI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=UZ4pMTVQP2M:O-RG7rm95pI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=UZ4pMTVQP2M:O-RG7rm95pI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=UZ4pMTVQP2M:O-RG7rm95pI:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=UZ4pMTVQP2M:O-RG7rm95pI:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/UZ4pMTVQP2M" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.grahampoulter.com/2011/11/ubuntu-host-and-windows-7-virtualbox.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/1842626738128927835?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/1842626738128927835?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/UZ4pMTVQP2M/ubuntu-host-and-windows-7-virtualbox.html" title="Faster Windows 7 under Ubuntu by using raw SSD access" /><author><name>Graham Poulter</name><uri>https://profiles.google.com/116708940210757040686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qCayZZ6Uw3k/AAAAAAAAAAI/AAAAAAAACdk/WJxqm-UsVDo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-YkFA6_tlSX4/TsJPtkwexSI/AAAAAAAACcQ/X8Cdi4_va-A/s72-c/download.jpg" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>11 Adderley St, Cape Town 8000, South Africa</georss:featurename><georss:point>-33.9248685 18.4240553</georss:point><georss:box>-34.346497500000005 17.7923413 -33.5032395 19.055769299999998</georss:box><feedburner:origLink>http://blog.grahampoulter.com/2011/11/ubuntu-host-and-windows-7-virtualbox.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQGSHg7eSp7ImA9WhRTF0o.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-7198247899616713082</id><published>2011-11-08T20:46:00.000+02:00</published><updated>2011-11-08T20:52:09.601+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-08T20:52:09.601+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="howto" /><category scheme="http://www.blogger.com/atom/ns#" term="lifehack" /><title>Getting smoke smell out of a waterproof jacket</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-RedmHfDca-M/Trl1Zsda3dI/AAAAAAAACcE/bdj_6B009mg/s1600/250px-Water_repellent_shell_layer_jacket.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="198" src="http://1.bp.blogspot.com/-RedmHfDca-M/Trl1Zsda3dI/AAAAAAAACcE/bdj_6B009mg/s200/250px-Water_repellent_shell_layer_jacket.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
This is how I got rid of the smoke smell from my &lt;a href="http://www.firstascent.co.za/product-details.php?prodid=750&amp;amp;catid=245&amp;amp;level=3"&gt;First Ascent Flash Flood waterproof jacket&lt;/a&gt; after it was infused with campfire smoke from the Cape Point overnight trail last weekend. &amp;nbsp;The jacket uses "Vapour-Tex" breathable waterproofing, similar to Gore-Tex.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
Use&amp;nbsp;&lt;a href="http://www.nikwax.com/en-gb/products/productdetail.php?productid=4"&gt;Nikwax Tech Wash&lt;/a&gt;&amp;nbsp;non-detergent liquid cleaner, as it won't contain anything that could lodge between the fibers of the jacket's&amp;nbsp;&lt;a href="http://www.rei.com/expertadvice/articles/rainwear+dwr.html"&gt;Durable Water Repellant&lt;/a&gt; (DWR) coating and impede its performance.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Hand wash the garment in a basin filled with&lt;span style="background-color: transparent;"&gt;&amp;nbsp;"hand-hot" water using a capful of the wash liquid. &amp;nbsp;"Hand-hot" means the water should be no hotter than you can stand to immerse your bare hands in for washing the garment. &amp;nbsp; Soak it for about an hour, after which even the water smells of smoke.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="background-color: transparent;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
The Tech Wash bottle instructs rinsing the garment three times. &amp;nbsp;Use hand-hot water for all three rinses. &amp;nbsp;No need to soak on the first rinse. &amp;nbsp;Soak for 15 minutes on the second rinse. &amp;nbsp;Soak for 8+ hours on the third rinse.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
After the final rinse the jacket smelled faintly of smoke, and I considered hanging it out. &amp;nbsp;However, smoke particles get between the fluorocarbon fibres of the DWR layer, so I wanted it out entirely.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
So, wash again in hand-hot water, this time soaking it for 8+ hours. &amp;nbsp;Then do the triple rinse with hand-hot water: a quick first rinse, a 15-minute second rinse, and 8+ hour third rinse. &amp;nbsp; After all of that, there was no perceptible smell of smoke on the jacket. &amp;nbsp;It had been soaking wet for about 36 hours.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Hang the jacket out for a few hours to drip-dry, spray&amp;nbsp;&lt;a href="http://www.nikwax.com/en-gb/products/productdetail.php?productid=16"&gt;Nikwax TX Direct&lt;/a&gt;&amp;nbsp;all over the outside of the still-damp garment to maintain the durable water repellant layer, wipe off excess after a few minutes, then give the garment a day to dry properly.&lt;br /&gt;
&lt;span style="background-color: transparent;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent;"&gt;Finally, use heat to restore the DWR layer. &amp;nbsp;The usual recommendation is tumble-drying on low or medium, or ironing with a towel in-between (risky). &amp;nbsp;I used a hair-dryer in lieu of a tumble dryer, seems to work.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22557003-7198247899616713082?l=blog.grahampoulter.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=HQZk2NZBbLk:OZNEhyexF0k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=HQZk2NZBbLk:OZNEhyexF0k:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=HQZk2NZBbLk:OZNEhyexF0k:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=HQZk2NZBbLk:OZNEhyexF0k:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=HQZk2NZBbLk:OZNEhyexF0k:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=HQZk2NZBbLk:OZNEhyexF0k:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=HQZk2NZBbLk:OZNEhyexF0k:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=HQZk2NZBbLk:OZNEhyexF0k:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=HQZk2NZBbLk:OZNEhyexF0k:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=HQZk2NZBbLk:OZNEhyexF0k:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/HQZk2NZBbLk" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.grahampoulter.com/2011/11/getting-smoke-smell-out-of-waterproof.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/7198247899616713082?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/7198247899616713082?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/HQZk2NZBbLk/getting-smoke-smell-out-of-waterproof.html" title="Getting smoke smell out of a waterproof jacket" /><author><name>Graham Poulter</name><uri>https://profiles.google.com/116708940210757040686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qCayZZ6Uw3k/AAAAAAAAAAI/AAAAAAAACdk/WJxqm-UsVDo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-RedmHfDca-M/Trl1Zsda3dI/AAAAAAAACcE/bdj_6B009mg/s72-c/250px-Water_repellent_shell_layer_jacket.jpg" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Cape Town, South Africa</georss:featurename><georss:point>-33.9248685 18.4240553</georss:point><georss:box>-34.346497500000005 17.7923413 -33.5032395 19.055769299999998</georss:box><feedburner:origLink>http://blog.grahampoulter.com/2011/11/getting-smoke-smell-out-of-waterproof.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4NSH8-fCp7ImA9WhRTF0o.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-7293808881275324900</id><published>2011-10-27T11:51:00.001+02:00</published><updated>2011-11-08T20:46:39.154+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-08T20:46:39.154+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="howto" /><title>Logging the client IP behind Amazon ELB with Apache</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-aGMiJL7eRTA/TqktZiUmwBI/AAAAAAAACbw/CrhaWkLLClc/s1600/apache.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="105" src="http://4.bp.blogspot.com/-aGMiJL7eRTA/TqktZiUmwBI/AAAAAAAACbw/CrhaWkLLClc/s200/apache.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
How can&amp;nbsp;&lt;a href="http://httpd.apache.org/"&gt;Apache HTTP Server&lt;/a&gt;&amp;nbsp;log the actual remote client IP address when an&amp;nbsp;&lt;a href="http://aws.amazon.com/elasticloadbalancing/"&gt;Amazon Elastic Load Balancer&lt;/a&gt; (ELB) is proxying the client HTTP requests? &amp;nbsp;The solution below involves &lt;a href="http://httpd.apache.org/docs/2.2/mod/mod_setenvif.html"&gt;SetEnvIf&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
An ELB sets REMOTE_ADDR to the load balancer IP and sets the &lt;a href="http://en.wikipedia.org/wiki/X-Forwarded-For"&gt;X-Forwarded-For&lt;/a&gt;&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/List_of_HTTP_header_fields"&gt;HTTP header&lt;/a&gt; to a comma-delimited string of ip-addresses like&amp;nbsp;&lt;i&gt;client&lt;/i&gt;, &lt;i&gt;proxy1&lt;/i&gt;, &lt;i&gt;proxy2&lt;/i&gt;.&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/-Qo1uU4FvdNU/TqktdsxJemI/AAAAAAAACb4/ydMlWrn6uyU/s1600/aws.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="72" src="http://1.bp.blogspot.com/-Qo1uU4FvdNU/TqktdsxJemI/AAAAAAAACb4/ydMlWrn6uyU/s200/aws.jpg" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;
The various solutions I've seen&amp;nbsp;for logging client IP&amp;nbsp;suggest replacing &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;%h&lt;/span&gt; (for REMOTE_ADDR) in the NCSA common log format (&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;%h %l %u %t \"%r\" %&amp;gt;s %O&lt;/span&gt;) with the X-Forwarded-For header: &lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;LogFormat "\"%{X-Forwarded-For}i\" %l %u %t \"%r\" %&amp;gt;s %O xfwd_common&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
This approach has two problems:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Broken log formatting&lt;/b&gt;&lt;br /&gt;
Comma-separated IP addresses violate the &lt;a href="http://publib.boulder.ibm.com/tividd/td/ITWSA/ITWSA_info45/en_US/HTML/guide/c-logs.html#ncsa"&gt;NCSA common and combined log formats&lt;/a&gt;&amp;nbsp;and generally breaks applications that attempt to extract the log fields.&lt;br /&gt;
&lt;br /&gt;
Above I added&amp;nbsp;quotes around X-Forwarded-For to make it easier to extract by regex. &amp;nbsp; Supporting this modified format in&amp;nbsp;&lt;a href="http://www.splunk.com/"&gt;Splunk&lt;/a&gt; involves adapting the access-extractions &lt;a href="http://docs.splunk.com/Documentation/Splunk/latest/admin/transformsconf"&gt;transform&lt;/a&gt; to use&amp;nbsp;&lt;i&gt;[[qstring:clientip]]&lt;/i&gt;&amp;nbsp; (quoted string) instead of&amp;nbsp;&lt;i&gt;[[nspaces:clientip]] &lt;/i&gt;(no-spaces string).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Missing IP for unproxied requests&lt;/b&gt;&lt;br /&gt;
Direct or unproxied HTTP requests lack the X-Forwarded-For header, so the clientip is logged as "". &amp;nbsp; &amp;nbsp;If all clients connect via the load balancer this won't happen, but in practice developers and&amp;nbsp;monitoring agents&amp;nbsp;may want to skip the load balancer.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Solution for logging the true client IP&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
I've worked out how to fix the log formatting and log unproxied IPs by using SetEnvIf to log the remote client IP whether the request is direct or proxied:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;SetEnvIf REMOTE_ADDR "(.+)" CLIENTIP=$1&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;SetEnvIf X-Forwarded-For "^([0-9.]+)" CLIENTIP=$1&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;LogFormat "%{CLIENTIP}e %D %u %t \"%r\" %&amp;gt;s %O \"%{Referer}i\" \"%{User-Agent}i\"" trueip_combined&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
The first line sets the environment variable CLIENTIP to the value of REMOTE_ADDR.&lt;br /&gt;
The second line then overwrites CLIENTIP with the first component of X-Forwarded-For if available.&lt;br /&gt;
The third line defines the custom trueip_combined log format that uses CLIENTIP in place of %h.&lt;br /&gt;
It also uses %D in the place of the never-used ident field (%l)&amp;nbsp;to log request latency in microseconds.&lt;br /&gt;
&lt;br /&gt;
The one downside is that depending on how ELB treats X-Forwarded-For, it may allow clients to spoof their source IP.&lt;br /&gt;
&lt;br /&gt;
Hope people find this useful.&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22557003-7293808881275324900?l=blog.grahampoulter.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=4CFW74Dm3Pc:5LAUhG59yhM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=4CFW74Dm3Pc:5LAUhG59yhM:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=4CFW74Dm3Pc:5LAUhG59yhM:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=4CFW74Dm3Pc:5LAUhG59yhM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=4CFW74Dm3Pc:5LAUhG59yhM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=4CFW74Dm3Pc:5LAUhG59yhM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=4CFW74Dm3Pc:5LAUhG59yhM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=4CFW74Dm3Pc:5LAUhG59yhM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=4CFW74Dm3Pc:5LAUhG59yhM:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=4CFW74Dm3Pc:5LAUhG59yhM:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/4CFW74Dm3Pc" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.grahampoulter.com/2011/10/how-to-log-client-ip-from-apache-behind.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/7293808881275324900?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/7293808881275324900?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/4CFW74Dm3Pc/how-to-log-client-ip-from-apache-behind.html" title="Logging the client IP behind Amazon ELB with Apache" /><author><name>Graham Poulter</name><uri>https://profiles.google.com/116708940210757040686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qCayZZ6Uw3k/AAAAAAAAAAI/AAAAAAAACdk/WJxqm-UsVDo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-aGMiJL7eRTA/TqktZiUmwBI/AAAAAAAACbw/CrhaWkLLClc/s72-c/apache.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.grahampoulter.com/2011/10/how-to-log-client-ip-from-apache-behind.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04ESXY9fSp7ImA9WhdUE0g.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-6547621127916203970</id><published>2011-09-13T15:41:00.001+02:00</published><updated>2011-09-30T07:18:28.865+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-30T07:18:28.865+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="bash" /><category scheme="http://www.blogger.com/atom/ns#" term="creations" /><title>Show the current Git, Mercurial, Subversion or Bazaar branch in your prompt</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-qql-3EssIvk/TnBxe43saSI/AAAAAAAACaA/h3Npikzgjbw/s1600/images.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/-qql-3EssIvk/TnBxe43saSI/AAAAAAAACaA/h3Npikzgjbw/s200/images.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
This bash script prefixes the prompt with the branch name whenever the working directory is in a Git, Mercurial, Subversion or Bazaar branch. &amp;nbsp;The code is part of my&amp;nbsp;&lt;a href="http://hg.grahampoulter.com/bash-environ"&gt;bash-environ&lt;/a&gt;&amp;nbsp;package.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
The script modifies PS1 to reference the &lt;i&gt;branch&lt;/i&gt;&amp;nbsp;function which detects .git/.hg/.svn/.bzr version control systems and formats the branch name for the prompt. &amp;nbsp;&lt;i&gt;branch&lt;/i&gt;&amp;nbsp;minimises calls to external commands and avoids "bzr nick" entirely, so there should be no noticeable delay in displaying the prompt.&lt;br /&gt;
&lt;br /&gt;
Using&amp;nbsp;&lt;a href="http://poisonbit.wordpress.com/2010/12/22/dirname-ng-bash-is-slow-just-10-times-faster-than-c/"&gt;dirname-ng&lt;/a&gt;&amp;nbsp;(cl_dirname) will provide dirname as a function which is 10x faster than /usr/bin/dirname, for slightly faster check for .bzr, .git, .hg, .svn directories.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Update: Added Subversion checkout detection&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Update: Removed use of "bzr nick", examine branch.conf &amp;amp; location files directly&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Update: Used __git_ps1 pointed out by Anon. &amp;nbsp;Removed env vars.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Update: Quoted all values to prevent word splitting when path contains spaces.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; font-family: 'Bitstream Vera Sans Mono', monospace; font-size: 13px; overflow-x: auto; overflow-y: auto; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px;"&gt;&lt;span class="c" style="color: #888888;"&gt;## Print nickname for git/hg/bzr/svn version control in CWD&lt;/span&gt;
&lt;span class="c" style="color: #888888;"&gt;## Optional $1 of format string for printf, default "(%s) "&lt;/span&gt;
&lt;span class="k" style="color: #008800; font-weight: bold;"&gt;function &lt;/span&gt;be_get_branch &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="nb" style="color: #003388;"&gt;local &lt;/span&gt;&lt;span class="nv" style="color: #336699;"&gt;dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2" style="background-color: #fff0f0; color: #dd2200;"&gt;"$PWD"&lt;/span&gt;
  &lt;span class="nb" style="color: #003388;"&gt;local &lt;/span&gt;vcs
  &lt;span class="nb" style="color: #003388;"&gt;local &lt;/span&gt;nick
  &lt;span class="k" style="color: #008800; font-weight: bold;"&gt;while&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="s2" style="background-color: #fff0f0; color: #dd2200;"&gt;"$dir"&lt;/span&gt; !&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2" style="background-color: #fff0f0; color: #dd2200;"&gt;"/"&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;; &lt;span class="k" style="color: #008800; font-weight: bold;"&gt;do&lt;/span&gt;
&lt;span class="k" style="color: #008800; font-weight: bold;"&gt;    for &lt;/span&gt;vcs in git hg svn bzr; &lt;span class="k" style="color: #008800; font-weight: bold;"&gt;do&lt;/span&gt;
&lt;span class="k" style="color: #008800; font-weight: bold;"&gt;      if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; -d &lt;span class="s2" style="background-color: #fff0f0; color: #dd2200;"&gt;"$dir/.$vcs"&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb" style="color: #003388;"&gt;hash&lt;/span&gt; &lt;span class="s2" style="background-color: #fff0f0; color: #dd2200;"&gt;"$vcs"&lt;/span&gt; &amp;amp;&amp;gt;/dev/null; &lt;span class="k" style="color: #008800; font-weight: bold;"&gt;then&lt;/span&gt;
&lt;span class="k" style="color: #008800; font-weight: bold;"&gt;        case&lt;/span&gt; &lt;span class="s2" style="background-color: #fff0f0; color: #dd2200;"&gt;"$vcs"&lt;/span&gt; in
          git&lt;span class="o"&gt;)&lt;/span&gt; __git_ps1 &lt;span class="s2" style="background-color: #fff0f0; color: #dd2200;"&gt;"${1:-(%s) }"&lt;/span&gt;; &lt;span class="k" style="color: #008800; font-weight: bold;"&gt;return&lt;/span&gt;;;
          hg&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nv" style="color: #336699;"&gt;nick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k" style="color: #008800; font-weight: bold;"&gt;$(&lt;/span&gt;hg branch 2&amp;gt;/dev/null&lt;span class="k" style="color: #008800; font-weight: bold;"&gt;)&lt;/span&gt;;;
          svn&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nv" style="color: #336699;"&gt;nick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k" style="color: #008800; font-weight: bold;"&gt;$(&lt;/span&gt;svn info 2&amp;gt;/dev/null&lt;span class="se" style="background-color: #fff0f0; color: #0044dd;"&gt;\&lt;/span&gt;
                | grep -e &lt;span class="s1" style="background-color: #fff0f0; color: #dd2200;"&gt;'^Repository Root:'&lt;/span&gt;&lt;span class="se" style="background-color: #fff0f0; color: #0044dd;"&gt;\&lt;/span&gt;
                | sed -e &lt;span class="s1" style="background-color: #fff0f0; color: #dd2200;"&gt;'s#.*/##'&lt;/span&gt;&lt;span class="k" style="color: #008800; font-weight: bold;"&gt;)&lt;/span&gt;;;
          bzr&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="nb" style="color: #003388;"&gt;local &lt;/span&gt;&lt;span class="nv" style="color: #336699;"&gt;conf&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2" style="background-color: #fff0f0; color: #dd2200;"&gt;"${dir}/.bzr/branch/branch.conf"&lt;/span&gt; &lt;span class="c" style="color: #888888;"&gt;# normal branch&lt;/span&gt;
            &lt;span class="o"&gt;[[&lt;/span&gt; -f &lt;span class="s2" style="background-color: #fff0f0; color: #dd2200;"&gt;"$conf"&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nv" style="color: #336699;"&gt;nick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k" style="color: #008800; font-weight: bold;"&gt;$(&lt;/span&gt;grep -E &lt;span class="s1" style="background-color: #fff0f0; color: #dd2200;"&gt;'^nickname ='&lt;/span&gt; &lt;span class="s2" style="background-color: #fff0f0; color: #dd2200;"&gt;"$conf"&lt;/span&gt; | cut -d&lt;span class="s1" style="background-color: #fff0f0; color: #dd2200;"&gt;' '&lt;/span&gt; -f 3&lt;span class="k" style="color: #008800; font-weight: bold;"&gt;)&lt;/span&gt;
            &lt;span class="nv" style="color: #336699;"&gt;conf&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2" style="background-color: #fff0f0; color: #dd2200;"&gt;"${dir}/.bzr/branch/location"&lt;/span&gt; &lt;span class="c" style="color: #888888;"&gt;# colo/lightweight branch&lt;/span&gt;
            &lt;span class="o"&gt;[[&lt;/span&gt; -z &lt;span class="s2" style="background-color: #fff0f0; color: #dd2200;"&gt;"$nick"&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; -f &lt;span class="s2" style="background-color: #fff0f0; color: #dd2200;"&gt;"$conf"&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nv" style="color: #336699;"&gt;nick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2" style="background-color: #fff0f0; color: #dd2200;"&gt;"$(basename "&lt;/span&gt;&lt;span class="k" style="color: #008800; font-weight: bold;"&gt;$(&lt;/span&gt;&amp;lt; &lt;span class="nv" style="color: #336699;"&gt;$conf&lt;/span&gt;&lt;span class="k" style="color: #008800; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span class="s2" style="background-color: #fff0f0; color: #dd2200;"&gt;")"&lt;/span&gt;
            &lt;span class="o"&gt;[[&lt;/span&gt; -z &lt;span class="s2" style="background-color: #fff0f0; color: #dd2200;"&gt;"$nick"&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nv" style="color: #336699;"&gt;nick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2" style="background-color: #fff0f0; color: #dd2200;"&gt;"$(basename "&lt;/span&gt;&lt;span class="k" style="color: #008800; font-weight: bold;"&gt;$(&lt;/span&gt;readlink -f &lt;span class="s2" style="background-color: #fff0f0; color: #dd2200;"&gt;"$dir"&lt;/span&gt;&lt;span class="k" style="color: #008800; font-weight: bold;"&gt;)&lt;/span&gt;&lt;span class="s2" style="background-color: #fff0f0; color: #dd2200;"&gt;")"&lt;/span&gt;;;
        &lt;span class="k" style="color: #008800; font-weight: bold;"&gt;esac&lt;/span&gt;
        &lt;span class="o"&gt;[[&lt;/span&gt; -n &lt;span class="s2" style="background-color: #fff0f0; color: #dd2200;"&gt;"$nick"&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb" style="color: #003388;"&gt;printf&lt;/span&gt; &lt;span class="s2" style="background-color: #fff0f0; color: #dd2200;"&gt;"${1:-(%s) }"&lt;/span&gt; &lt;span class="s2" style="background-color: #fff0f0; color: #dd2200;"&gt;"$nick"&lt;/span&gt;
        &lt;span class="k" style="color: #008800; font-weight: bold;"&gt;return &lt;/span&gt;0
      &lt;span class="k" style="color: #008800; font-weight: bold;"&gt;fi&lt;/span&gt;
&lt;span class="k" style="color: #008800; font-weight: bold;"&gt;    done&lt;/span&gt;
&lt;span class="k" style="color: #008800; font-weight: bold;"&gt;    &lt;/span&gt;&lt;span class="nv" style="color: #336699;"&gt;dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2" style="background-color: #fff0f0; color: #dd2200;"&gt;"$(dirname "&lt;/span&gt;&lt;span class="nv" style="color: #336699;"&gt;$dir&lt;/span&gt;&lt;span class="s2" style="background-color: #fff0f0; color: #dd2200;"&gt;")"&lt;/span&gt;
  &lt;span class="k" style="color: #008800; font-weight: bold;"&gt;done&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="c" style="color: #888888;"&gt;## Add branch to PS1 (based on $PS1 or $1), formatted as $2&lt;/span&gt;
&lt;span class="nb" style="color: #003388;"&gt;export &lt;/span&gt;&lt;span class="nv" style="color: #336699;"&gt;GIT_PS1_SHOWDIRTYSTATE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;yes
&lt;span class="nb" style="color: #003388;"&gt;export &lt;/span&gt;&lt;span class="nv" style="color: #336699;"&gt;PS1&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2" style="background-color: #fff0f0; color: #dd2200;"&gt;"\$(be_get_branch "&lt;/span&gt;&lt;span class="nv" style="color: #336699;"&gt;$2&lt;/span&gt;&lt;span class="s2" style="background-color: #fff0f0; color: #dd2200;"&gt;")${PS1}"&lt;/span&gt;;&lt;/pre&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22557003-6547621127916203970?l=blog.grahampoulter.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=sEpSsaGBIDs:bHfa9XJyRQc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=sEpSsaGBIDs:bHfa9XJyRQc:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=sEpSsaGBIDs:bHfa9XJyRQc:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=sEpSsaGBIDs:bHfa9XJyRQc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=sEpSsaGBIDs:bHfa9XJyRQc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=sEpSsaGBIDs:bHfa9XJyRQc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=sEpSsaGBIDs:bHfa9XJyRQc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=sEpSsaGBIDs:bHfa9XJyRQc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=sEpSsaGBIDs:bHfa9XJyRQc:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=sEpSsaGBIDs:bHfa9XJyRQc:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/sEpSsaGBIDs" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.grahampoulter.com/2011/09/show-current-git-bazaar-or-mercurial.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/6547621127916203970?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/6547621127916203970?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/sEpSsaGBIDs/show-current-git-bazaar-or-mercurial.html" title="Show the current Git, Mercurial, Subversion or Bazaar branch in your prompt" /><author><name>Graham Poulter</name><uri>https://profiles.google.com/116708940210757040686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qCayZZ6Uw3k/AAAAAAAAAAI/AAAAAAAACdk/WJxqm-UsVDo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-qql-3EssIvk/TnBxe43saSI/AAAAAAAACaA/h3Npikzgjbw/s72-c/images.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.grahampoulter.com/2011/09/show-current-git-bazaar-or-mercurial.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0INRHw9fSp7ImA9Wx9RE00.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-1732763384515304578</id><published>2010-12-14T08:43:00.006+02:00</published><updated>2010-12-14T08:53:15.265+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-14T08:53:15.265+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="howto" /><title>DNS and GeoIP from the browser address bar</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_rswIZalsPuc/TQcTmILk_jI/AAAAAAAACQ8/ZqwfXeEovgY/s1600/geolocation.gif" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="185" src="http://2.bp.blogspot.com/_rswIZalsPuc/TQcTmILk_jI/AAAAAAAACQ8/ZqwfXeEovgY/s200/geolocation.gif" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;When analysing logs in &lt;a href="http://splunk.com/"&gt;Splunk&lt;/a&gt; for attacks and spammers I need to do reverse DNS lookups, geolocation of IP addresses, and whois lookups to identify the source. &amp;nbsp;Here is a shortcut that saves opening a terminal, by using a custom search engine to do the lookup straight from your web browser address bar.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Visiting &lt;a href="http://www.dnsstuff.com/"&gt;DNSStuff.com&lt;/a&gt;&amp;nbsp;adds a "Search Engine", at least in Chrome, which does reverse dns + geoip location from the address bar. &amp;nbsp;Set the "keyword" on the search engine to "ip" so by typing &amp;nbsp;"&lt;i&gt;ip 173.194.33.104&lt;/i&gt;" in the address bar redirects to &lt;a href="http://www.dnsstuff.com/tools/ipall/?tool_id=67&amp;amp;token=&amp;amp;toolhandler_redirect=0&amp;amp;ip=173.194.33.104"&gt;this page&lt;/a&gt;. &amp;nbsp;The search engine can also be added manually. The %s is replaced by address bar contents on pressing enter:&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;http://www.dnsstuff.com/tools/ipall/?tool_id=67&amp;amp;token=&amp;amp;toolhandler_redirect=0&amp;amp;ip=%s&lt;/span&gt;&lt;/blockquote&gt;The&amp;nbsp;DNSStuff&amp;nbsp;IP lookup is free but their other tools require subscription.&amp;nbsp;&lt;a href="http://domaintoip.com/"&gt;DomainToIP.com&lt;/a&gt;&amp;nbsp;has a free bookmarklet (bottom left of the page) that does forward lookup and whois on the site currently in your address bar. &amp;nbsp;Add a custom search engine with keyword "dns" so that typing "&lt;i&gt;dns www.google.com&lt;/i&gt;" in the address bar directs to&amp;nbsp;&lt;a href="http://domaintoip.com/ip.php?domain=www.google.com"&gt;this page&lt;/a&gt;.&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;http://domaintoip.com/ip.php?domain=%s&lt;/span&gt;&lt;/blockquote&gt;There are many other uses for custom search engines: I have custom search keywords to search the Python documentation, for Google's "I'm Feeling Lucky" button, for Splunk documentation, Google site-search for Wikipedia, and so forth.&lt;br /&gt;
&lt;br /&gt;
Note: In Splunk I also use the &lt;a href="http://splunkbase.splunk.com/apps/All/4.x/Add-On/app:Google+Maps"&gt;Google Maps App&lt;/a&gt;&amp;nbsp;and the &lt;a href="http://splunkbase.splunk.com/apps/All/app:Splunk%20reverse%20DNS%20lookup%20for%20fields"&gt;Reverse DNS App&lt;/a&gt;, but to do a single lookup its quicker just to use the address bar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22557003-1732763384515304578?l=blog.grahampoulter.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=uEiPLov8e5s:bBAa4Tk65Ow:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=uEiPLov8e5s:bBAa4Tk65Ow:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=uEiPLov8e5s:bBAa4Tk65Ow:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=uEiPLov8e5s:bBAa4Tk65Ow:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=uEiPLov8e5s:bBAa4Tk65Ow:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=uEiPLov8e5s:bBAa4Tk65Ow:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=uEiPLov8e5s:bBAa4Tk65Ow:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=uEiPLov8e5s:bBAa4Tk65Ow:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=uEiPLov8e5s:bBAa4Tk65Ow:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=uEiPLov8e5s:bBAa4Tk65Ow:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/uEiPLov8e5s" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.grahampoulter.com/2010/12/dns-and-geoip-from-browser-address-bar.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/1732763384515304578?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/1732763384515304578?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/uEiPLov8e5s/dns-and-geoip-from-browser-address-bar.html" title="DNS and GeoIP from the browser address bar" /><author><name>Graham Poulter</name><uri>https://profiles.google.com/116708940210757040686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qCayZZ6Uw3k/AAAAAAAAAAI/AAAAAAAACdk/WJxqm-UsVDo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_rswIZalsPuc/TQcTmILk_jI/AAAAAAAACQ8/ZqwfXeEovgY/s72-c/geolocation.gif" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.grahampoulter.com/2010/12/dns-and-geoip-from-browser-address-bar.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YMR388eSp7ImA9Wx5VFEg.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-532783391090404944</id><published>2010-09-26T15:22:00.005+02:00</published><updated>2010-10-07T14:39:46.171+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-07T14:39:46.171+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="howto" /><category scheme="http://www.blogger.com/atom/ns#" term="creations" /><title>Growing large crystals of Copper (II) Sulphate</title><content type="html">&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_rswIZalsPuc/TJ8KbxkhEkI/AAAAAAAACL0/S6qVmoAFtGU/s1600/0909-192158.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="195" src="http://1.bp.blogspot.com/_rswIZalsPuc/TJ8KbxkhEkI/AAAAAAAACL0/S6qVmoAFtGU/s200/0909-192158.jpg" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;My shiny&amp;nbsp;&lt;s&gt;&lt;a href="http://starcraft.wikia.com/wiki/Khaydarin_crystal"&gt;Khaydarin&lt;/a&gt;&lt;/s&gt;&amp;nbsp;CuSO&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;4 &lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;crystal!&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
As a kid I grew crystals as a hobby, mostly from&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Copper(II)_sulfate"&gt;copper (II) sulphate&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Potash_alum"&gt;alum&lt;/a&gt; (potassium aluminium sulphate). &amp;nbsp;I tried it again a couple of weeks ago, did it properly this time, and grew the one pictured to the right over about 4-5 days.&amp;nbsp;&lt;a href="http://www.waynesthisandthat.com/crystals.htm"&gt;Wayne's This and That&lt;/a&gt;&amp;nbsp;has some good first-hand info on hobbyist crystal growing, and I have come up with a variation on "slow cooling" which I shall call "fast cooling", to drastically speed up crystal growth at the expense of clarity. &amp;nbsp;The post describes my method, which only required about a R50 bill of materials.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;b&gt;Materials&lt;/b&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;2 small glass beakers (empty spice jars)&lt;/li&gt;
&lt;li&gt;Distilled water (R7 from Dischem)&lt;/li&gt;
&lt;li&gt;50g copper sulphate (R7 from Dischem)&lt;/li&gt;
&lt;li&gt;0.2mm nylon fish line (R6 from AllSports)&lt;/li&gt;
&lt;li&gt;Small funnel (R9 from Crazy Store)&lt;/li&gt;
&lt;li&gt;Glass ash tray (R10 from Crazy Store)&lt;/li&gt;
&lt;li&gt;Plastic spoon, toothpick, blob of prestik, cloth to cover jars.&lt;/li&gt;
&lt;/ol&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_rswIZalsPuc/TJ8Nww8ysdI/AAAAAAAACMM/CG8SNLbwScs/s1600/0909-191640.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/_rswIZalsPuc/TJ8Nww8ysdI/AAAAAAAACMM/CG8SNLbwScs/s320/0909-191640.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;b&gt;Warning&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
Copper sulphate is poisonous, tastes horrible, and the solution stains everything porous. It even precipitates a copper coating onto steel spoons. &amp;nbsp;Copper sulphate stains can be removed from cotton with "peroxy"-type stain removers, and take weeks to come out from under your fingernails. On the plus side, copper sulphate is anti-fungal which is why pharmacies stock it.&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;b&gt;Instructions&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Grow a seed crystal&lt;/li&gt;
&lt;ol&gt;&lt;li&gt;Make a small amount of super-saturated solution (steps 2.1-2.5 with smaller quantities)&lt;/li&gt;
&lt;li&gt;Fill the glass ashtray about 5mm deep with solution&lt;/li&gt;
&lt;li&gt;Use the fridge to cool it down&lt;/li&gt;
&lt;li&gt;After 3-12 hours pick out a seed crystal with tweezers: either a single 2-4mm crystal, or a clump grown overnight.&lt;/li&gt;
&lt;li&gt;Tie the crystal to a length of nylon fishing line using a slip knot, or a reef knot and trimming excess length.&lt;/li&gt;
&lt;/ol&gt;&lt;li&gt;Make a supersaturated solution&lt;/li&gt;
&lt;ol&gt;&lt;li&gt;Heat a mostly-full spice jar of distilled water in the microwave at medium power, watching like a hawk to avoid boiling it.&lt;/li&gt;
&lt;li&gt;Add about 25g of copper sulphate (add more if it all dissolved)&lt;/li&gt;
&lt;li&gt;Stir with plastic spoon till no more dissolves (takes about 2 minutes)&lt;/li&gt;
&lt;li&gt;Pour solution into the second jar, leaving the dregs behind.&lt;/li&gt;
&lt;li&gt;Place solution in the freezer for 15-20 minutes (or fridge for longer) to cool it down.&lt;/li&gt;
&lt;li&gt;Suspend the seed in the jar: &amp;nbsp;hang it over the toothpick, secure with prestik, and adjust so that the crystal doesn't touch the jar, then cover with a cloth.&lt;/li&gt;
&lt;/ol&gt;&lt;li&gt;Grow the crystal: takes 10 minutes every 12 hours&lt;/li&gt;
&lt;ol&gt;&lt;li&gt;The seed should have grown and there should also be a mat of crystals at the bottom of the jar. The solution is now merely saturated.&lt;/li&gt;
&lt;li&gt;Remove the seed and pour about 75% of the saturated solution into a clean jar.&lt;/li&gt;
&lt;li&gt;Supersaturate the remaining 25% by microwaving on low power, stirring to dissolve residue, and maybe cool it in the freezer for a bit. &amp;nbsp;If there was no mat of crystals on the bottom to dissolve, add a teaspoon of copper sulphate.&lt;/li&gt;
&lt;li&gt;Add the supersaturated solution to the saturated solution, leaving the dregs behind.&lt;/li&gt;
&lt;li&gt;Suspend the seed crystal again and wait 8-12 hours.&lt;/li&gt;
&lt;/ol&gt;&lt;/ol&gt;&lt;br /&gt;
&lt;div&gt;&lt;b&gt;Tips&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Nylon line prevents new crystals forming, and needs to be thin (0.2mm) to tie up a seed crystal. &amp;nbsp;According to Wayne one can form a seed crystal directly on a thicker nylon line to avoid having a fuzzy core in an otherwise clear, slow-grown crystal.&lt;/li&gt;
&lt;li&gt;Copper sulphate solubility varies greatly with temperature, and takes ages to evaporate unless you have warm, filtered air blowing over a large-diameter beaker, preferably sitting in a warm thermostat-controlled bath. &amp;nbsp;Too much effort to set up, so I supersaturated the solution every 12 hours instead.&lt;/li&gt;
&lt;li&gt;The surface of a finished crystal dehydrates after a while, making it lose its lustre. Complete dehydration would turn the CuS0&lt;span class="Apple-style-span" style="font-size: small;"&gt;4&lt;/span&gt;.5H&lt;span class="Apple-style-span" style="font-size: small;"&gt;2&lt;/span&gt;O crystal to white powder. &amp;nbsp;May as well store the crystal suspended in solution, or in an airtight jar with copper sulphate powder on the bottom to stabilise the humidity.&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22557003-532783391090404944?l=blog.grahampoulter.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=QTm5wRdFQ7s:EJBU46dMxDk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=QTm5wRdFQ7s:EJBU46dMxDk:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=QTm5wRdFQ7s:EJBU46dMxDk:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=QTm5wRdFQ7s:EJBU46dMxDk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=QTm5wRdFQ7s:EJBU46dMxDk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=QTm5wRdFQ7s:EJBU46dMxDk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=QTm5wRdFQ7s:EJBU46dMxDk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=QTm5wRdFQ7s:EJBU46dMxDk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=QTm5wRdFQ7s:EJBU46dMxDk:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=QTm5wRdFQ7s:EJBU46dMxDk:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/QTm5wRdFQ7s" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.grahampoulter.com/2010/09/how-to-grow-large-copper-sulphate.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/532783391090404944?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/532783391090404944?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/QTm5wRdFQ7s/how-to-grow-large-copper-sulphate.html" title="Growing large crystals of Copper (II) Sulphate" /><author><name>Graham Poulter</name><uri>https://profiles.google.com/116708940210757040686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qCayZZ6Uw3k/AAAAAAAAAAI/AAAAAAAACdk/WJxqm-UsVDo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_rswIZalsPuc/TJ8KbxkhEkI/AAAAAAAACL0/S6qVmoAFtGU/s72-c/0909-192158.jpg" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://blog.grahampoulter.com/2010/09/how-to-grow-large-copper-sulphate.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YDQXs9cCp7ImA9Wx5VFEg.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-4348022487937572853</id><published>2010-07-12T16:45:00.010+02:00</published><updated>2010-10-07T14:39:30.568+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-07T14:39:30.568+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="analysis" /><category scheme="http://www.blogger.com/atom/ns#" term="finance" /><title>Calculating the true cost of car ownership</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_rswIZalsPuc/TEbjvqdIa8I/AAAAAAAACJQ/Mt4wLYNt3vM/s1600/Ford_Fiesta_mk6_hatchback_car.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="123" src="http://2.bp.blogspot.com/_rswIZalsPuc/TEbjvqdIa8I/AAAAAAAACJQ/Mt4wLYNt3vM/s200/Ford_Fiesta_mk6_hatchback_car.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;In December 2008 I bought my 2004 model-year, 80000km Ford Fiesta 1.6i Ambiente for R72,800, freshly serviced. It now has 99,100km on the clock and went in early for the 100,000km service due to a fault that will yet cost me a couple grand more to get fixed properly.&lt;br /&gt;
&lt;br /&gt;
Here are the costs so far. Maintenance includes the service, two front tyres and wheel alignment, a battery, car washing, and a couple of random repairs.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Parts &amp;amp; Maintenance: R4,539&lt;/li&gt;
&lt;li&gt;Licensing: R872&lt;/li&gt;
&lt;li&gt;Petrol: R11,854&lt;/li&gt;
&lt;li&gt;Parking: R410&lt;/li&gt;
&lt;li&gt;Fines: R615&lt;/li&gt;
&lt;li&gt;Santam 3/F/T insurance: R2,989&lt;/li&gt;
&lt;/ul&gt;Total cost: R21,279&lt;br /&gt;
&lt;br /&gt;
But there's more: the car's current book value is R59,200 according to Santam, a depreciation of R13,600 since purchasing, bringing my total costs incurred during ownership to R34,879. Divide by 19,100km travel gives a complete running cost of R1.826 per kilometer.  Yet of this cost, petrol only makes up 62c.&lt;br /&gt;
&lt;br /&gt;
So, at least for me, petrol is only one-third of the all the costs I've incurred owning a car. &amp;nbsp;Note: I've include costs not part of proper Total Cost of Ownership: namely avoidable costs (fines/parking) and mileage-dependent costs (petrol,repairs).&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Edit: Added insurance costs split out licensing as Alapan suggested, qualified total as "costs incurred".&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22557003-4348022487937572853?l=blog.grahampoulter.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=F8-SZP43sIA:lkOsjjpgs60:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=F8-SZP43sIA:lkOsjjpgs60:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=F8-SZP43sIA:lkOsjjpgs60:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=F8-SZP43sIA:lkOsjjpgs60:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=F8-SZP43sIA:lkOsjjpgs60:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=F8-SZP43sIA:lkOsjjpgs60:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=F8-SZP43sIA:lkOsjjpgs60:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=F8-SZP43sIA:lkOsjjpgs60:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=F8-SZP43sIA:lkOsjjpgs60:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=F8-SZP43sIA:lkOsjjpgs60:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/F8-SZP43sIA" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.grahampoulter.com/2010/07/calculating-true-cost-of-car-ownership.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/4348022487937572853?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/4348022487937572853?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/F8-SZP43sIA/calculating-true-cost-of-car-ownership.html" title="Calculating the true cost of car ownership" /><author><name>Graham Poulter</name><uri>https://profiles.google.com/116708940210757040686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qCayZZ6Uw3k/AAAAAAAAAAI/AAAAAAAACdk/WJxqm-UsVDo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_rswIZalsPuc/TEbjvqdIa8I/AAAAAAAACJQ/Mt4wLYNt3vM/s72-c/Ford_Fiesta_mk6_hatchback_car.jpg" height="72" width="72" /><thr:total>5</thr:total><feedburner:origLink>http://blog.grahampoulter.com/2010/07/calculating-true-cost-of-car-ownership.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUERHk5fyp7ImA9WhdWGUk.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-6066979767648969856</id><published>2010-07-09T17:22:00.010+02:00</published><updated>2011-09-13T21:30:05.727+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-13T21:30:05.727+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="howto" /><title>Reducing 3G data consumption when tethered</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/_rswIZalsPuc/TKSlVPwNzUI/AAAAAAAACNE/FSLibzzwn0I/s1600/tethering_30_leak_2.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/_rswIZalsPuc/TKSlVPwNzUI/AAAAAAAACNE/FSLibzzwn0I/s200/tethering_30_leak_2.png" width="133" /&gt;&lt;/a&gt;&lt;/div&gt;
My new place doesn't have ADSL yet, so I tethered my 3G iPhone to the computer. As a result, this post is about ways to make the computer sip bandwidth instead of guzzle it, and the changing break-even price between 3G and ADSL in South Africa.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;Since I'm on MTN I needed to download a special config to enable tethering for the iPhone 3G, which is available from &lt;a href="http://wan.to/iphone/"&gt;http://wan.to/iphone/&lt;/a&gt;.&amp;nbsp; Here's a how-to for &lt;a href="http://www.ubuntugeek.com/iphone-tethering-on-ubuntu-9-10-karmic.html"&gt;iPhone tethering in Ubuntu&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
But 3G bandwidth in South Africa is expensive: &lt;a href="http://www.mtn.co.za/FindaPlan/Pages/DataBun.aspx"&gt;R80 for a 100MB MTN bundle &lt;/a&gt;(although its cheaper in bulk: R389 for a 2GB MTN bundle). The first time I plugged the phone into Windows the OS grabbed 40MB for updates.  After that I did all I could to minimise bandwidth consumption:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Operating System Tweaks&lt;/b&gt; &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Disable automatic download of operating system updates.&lt;/li&gt;
&lt;li&gt;If using Windows, disable 3rd-parter auto-updaters using &lt;a href="http://www.piriform.com/ccleaner"&gt;CCleaner&lt;/a&gt; (disable Flash, Java,  Google updaters and any others)&lt;/li&gt;
&lt;li&gt;Monitor TCP connections to see if any unexpected services  are using the internet and turn them off. &amp;nbsp;Use&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Lsof"&gt;&lt;i&gt;lsof -i&lt;/i&gt;&lt;/a&gt;  on linux, &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb897437.aspx"&gt;TcpView&lt;/a&gt;&amp;nbsp;&lt;i&gt;or &lt;a href="http://www.netlimiter.com/"&gt;Netlimiter Free&lt;/a&gt;&amp;nbsp;(thanks Sam)&lt;/i&gt; on Windows.&lt;/li&gt;
&lt;li&gt;In iTunes, turn off update checking and change the default Podcast settings to "check manually" and never automatically download episodes!&amp;nbsp; That was another 20MB downloaded behind my back...&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;Firefox Preferences &lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Disable Firefox update and add-on updates.&lt;/li&gt;
&lt;li&gt;Uncheck the &lt;i&gt;Load images automatically&lt;/i&gt; checkbox. Text-only default saves a &lt;i&gt;lot&lt;/i&gt; of bandwidth: I'm not going to pay to see sidebar ads.&lt;/li&gt;
&lt;li&gt;Install &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/433/"&gt;FlashBlock&lt;/a&gt; and &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1865/"&gt;AdBlock Plus&lt;/a&gt; add-ons, to prevent downloading random content.&lt;/li&gt;
&lt;li&gt;Install &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/59/"&gt;Firefox User Agent Switcher&lt;/a&gt; to pretend to be a mobile browser and get smaller mobile versions of websites.&amp;nbsp; If pretending to be an iPhone, be aware that Firefox is &lt;i&gt;not&lt;/i&gt; compatible with some iPhone-only webapps.&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;Google Chrome Options&lt;/b&gt; &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;In Options, "Under the bonnet", disable checking for updates, and various things like search-completion and DNS prefetching.&lt;/li&gt;
&lt;li&gt;In&amp;nbsp; "Content settings" select "Do not show any images" and "Do not allow any sites to use plug-ins"&lt;/li&gt;
&lt;li&gt;Start Google Chrome with &lt;i&gt;--user-agent="Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543 Safari/419.3" &lt;/i&gt;to pretend its an iPhone&lt;i&gt;. &lt;/i&gt;Chrome uses WebKit and will work with many iPhone webapps.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
With this setup I can do searching, mail and news-checking on PC tethered to the phone, without spending hundreds of rands for 3G bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;The iPhone is &lt;i&gt;faster&lt;/i&gt; tethered??&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The strangest thing is that iPhone 3G internet suddenly gets &lt;i&gt;fast &lt;/i&gt;when I tether it.&amp;nbsp; Safari on the phone at the same desk takes a while to load a heavy page, but plug the phone into the PC and use the PC browser and everything comes down at 500kbps.&amp;nbsp; I should double-check.&amp;nbsp; Does MTN have some way of knowing whether the phone is tethered and making 3G slow for mobile phones but fast when used like a 3G modem? &amp;nbsp; If so, is there a way for the iPhone to pretend its tethered when its not?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Comparing the cost of ADSL and 3G&lt;/b&gt; &lt;br /&gt;
&lt;br /&gt;
A &lt;a href="http://www.telkom.co.za/common/pricelist/prices/local/TELKOMCLOSER_CALLING_PLANS.HTML"&gt;Telkom Closer 2 calling plan&lt;/a&gt; (free installation and free off-peak calls) is R170 per month, plus R200 pm for an &lt;a href="http://www.mweb.co.za/adsl/"&gt;MWEB All-in-One 2GB ADSL&lt;/a&gt; package - total of R370 per month.&amp;nbsp; That is &lt;i&gt;almost as expensive&lt;/i&gt; as adding MTN's 2GB data bundle for R389 assuming an existing contract.&amp;nbsp; For more than 2GB per month, ADSL will be far cheaper, since R519 will buy the R170 Closer 2 line and R349 MWEB all-in-one uncapped ADSL at 384kbps.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Edit: Added iTunes podcast-disabling, and section on Google Chrome.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22557003-6066979767648969856?l=blog.grahampoulter.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=sKHps_rN9i8:B67fZNG3iWc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=sKHps_rN9i8:B67fZNG3iWc:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=sKHps_rN9i8:B67fZNG3iWc:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=sKHps_rN9i8:B67fZNG3iWc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=sKHps_rN9i8:B67fZNG3iWc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=sKHps_rN9i8:B67fZNG3iWc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=sKHps_rN9i8:B67fZNG3iWc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=sKHps_rN9i8:B67fZNG3iWc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=sKHps_rN9i8:B67fZNG3iWc:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=sKHps_rN9i8:B67fZNG3iWc:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/sKHps_rN9i8" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.grahampoulter.com/2010/07/how-to-reduce-3g-bandwidth-usage-and-3g.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/6066979767648969856?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/6066979767648969856?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/sKHps_rN9i8/how-to-reduce-3g-bandwidth-usage-and-3g.html" title="Reducing 3G data consumption when tethered" /><author><name>Graham Poulter</name><uri>https://profiles.google.com/116708940210757040686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qCayZZ6Uw3k/AAAAAAAAAAI/AAAAAAAACdk/WJxqm-UsVDo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_rswIZalsPuc/TKSlVPwNzUI/AAAAAAAACNE/FSLibzzwn0I/s72-c/tethering_30_leak_2.png" height="72" width="72" /><thr:total>5</thr:total><feedburner:origLink>http://blog.grahampoulter.com/2010/07/how-to-reduce-3g-bandwidth-usage-and-3g.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04BQn8zfCp7ImA9Wx5VGUo.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-2307823304691145471</id><published>2010-04-18T19:55:00.010+02:00</published><updated>2010-10-13T15:19:13.184+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-13T15:19:13.184+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="review" /><title>The Panasonic Lumix DMC-TZ8/ZS5 Super-Zoom Camera</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_rswIZalsPuc/S8s73M1-aqI/AAAAAAAABmQ/RnpiNBBwmZo/s1600/panasonic_lumix_dmc_tz8_review-275x201.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="145" src="http://2.bp.blogspot.com/_rswIZalsPuc/S8s73M1-aqI/AAAAAAAABmQ/RnpiNBBwmZo/s200/panasonic_lumix_dmc_tz8_review-275x201.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;For my trip to Zurich I bought a Panasonic Lumix DMC-ZS5, which was released in March 2010. &amp;nbsp;Here are my Picasa albums for &lt;a href="http://picasaweb.google.com/graham.poulter/Zurich"&gt;Zurich&lt;/a&gt; and my later trip to &lt;a href="http://picasaweb.google.com/graham.poulter/TygerbergZoo"&gt;Tygerberg Zoo&lt;/a&gt; in Cape Town taken with the DMC-ZS5 (DMC-TZ8 in Europe).&lt;br /&gt;
&lt;br /&gt;
Here are some of the reviews by&amp;nbsp;&lt;a href="http://www.photographyblog.com/reviews/panasonic_lumix_dmc_tz8_review/"&gt;photographyblog&lt;/a&gt;,&amp;nbsp;&lt;a href="http://www.dpreview.com/news/1001/10012604panazs5.asp"&gt;dpreview&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://www.panasonic.net/avc/lumix/compact/zs5_tz8/index.html"&gt;Panasonic's product page&lt;/a&gt;. &amp;nbsp;The product page gives a summary of the camera's vital stats and features. &amp;nbsp;Below are my findings from taking the camera on real-life overseas travel for a week.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;On the confusing naming, I think ZS implies "Super Zoom" and TZ means "Travel Zoom". &amp;nbsp; The &amp;nbsp;ZS5 is the US camera specially imported by &lt;a href="http://www.sacamera.co.za/"&gt;SA Camera&lt;/a&gt;, because the European version, the TZ8, is not yet &amp;nbsp;available in South Africa through the Panasonic distribution channels. The difference is the charger (US vs EU plug) and NTSC vs PAL TV-out. &amp;nbsp;The charger is a pain in Europe where travel adaptors feature a rim that prevents the US pins on the charger from actually reaching the socket. &amp;nbsp;Fortunately the lithium battery lasted over 330 photos and a few minutes of movie (Friday to Monday), and only needed 10 minutes of charging at a Zurich camera shop to last the rest of Monday.&lt;br /&gt;
&lt;br /&gt;
The ZS5/TZ8 is also the baby brother of the ZS7/TZ10, the difference being a smaller LCD, lack of RAW recording, lack of AVCHD encoding for hi-def video, and lack of a (power-sucking) GPS to geocode all your photos for you. &amp;nbsp; Nonetheless the ZS5/TZ8 is a great travel companion: small and lightweight, it's happy to do all the hard thinking for you, and has great zoom for zoo visits, and you can even tell it what time zone and location tag to use for the dates of your trip. &amp;nbsp; Lastly, the ZS5/TZ8 and ZS7/TZ10 are successor to the ZS3/TZ7 that was released in early 2009.&lt;br /&gt;
&lt;br /&gt;
Most of the time I stick with the iA or "Intelligent Auto" mode, which on half-press will select a scene type (portrait, scenery, action, night portrait etc), detect normal vs macro mode, select ISO rating, shutter speed and aperture, flash mode, picks out the subjects to focus on. &amp;nbsp;iA mode does have a few parameters including maximum ISO rating, forcing flash-off the resolution / aspect ratio (4:3, 16:9 or 3:2). &amp;nbsp; If I don't like the settings, I release the button, half-press again and iA will often pick different settings, for example focusing on the zoo animal instead of the cage. &amp;nbsp; Specifying "ISO-max 400" is handy for auto-mode because the higher ISO levels that it might pick - up to ISO 3200 for a motion-shot in the dark - are too grainy to be of any use. &lt;br /&gt;
&lt;br /&gt;
The zoom is also pretty smart: the zoom toggle maxes out at 12x zoom, but hitting the extended zoom button will let it go up to 16x zoom at a lower resolution (center of CCD), and hitting the button again will digitally zoom to 32x. &amp;nbsp; Once more goes all the way back to 1x zoom (wide-angle). &amp;nbsp;The image stabiliser ensures photos are not blurry except if the subject was stationary at half-press (slow shutter selected), but then starts moving after the half-press. &amp;nbsp;If it is very dark and your hands aren't steady the camera tries to compensate by using the highest ISO and fastest shutter feasible, for a dark and grainy but only slightly blurry photo. If you use a tripod for the night scenery it will select a longer exposure and take a good photo.&lt;br /&gt;
&lt;br /&gt;
I also use the P or "Programmable" often in situations where iA gets it wrong, typically with funny lighting or macro scenes. &amp;nbsp;I prefer programmable mode to selecting one of the three-dozen specific scene modes. P-mode will still select the shutter, aperture, ISO and auto-focus, but it has a quick-menu to &amp;nbsp;configure all the scene related settings like exposure, white balance, macro mode, ISO mode (specific ISO or auto+ISO-max) flash mode, auto-focus mode, stabiliser mode and dozens of other settings.&amp;nbsp; The P mode has an option to record 5 seconds of sound alongside the photo, which is handy for recording captions you would otherwise forget, like plant names.&lt;br /&gt;
&lt;br /&gt;
For special shots I use manual (M), shutter-priority (S) or aperture-priority (A) modes. S-mode has manual shutter speed and auto-aperture, useful for long nigh-time exposures taken with a tripod. &amp;nbsp;Aperture-priority mode is the opposite and is useful for shallow-field or deep-field shots. Manual mode takes manual shutter, aperture and exposure, but will still do automatic ISO, white balance and such if you let it. &lt;br /&gt;
&lt;br /&gt;
The image quality is fine if you don't let the ISO go above 400. &amp;nbsp;The small high-density CCD has a lot more per-pixel noise than the small low-megapixel CCD's of older cameras or the large CCDs of the four-thirds DSLRs. &amp;nbsp;But the noise is mainly noticeable at 1:1 zoom - you don't see it at screen size, scaled down for web albums, or in print.&amp;nbsp; The movie quality is meh, it's ok provided you pan very slowly, but so far I haven't taken anything worth uploading.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
I do have a reliability complaint, in that the LCD is easily scratched by just one grain of sand. &amp;nbsp;So do not let the camera anywhere near sand or dirt. &amp;nbsp;Also, I expect that to sit on the camera or drop it once will be the end of it. &amp;nbsp;It's also susceptible to humidity, temperature and pressure changes (well, to condensation), so I'm concerned that the dirt and dew found on overnight hikes will bring the camera to an early death if I regularly take hiking. &amp;nbsp; So far the camera is two weeks in and going strong.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22557003-2307823304691145471?l=blog.grahampoulter.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=Ziyr9knlvAE:8PyMU1UgAjs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=Ziyr9knlvAE:8PyMU1UgAjs:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=Ziyr9knlvAE:8PyMU1UgAjs:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=Ziyr9knlvAE:8PyMU1UgAjs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=Ziyr9knlvAE:8PyMU1UgAjs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=Ziyr9knlvAE:8PyMU1UgAjs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=Ziyr9knlvAE:8PyMU1UgAjs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=Ziyr9knlvAE:8PyMU1UgAjs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=Ziyr9knlvAE:8PyMU1UgAjs:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=Ziyr9knlvAE:8PyMU1UgAjs:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/Ziyr9knlvAE" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.grahampoulter.com/2010/04/panasonic-lumix-dmc-tz8zs5-travel-zoom.html#comment-form" title="10 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/2307823304691145471?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/2307823304691145471?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/Ziyr9knlvAE/panasonic-lumix-dmc-tz8zs5-travel-zoom.html" title="The Panasonic Lumix DMC-TZ8/ZS5 Super-Zoom Camera" /><author><name>Graham Poulter</name><uri>https://profiles.google.com/116708940210757040686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qCayZZ6Uw3k/AAAAAAAAAAI/AAAAAAAACdk/WJxqm-UsVDo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_rswIZalsPuc/S8s73M1-aqI/AAAAAAAABmQ/RnpiNBBwmZo/s72-c/panasonic_lumix_dmc_tz8_review-275x201.jpg" height="72" width="72" /><thr:total>10</thr:total><feedburner:origLink>http://blog.grahampoulter.com/2010/04/panasonic-lumix-dmc-tz8zs5-travel-zoom.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IFRno6fCp7ImA9Wx5VGUo.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-7985253841156874240</id><published>2010-03-31T16:27:00.008+02:00</published><updated>2010-10-13T15:11:57.414+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-13T15:11:57.414+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="howto" /><title>Back up Windows server with cwRsync and rsnapshot</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_rswIZalsPuc/TKSkhTfYDfI/AAAAAAAACNA/jUuEL834G4E/s1600/rsync_ssh_logo.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="125" src="http://4.bp.blogspot.com/_rswIZalsPuc/TKSkhTfYDfI/AAAAAAAACNA/jUuEL834G4E/s200/rsync_ssh_logo.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;Here is how to backup data from Windows servers to a Linux backup server using&amp;nbsp; &lt;a href="http://samba.anu.edu.au/rsync/"&gt;rsync&lt;/a&gt;.&amp;nbsp; Specifically using &lt;a href="http://www.itefix.no/i2/node/10650"&gt;cwRsync&lt;/a&gt; server (a Cygwin + rsync package) running on the Windows server, and &lt;a href="http://rsnapshot.org/"&gt;rsnapshot&lt;/a&gt; running on the Linux backup server.&amp;nbsp; This was tested with rsync 3.0.7 and rsnapshot 1.3.1 on Linux (CentOS 5.4), and cwRsync 4.0.4 (includes rsync 3.0.7) on Windows (Server 2008).&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
First download the &lt;a href="http://itefix.no/i2/download"&gt;cwRsync server package&lt;/a&gt; and install it on the Windows server.&amp;nbsp; It will attempt to create a service user for cwRsync, but the user creation did not work for me.&amp;nbsp; Rather specify the name and password of an existing service account (specially-created if necessary) for &lt;i&gt;RsyncServer&lt;/i&gt; service to run as.&amp;nbsp; Use the services panel to configure &lt;i&gt;RsyncServer&lt;/i&gt; to run automatically on boot.&amp;nbsp; Before starting the service, configure the &lt;i&gt;rsyncd.conf &lt;/i&gt;along these lines:&lt;br /&gt;
&lt;blockquote&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;uid = 0&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;gid = 0&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;use chroot = false&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;strict modes = false&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;hosts allow = backups.example.com&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;log file = rsyncd.log&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;[examplemodule]&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;path = /cygdrive/c/example/path/to/back/up&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;read only = true&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;transfer logging = yes&lt;/span&gt;&lt;/blockquote&gt;The &lt;i&gt;uid=0&lt;/i&gt; and &lt;i&gt;gid=0&lt;/i&gt; must be added to avoid the&amp;nbsp;&lt;a class="ext-link" href="http://www.itefix.no/i2/node/11817"&gt;&lt;span class="icon"&gt;&lt;/span&gt;@ERROR Invalid UID nobody&lt;/a&gt;. The &lt;i&gt;hosts allow&lt;/i&gt; line is to only allow the backup server to access the data.&amp;nbsp; Configure rsync modules for each local resource to back up, using Cygwin paths (/cygdrive/c).&amp;nbsp; You can test the &lt;i&gt;rsyncd.conf&lt;/i&gt; by running rsync from the cwRsync "ICW" directory in Program Files and attempting to rsync from it on the Linux server:&lt;br /&gt;
&lt;blockquote style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;bin\rsync.exe --config=rsyncd.conf --daemon --no-detach&lt;/span&gt;&lt;/blockquote&gt;On the Linux backup server, install rsnapshot, and see the &lt;a href="http://www.debian-administration.org/articles/217"&gt;Debian rsnapshot article&lt;/a&gt; for an example of &lt;i&gt;/etc/cron.d/rsnapshot&lt;/i&gt; to perform the hourly, daily, weekly backups.&amp;nbsp; By default there are 6 hourly snapshots (one every 4 hours), 7 daily snapshots, 4 weekly snapshots and 3 monthly snapshots.&amp;nbsp;&amp;nbsp; For example, &lt;i&gt;/etc/rsnapshot.conf&lt;/i&gt; would need a line like this to get data from the windows server.&amp;nbsp; Type tabs between the items, not spaces:&lt;br /&gt;
&lt;blockquote style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;backup&amp;nbsp;&amp;nbsp;&amp;nbsp; rsync://windowsbox.example.com/examplemodule&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; windowsbox&lt;/span&gt;&lt;/blockquote&gt;&amp;nbsp; &lt;br /&gt;
Also config the &lt;i&gt;snapshot_root&lt;/i&gt; to where you want the files to go. The awesomeness of rsnapshot is that it uses the rsync --link-dest option: as it creates the new snapshot it detects unchanged files from the previous snapshot and hardlinks back to them.&amp;nbsp; Thus, you get complete snapshots using only an incremental amount of space.&amp;nbsp;&amp;nbsp; To view the files as they were 3 days ago, visit the daily.3 directory under "windowsbox" in snapshot_root.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22557003-7985253841156874240?l=blog.grahampoulter.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=Mb9vbAl_S3o:-4OFNtZpzx4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=Mb9vbAl_S3o:-4OFNtZpzx4:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=Mb9vbAl_S3o:-4OFNtZpzx4:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=Mb9vbAl_S3o:-4OFNtZpzx4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=Mb9vbAl_S3o:-4OFNtZpzx4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=Mb9vbAl_S3o:-4OFNtZpzx4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=Mb9vbAl_S3o:-4OFNtZpzx4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=Mb9vbAl_S3o:-4OFNtZpzx4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=Mb9vbAl_S3o:-4OFNtZpzx4:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=Mb9vbAl_S3o:-4OFNtZpzx4:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/Mb9vbAl_S3o" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.grahampoulter.com/2010/03/back-up-windows-server-with-cwrsync-and.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/7985253841156874240?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/7985253841156874240?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/Mb9vbAl_S3o/back-up-windows-server-with-cwrsync-and.html" title="Back up Windows server with cwRsync and rsnapshot" /><author><name>Graham Poulter</name><uri>https://profiles.google.com/116708940210757040686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qCayZZ6Uw3k/AAAAAAAAAAI/AAAAAAAACdk/WJxqm-UsVDo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_rswIZalsPuc/TKSkhTfYDfI/AAAAAAAACNA/jUuEL834G4E/s72-c/rsync_ssh_logo.jpg" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://blog.grahampoulter.com/2010/03/back-up-windows-server-with-cwrsync-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUGRnozfCp7ImA9Wx5VFEg.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-8211845231962671673</id><published>2010-03-28T18:59:00.005+02:00</published><updated>2010-10-07T14:57:07.484+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-07T14:57:07.484+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="review" /><title>Cheap Phone: The Vodafone 135</title><content type="html">&lt;a href="http://4.bp.blogspot.com/_rswIZalsPuc/S6-C9LwpZvI/AAAAAAAABSI/6ay9_asQGsE/s1600-h/vodafone-135-1.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="116" src="http://4.bp.blogspot.com/_rswIZalsPuc/S6-C9LwpZvI/AAAAAAAABSI/6ay9_asQGsE/s200/vodafone-135-1.jpg" width="200" /&gt;&lt;/a&gt; This weekend I bought a Vodafone 135 for ZAR 179 (24 USD).&amp;nbsp; The Feb 2009 &lt;a href="http://www.vodafone.com/start/media_relations/news/group_press_releases/2009/vodafone_launches.html"&gt;press release&lt;/a&gt; for the 135 had this to say:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;The Vodafone 135 is a candy bar style  mobile designed to make mobile communications affordable in developing  markets thanks to a short two line black and white display suitable for  calls and texts.  Its design makes it the most affordable phone of its  kind on the market. It will be available in the summer in black in  developing markets on pre-pay. &lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;/blockquote&gt;&lt;a href="http://2.bp.blogspot.com/_rswIZalsPuc/S6-DmGEvUFI/AAAAAAAABSM/-C0RnJaoYK0/s1600-h/vodafone-150.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/_rswIZalsPuc/S6-DmGEvUFI/AAAAAAAABSM/-C0RnJaoYK0/s200/vodafone-150.jpg" width="168" /&gt;&lt;/a&gt;&lt;br /&gt;
I bought it after hearing about the &lt;a href="http://www.vodafone.com/start/media_relations/news/group_press_releases/2010/vodafone_adds_two.html"&gt;announce of the Vodafone 150&lt;/a&gt; at the Mobile World Conference.&amp;nbsp; The 150 is currently the "cheapest mobile phone in the world", with an unsubsidised price of under 15 USD (111 ZAR), soon to be available in India, Turkey and parts of Africa, including South Africa. &amp;nbsp; Nokia, in one-upmanship will shortly be announcing a 10 USD phone to launch in rural India.&amp;nbsp; I think the 135 is a better-looking phone than the 150 - I like the flat buttons.&amp;nbsp; It does everything you expect from a 1999 Nokia "blockia", but refined by 10 years of hindsight in designing phone interfaces.&lt;br /&gt;
The commercial mission of the cheapest phone in the world is to bring in the next 500 million subscribers, win-win for the people who will at last have a means of communication... and banking - since the phones support mobile payments.&amp;nbsp; Watch for the &lt;a href="http://en.wikipedia.org/wiki/M-Pesa"&gt;M-Pesa&lt;/a&gt; mobile payment system to become the&amp;nbsp; bank with the most customers in the world.&lt;br /&gt;
&lt;br /&gt;
The phones are going to be great for lot of people who never could afford them before. &amp;nbsp; But there's also tiny market for them as a backup phone for the few who live in one of the developing nations but own a smartphone.&amp;nbsp; Smartphones tend to have a short lifespan on the beach, in the mountains, at backpacker hostels, in the rear pocket of jeans, and at large events frequented by pickpockets.&amp;nbsp; Hence, I have bought myself a Vodafone 135 in lieu of paying much the same every month to insure my iPhone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22557003-8211845231962671673?l=blog.grahampoulter.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=Jvuv_25t_OM:Tj7J2cQ7lsc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=Jvuv_25t_OM:Tj7J2cQ7lsc:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=Jvuv_25t_OM:Tj7J2cQ7lsc:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=Jvuv_25t_OM:Tj7J2cQ7lsc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=Jvuv_25t_OM:Tj7J2cQ7lsc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=Jvuv_25t_OM:Tj7J2cQ7lsc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=Jvuv_25t_OM:Tj7J2cQ7lsc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=Jvuv_25t_OM:Tj7J2cQ7lsc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=Jvuv_25t_OM:Tj7J2cQ7lsc:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=Jvuv_25t_OM:Tj7J2cQ7lsc:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/Jvuv_25t_OM" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.grahampoulter.com/2010/03/cheap-phone-vodafone-135.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/8211845231962671673?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/8211845231962671673?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/Jvuv_25t_OM/cheap-phone-vodafone-135.html" title="Cheap Phone: The Vodafone 135" /><author><name>Graham Poulter</name><uri>https://profiles.google.com/116708940210757040686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qCayZZ6Uw3k/AAAAAAAAAAI/AAAAAAAACdk/WJxqm-UsVDo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_rswIZalsPuc/S6-C9LwpZvI/AAAAAAAABSI/6ay9_asQGsE/s72-c/vodafone-135-1.jpg" height="72" width="72" /><thr:total>5</thr:total><feedburner:origLink>http://blog.grahampoulter.com/2010/03/cheap-phone-vodafone-135.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AFSHc7fSp7ImA9Wx5UEEo.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-561120836562891428</id><published>2010-03-02T20:14:00.003+02:00</published><updated>2010-10-14T17:55:19.905+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-14T17:55:19.905+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="opinion" /><category scheme="http://www.blogger.com/atom/ns#" term="journal" /><category scheme="http://www.blogger.com/atom/ns#" term="lifehack" /><title>Sleep better by staying offline in the evening</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_rswIZalsPuc/S41UfleWEZI/AAAAAAAABRY/kfF5dO5d3F0/s1600-h/images.jpeg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_rswIZalsPuc/S41UfleWEZI/AAAAAAAABRY/kfF5dO5d3F0/s1600/images.jpeg" /&gt;&lt;/a&gt;&lt;/div&gt;My sleep cycle continually drifts later: a spiral of going to sleep later, waking up later, feeling worse, starting to crave coffee, staying at work later, coming home later, working later on the computer... going to sleep later.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
After I've been away hiking for a week, I come back and sleep well - because for a week I've been going to bed at sunset, waking up at sunrise and exercising the whole day.&amp;nbsp; But, once back at work, the cycle begins again.&lt;br /&gt;
&lt;br /&gt;
I think a major cause of the late bed-times and insomnia is using the computer in the evening: email, IM, browsing - damn you digg and reddit - and my pet projects, tasks and goals that I work on after-hours, often till after 11pm.&amp;nbsp; And even if I'm off by 10pm, I simply cannot fall asleep diving from the computer onto the bed - even reading a few chapters of a book first.&amp;nbsp; Sometimes falling asleep takes hours.&amp;nbsp; I sometimes go out with friends during the week, but then I usually fall asleep quickly.&lt;br /&gt;
&lt;br /&gt;
So, my new idea is to&amp;nbsp; do all my home computer tasks early in the evening as the first thing when I get home from work.&amp;nbsp; Once I'm tired, around 8pm, I'll shut it down, shower, have dinner, and spend the rest of the evening relaxing - TV, dead-tree books, and scribbling notes on paper, and go to bed as soon as I'm relaxed and bored.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22557003-561120836562891428?l=blog.grahampoulter.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=PpkRq2q7fXE:2bt-Kfgzp44:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=PpkRq2q7fXE:2bt-Kfgzp44:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=PpkRq2q7fXE:2bt-Kfgzp44:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=PpkRq2q7fXE:2bt-Kfgzp44:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=PpkRq2q7fXE:2bt-Kfgzp44:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=PpkRq2q7fXE:2bt-Kfgzp44:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=PpkRq2q7fXE:2bt-Kfgzp44:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=PpkRq2q7fXE:2bt-Kfgzp44:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=PpkRq2q7fXE:2bt-Kfgzp44:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=PpkRq2q7fXE:2bt-Kfgzp44:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/PpkRq2q7fXE" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.grahampoulter.com/2010/03/to-sleep-well-stay-offline-in-late.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/561120836562891428?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/561120836562891428?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/PpkRq2q7fXE/to-sleep-well-stay-offline-in-late.html" title="Sleep better by staying offline in the evening" /><author><name>Graham Poulter</name><uri>https://profiles.google.com/116708940210757040686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qCayZZ6Uw3k/AAAAAAAAAAI/AAAAAAAACdk/WJxqm-UsVDo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_rswIZalsPuc/S41UfleWEZI/AAAAAAAABRY/kfF5dO5d3F0/s72-c/images.jpeg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.grahampoulter.com/2010/03/to-sleep-well-stay-offline-in-late.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UHRH0ycCp7ImA9Wx5VGUo.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-9206162008656973091</id><published>2009-10-30T22:42:00.011+02:00</published><updated>2010-10-13T15:07:15.398+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-13T15:07:15.398+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="capetown" /><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="news" /><title>Google Maps South Africa launches new features</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_rswIZalsPuc/TKSv40WnQ3I/AAAAAAAACNc/ekQsQ9WdzgI/s1600/Google_Streetview_Prius.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="150" src="http://1.bp.blogspot.com/_rswIZalsPuc/TKSv40WnQ3I/AAAAAAAACNc/ekQsQ9WdzgI/s200/Google_Streetview_Prius.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;Today &lt;a href="http://www.linkedin.com/in/jarda"&gt;Jaroslav Bengl&lt;/a&gt;, the Business Product Manager for Google Switzerland GmbH, presented a developer overview of Google Maps features released in South Africa just yesterday.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin: 0px;"&gt;As of yesterday, the &lt;a href="http://maps.google.co.za/"&gt;South African Google Maps&lt;/a&gt; has &lt;a href="http://maps.google.co.za/maps?saddr=Cape+Town,+South+Africa&amp;amp;daddr=George,+South+Africa"&gt;driving directions&lt;/a&gt;, reverse geocoding ("what is near this coordinate"), and overlays for terrain elevation, photos, Wikipedia, Panoramio, and public transit routes. &lt;a href="http://en.wikipedia.org/wiki/Google_Street_View"&gt;Google Street View&lt;/a&gt; cars are surveying Johannesburg, Cape Town, Durban, Pretoria and East London - and the street view should be ready before the World Cup.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;Here is a view of the Koeberg Interchange which now has directional arrows used by the route finders:&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_rswIZalsPuc/SutEAdEEm3I/AAAAAAAABKg/3kVuas2PGzk/s1600-h/staticmap.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_rswIZalsPuc/SutEAdEEm3I/AAAAAAAABKg/3kVuas2PGzk/s320/staticmap.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;div style="margin: 0px;"&gt;All the effort is indeed in preparation for the World Cup, for the sake of all the tourists who have become accustomed to driving directions and complete road networks in the Google Maps of their own countries. Jaroslav says South Africa is getting driving directions and street view ahead of even some European countries and cities.&lt;br /&gt;
&lt;br /&gt;
Google no doubt is paying a lot of license money for access to complete and up-to-date road network data, and we have the Fifa 2010 World Cup to thank for pushing us up the list of priorities. &amp;nbsp;However, for the last few years as a Google Maps backwater, there were some people working to fill in the SA road networks and directions, namely the GPS-equipped volunteers at &lt;a href="http://www.openstreetmap.org/"&gt;OpenStreetMap&lt;/a&gt;, who even took the trouble to mark on OpenStreetMap the changes to the Koeberg Interchange that are under construction:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_rswIZalsPuc/SutFIR25hzI/AAAAAAAABKo/ehaLZAtrxBg/s1600-h/map.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_rswIZalsPuc/SutFIR25hzI/AAAAAAAABKo/ehaLZAtrxBg/s320/map.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
On the &lt;a href="http://code.google.com/apis/maps/documentation/demogallery.html"&gt;Google Maps API&lt;/a&gt; side of things, the &lt;a href="http://code.google.com/apis/maps/documentation/examples/geocoding-simple.html"&gt;geocoding API&lt;/a&gt; (address-&amp;gt;latitude/longitude) is now also available in South Africa, and the search box supports mixed languages: searching for "&lt;a href="http://maps.google.co.za/maps?q=cape+town+%E3%82%B7%E3%83%A7%E3%83%83%E3%83%94%E3%83%B3%E3%82%B0"&gt;cape town ショッピング&lt;/a&gt;" where the second word is Japanese for "shopping" works as expected.  However, "&lt;a href="http://maps.google.co.za/maps?q=%EB%A0%88%EC%8A%A4%ED%86%A0%EB%9E%91+cape+town"&gt;레스토랑 cape town&lt;/a&gt;" where the first word is Korean for "restaurant" brings up hotels instead. &amp;nbsp; There are many APIs for &lt;a href="http://code.google.com/apis/maps/documentation/examples/geoxml-kml.html"&gt;overlaying your own data &lt;/a&gt;on Google Maps, for example using a public KML feed. The &lt;a href="http://maps.google.com/help/terms_maps.html"&gt;terms of service&lt;/a&gt; require in any case that apps using the free Google Maps API themselves be free and open to the public.&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/22557003-9206162008656973091?l=blog.grahampoulter.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=UHyh7IeTW-w:MYIVzIEvQEQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=UHyh7IeTW-w:MYIVzIEvQEQ:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=UHyh7IeTW-w:MYIVzIEvQEQ:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=UHyh7IeTW-w:MYIVzIEvQEQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=UHyh7IeTW-w:MYIVzIEvQEQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=UHyh7IeTW-w:MYIVzIEvQEQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=UHyh7IeTW-w:MYIVzIEvQEQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=UHyh7IeTW-w:MYIVzIEvQEQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=UHyh7IeTW-w:MYIVzIEvQEQ:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=UHyh7IeTW-w:MYIVzIEvQEQ:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/UHyh7IeTW-w" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.grahampoulter.com/2009/10/google-maps-south-africa-launches-new.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/9206162008656973091?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/9206162008656973091?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/UHyh7IeTW-w/google-maps-south-africa-launches-new.html" title="Google Maps South Africa launches new features" /><author><name>Graham Poulter</name><uri>https://profiles.google.com/116708940210757040686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qCayZZ6Uw3k/AAAAAAAAAAI/AAAAAAAACdk/WJxqm-UsVDo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_rswIZalsPuc/TKSv40WnQ3I/AAAAAAAACNc/ekQsQ9WdzgI/s72-c/Google_Streetview_Prius.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.grahampoulter.com/2009/10/google-maps-south-africa-launches-new.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUGRnozfip7ImA9Wx5VFEg.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-8572955450956837785</id><published>2009-10-29T10:45:00.002+02:00</published><updated>2010-10-07T14:57:07.486+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-07T14:57:07.486+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="capetown" /><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="news" /><title>The South African User Experience Forum</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_rswIZalsPuc/TKSwN7Ro12I/AAAAAAAACNk/CK-wxaEyeQA/s1600/SA-UX-Logo.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/_rswIZalsPuc/TKSwN7Ro12I/AAAAAAAACNk/CK-wxaEyeQA/s200/SA-UX-Logo.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;The South African User Experience Forum ("SA UX Forum") is a community of practice in the field of user experience design.&amp;nbsp;I went to a SA UX Forum event last night at 24.com, organised by &lt;a href="http://www.google.com/profiles/philbuk"&gt;Phil Barrett&lt;/a&gt;&amp;nbsp; of Flow Interactive and hosted by 20Four Labs, with wine from Stormhoek.  About 50 people attended, mostly designers and architects, and a handful of developers like myself.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Phil Barrett spoke about innovation and sketching (especially how sketched interfaces can be iterated and refactored with the users' participation, infinitely faster than software iterations), Kath Roderick from Microsoft gave a demo of Sketchflow (part of Expression Blend), and Dennis Williams from DNA|Creative spoke about the basics of how to sketch - including what pens to use (about 5 different pens) and "how to draw stuff" for people who can't draw.  They also demo'd &lt;a href="http://www.balsamiq.com/products/mockups"&gt;Balsamiq Mockups&lt;/a&gt;  a lo-fi sketching software for Adobe Air.  &lt;br /&gt;
&lt;br /&gt;
I thoroughly enjoyed it, even though by "interface" I usually think of an Application Progamming Interface. If you're interested, they announce events via a &lt;a href="http://groups.google.com/group/sa-ux-forum"&gt;Google Group&lt;/a&gt; and &lt;a href="http://www.facebook.com/group.php?gid=2750787123"&gt;Facebook&lt;/a&gt;.&amp;nbsp; Here's a &lt;a href="http://groups.google.com/group/sa-ux-forum/web/sa-ux-meetup---cape-town%20"&gt;list of their previous meet-ups&lt;/a&gt; and &lt;a href="http://groups.google.com/group/sa-ux-forum/web/ux-resources%20"&gt;other user experience resources&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22557003-8572955450956837785?l=blog.grahampoulter.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=SsEmvx2W9lg:EzVthmbtUlc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=SsEmvx2W9lg:EzVthmbtUlc:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=SsEmvx2W9lg:EzVthmbtUlc:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=SsEmvx2W9lg:EzVthmbtUlc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=SsEmvx2W9lg:EzVthmbtUlc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=SsEmvx2W9lg:EzVthmbtUlc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=SsEmvx2W9lg:EzVthmbtUlc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=SsEmvx2W9lg:EzVthmbtUlc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=SsEmvx2W9lg:EzVthmbtUlc:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=SsEmvx2W9lg:EzVthmbtUlc:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/SsEmvx2W9lg" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.grahampoulter.com/2009/10/south-african-user-experience-forum.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/8572955450956837785?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/8572955450956837785?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/SsEmvx2W9lg/south-african-user-experience-forum.html" title="The South African User Experience Forum" /><author><name>Graham Poulter</name><uri>https://profiles.google.com/116708940210757040686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qCayZZ6Uw3k/AAAAAAAAAAI/AAAAAAAACdk/WJxqm-UsVDo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_rswIZalsPuc/TKSwN7Ro12I/AAAAAAAACNk/CK-wxaEyeQA/s72-c/SA-UX-Logo.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.grahampoulter.com/2009/10/south-african-user-experience-forum.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8MRHk4fCp7ImA9Wx5VFU8.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-5491905944497484672</id><published>2009-10-18T20:01:00.003+02:00</published><updated>2010-10-08T08:54:45.734+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-08T08:54:45.734+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="fail" /><category scheme="http://www.blogger.com/atom/ns#" term="review" /><title>The 2004 Fiesta and the loose plastic door bits</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_rswIZalsPuc/TEbjvqdIa8I/AAAAAAAACJQ/Mt4wLYNt3vM/s1600/Ford_Fiesta_mk6_hatchback_car.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="123" src="http://2.bp.blogspot.com/_rswIZalsPuc/TEbjvqdIa8I/AAAAAAAACJQ/Mt4wLYNt3vM/s200/Ford_Fiesta_mk6_hatchback_car.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;The 2004 Ford Fiesta has black&amp;nbsp;plastic strips glued on between the front and back door. &amp;nbsp;&amp;nbsp;Twice now, a plastic strip has come loose and begun to vibrate when driving on the highway, sounding like its about to fall off. I have personally glued the strips back down with contact adhesive and test them from time to time to check if they are coming loose again.&lt;br /&gt;
&lt;br /&gt;
After googling it, I believe this is a consistent manufacturing defect: the wrong choice of glue, and a design defect by not securing the strips properly.&amp;nbsp;Also, the plastic grills on the left and right of the Fiesta bumper come out easily.&amp;nbsp;To make it worse, each of these bits of plastic trimming cost a lot: R400 for plastic grill-bit for a bumper, probably R300-400 for the plastic bit for the door.&lt;br /&gt;
&lt;br /&gt;
IOL article about the plastic trimming: &lt;a href="http://www.iol.co.za/index.php?click_id=3027"&gt;http://www.iol.co.za/index.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22557003-5491905944497484672?l=blog.grahampoulter.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=kIKRGCtQgCI:WCwanxDW9Go:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=kIKRGCtQgCI:WCwanxDW9Go:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=kIKRGCtQgCI:WCwanxDW9Go:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=kIKRGCtQgCI:WCwanxDW9Go:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=kIKRGCtQgCI:WCwanxDW9Go:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=kIKRGCtQgCI:WCwanxDW9Go:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=kIKRGCtQgCI:WCwanxDW9Go:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=kIKRGCtQgCI:WCwanxDW9Go:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=kIKRGCtQgCI:WCwanxDW9Go:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=kIKRGCtQgCI:WCwanxDW9Go:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/kIKRGCtQgCI" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.grahampoulter.com/2009/10/2004-fiesta-and-loose-plastic-door-bits.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/5491905944497484672?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/5491905944497484672?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/kIKRGCtQgCI/2004-fiesta-and-loose-plastic-door-bits.html" title="The 2004 Fiesta and the loose plastic door bits" /><author><name>Graham Poulter</name><uri>https://profiles.google.com/116708940210757040686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qCayZZ6Uw3k/AAAAAAAAAAI/AAAAAAAACdk/WJxqm-UsVDo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_rswIZalsPuc/TEbjvqdIa8I/AAAAAAAACJQ/Mt4wLYNt3vM/s72-c/Ford_Fiesta_mk6_hatchback_car.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.grahampoulter.com/2009/10/2004-fiesta-and-loose-plastic-door-bits.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0INRH44fSp7ImA9Wx5VGUo.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-1507195301420791523</id><published>2009-03-07T12:59:00.004+02:00</published><updated>2010-10-13T15:13:15.035+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-13T15:13:15.035+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="opinion" /><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="howto" /><category scheme="http://www.blogger.com/atom/ns#" term="review" /><title>QWERTY keyboard dumped for low-pain Colemak</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_rswIZalsPuc/TK27Sb_kn4I/AAAAAAAACOY/k1WRp_pQj7M/s1600/C:%5Cfakepath%5CColemak_small.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_rswIZalsPuc/TK27Sb_kn4I/AAAAAAAACOY/k1WRp_pQj7M/s1600/C:%5Cfakepath%5CColemak_small.png" /&gt;&lt;/a&gt;&lt;/div&gt;I can type simple lower-case words at over 100 words per minute on a QWERTY keyboard, slowing down for more complex texts with lots of numbers and punctuations or if the writing takes a lot of thought. &amp;nbsp;However typing all day is causing finger strain, so I sought a keyboard layout to minimises finger motion. &amp;nbsp; Colemak is that layout.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;QWERTY is a pain&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The QWERTY layout has two design goals (1) to be able to type "typewriter" on the top row for demonstrations, and (2) prevent typewriter keys from jamming. &amp;nbsp;&amp;nbsp;Goal (1) puts frequent keys like t,e,r and i on the top row, and goal (2) results in a lot of "same-finger jumping" where the same finger has to jump rows to type common pairs of letters - for example ed, ce, ju, im, mu, nu, mi, um, ol, lo, ki.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Colemak to the rescue&lt;/b&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_rswIZalsPuc/TK27JhmBL7I/AAAAAAAACOU/oBDJIhpmlOM/s1600/C:%5Cfakepath%5CColemak_vs_qwerty.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="138" src="http://3.bp.blogspot.com/_rswIZalsPuc/TK27JhmBL7I/AAAAAAAACOU/oBDJIhpmlOM/s400/C:%5Cfakepath%5CColemak_vs_qwerty.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
For a while I've looked at buying some sort of fancy ergonomic keyboard from a manufacturer that doesn't realise how broken QWERTY is.  Then via some iPhone app news mentioning it I came across the &lt;a href="http://www.colemak.com/"&gt;Colemak&lt;/a&gt; website.  Colemak is a keyboard layout designed in 2006, partially computer-optimised.  According to its model, more than halves typing effort versus QWERTY, about the same as Dvorak but with features that make it easier to learn:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Home row keys (arstdhneio) put the 10 most frequent letters in English under your fingertips&lt;/li&gt;
&lt;li&gt;Pinky finger is used only rarely&lt;/li&gt;
&lt;li&gt;Loads of "hand-roll combos" where you type 2, 3 or even 4 keys in one smooth motion.&lt;/li&gt;
&lt;li&gt;10 keys stay where they are in QWERTY (namely Q,A,Z,X,C,V,B,H,M)&lt;/li&gt;
&lt;li&gt;Most windows keyboard shortcuts stay the same (see above)&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;All keys except E and P are typed with the same finger or same hand as on QWERTY.&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Learning Colemak&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Colemak can be learnt using &lt;a href="http://typefaster.sourceforge.net/"&gt;TypeFaster&lt;/a&gt; on Windows or &lt;a href="http://ktouch.sourceforge.net/"&gt;KTouch&lt;/a&gt; on Linux or the &lt;a href="http://keybr.com/welcome"&gt;Keybr&lt;/a&gt; Flash applet, and download lessons from the &lt;a href="http://www.colemak.com/"&gt;www.colemak.com&lt;/a&gt;.   In Windows you install the custom Colemak layout and switch between QWERTY and Colemak with shortcut keys.  Colemak is for touch-typing, so you are not supposed to go to the effort of physically re-labelling your keyboard and may not even need to print a cheat sheet if you do a few hours of lessons first.&lt;br /&gt;
&lt;br /&gt;
I started on Monday with GTypist lessons, and also used KTouch.   On Windows, TypeFaster has an awesome feature where it generates personalised lessons that drill you on your slowest or least accurate keys.&amp;nbsp;On Thursday, I switched my keyboards to Colemak, which was annoying for a while as my speed was under 20 words per minute and accuracy was low and I had to relearn some shortcuts.&lt;br /&gt;
It's now Saturday and I've hit 30 words per minute, though more like 20 right now&amp;nbsp;but with better accuracy. &amp;nbsp;I don't seem to have forgotten QWERTY.   Given a minute to adjust, I can switch between QWERTY and Colemak as I please.  I just need to remember to keep practising a few minutes a day.&lt;br /&gt;
&lt;br /&gt;
Masochists may instead be interested in the &lt;a href="http://mkweb.bcgsc.ca/carpalx/?tnwclr"&gt;TNWCLR&lt;/a&gt;, which increases typing effort 112% over QWERTY.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22557003-1507195301420791523?l=blog.grahampoulter.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=BbA37wVja4g:94ZR1VGOXUE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=BbA37wVja4g:94ZR1VGOXUE:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=BbA37wVja4g:94ZR1VGOXUE:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=BbA37wVja4g:94ZR1VGOXUE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=BbA37wVja4g:94ZR1VGOXUE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=BbA37wVja4g:94ZR1VGOXUE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=BbA37wVja4g:94ZR1VGOXUE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=BbA37wVja4g:94ZR1VGOXUE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=BbA37wVja4g:94ZR1VGOXUE:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=BbA37wVja4g:94ZR1VGOXUE:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/BbA37wVja4g" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.grahampoulter.com/2009/03/qwerty-layout-dumped-in-favour-of-low.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/1507195301420791523?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/1507195301420791523?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/BbA37wVja4g/qwerty-layout-dumped-in-favour-of-low.html" title="QWERTY keyboard dumped for low-pain Colemak" /><author><name>Graham Poulter</name><uri>https://profiles.google.com/116708940210757040686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qCayZZ6Uw3k/AAAAAAAAAAI/AAAAAAAACdk/WJxqm-UsVDo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_rswIZalsPuc/TK27Sb_kn4I/AAAAAAAACOY/k1WRp_pQj7M/s72-c/C:%5Cfakepath%5CColemak_small.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.grahampoulter.com/2009/03/qwerty-layout-dumped-in-favour-of-low.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8NQX4-eip7ImA9Wx5UEU4.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-3286421113737244403</id><published>2009-01-29T13:34:00.289+02:00</published><updated>2010-10-15T12:01:30.052+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-15T12:01:30.052+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="opinion" /><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><title>Bad Python</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_rswIZalsPuc/TK7bYJNVaWI/AAAAAAAACPY/KmUNf0ZuHJM/s1600/C:%5Cfakepath%5Cpython.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/_rswIZalsPuc/TK7bYJNVaWI/AAAAAAAACPY/KmUNf0ZuHJM/s200/C:%5Cfakepath%5Cpython.jpg" width="157" /&gt;&lt;/a&gt;&lt;/div&gt;I've seen quite a lot of bad Python, even though Python makes the Path of Good Code relatively easier to find than other languages where spaghetti is the result without extra discipline and years of dedicated study of the language on the part of the programmer.  Such is the Tao of Perl.&lt;br /&gt;
&lt;script type="text/javascript"&gt;
reddit_url = "http://grahamweekly.blogspot.com/2009/01/bad-python.html";
&lt;/script&gt;&lt;br /&gt;
&lt;script type="text/javascript" src="http://reddit.com/static/button/button1.js"&gt;
&lt;/script&gt;&lt;br /&gt;
Much bad Python however is from programmers who only knew statically typed OO languages (Java/C++/C#) and have not yet grokked dynamic typing,  first-class functions, pervasive use of iterators, properties, etc, leading to eyesores such as:&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Accessors such as getDistance() and setDistance(), instead of using an attribute. In Python, attributes can be turned into properties later, preserving the class interface.&lt;/li&gt;
&lt;li&gt;Asserting the type of every argument and returned value, taking up maybe 30% of the code itself and 80% of the unit test code.  Checking is usually pointless because the interpreter itself will let you know if &lt;i&gt;someduck&lt;/i&gt; didn't &lt;i&gt;.quack()&lt;/i&gt; like a duck, and makes the code less flexible. &lt;/li&gt;
&lt;li&gt;Uber-private attributes (for no good reason), going so far as to use  double-underscores on each side, which are supposed to be reserved for language features.&lt;/li&gt;
&lt;li&gt;Dozens of customising parameters in constructors, such as &lt;i&gt;reversed&lt;/i&gt; and &lt;i&gt;strip &lt;/i&gt;and &lt;i&gt;maxlen&lt;/i&gt; - when passing in a general &lt;i&gt;transform&lt;/i&gt; function would be so much more elegant and could do so much more than just reverse the strings that the class works with. &lt;/li&gt;
&lt;li&gt;Delegates where first-class function will do.&lt;/li&gt;
&lt;li&gt;Wrapping things classes when dicts and tuples would be cleaner. &lt;/li&gt;
&lt;/ul&gt;Partly, the developers don't recognise the ways in which many Design Patterns become trivial in Python, to the extent that they are more like one-line idioms than chapter-worthy Patterns with capital "P".   Singleton Pattern? Write a module.  Iterator? It's fundamental to the language.  Need a Factory Pattern? Write a function and thanks to dynamic typing you can substitute &lt;i&gt;makedummywidget&lt;/i&gt; for the &lt;i&gt;makewidget&lt;/i&gt; during testing.Flyweight objects or Command Dispatch?  Just use a dictionary.  See also &lt;a href="http://www.suttoncourtenay.org.uk/duncan/accu/pythonpatterns.html"&gt;Python Patterns&lt;/a&gt;. &lt;span style="color: #666666; font-size: 78%;"&gt;(correction: previously referred to Abstract Factory, which is is not a factory but a group of related factories, e.g. for widgets from a given UI toolkit).&lt;/span&gt;  Besides bad habits acquired from static OO, one can write bad code, in any language with &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Vague and misleading identifiers (topic of future post) &lt;/li&gt;
&lt;li&gt;Massive 'god' classes&lt;/li&gt;
&lt;li&gt;Source files having no discernable structure. &lt;/li&gt;
&lt;li&gt;Awkward decompositions of function&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;Forces similar logic to be repeated in dozens of places&lt;/li&gt;
&lt;li&gt;Prevents parts from being reused e.g. in unit tests &lt;/li&gt;
&lt;li&gt;Prevents dependencies from being stubbed out e.g. in unit tests&lt;/li&gt;
&lt;li&gt;Mixing logic with orthogonal aspects like error-handling and logging for a harder-to-maintain mess.&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;Oh well.   I recently spent a day re-doing about 30% of the functionallity of 8,600 lines of someone elses Java-style Python into 200 lines of real Python to support the greater flexibility I needed.  Code can be that bad. &lt;span style="font-size: 78%;"&gt;&lt;span style="color: #999999;"&gt;(later expanded to just under 300 lines thanks to feature creep)&lt;/span&gt;&lt;/span&gt;  From the comments: &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://dirtsimple.org/2004/12/python-is-not-java.html"&gt;Python is not Java&lt;/a&gt; (a related rant about using Java idioms in Python)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html"&gt;Idiomatic Python&lt;/a&gt; (if you want examples of idioms in Python) &lt;/li&gt;
&lt;li&gt;&lt;a href="http://oreilly.com/catalog/9780596007973/"&gt;Python Cookbook&lt;/a&gt; (preview online at &lt;a href="http://my.safaribooksonline.com/0596007973"&gt;Safari Books&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://queue.acm.org/detail.cfm?id=1039535"&gt;How not to write FORTRAN in any language&lt;/a&gt; especially on readability and how a language can help and hinder good design. &lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22557003-3286421113737244403?l=blog.grahampoulter.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=LRfRf8vjKRE:7vbvzwBXWSE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=LRfRf8vjKRE:7vbvzwBXWSE:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=LRfRf8vjKRE:7vbvzwBXWSE:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=LRfRf8vjKRE:7vbvzwBXWSE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=LRfRf8vjKRE:7vbvzwBXWSE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=LRfRf8vjKRE:7vbvzwBXWSE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=LRfRf8vjKRE:7vbvzwBXWSE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=LRfRf8vjKRE:7vbvzwBXWSE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=LRfRf8vjKRE:7vbvzwBXWSE:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=LRfRf8vjKRE:7vbvzwBXWSE:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/LRfRf8vjKRE" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.grahampoulter.com/2009/01/bad-python.html#comment-form" title="25 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/3286421113737244403?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/3286421113737244403?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/LRfRf8vjKRE/bad-python.html" title="Bad Python" /><author><name>Graham Poulter</name><uri>https://profiles.google.com/116708940210757040686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qCayZZ6Uw3k/AAAAAAAAAAI/AAAAAAAACdk/WJxqm-UsVDo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_rswIZalsPuc/TK7bYJNVaWI/AAAAAAAACPY/KmUNf0ZuHJM/s72-c/C:%5Cfakepath%5Cpython.jpg" height="72" width="72" /><thr:total>25</thr:total><feedburner:origLink>http://blog.grahampoulter.com/2009/01/bad-python.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUGRnoyeCp7ImA9Wx5VFEg.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-6983658403844752050</id><published>2009-01-10T15:01:00.011+02:00</published><updated>2010-10-07T14:57:07.490+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-07T14:57:07.490+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="creations" /><title>Quake 3 Config</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_rswIZalsPuc/TKdpy_e4u3I/AAAAAAAACNs/2kcdfnV6o-g/s1600/quake3.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_rswIZalsPuc/TKdpy_e4u3I/AAAAAAAACNs/2kcdfnV6o-g/s1600/quake3.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;The new colleagues brought an after-work tradition of of playing the Quake 3 multiplayer first-person shooter computer game.  Unfortunately I sucked at first. &amp;nbsp;Here were my main problems, and my cool &lt;a href="http://snipplr.com/view/11241/tweaked-quake-3-arena-autoexeccfg/"&gt;autoexec.cfg&lt;/a&gt; that helps with some of them them:&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Visibility: can't see through the gibs and shells.  It felt like I was playing paintball. &lt;/li&gt;
&lt;li&gt;Mouse sensitivity: 8 times the default, jumping all over the place.&lt;/li&gt;
&lt;li&gt;Keybindings: annoying trying to change weapons or zoom.&lt;/li&gt;
&lt;li&gt;Camouflage: The blue "team" model really stands out. Switched to small brown player models like 'bones/bones'/ &lt;/li&gt;
&lt;li&gt;Technique: had rocket and railgun wrong, didn't traverse the map properly or look around properly with the mouse. &lt;/li&gt;
&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;My &lt;/span&gt;&lt;a href="http://snipplr.com/view/11241/tweaked-quake-3-arena-autoexeccfg/" style="font-weight: bold;"&gt;Quake 3 autoexec.cfg&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; has the following tweaks:&lt;/span&gt; &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;turns off muzzle flash, shells, gun model, gibs/blood for visibility. &lt;/li&gt;
&lt;li&gt;turns off level music to hear the other players. &lt;/li&gt;
&lt;li&gt;sets toggles for gun model and HUD to clear distractions.&lt;/li&gt;
&lt;li&gt;tunes mouse sensitivity just high enough to allow 180-degree flick&lt;/li&gt;
&lt;li&gt;set up multiple zoom levels&lt;/li&gt;
&lt;li&gt;turned off bob/roll for slightly steadier crosshair&lt;/li&gt;
&lt;li&gt;selected the circle + dot crosshair (cross-style can obscure small targets)&lt;/li&gt;
&lt;li&gt;allow both keyboard and mouse weapon cycling&lt;/li&gt;
&lt;/ul&gt;&lt;a href="http://pastebin.com/f35d3f5bc"&gt; &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22557003-6983658403844752050?l=blog.grahampoulter.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=EFCqvqCjASg:vJSJck4R-H4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=EFCqvqCjASg:vJSJck4R-H4:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=EFCqvqCjASg:vJSJck4R-H4:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=EFCqvqCjASg:vJSJck4R-H4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=EFCqvqCjASg:vJSJck4R-H4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=EFCqvqCjASg:vJSJck4R-H4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=EFCqvqCjASg:vJSJck4R-H4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=EFCqvqCjASg:vJSJck4R-H4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=EFCqvqCjASg:vJSJck4R-H4:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=EFCqvqCjASg:vJSJck4R-H4:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/EFCqvqCjASg" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.grahampoulter.com/2009/01/quake-3-config.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/6983658403844752050?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/6983658403844752050?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/EFCqvqCjASg/quake-3-config.html" title="Quake 3 Config" /><author><name>Graham Poulter</name><uri>https://profiles.google.com/116708940210757040686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qCayZZ6Uw3k/AAAAAAAAAAI/AAAAAAAACdk/WJxqm-UsVDo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_rswIZalsPuc/TKdpy_e4u3I/AAAAAAAACNs/2kcdfnV6o-g/s72-c/quake3.jpg" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://blog.grahampoulter.com/2009/01/quake-3-config.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ACSXY6eSp7ImA9Wx5VFEg.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-619705625938381116</id><published>2008-12-25T17:54:00.004+02:00</published><updated>2010-10-07T14:49:28.811+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-07T14:49:28.811+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="analysis" /><category scheme="http://www.blogger.com/atom/ns#" term="howto" /><category scheme="http://www.blogger.com/atom/ns#" term="lifehack" /><title>How to avoid Hijacking/Carjacking</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_rswIZalsPuc/TK3Ai8pgHbI/AAAAAAAACOg/3nGywEw6NQc/s1600/C:%5Cfakepath%5Ccarjacking.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="182" src="http://1.bp.blogspot.com/_rswIZalsPuc/TK3Ai8pgHbI/AAAAAAAACOg/3nGywEw6NQc/s200/C:%5Cfakepath%5Ccarjacking.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;Collected advice for avoiding hijacking / carjacking.&lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;All The Time&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Drive and park in well-lit, high-traffic areas.  Avoid dark, isolated roads and parking spots.&lt;/li&gt;
&lt;li&gt;Stay visible: carjackers prefer victims who won't be seen by bystanders.&lt;/li&gt;
&lt;li&gt;Always roll up windows before stopping to park or at lights.&lt;/li&gt;
&lt;li&gt;Always lock your doors as soon as you enter the car and don't unlock till about to leave.&lt;/li&gt;
&lt;li&gt;Keep valuables out of sight.&lt;/li&gt;
&lt;li&gt;Report suspicious characters and vehicles to police.&lt;/li&gt;
&lt;li&gt;Be in a group rather than alone.  Avoid driving alone where possible.&lt;/li&gt;
&lt;li&gt;Keep your car well-maintained to prevent breakdowns.&lt;/li&gt;
&lt;li&gt;Keep your car filled to avoid running out, or otherwise being forced to refuel.&lt;/li&gt;
&lt;li&gt;Know your destination and route to avoid stopping to look at a map or ask directions.&lt;/li&gt;
&lt;li&gt;Dropping someone off, make sure they are safely in their vehicle before departing.&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Parked Environment&lt;/b&gt; &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Know the environment and be aware of anything out of the ordinary.&lt;/li&gt;
&lt;li&gt;Check nearby and underneath car, especially if there is shrubbery or hiding spots nearby.&lt;/li&gt;
&lt;li&gt;If loiterers are present, keep away form the vehicle and go to a public area to ask for assistance.&lt;/li&gt;
&lt;li&gt;Check whether you are being followed to your parking spot, and if so go instead to a public area for assistance.&lt;/li&gt;
&lt;li&gt;Have a friend escort you to your parked car (and escort friends as a courtesy).&lt;/li&gt;
&lt;li&gt;Add/remove items from the trunk quickly.&lt;/li&gt;
&lt;li&gt;Have key ready to enter the car as you approach it: do not fumble for keys.&lt;/li&gt;
&lt;li&gt;Do not sit (or sleep) in the car unaware of surroundings.&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Driving Environment&lt;/b&gt; &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Vary regular routes since professionals plan attacks on particular cars carefully.&lt;/li&gt;
&lt;li&gt;Before parking, check mirror again to see whether you have been followed and continue driving if that is the case.&lt;/li&gt;
&lt;li&gt;Plan an escape route at every intersection: stop 5 meters behind the next car and pick a lane with easy escape.&lt;/li&gt;
&lt;li&gt;Avoid all contact, even eye contact, with pedestrians.&lt;/li&gt;
&lt;li&gt;Use center lane: hijackers find road-side cars easier to attack.&lt;/li&gt;
&lt;li&gt;Drive away hooting if there is a suspicious/hostile approach while stopped at lights.  Even turn through a red light if safe to do so.&lt;/li&gt;
&lt;li&gt;Do not pull over randomly to read a map.&lt;/li&gt;
&lt;li&gt;Avoid driving in 'dead hours' of night and early morning.&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt; Common Tricks&lt;/b&gt; &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;False appeals for help from a "breakdown" or stationary vehicle.&lt;/li&gt;
&lt;li&gt;Bump-n-Rob where you are bumped from behind at traffic lights: common at night, with a carjacker in wait for when you get out. Drive away immediately if it is dark or anything is suspicious.&lt;/li&gt;
&lt;li&gt;Jamming of electric gates.&lt;/li&gt;
&lt;li&gt;Posing as a hitchhiker or faking an injury.&lt;/li&gt;
&lt;li&gt;Posing as a traffic officer, but with unmarked/unofficial vehicle.&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt; If Hijacked&lt;/b&gt; &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Exit the car immediately and run.&lt;/li&gt;
&lt;li&gt;If you don't escape the car, crash it into a pole immediately, then run.&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt; Statistics&lt;/b&gt; &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;About a quarter of all carjackings take place in December.&lt;/li&gt;
&lt;li&gt;Most carjackings take place between 8PM and 11PM (i.e. at night).&lt;/li&gt;
&lt;li&gt;Highest risk in decreasing order: open parking lots, city streets, rural streets, driveways, gas stations.&lt;/li&gt;
&lt;li&gt;Poorest areas (opportunists) and richest areas (professionals) are high risk.&lt;/li&gt;
&lt;/ul&gt;I researched and collated a dozen websites in mynotebook and only then decided to post the list: sorry for lack ofreferences.  Shouts out to every other "how to avoid carjacking" article on the web.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22557003-619705625938381116?l=blog.grahampoulter.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=kJoMU1hAYHo:UbF-cOVYJGE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=kJoMU1hAYHo:UbF-cOVYJGE:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=kJoMU1hAYHo:UbF-cOVYJGE:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=kJoMU1hAYHo:UbF-cOVYJGE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=kJoMU1hAYHo:UbF-cOVYJGE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=kJoMU1hAYHo:UbF-cOVYJGE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=kJoMU1hAYHo:UbF-cOVYJGE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=kJoMU1hAYHo:UbF-cOVYJGE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=kJoMU1hAYHo:UbF-cOVYJGE:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=kJoMU1hAYHo:UbF-cOVYJGE:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/kJoMU1hAYHo" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.grahampoulter.com/2008/12/how-to-avoid-hijackingcarjacking.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/619705625938381116?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/619705625938381116?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/kJoMU1hAYHo/how-to-avoid-hijackingcarjacking.html" title="How to avoid Hijacking/Carjacking" /><author><name>Graham Poulter</name><uri>https://profiles.google.com/116708940210757040686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qCayZZ6Uw3k/AAAAAAAAAAI/AAAAAAAACdk/WJxqm-UsVDo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_rswIZalsPuc/TK3Ai8pgHbI/AAAAAAAACOg/3nGywEw6NQc/s72-c/C:%5Cfakepath%5Ccarjacking.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.grahampoulter.com/2008/12/how-to-avoid-hijackingcarjacking.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08AQXgzfCp7ImA9Wx5VGUo.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-7093699350083329830</id><published>2008-12-23T14:07:00.005+02:00</published><updated>2010-10-13T15:17:20.684+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-13T15:17:20.684+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="opinion" /><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><title>Code generation vs metaprogramming</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_rswIZalsPuc/SXO1zFjJbKI/AAAAAAAABAk/fPqJ_i76tiQ/s1600/activerecord.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="96" src="http://4.bp.blogspot.com/_rswIZalsPuc/SXO1zFjJbKI/AAAAAAAABAk/fPqJ_i76tiQ/s320/activerecord.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;The &lt;a href="http://martinfowler.com/eaaCatalog/activeRecord.html"&gt;Active Record pattern&lt;/a&gt; is an "object that wraps a row in a database table or view, encapsulates the database access, and adds domain logic on that data". Metaprogramming in Lisp/Scheme, and to a limited extent Python and Ruby would generate a class library at run-time, for example to perform object-relational mapping with the ActiveRecord pattern. In Python at least, the only code you see is a the metaclass and decorators, with some custom logic added on.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;b&gt;Metaprogramming Benefits/Drawbacks&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;Metaprogramming keeps code small and simple. Meta-changes take place in one piece of code (the metaclass), and database modification is simple, making metaprogramming efficient for rapid prototyping. However, runtime reflection reduces performance (mitigated through caching of the analysis), and since the concrete code does not exist until run-time, there is no static checking of method calls or IDE auto-completion and contextual help for methods. Step-through debugging is complicated for runtime-generated methods compared to concrete methods. Metaprogrammingmay also run into language limitations (not with Lisp macros),necessitating code-generation to produce 'scaffolding' in certain cases.  Code generation in PHP, Java, C#, generates the code of the class library from templates. Custom logic is added in sub-classes or re-opened partial classes.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;b&gt;Code Generation Benefits/Drawbacks&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;/b&gt;Code Generation incurs no runtime performance hit, because analysis is during generation &amp;amp; compilation. Compilers can check uses of the generated code and IDEs provide contextual documentation and auto-completion, and debuggers transparently step through the generated code. Code generation templates may also be more general than the limited metaprogramming features e.g. of Python/Ruby. However, the entire library must be re-generated when changing the templates or database schema, which may encourage over-architecting and reluctance to revise the model later, due to the added difficulty of implementing changes (unless planned out so as to support easy/quick re-generation). Also, debugging generated code involves a very slow edit(template)-generate-compile-run cycle, instead of the edit(metacode)-run cycle of metaprogramming.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;b&gt;Code Generation &amp;amp; Source Control&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Code templates should be checked in, but it seems so is the generated code. &amp;nbsp;If pure generated code were not checked in, then code would be a 'pre-build' step, with the drawback of configuring and running the generator locally before the first compile.&lt;br /&gt;
&lt;br /&gt;
I would tend to prefer metaprogramming in most cases, if only because I like small, tidy code. One might imagine that the generated code is not really code to avoid feeling like the code is bloated, because you may end up with as much as 90% of the code in your application being auto-generated. C2 Wiki helpfully points out that compilers are code generators of assembly and machine language, and interpreters are generators of bytecode. &amp;nbsp;So everyone uses code generation... the question here is whether to generate code for the language one is typically writing in. Code generation uses a higher level language to output code in a lower-level one, so needing code generators for Java/C# means that in some sense Java/C# are too 'low-level' for certain tasks.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22557003-7093699350083329830?l=blog.grahampoulter.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=V-vAgrV6kmk:Dk-FFFT5LDw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=V-vAgrV6kmk:Dk-FFFT5LDw:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=V-vAgrV6kmk:Dk-FFFT5LDw:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=V-vAgrV6kmk:Dk-FFFT5LDw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=V-vAgrV6kmk:Dk-FFFT5LDw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=V-vAgrV6kmk:Dk-FFFT5LDw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=V-vAgrV6kmk:Dk-FFFT5LDw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=V-vAgrV6kmk:Dk-FFFT5LDw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=V-vAgrV6kmk:Dk-FFFT5LDw:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=V-vAgrV6kmk:Dk-FFFT5LDw:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/V-vAgrV6kmk" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.grahampoulter.com/2008/12/code-generation-vs-metaprogramming-in.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/7093699350083329830?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/7093699350083329830?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/V-vAgrV6kmk/code-generation-vs-metaprogramming-in.html" title="Code generation vs metaprogramming" /><author><name>Graham Poulter</name><uri>https://profiles.google.com/116708940210757040686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qCayZZ6Uw3k/AAAAAAAAAAI/AAAAAAAACdk/WJxqm-UsVDo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_rswIZalsPuc/SXO1zFjJbKI/AAAAAAAABAk/fPqJ_i76tiQ/s72-c/activerecord.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.grahampoulter.com/2008/12/code-generation-vs-metaprogramming-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04DSHw8fip7ImA9Wx5VFU8.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-7306694359236853243</id><published>2008-12-09T22:41:00.013+02:00</published><updated>2010-10-08T10:19:39.276+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-08T10:19:39.276+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="opinion" /><category scheme="http://www.blogger.com/atom/ns#" term="analysis" /><category scheme="http://www.blogger.com/atom/ns#" term="finance" /><title>Choosing my car insurance (South Africa)</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_rswIZalsPuc/TK7TAglGgLI/AAAAAAAACO8/sqKGJKUfgcY/s1600/C:%5Cfakepath%5Ccartheft.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_rswIZalsPuc/TK7TAglGgLI/AAAAAAAACO8/sqKGJKUfgcY/s1600/C:%5Cfakepath%5Ccartheft.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;I have finally decided to buy a car and called up several insurers. This post analyses my choice to go with the "Santam Direct" third-party, fire &amp;amp; theft insurance.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;First of all I found comprehensive insurance too expensive: the premiums equal the payments on an equivalent car on a 72-month financing term.  Instead, I will have to drive defensively and park carefully, and pay for my own lapses of judgement.&lt;br /&gt;
&lt;br /&gt;
So, I got telephonic quotes on third-party, fire &amp;amp; theft (3FT or limited insurance) from the following:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.dialdirect.co.za/"&gt;Dial Direct&lt;/a&gt; - a 'direct' insurer &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.budgetinsurance.co.za/"&gt;Budget&lt;/a&gt; - likely backed by another insurer&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.autogen.co.za/"&gt;A&amp;amp;G&lt;/a&gt; via V-plus brokers (large commission, it appears)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.unity.co.za/"&gt;Unity &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Santam Direct&lt;/li&gt;
&lt;/ul&gt;In the end I picked the &lt;a href="http://www.santam.co.za/"&gt;Santam&lt;/a&gt; Multi-Motor package, which also had the lowest premiums.  Oddly,&amp;nbsp;&lt;a href="http://www.google.co.za/search?q=%22Santam+Direct%22"&gt;"Santam Direct"&lt;/a&gt; as an entity is almost Google-proof.  When I called Santam the operator had said "sorry we only deal with brokers, but we can put you through to Santam Direct", and put me through to &lt;a href="http://www.santam.co.za/contactus.asp?s=con"&gt;0860 444 444&lt;/a&gt;, which introduces itself as "Santam Direct".  The lack of Internet presence may be cause for concern.  &lt;span style="font-style: italic;"&gt;Update: from a PDF on  &lt;/span&gt;&lt;a href="http://online.santam.co.za/best/FAQs%20to%20staff_final.pdf" style="font-style: italic;"&gt;Santam's Int(ra/er)net&lt;/a&gt;&lt;span style="font-style: italic;"&gt; what the operator referred to as "Santam Direct" may be a default broker to which non-brokers are redirected, a joint venture between Santam and Sanlam starting only this year.  I will call tomorrow to find out more about this mysterious broker that I just bought insurance from.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-style: italic;"&gt;&lt;/span&gt; Santam has an older fee structure: low premiums, no "cash back", and high excess of R2500 plus endorsements: for example +R1000 for not having a tracker in a theft claim, for claiming in first 6 months, or for claiming 2+ times in a year, and +R1500 when someone else was driving (non-additive: simply choose the highest endorsement).   Compare this philosophy to Budget and others having premiums about 70-75% higher than Santam, low excess (R700) and 10-25% "cash back" after 2-4 years.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;My Reasoning:&lt;/b&gt; On Santam Limited Insurance (3rd party, fire, theft), one saves money by taking precautions to avoid having to claim.  With Budget et al, premiums are higher while claiming is cheaper (less need for caution), but "to claim or not to claim?" is complicated by the Cash Back Bonus which is lost on claiming.  That results in some messy risk calculations with which I do not wish to concern myself, and I therefore prefer low premiums up front.  On claiming, I will view the Santam R2500-R4000 excess as paying in those additional premiums that I would payed anyway to a low-excess insurer.  It might be called a "negative-cash-back because-you-claimed anti-bonus", which doesn't have the same ring as the "cash-back no-claim bonus" of the low-excess insurers, but the concept appeals to me.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Tracker&lt;/b&gt;.  An additional option is a &lt;a href="http://www.tracker.co.za/"&gt;Tracker&lt;/a&gt; or similar device (Netstar, Bandit, CarTrack, Buddy, CellSecure, CellStop, C-Track, Matrix, DataTrack, NeoTrack, SkyTrack, SmartTrack).  The "Retrieve" Tracker(tm) is normally R1450 installation + R142pm on month-to-month basis, or R185pm on a 36 month contract (month-to-month breaks even with contract at 33.7 months).   For Santam clients, Tracker offers a R115pm x 36 month contract, which is R2520 less than the normal contract over 36 months, and removes the +R1000 "endorsement" of additional excess if the car is non-tracked when stolen.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Hippo Comparison&lt;/b&gt;: &lt;a href="http://hippo.co.za/"&gt;hippo.co.za&lt;/a&gt; provided comparative generic E-quotes on 3rd party, fire and theft.  The Santam telephonic quote was approximately one third of the DialDirect and Budget E-quotes (without Tracker).    Without tracker, DialDirect and Budget telephonic quotes were about 65% of their own E-quotes.    With Tracker, Santam was 60% of the E-quotes, and with tracker DialDirect and Budget were slightly higher than their E-quotes.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Deterrents&lt;/b&gt;: Security devices that require installation should be done by a &lt;a href="http://www.vesa.co.za/ProductsAndManufacturers.aspx"&gt;VESA-approved provider&lt;/a&gt;.  Various devices include "Alligator" steering wheel lock advertised as "even cutting in 4 places isn't enough", clutch pedal lock, wheel lock-nuts, gear locks, and gimmicks such as radio transmittors and SMS-sending devices to notify you when someone enters or starts the car (like bank login alerts), or a hidden fuse which blows unless you put the drivers' seatbelt on (latter could go really wrong).  Mechanical barriers will slow down a team possessing a battery-operated angle-grinder by at most 10-15 minutes.  Immobiliser units can also be swapped out in a couple of minutes, but the thieves need a specific unit to match the car model.&lt;br /&gt;
&lt;br /&gt;
If one makes the car a difficult "15-minute job", and combines it with alerting on vehicle entry, that should give the local patrol cars time to get there before the thieves drive off.  So Plan A is deterrence, Plan B could be alerting+barriers to give cops time to catch the thieves, Plan C could be Tracker, and Plan D is insurance.  Plan E is moving somewhere with a garage.  Alerting is tricky.  Baseline would be an alarm siren.  A custom device might use a short-range radio transponder (receiver beeps on activation), or set a mobile device to send an SMS alert.  Lazyweb, what would you recommend?  Or would an alerting device be overdoing it?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22557003-7306694359236853243?l=blog.grahampoulter.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=BQgnj5DXHI8:avuC4pCQ7_A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=BQgnj5DXHI8:avuC4pCQ7_A:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=BQgnj5DXHI8:avuC4pCQ7_A:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=BQgnj5DXHI8:avuC4pCQ7_A:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=BQgnj5DXHI8:avuC4pCQ7_A:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=BQgnj5DXHI8:avuC4pCQ7_A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=BQgnj5DXHI8:avuC4pCQ7_A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=BQgnj5DXHI8:avuC4pCQ7_A:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=BQgnj5DXHI8:avuC4pCQ7_A:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=BQgnj5DXHI8:avuC4pCQ7_A:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/BQgnj5DXHI8" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.grahampoulter.com/2008/12/insuring-protecting-car.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/7306694359236853243?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/7306694359236853243?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/BQgnj5DXHI8/insuring-protecting-car.html" title="Choosing my car insurance (South Africa)" /><author><name>Graham Poulter</name><uri>https://profiles.google.com/116708940210757040686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qCayZZ6Uw3k/AAAAAAAAAAI/AAAAAAAACdk/WJxqm-UsVDo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_rswIZalsPuc/TK7TAglGgLI/AAAAAAAACO8/sqKGJKUfgcY/s72-c/C:%5Cfakepath%5Ccartheft.jpg" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://blog.grahampoulter.com/2008/12/insuring-protecting-car.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUBR347fyp7ImA9Wx5VFEg.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-4266871179431152975</id><published>2008-06-16T17:32:00.008+02:00</published><updated>2010-10-07T13:50:56.007+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-07T13:50:56.007+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="opinion" /><category scheme="http://www.blogger.com/atom/ns#" term="philosophy" /><title>Why humans cannot be completely happy</title><content type="html">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_rswIZalsPuc/TK2whRzlYwI/AAAAAAAACOQ/VP3Coz3cHX0/s1600/C:%5Cfakepath%5Chappiness.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="150" src="http://4.bp.blogspot.com/_rswIZalsPuc/TK2whRzlYwI/AAAAAAAACOQ/VP3Coz3cHX0/s200/C:%5Cfakepath%5Chappiness.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;What do humans want?  To be happy.  But what is happiness?  Happiness, apparently, is that thing which humans really want. &amp;nbsp;A circular definition would indeed make happiness elusive. The definition I found in Aristotle's &lt;span style="font-style: italic;"&gt;Nichomachean Ethics&lt;/span&gt; was along the lines of "the final human good, the end to which other goods are merely means".&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Psychologists helpfully use "subjective well-being" in place of "happiness".  Interestingly, in Aristotle's Nichomachean Ethics, the word translated as "happiness" is "eudaimonia", which literally means "living under a good spirit", a closer match to "well-being" than "happiness", since recent usage of "happiness" &amp;nbsp;often conflates it with fleeting emotional states like elation. &amp;nbsp;Subjective well-being seems a better translation in general - although it wouldn't be fully consistent with the uses of the word in the &lt;span style="font-style: italic;"&gt;Ethics&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
Subjective well-being tells us just what it is: a state of mind.  &lt;a href="http://www.sciencemag.org/cgi/content/full/312/5782/1908"&gt;Empirical research&lt;/a&gt; bears this out: if you are asked about finances just before being asked "All things considered,&lt;sup&gt; &lt;/sup&gt;how satisfied are you with your life as a whole these days?", then priming effects makes finances weigh heavily on the judgement of overall happiness.  The same thing happens when primed with questions about one's love life, or physical health.  Hundreds of factors make up subjective well-being.  To name a few:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Physical: health, exercise, nutrition, sleep, appearance&lt;/li&gt;
&lt;li&gt;Personal: adventure, change, direction and goals, financial stability, personal development, relaxation, work, peace (vs anxiety)&lt;/li&gt;
&lt;li&gt;Interpersonal: social activity and acceptance, peace (vs conflict), altruism, friendship, intimacy (love life), community, family&lt;/li&gt;
&lt;li&gt;Intellectual: aesthetic appreciation, creative expression, intellectual exploration and engagement &lt;/li&gt;
&lt;/ul&gt;The number of factors suggest some possibilities:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Human brains can't weigh up all the factors at once, so subjective well-being gets thumb sucked from whatever seems salient at the moment, easily influenced by priming.&lt;/li&gt;
&lt;li&gt;With so many factors, at least a few will be going wrong at any time.   Subjective well being will therefore always have room for improvement.&lt;/li&gt;
&lt;li&gt;Lots of room for subjectivity as to which factors count the most. For example I gave an entire section for "intellectual" factors, while someone else might break down "love life" or "family" into half a dozen factors each.&lt;/li&gt;
&lt;/ol&gt;One more thought: if subjective well-being were condensed into a number and graphed it will have a maximum somewhere along the way, you just won't know where it lies.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22557003-4266871179431152975?l=blog.grahampoulter.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=BJIrV6zlNKQ:bNaBR4GXylw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=BJIrV6zlNKQ:bNaBR4GXylw:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=BJIrV6zlNKQ:bNaBR4GXylw:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=BJIrV6zlNKQ:bNaBR4GXylw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=BJIrV6zlNKQ:bNaBR4GXylw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=BJIrV6zlNKQ:bNaBR4GXylw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=BJIrV6zlNKQ:bNaBR4GXylw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=BJIrV6zlNKQ:bNaBR4GXylw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=BJIrV6zlNKQ:bNaBR4GXylw:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=BJIrV6zlNKQ:bNaBR4GXylw:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/BJIrV6zlNKQ" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.grahampoulter.com/2008/06/why-humans-cannot-be-completely-happy.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/4266871179431152975?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/4266871179431152975?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/BJIrV6zlNKQ/why-humans-cannot-be-completely-happy.html" title="Why humans cannot be completely happy" /><author><name>Graham Poulter</name><uri>https://profiles.google.com/116708940210757040686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qCayZZ6Uw3k/AAAAAAAAAAI/AAAAAAAACdk/WJxqm-UsVDo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_rswIZalsPuc/TK2whRzlYwI/AAAAAAAACOQ/VP3Coz3cHX0/s72-c/C:%5Cfakepath%5Chappiness.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.grahampoulter.com/2008/06/why-humans-cannot-be-completely-happy.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEAQ3w8fip7ImA9Wx5VFU8.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-1571709645173843063</id><published>2008-06-05T18:23:00.003+02:00</published><updated>2010-10-08T10:30:42.276+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-08T10:30:42.276+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="journal" /><category scheme="http://www.blogger.com/atom/ns#" term="fail" /><title>Dentistry and fillings</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_rswIZalsPuc/TK7WS1nLb0I/AAAAAAAACPA/ZRZ4HVnXgbU/s1600/C:%5Cfakepath%5Ccakefilling.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_rswIZalsPuc/TK7WS1nLb0I/AAAAAAAACPA/ZRZ4HVnXgbU/s1600/C:%5Cfakepath%5Ccakefilling.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;Six fillings.  I was surprised too, considering that I've had only one filling previously, and most of my dentists' comments on my every-two-years checkups have been along the lines of "I wish I had teeth like yours". &lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
At my checkup the week before the oral hygienist noted "some minor cavitation", and in the mirror I saw 2-3 dark patches on the molars.   She called in the dentist and read out a long list of alphabet soup while he poked the corresponding locations with the dental explorer.  Nonetheless, I was surprised on Monday to discover that there were six fillings to be done, on &lt;a href="http://www.dentalimplants-usa.com/Generalinfo/toothnumbering.html"&gt;tooth numbers&lt;/a&gt; 26 OP, 27 OP, 17 OP, 16 OP, 47 O and 46 B (O=occlusal or biting surface, B=buccal or cheeck side, P=palatal or towards the palate), and the oral hygienest confirmed these were the ones.   The fillings themselves were mostly-painless, and used a modern light-cured dental composite, where a bright blue light drives a polymerisation reaction, turning the filling putty into a hard tooth-coloured substance.  Acid-etching beforehand gives the composite a micromechanical bond to the enamel and dentine, so the filling is pretty much one with the tooth.&lt;br /&gt;
&lt;br /&gt;
After I left I wondered - how many of the fillings were really necessary?  Some could have been reversible demineralised regions or incipient decay being filled preventively, rather than real cavities.  Preventive dentistry isn't necessarily the best route, since fillings don't last forever (although 10+ years is usual on modern composites, even on molars), and they can go wrong rapidly if a leak occurs that allows bacteria inside.  Fillings really do need the &lt;i&gt;6-month &lt;/i&gt;checkups they always tell you to have, because if a leak goes undetected you could find yourself needing a root canal.   Seems I'm in for a lot of checkups over the rest of my life.&lt;br /&gt;
&lt;br /&gt;
I read up and found that &lt;a href="http://www.dentalfearcentral.org/unnecessary_treatment.html"&gt;unnecessary treatment&lt;/a&gt; is common, but after the filling all evidence of what was there before is gone.  What you are supposed to do is ask the dentist, at the checkup, to show you each site of proposed filling one at a time.  If there is no visible cavity, there should be a good explanation (e.g. interproximal cavities may show only on X-rays). &lt;br /&gt;
&lt;br /&gt;
If the dentist says "it is likely to be come a cavity", then you are better off taking it as a warning to modify your oral hygeine and diet rather than getting a filling.   I think my problem was that October through February I got into a habit of eating chocolate on campus, at a rate of about 1 square per hour or two.  Because my tooth-brushing and flossing habits were fine and I'd never had problems before, it never occured to me that adding a few squares of chocolate to my diet would cause cavities.   As it turns out, prolonged sugar levels in the mouth feed acid-producing bacteria, which demineralise the tooth enamel, eventually forming cavities.   Rather than brushing during the day, you're supposed to rinse your mouth with water to remove sugars and particles before they feed the bacteria: but that doesn't work with chocolate, toffee or other  things which stick to your teeth.&lt;br /&gt;
&lt;br /&gt;
So, don't snack on sticky sweet things between meals (fruit may be ok because fibres remove bacteria and aren't sticky), drink water after eating things, wait 10-20 minutes before brushing to soften particles stuck in your molars, brush carefully morning and evening after meals with a non-frayed toothbrush, and floss daily before brushing.   That's the comprehensive diet-and-hygiene way to avoid getting (more) cavities.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22557003-1571709645173843063?l=blog.grahampoulter.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=tanpLulHrBk:eVCKrTBGSJU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=tanpLulHrBk:eVCKrTBGSJU:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=tanpLulHrBk:eVCKrTBGSJU:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=tanpLulHrBk:eVCKrTBGSJU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=tanpLulHrBk:eVCKrTBGSJU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=tanpLulHrBk:eVCKrTBGSJU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=tanpLulHrBk:eVCKrTBGSJU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=tanpLulHrBk:eVCKrTBGSJU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=tanpLulHrBk:eVCKrTBGSJU:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=tanpLulHrBk:eVCKrTBGSJU:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/tanpLulHrBk" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.grahampoulter.com/2008/06/dentistry-and-fillings.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/1571709645173843063?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/1571709645173843063?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/tanpLulHrBk/dentistry-and-fillings.html" title="Dentistry and fillings" /><author><name>Graham Poulter</name><uri>https://profiles.google.com/116708940210757040686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qCayZZ6Uw3k/AAAAAAAAAAI/AAAAAAAACdk/WJxqm-UsVDo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_rswIZalsPuc/TK7WS1nLb0I/AAAAAAAACPA/ZRZ4HVnXgbU/s72-c/C:%5Cfakepath%5Ccakefilling.jpg" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://blog.grahampoulter.com/2008/06/dentistry-and-fillings.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEADQHo9fCp7ImA9Wx5VFU8.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-4750939478661210539</id><published>2008-05-23T11:48:00.005+02:00</published><updated>2010-10-08T10:32:51.464+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-08T10:32:51.464+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="capetown" /><category scheme="http://www.blogger.com/atom/ns#" term="journal" /><title>Cape Town Salsa</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_rswIZalsPuc/TK7XJkKHa8I/AAAAAAAACPE/FJsEjJfYPMY/s1600/C:%5Cfakepath%5Csalsa.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_rswIZalsPuc/TK7XJkKHa8I/AAAAAAAACPE/FJsEjJfYPMY/s1600/C:%5Cfakepath%5Csalsa.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;Cape Town has become Salsa city since it got going in 2005 - and I only found out about it last week!  There are Salsa lessons (close-body variety which takes less floor space) at several venues around the peninsula every night of the week, and parties as well.  Well - every lesson turns into a Salsa party afterwards.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
I ran into the Salsa crowd at Mojo's "Prohibition Party"&amp;nbsp;on Saturday, watched some advanced classes on Tuesday, and Max gave me a lift last night to the classes in town at Velvet and Deluxe last night.  Velvet lives up to its name with the roof above the bar looking like a giant cushion.   I went to Jon Morrisons' beginners class at seven, with about 25 men and 35 women.&lt;br /&gt;
&lt;br /&gt;
Beginners class starts with a warm up, teaches the basic step, then practicing a move, warm-down, and social dancing till the next class.  The beginners pattern could get old fast: Reegan's class at Delux instead ran in parallel (multiple instructors) and have an "improvers" section between beginners and intermediate where you don't have to go start with the basic step every lesson and learn two moves instead of one.  It's dancefloor etiquette to introduce yourself to each new dance partner, although there's just a few minutes before the instructor says "Ladies, move 4 men to the left!"  However one ends up dancing with several of the girls twice, and are likely see them at future lessons and parties, so it helps to remember names.  Method that works for me: be sure of having heard the person's name right, then pick out distinguishing features: even non-flattering ones. Recognising the face brings the features to mind, which call up the image, which has associations to the name.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22557003-4750939478661210539?l=blog.grahampoulter.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=10HceVP0OfI:TekKI_1GN0E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=10HceVP0OfI:TekKI_1GN0E:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=10HceVP0OfI:TekKI_1GN0E:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=10HceVP0OfI:TekKI_1GN0E:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=10HceVP0OfI:TekKI_1GN0E:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=10HceVP0OfI:TekKI_1GN0E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=10HceVP0OfI:TekKI_1GN0E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=10HceVP0OfI:TekKI_1GN0E:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=10HceVP0OfI:TekKI_1GN0E:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=10HceVP0OfI:TekKI_1GN0E:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/10HceVP0OfI" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.grahampoulter.com/2008/05/cape-town-salsa.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/4750939478661210539?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/4750939478661210539?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/10HceVP0OfI/cape-town-salsa.html" title="Cape Town Salsa" /><author><name>Graham Poulter</name><uri>https://profiles.google.com/116708940210757040686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qCayZZ6Uw3k/AAAAAAAAAAI/AAAAAAAACdk/WJxqm-UsVDo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_rswIZalsPuc/TK7XJkKHa8I/AAAAAAAACPE/FJsEjJfYPMY/s72-c/C:%5Cfakepath%5Csalsa.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.grahampoulter.com/2008/05/cape-town-salsa.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIGSXo4fyp7ImA9Wx5VFU8.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-6802984972277452638</id><published>2007-12-05T23:23:00.003+02:00</published><updated>2010-10-08T10:45:28.437+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-08T10:45:28.437+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="capetown" /><category scheme="http://www.blogger.com/atom/ns#" term="journal" /><title>Tales from ObzFest</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_rswIZalsPuc/TK7Z7d8OtVI/AAAAAAAACPQ/fJBiy_ZArWc/s1600/C:%5Cfakepath%5Cobzfest.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_rswIZalsPuc/TK7Z7d8OtVI/AAAAAAAACPQ/fJBiy_ZArWc/s1600/C:%5Cfakepath%5Cobzfest.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;That time of year: the weekend of 1/2 December was the &lt;a href="http://www.obzfestival.com/"&gt;Obz Festival&lt;/a&gt;.   It was all on my doorstep, and I was out early in the sunny-but-windy day.  Before lunch I was the sole occupant of the beanbag mountain (in the tent in the chill-zone park in Arnold Rd), listening the to the powerful beat of some jazz/rap/reggae fusion.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Later two female guitar-player/singer/songwriters and their fans arrived - &lt;a href="http://www.sugarmusic.co.za/natalia/"&gt;Natalia Segerman&lt;/a&gt; and Emma.   Elements of Emma's style are recognisable from other artists (Tracy Chapman in particular).   Natalia's songs are entirely original,  her voice gentle, and you see everything that she sings as she sings it - the beaches, the garden route, the wire dragonflies sold on the streets of Cape Town.&lt;br /&gt;
&lt;br /&gt;
All of Lower Main was a market, many stands selling women's clothes, and many more selling R30 sunglasses with "Gucci" or "D&amp;amp;G" in large font stamped on the sides.  At the Independent Armchair graffiti artists were redoing the walls outside.  One echoed the Firefox "Server not found" page - but instead of a &lt;span style="font-style: italic;"&gt;Try again&lt;/span&gt; button it said... &lt;span style="font-style: italic;"&gt;Go outside&lt;/span&gt;.  Below that was a box reading "Your earth is not available right now.  We are working on it, and it may be available again in a few aeons.  Thanks - the Facebook team".&lt;br /&gt;
&lt;br /&gt;
I acquired some &lt;a href="http://www.ancientsharkofdespair.com/"&gt;Ancient Shark of Despair&lt;/a&gt; comics from the authors (Sebastian Borkenhagen and Tom McNally), then wandered to the live music at the end of lower main, and then in a sunny afternoon daze to Obs Books to sit down and read &lt;a href="http://www.vintagelibrary.com/pd.php?pcode=lens05"&gt;Second-Stage Lensman&lt;/a&gt;.  After half an hour I realised I didn't have my sunglasses any more.  I tried on the R30 sunglasses being sold everywhere, and their fit is as bad as their look.&lt;br /&gt;
&lt;br /&gt;
I slept away the early evening and emerged around 11pm, and wandered until I ran into people I knew - Fraser, Thembisa, Anthony, Nadiem - and some new people.    The outback of Independent Armchair had a DJ in charge, and at one point a female vocalist in a neon pink evening dress somehow sang to the beat with her voice as an instrument (it was surreal).   After saying hi to Philip Owira - without whom the Cape Town social network would fragment into a thousand islands - I retired.&lt;br /&gt;
&lt;br /&gt;
The highlight of Sunday was the &lt;a href="http://www.kolonovo.com/"&gt;Kolo Novo Movie Band&lt;/a&gt;.  Outdoors, amongst the hippies of Observatory, their balkan/gypsy compositions are far more enchanting than in the packed, smoky crowds of the Armchair theatre.  The band is full of character - with Kyla-Rose Smith playing a red electric violin, the creative director (Grada Djeri) being straight out of the balkans, and Sigrun Paschke playing the accordion.&lt;br /&gt;
&lt;br /&gt;
Back home I started to read &lt;a href="http://vrinimi.org/rainbowsend.html"&gt;&lt;span style="font-style: italic;"&gt;Rainbows End&lt;/span&gt;&lt;/a&gt; by Vernor Vinge... a near-future sci-fi spawned from Web 2.0.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22557003-6802984972277452638?l=blog.grahampoulter.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=zKfaZ0ngcWI:yyplNbotuh8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=zKfaZ0ngcWI:yyplNbotuh8:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=zKfaZ0ngcWI:yyplNbotuh8:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=zKfaZ0ngcWI:yyplNbotuh8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=zKfaZ0ngcWI:yyplNbotuh8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=zKfaZ0ngcWI:yyplNbotuh8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=zKfaZ0ngcWI:yyplNbotuh8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=zKfaZ0ngcWI:yyplNbotuh8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=zKfaZ0ngcWI:yyplNbotuh8:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=zKfaZ0ngcWI:yyplNbotuh8:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/zKfaZ0ngcWI" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.grahampoulter.com/2007/12/tales-from-obzfest.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/6802984972277452638?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/6802984972277452638?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/zKfaZ0ngcWI/tales-from-obzfest.html" title="Tales from ObzFest" /><author><name>Graham Poulter</name><uri>https://profiles.google.com/116708940210757040686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-qCayZZ6Uw3k/AAAAAAAAAAI/AAAAAAAACdk/WJxqm-UsVDo/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_rswIZalsPuc/TK7Z7d8OtVI/AAAAAAAACPQ/fJBiy_ZArWc/s72-c/C:%5Cfakepath%5Cobzfest.jpg" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://blog.grahampoulter.com/2007/12/tales-from-obzfest.html</feedburner:origLink></entry></feed>

