<?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:blogger="http://schemas.google.com/blogger/2008" 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;D0QCSX0-eyp7ImA9WhBVFUs.&quot;"><id>tag:blogger.com,1999:blog-22557003</id><updated>2013-04-21T19:29:28.353+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>This is Graham Poulter</title><subtitle type="html">with some lifehacks and technology</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><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/AAAAAAAAG-I/f0UQRJRizxE/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>35</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;DUcGQng8cCp7ImA9WhBXF0s.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-5074078260820041317</id><published>2013-03-31T22:58:00.002+02:00</published><updated>2013-03-31T23:57:03.678+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-31T23:57:03.678+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>Cutting down on clutter with the Outbox Method</title><content type="html">&lt;a href="http://1.bp.blogspot.com/-TuWe17ZChXc/UVijc3TlW4I/AAAAAAAAHq0/llq8lSK-epI/s1600/livingroom.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-TuWe17ZChXc/UVijc3TlW4I/AAAAAAAAHq0/llq8lSK-epI/s320/livingroom.jpg" width="320" /&gt;&lt;/a&gt;We are only human, descendants of Homo Habilis the tool user, and we get emotionally attached to our&lt;br /&gt;
tools and memorabilia, loath to discard anything that has use or value or recalls memories. &amp;nbsp;In time this causes clutter as we acquire more durable goods than we donate, recycle or discard. &amp;nbsp;When I chose to move from Cape Town to Ireland, I also desired to strip away clutter and start afresh with only things I would actually use, plus a few sentimental or beautiful items. &amp;nbsp;In the process, I've refined a trivially simple but effective method to cut down clutter and prevent accumulation sometimes called the Outbox Method.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;b&gt;Letting go&lt;/b&gt;&lt;br /&gt;
The insight I (and many others) had is that it is stressful to let go of a many of your belongings at at once, or to let go of a belonging quickly. So, the trick is to let go gradually, both in number of items and taking time over it. To this end I placed a box by the front door, and every now and then I would look through my clothes and belongings and put the least-wanted items in the box, no matter if they were perfectly functional or could fetch money on Gumtree. &amp;nbsp;It didn't feel like I was throwing them away, more like I was segregating the things I wanted the least, and I could always pick it out of the box if I needed it or changed my mind - and sometimes I did. &amp;nbsp;After some time, the box gets full, and this is when I would make a trip to the local charity shop and donate the whole lot.&lt;br /&gt;
&lt;br /&gt;
Over the 4 months preceding the move, I made a trip to the charity shop roughly every two or three weeks, both hands holding bags of clothes and goods. &amp;nbsp;In the end, I brought 29kg on the plane, 106kg in airfreight (of which 22kg were books), and left 65kg of filing in a cupboard at my parents' home. &amp;nbsp;Since arriving in Ireland, I have donated yet another bag of clothes and three bags of goods - the latter bulked up with a lot of hangers I have no closet space for.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;One in, one out&lt;/b&gt;&lt;br /&gt;
The outbox has worked great for a mission to cut down clutter, but how does one prevent it accumulating with every trip to the mall? &amp;nbsp;For the last year or so I've been applying a "one-in, one-out" principle, that if I buy something new, I should put some equivalent amount of items in the outbox, preferably a similar item. &amp;nbsp;Unless I am desperately short of t-shirts, for every new t-shirt I buy an old shirt goes in the outbox.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Dress better without buying anything&lt;/b&gt;&lt;br /&gt;
An aside on wardrobes: they tend to be tiered, with house clothes, casual clothes, work clothes, clothes for going out, and formal clothes. &amp;nbsp;I've found that if you donate your house clothes, you don't suddenly find yourself with nothing to wear - rather your oldest casual clothes become your house clothes, and some evening-out clothes become casual clothes. &amp;nbsp;In other words, you can improve your wardrobe not just by buying new items, but by donating old ones.&lt;br /&gt;
&lt;br /&gt;
Right now I have very little clutter, everything fits in the cupboards, and I intend to keep it that way. &amp;nbsp;Yes, that is my living room.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=V7AhfP1LdoA:veMfYPZP3jg: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=V7AhfP1LdoA:veMfYPZP3jg:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=V7AhfP1LdoA:veMfYPZP3jg:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=V7AhfP1LdoA:veMfYPZP3jg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=V7AhfP1LdoA:veMfYPZP3jg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=V7AhfP1LdoA:veMfYPZP3jg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=V7AhfP1LdoA:veMfYPZP3jg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=V7AhfP1LdoA:veMfYPZP3jg: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=V7AhfP1LdoA:veMfYPZP3jg:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=V7AhfP1LdoA:veMfYPZP3jg:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/V7AhfP1LdoA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.grahampoulter.com/feeds/5074078260820041317/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=22557003&amp;postID=5074078260820041317" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/5074078260820041317?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/5074078260820041317?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/V7AhfP1LdoA/cutting-down-on-clutter-with-outbox.html" title="Cutting down on clutter with the Outbox Method" /><author><name>Graham Poulter</name><uri>https://plus.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/AAAAAAAAG-I/f0UQRJRizxE/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-TuWe17ZChXc/UVijc3TlW4I/AAAAAAAAHq0/llq8lSK-epI/s72-c/livingroom.jpg" height="72" width="72" /><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://blog.grahampoulter.com/2013/03/cutting-down-on-clutter-with-outbox.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcERHk8fSp7ImA9WhBXF0s.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-339084990913142836</id><published>2013-03-14T23:15:00.001+02:00</published><updated>2013-03-31T23:56:45.775+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-31T23:56:45.775+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>Taking notes in a notebook made from trees</title><content type="html">&lt;a href="http://2.bp.blogspot.com/-Ofa3LTodFno/UUI9Iqnli2I/AAAAAAAAHbQ/hs9_KJfBfy4/s1600/notebook.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/-Ofa3LTodFno/UUI9Iqnli2I/AAAAAAAAHbQ/hs9_KJfBfy4/s1600/notebook.jpg" /&gt;&lt;/a&gt;A few weeks ago I started a new job that calls for a lot of training, and I chose to take notes using a dead-tree notebook instead of a notebook computer (gasp!). &amp;nbsp;The notebook itself was conference swag dating from 2011, and happened to be&amp;nbsp;a a&amp;nbsp;&lt;a href="http://www.moleskine.com/en/collections/model/product/ruled-soft-notebook-large"&gt;Moleskine Ruled Soft Notebook Large&lt;/a&gt; (13x21cm, 192 pages). I have since grown fond of it and finished the last page today. Yesterday I bought another despite the disturbingly high price per page (on Amazon it's about 30% less and still pricey).&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
The last time I did weeks worth of note-taking was 2005, so when I started again a few weeks ago my notes were messy with little structure, lacking ways to find notes or identify the subject of a page without reading it. &amp;nbsp;But I've re-learned and refined some techniques over the many training sessions. Here are some methods I favor at the moment:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Write the title of the session in centered block capitals, keeping some empty space around it.&lt;/li&gt;
&lt;li&gt;Write the date in the page corner (I write them like 2013.03.14) - these do double duty as a form of page numbering besides answering "When the hell did I write this?"&lt;/li&gt;
&lt;li&gt;Adjacent the date include a compressed form of the title of the lecture or meeting, this labels the rough subject of the text and makes it easy to riffle to an entry.&lt;/li&gt;
&lt;li&gt;Use colored pens to make important text stand out. The scheme I use is roughly:&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;Black: most text and section headings.&lt;/li&gt;
&lt;li&gt;Red: newly-defined term or paragraph subject, and also key terms and points.&lt;/li&gt;
&lt;li&gt;Blue: external references like URLs, and later annotations.&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;Use first 6 pages for a table of contents. &amp;nbsp;Why 6? &amp;nbsp;This leaves 192-6=186 pages, and I get about 23-25 titles per 30-line page, so 6 pages gives 140-150 titles.&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;For each entry, write the date in red followed by the title in black.&lt;/li&gt;
&lt;li&gt;For conferences, put the conference title on it's own line, with dated talks indented on the following lines.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div&gt;
For later notes at least, I have a nicely indexed, easy to find-and-identify sequence of notes in which the subject keys and external references stand out clearly.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
But why did I opt for the notebook technology state of the art in 1800 C.E., when I was also issued with a lightweight, latest-model 13" MacBook Air on my first day? Well, I did use the MacBook at first. But the first time I did so, another attendee tapped me on the shoulder to tell me the sound of typing was breaking her concentration. I suppose I was typing too fast and too much: the temptation for a fast typist is to take down nearly-verbatim what the speaker is saying as they say it. &amp;nbsp;But I want key concepts, not a complete dictation! Quality over quantity. With digital notes I also feel like editing them during the session, or I'm tempted to quickly search on something the speaker mentions - when I should be paying attention to what the speaker is saying. Afterwards. even though I rarely revisit the notes, they take up visual space in my notes folder, vying for attention and turning up unwanted in search results, becoming clutter. &amp;nbsp;And they're still editable, with the temptation to tend them later.&lt;br /&gt;
&lt;br /&gt;
With a paper notebook, the slowness of handwriting forces me to stick to key concepts, the permanence of pen and paper prevents me from turning my attention to editing, and the linear succession of notes is it's own form of organisation. &amp;nbsp;And using an attractively-bound notebook makes me feel like keeping the notes around instead of tossing them in the trash.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=phqyKdiq5ww:jOVR1P_WlbI: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=phqyKdiq5ww:jOVR1P_WlbI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=phqyKdiq5ww:jOVR1P_WlbI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=phqyKdiq5ww:jOVR1P_WlbI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=phqyKdiq5ww:jOVR1P_WlbI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=phqyKdiq5ww:jOVR1P_WlbI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=phqyKdiq5ww:jOVR1P_WlbI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=phqyKdiq5ww:jOVR1P_WlbI: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=phqyKdiq5ww:jOVR1P_WlbI:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=phqyKdiq5ww:jOVR1P_WlbI:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/phqyKdiq5ww" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.grahampoulter.com/feeds/339084990913142836/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=22557003&amp;postID=339084990913142836" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/339084990913142836?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/339084990913142836?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/phqyKdiq5ww/taking-notes-in-notebook-made-from-trees.html" title="Taking notes in a notebook made from trees" /><author><name>Graham Poulter</name><uri>https://plus.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/AAAAAAAAG-I/f0UQRJRizxE/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-Ofa3LTodFno/UUI9Iqnli2I/AAAAAAAAHbQ/hs9_KJfBfy4/s72-c/notebook.jpg" height="72" width="72" /><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://blog.grahampoulter.com/2013/03/taking-notes-in-notebook-made-from-trees.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUASHw5eyp7ImA9WhNTGEU.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-1705315374799808997</id><published>2012-10-21T16:58:00.000+02:00</published><updated>2012-10-22T07:04:09.223+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-10-22T07:04:09.223+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="lifehack" /><category scheme="http://www.blogger.com/atom/ns#" term="review" /><title>Review and summary of "The Blue Zones"</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-NmSHmufyj-0/UIQH-XRHv5I/AAAAAAAAGJc/203B0klt_8U/s1600/20100131_Blue_Zone.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/-NmSHmufyj-0/UIQH-XRHv5I/AAAAAAAAGJc/203B0klt_8U/s200/20100131_Blue_Zone.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
The book is titled "The Blue Zones: Lessons for living longer from the people who've lived the longest" by Dan Buettner. &amp;nbsp;The big idea is that some parts of the world have significantly more people living to 100 years old than the global average, so let's see what's different or notable about how them and their ways of living, because maybe there's something to learn from them. &amp;nbsp;There's a smattering of input from scientists at the beginning and end of the book, but the bulk of the content is personal observations, anecdotes from centenarians, and travelogue of Buettner's "Blue Zone Quest".&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;i&gt;Warning&lt;/i&gt;: "look at the successful people" is a common approach popularised by the "get rich" sub-genre of self-help books. But what the approach finds is possibly-spurious correlations. &amp;nbsp;For example, Dan observed that several centenarians are fond of an evening glass of red wine , or port, or saki - but it is a massive jump from observing moderate &lt;a href="http://skeptics.stackexchange.com/questions/9797/is-a-glass-of-red-wine-a-day-beneficial-for-the-heart"&gt;red wine consumption&lt;/a&gt;&amp;nbsp;in some old people to concluding that a nightcap will &amp;nbsp;add years to your life. &amp;nbsp;Yes, look at the centenarians to generate hypotheses, but life is much too short to take up everything that seems notable about their behaviour without solid evidence for cause-and-effect.&lt;br /&gt;
&lt;br /&gt;
Why did I blog about this? &amp;nbsp;The book has been on my shelf since 2009, mostly a waste of space and money. &amp;nbsp;Blogging is the motivation to read it before giving it to charity. &amp;nbsp;And, I've decided that if I read something (non-fiction), I may as well take some time to summarise it, and if I've summarised it I may as well blog it.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;Buettner picks out four "&lt;a href="https://en.wikipedia.org/wiki/Blue_Zone"&gt;Blue Zones&lt;/a&gt;" (Wikipedia article, worth reading): "Okinawa, Japan; Sardinia, Italy; Nicoya, Costa Rica; Ikaria, Greece; and among the Seventh Day Adventists in Loma Linda, California" - communities which have well-above-average number of centenarians per capita.&lt;br /&gt;
&lt;br /&gt;
The next three paragraphs are actually all points from the first chapter:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;About aging:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Twin studies find genetic factors explain about 25% of variation in lifespan.&lt;/li&gt;
&lt;li&gt;Gerontologists define aging by the risk of dying. &amp;nbsp;Increasing age is the overarching factor in the continuous risk of dying, but it's not the sole determiner. &amp;nbsp;&lt;/li&gt;
&lt;li&gt;Many of the changes described as associated with ageing - becoming farsighted, graying and loss of hair, loss of collagen in skin - are not universal.&lt;/li&gt;
&lt;li&gt;On average, a 30 year old alive today has a reasonable chance of living to late 70's or early 80's. It would be a decade more, but for a few major risk factors (heart disease, cancer, stroke).&lt;/li&gt;
&lt;li&gt;Bodies are like cars built for 200,000km: a few such cars will go to 300,000km or more, but all deteriorate over time even with the best upkeep. &amp;nbsp;With deterioration comes frailty: when you hit a bump, you are less capable of bouncing back. &amp;nbsp;At some point there's no bounce-back, and then you die (paraphrased from Tom Pearls)&lt;/li&gt;
&lt;li&gt;Estimating chances depends on current age. &amp;nbsp;Chance of a 80-year-old living to 100 is much better than a newborn. &amp;nbsp;Looking backwards, most centenarians were quite healthy at 80.&lt;/li&gt;
&lt;li&gt;Living to 100 is like picking 5 lottery balls to win. &amp;nbsp;Removing major risk factors can reduce the required balls from 5 to 4.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;Improving chances:&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;There is no pill that universally "extends life".&amp;nbsp;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Anti-oxidants? Bah humbug: junk foods like twinkies are full of them to ensure long shelf-life.&lt;/li&gt;
&lt;li&gt;Vitamins? Get your basic requirements, which is easily attainable by eating fruit and veg. &amp;nbsp;Any more does not help, and large quantities may cause problems.&lt;/li&gt;
&lt;li&gt;Hormones? Simply dangerous. Forget about it.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Diet: reasonable diet, looking for moderation in calories, and balancing the calories across carbohydrates, fats, proteins. &amp;nbsp;Taking in what you really need.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Exercise: prefer changes to your lifestyle, over exercise for the sake of exercising. &amp;nbsp;Bike or walk instead of driving. &amp;nbsp;Exercise built into your lifestyle has better chances of being sustained. &amp;nbsp;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Swimming is a great cardiovascular exercise. &amp;nbsp;&amp;nbsp;But for bones, exercises that use gravity (like walking) are better. &amp;nbsp; &amp;nbsp;&lt;/li&gt;
&lt;li&gt;Marathon runners have great cardiovascular systems, but their joints give out.&lt;/li&gt;
&lt;li&gt;Walking helps muscle and bone, without the joint pounding of running.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Living more "good years". &amp;nbsp;Who wants to live an extra 2 years on life support? &amp;nbsp;The real question is: how can you delay the onset of disability? &amp;nbsp; Aim for "successful aging" rather than mere lifespan.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;Things that may help with living longer:&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Social connectedness. &amp;nbsp;If nothing else, it makes life more worthwhile.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;But it's very individual. For example, you can't say that "family support" is universally good: some people are very anxious and upset about their families.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Doing something you find interesting and worthwhile. &amp;nbsp;If your work is driven by internal passion, rather than externalities like money, then it's less stressful.&lt;/li&gt;
&lt;li&gt;Get rid of anti-aging quackery. &amp;nbsp;It costs you money, and often harms you. &amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
And this is all from the last chapter, which picks out the common observations from the previous five chapers:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Buettner's "9 lessons" for living longer:&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;i&gt;Move Naturally&lt;/i&gt;: incorporate exercise into your lifestyle.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Hara Haichu Bi&lt;/i&gt;: Confucian reminder common in Okinawa, to stop eating when you are 80% full. &amp;nbsp;Combined with eating the right foods, it keeps obesity away. &amp;nbsp;It's the difference between stopping when you are full, and stopping when you are no longer hungry. &amp;nbsp;Weight gain is not from stuffing yourself, rather it's from eating a bit more than you need every day. &amp;nbsp;Prefer foods with lower caloric density.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Prefer plant foods&lt;/i&gt;. &amp;nbsp;A mostly plant-based diet accented with meat. We do need protein at each meal, but not much. Also, eat legumes.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Wine at 5&lt;/i&gt;. &amp;nbsp;&lt;i&gt;Note&lt;/i&gt;: the "glass of red in the evening" advice is not on a solid evidential footing. &amp;nbsp;When it comes to health benefits of alcoholic beverages, it's all swings and roundabouts.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Sense of purpose&lt;/i&gt;: live longer by having something worth getting up for in the morning. &amp;nbsp;Take up something new, so you don't stagnate.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Have down-time: &lt;/i&gt;regular times to slow down, unwind, de-stress. &amp;nbsp;"Life is short, don't run so fast you miss it"&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Belong (to a community)&lt;/i&gt;: Buettner lists religious communities. I would add that there are many of communities built around common interests, that don't require their members to believe in fairy tales.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Loved ones first: &lt;/i&gt;the centenarians live in multi-generational homes where younger generations care for the older ones, with strict "honor the elders" cultural norms. &amp;nbsp;That's a rarity now in Western societies, and fewer healthy years for the elders is the price.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;"Right Tribe" (being around the right people): &lt;/i&gt;the Blue Zones have tight-knit communities for social connectedness, and social circles that promote healthy lifestyles. The centenarians also tend to be likeable: "there was not one grump amongst them".&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=QyQRW8jUPtQ:CD3S7qv1xP4: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=QyQRW8jUPtQ:CD3S7qv1xP4:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=QyQRW8jUPtQ:CD3S7qv1xP4:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=QyQRW8jUPtQ:CD3S7qv1xP4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=QyQRW8jUPtQ:CD3S7qv1xP4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=QyQRW8jUPtQ:CD3S7qv1xP4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=QyQRW8jUPtQ:CD3S7qv1xP4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=QyQRW8jUPtQ:CD3S7qv1xP4: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=QyQRW8jUPtQ:CD3S7qv1xP4:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=QyQRW8jUPtQ:CD3S7qv1xP4:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/QyQRW8jUPtQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.grahampoulter.com/feeds/1705315374799808997/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=22557003&amp;postID=1705315374799808997" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/1705315374799808997?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/1705315374799808997?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/QyQRW8jUPtQ/review-and-summary-of-blue-zones.html" title="Review and summary of &quot;The Blue Zones&quot;" /><author><name>Graham Poulter</name><uri>https://plus.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/AAAAAAAAG-I/f0UQRJRizxE/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-NmSHmufyj-0/UIQH-XRHv5I/AAAAAAAAGJc/203B0klt_8U/s72-c/20100131_Blue_Zone.jpg" height="72" width="72" /><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://blog.grahampoulter.com/2012/10/review-and-summary-of-blue-zones.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYBQnk-eSp7ImA9WhJVGE4.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-422004300665643126</id><published>2012-09-01T13:55:00.000+02:00</published><updated>2012-09-05T09:29:13.751+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-09-05T09:29:13.751+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="lifehack" /><category scheme="http://www.blogger.com/atom/ns#" term="review" /><title>Summary of Time Management for System Administrators</title><content type="html">&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a class="vt-p" href="http://1.bp.blogspot.com/--D1fHhJUjp4/UEH3BU6aRlI/AAAAAAAAGEg/MJGZvh4oXZk/s1600/time_management.gif" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/--D1fHhJUjp4/UEH3BU6aRlI/AAAAAAAAGEg/MJGZvh4oXZk/s1600/time_management.gif" /&gt;&lt;/a&gt;&lt;/div&gt;
This post summarises and reviews the book "&lt;a class="vt-p" href="http://shop.oreilly.com/product/9780596007836.do"&gt;Time Management for System Administrators&lt;/a&gt;" (companion site: &lt;a class="vt-p" href="http://everythingsysadmin.com/"&gt;Everything Sysadmin&lt;/a&gt;) by Thomas A. Limoncelli. &amp;nbsp; My role increasingly includes systems to administer, which means more interruptions taking away from development projects, so hopefully this will be useful.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;b&gt;Core Principles&lt;/b&gt;&lt;br /&gt;
I enjoyed the principles he presented with computer analogies, which I've paraphrased:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Conserve RAM&lt;/i&gt;: Working memory is like CPU cache, short-term memory is like RAM, long-term memory is like a hard disk - and a digital task-management system is like an SSD. &amp;nbsp;Page out all future tasks and appointments to your task manager, freeing your short-term memory for the project at hand.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Conserve CPU&lt;/i&gt;: Cultivate routines, habits and precomputed decisions - &amp;nbsp;"Think once, reuse the result many times" - so you can allocate more of your thought-cycles to projects. &lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Lock critical sections&lt;/i&gt;: Shield yourself from distractions and interruptions during Project Time. &lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Minimise context switches&lt;/i&gt;: Deal efficiently with interruptions to reduce context switching costs.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Prioritise like QoS&lt;/i&gt;: Too many packets arriving? Drop low-priority packets from the middle of the queue.&lt;br /&gt;
&lt;br /&gt;
Then there were some major themes: deflecting interruptions, developing routines, and managing workflow. &amp;nbsp;Below I've paraphrased summaries of key ideas under those headings.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Deflecting Interruptions&lt;/b&gt;&lt;br /&gt;
Interrupts costs a context switch, time to deal with it, another context switch back, and any time to fix mistakes you made due to broken concentration.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;If someone has to be on-call for interruptions, take it in shifts with a buddy to be the "Interruption Shield" (or "Interrupt Handler" :)&lt;/li&gt;
&lt;li&gt;Interruptors only need to feel acknowledged, most of the time the task can be done later.&lt;/li&gt;
&lt;li&gt;Perform one of 3 actions while the interruptor is present, then say "thank you" and the interaction is over:&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;&lt;ol&gt;
&lt;li&gt;Delegate the task to a specific person.&lt;/li&gt;
&lt;li&gt;Record the task in your ticket system for later.&lt;/li&gt;
&lt;li&gt;Do the task there and then, while they watch you.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Worst outcome to avoid: for the interruptor to leave you there busy with their task.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;Setting aside Project Time&lt;/b&gt;&lt;br /&gt;
Advice on working on large projects, as opposed to independent tasks.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Use your hour(s) of "Peak Brain Power" for Tough Project time. &amp;nbsp; Often the first hours, before the office is full and people are interrupting (or late at night, if you lack a social life).&lt;/li&gt;
&lt;li&gt;First hour is totally wasted if you use it to catch up on mail or news.&lt;/li&gt;
&lt;li&gt;Remove distractions by turning off IM, email, feeds, notifications.&lt;/li&gt;
&lt;li&gt;Deflect interruptions using the "Delegate, Record or Do" rule.&lt;/li&gt;
&lt;li&gt;DO NOT check mail first thing. &amp;nbsp;(1) no-one's there to read your replies anyway, (2) anything really important should be SMSd to you, or at least blink on your monitoring dashboard, (3) you know you would be compelled to read ALL the mail.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;Developing Routines&lt;/b&gt;&lt;br /&gt;
Routines save both "RAM" because they are easier to remember, and "CPU" because you can compute the routine once and then use it over and over.&lt;br /&gt;
&lt;br /&gt;
Some good routines and pre-computed choices:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;First thing in the morning, make your daily list based on calendar, task list, request tracker.&lt;/li&gt;
&lt;li&gt;One hour per day assigned to flush queued-up "interrupt" tasks.&lt;/li&gt;
&lt;li&gt;Weekly meeting with your line manager.&lt;/li&gt;
&lt;li&gt;Weekly customer walk-around to check for unreported issues.&lt;/li&gt;
&lt;li&gt;Weekly hour devoted to catching up on news.&lt;/li&gt;
&lt;li&gt;Weekly hour for clearing accumulated emails (delete, or to the wiki or ticket system)&lt;/li&gt;
&lt;li&gt;Whenever using a door, check for your keys or access card.&lt;/li&gt;
&lt;li&gt;Whenever editing an unversioned file, make a dated backup, whether it's important or not.&lt;/li&gt;
&lt;li&gt;Call vendors early in the morning, gives them the whole day to work the bureaucracy.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;b&gt;Managing Workflow &amp;nbsp;(the Cycle System)&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Limoncelli first identifies some examples of bad systems: Pile of Post-it Notes, and the Giant Ever-Growing Todo List of Doom. &amp;nbsp;Much of the book is about his agile-like "Cycle" system, where you create a separate list for each day of the year and can feel good about completing the just the day's tasks. &amp;nbsp;It combines task list and calendar.&amp;nbsp;His system also combines office life and the rest of his life, because sysadmins blur the two anyway. His one daily list contains both employer entries at the top, and personal entries torwards the bottom.&lt;br /&gt;
&lt;br /&gt;
He stresses the importance of using just one system to handle everything. &amp;nbsp;Unfortunately I have Calendar(s), JIRA &lt;a class="vt-p" href="http://www.atlassian.com/software/greenhopper/overview"&gt;GreenHopper&lt;/a&gt; board at work, &lt;a class="vt-p" href="https://www.rememberthemilk.com/"&gt;Remember The Milk&lt;/a&gt; for personal tasks, and &lt;a class="vt-p" href="http://trello.com/"&gt;Trello &lt;/a&gt;to track personal projects. &amp;nbsp;That's 5 systems, each with distinct advantages for different tasks. &amp;nbsp;The problem is there's no one place where I can go to see what I'm doing today. &amp;nbsp;To combine them I'm going to do the Daily List in the first 10 minutes of the morning, just a &lt;a class="vt-p" href="https://www.dropbox.com/"&gt;Dropbox&lt;/a&gt; text file, with short-hand titles of each task and appointment for the day, A/B/C priority and time limit, and maybe a link back to its source.&lt;br /&gt;
&lt;br /&gt;
Some options for handling overflow, where there's too much for one day:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Punt low priorities to the next day.&lt;/li&gt;
&lt;li&gt;Split large tasks&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Cut the scope of large tasks&lt;/li&gt;
&lt;li&gt;Ask boss for help prioritising&lt;/li&gt;
&lt;li&gt;Delegate tasks&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;Prioritisation&lt;/b&gt;&lt;br /&gt;
Advice on prioritising, since there's no end to the tasks.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Drop low-priority tasks like QoS if you're flooded with new tasks.&lt;/li&gt;
&lt;li&gt;Give higher priority to projects based on impact: Think of Return on Investment (ROI).&lt;/li&gt;
&lt;li&gt;Reorder tasks by customer perception of how long it takes: what the customer thinks of as a "quick task" should go first. &amp;nbsp;&lt;/li&gt;
&lt;li&gt;"Hurry up and wait" tasks (like ordering new hardware) should also go first.&lt;/li&gt;
&lt;li&gt;&amp;nbsp;Special priority for requests from your boss.&lt;/li&gt;
&lt;li&gt;Manage your boss: (1) share your career goals, (2) only delegate upwards if it requires boss's authority, (3) understand boss's goals and help accomplish them.&lt;/li&gt;
&lt;li&gt;Fix conflicting priorities by getting the sources to communicate with each other.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;General Advice&lt;/b&gt;&lt;br /&gt;
Collected a few unrelated bits and pieces:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Procrastination can arise from fear (of change) and doubt (of succeeding).&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Self-esteem is like poker chips you need to make "bets" on life, chips that can be increased by kind acts - and you can be kind to yourself.&lt;/li&gt;
&lt;li&gt;Fall asleep like a PC: dump contents of RAM to disk, then hibernate. &amp;nbsp;RAM needs to be powered on and continually refreshed. &amp;nbsp;Meaning: empty all the issues taking up your attention (RAM) onto paper (disk) so that your brain can hibernate without fear of forgetting.&lt;/li&gt;
&lt;li&gt;Don't trust your brain. &amp;nbsp;If someone asks you for something verbally and you cannot record it immediately, ask them to send you mail or open a ticket - as opposed to just saying "yes, I'll do it".&lt;/li&gt;
&lt;li&gt;Don't work late. Most people have 4 or 5 productive hours in them each day, and the rest is spinning your wheels.&lt;/li&gt;
&lt;li&gt;Vacations: single days and long weekends are not enough! Takes a few days to really unwind, and you don't want a backlog of chores. &amp;nbsp;Take long vacations, with no computer.&lt;/li&gt;
&lt;li&gt;Pick from a limited set of email actions: Filter, Delete Unread, Read and Delete, Read and File, Read and Reply Then Delete, Read And Delegate Then Delete, Do Now And Delete. &amp;nbsp;Record any important information elsewhere (e.g. wiki), because email sucks at everything.&lt;/li&gt;
&lt;li&gt;Make a shell alias or function any time it takes you a few minutes to construct a command line.&lt;/li&gt;
&lt;li&gt;Time waster is anything with low ratio of reward to time spent. &amp;nbsp;Tempting time wasters are irresistible and pull you in: you need a rule to set a timer to avoid wasting hours.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;Mantras&lt;/b&gt;&lt;br /&gt;
Scattered about the book were a few sayings that he to hand:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Sooner is better than later.&lt;/li&gt;
&lt;li&gt;Yes I can.&lt;/li&gt;
&lt;li&gt;Don't trust your brain.&lt;/li&gt;
&lt;li&gt;Think once, do many.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
My evaluation: "Time Management for System Administrator" is a book worth reading at least once (the first half more so than the second half)&amp;nbsp;if you experience a lot of interruptions because sysadmin makes up at least part of your job.&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=imikt0cHD20:gIWU9TZNbA4: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=imikt0cHD20:gIWU9TZNbA4:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=imikt0cHD20:gIWU9TZNbA4:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=imikt0cHD20:gIWU9TZNbA4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=imikt0cHD20:gIWU9TZNbA4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=imikt0cHD20:gIWU9TZNbA4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=imikt0cHD20:gIWU9TZNbA4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=imikt0cHD20:gIWU9TZNbA4: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=imikt0cHD20:gIWU9TZNbA4:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=imikt0cHD20:gIWU9TZNbA4:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/imikt0cHD20" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.grahampoulter.com/feeds/422004300665643126/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=22557003&amp;postID=422004300665643126" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/422004300665643126?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/422004300665643126?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/imikt0cHD20/summary-of-time-management-for-system.html" title="Summary of Time Management for System Administrators" /><author><name>Graham Poulter</name><uri>https://plus.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/AAAAAAAAG-I/f0UQRJRizxE/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/--D1fHhJUjp4/UEH3BU6aRlI/AAAAAAAAGEg/MJGZvh4oXZk/s72-c/time_management.gif" height="72" width="72" /><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://blog.grahampoulter.com/2012/09/summary-of-time-management-for-system.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8MQHY8eSp7ImA9WhJWFks.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-3410380632761409977</id><published>2012-08-22T22:41:00.001+02:00</published><updated>2012-08-22T22:54:41.871+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-22T22:54:41.871+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="analysis" /><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="review" /><title>MemSQL's recipe for a SQL database that's as fast as memcached</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a class="vt-p" href="http://1.bp.blogspot.com/-VbCNnpnNyIg/UDVA5UjLCBI/AAAAAAAAF9w/-6ndBA8cSIQ/s1600/memsql.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="177" src="http://1.bp.blogspot.com/-VbCNnpnNyIg/UDVA5UjLCBI/AAAAAAAAF9w/-6ndBA8cSIQ/s200/memsql.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
This post summarises the points I found interesting in the longer High Scalability post entitled "&lt;a class="vt-p" href="http://highscalability.com/blog/2012/8/14/memsql-architecture-the-fast-mvcc-inmem-lockfree-codegen-and.html"&gt;MemSQL Architecture - The Fast (MVCC, InMem, LockFree, CodeGen) And Familiar (SQL)&lt;/a&gt;" that gives an overview of the architecture of MemSQL, which is&amp;nbsp;a SQL database reinvented for 21st-century hardware. &amp;nbsp;MemSQL's developers claim it to be the fastest database in the world, or at least so fast that you won't benefit from memcached, thus simplifying your app architecture.&lt;br /&gt;
&lt;div&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Below are what I find to be the most interesting points about its architecture: &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;All queries are served from memory: db size limited by RAM. The maximum RAM is malloc'd on startup and never paged out.&lt;/li&gt;
&lt;li&gt;Uses MySQL protocol: works with existing MySQL client libraries. &amp;nbsp;That's a stroke of genius right there.&lt;/li&gt;
&lt;li&gt;Generates C++ from SQL templates and retains the generated code between restarts. &amp;nbsp;MemSQL employs an ex-Facebook dev who knows Facebook's HipHop PHP-to-C++ compiler.&lt;/li&gt;
&lt;li&gt;Tables and indexes built on lock-free lists, skip-lists and hash tables, permitting full concurrency on 64-core systems (but does take a row lock to handle write-write conflicts)&lt;/li&gt;
&lt;li&gt;By default transactions queue the writes and return immediately, but you can force full durability by setting transaction buffer size to 0.&lt;/li&gt;
&lt;li&gt;Background thread groups the writes and appends to logfiles as fast as the disk will allow. Logfiles on reaching 2GB are consolidated into structured snapshots for faster startup. &amp;nbsp;Sequential writes only.&lt;/li&gt;
&lt;li&gt;Shards are shared-nothing, so each write transaction can only write to one shard. Aggregation queries across shards work much like MapReduce.&lt;/li&gt;
&lt;li&gt;Uses multi-version concurrency (MVCC): write transactions add new versions of the row to a linked list, so that concurrent transactions still see the old values.&lt;/li&gt;
&lt;/ul&gt;
There are some limitations though:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Restricted SQL support for now: no support for outer joins, views, stored procs, user functions, triggers, foreign keys or non-utf8 charsets.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;READ COMMITTED isolation only.&lt;/li&gt;
&lt;li&gt;Not free, currently licensed by cpu-hours&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
And commenters point out some more:&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Skip-lists are not friendly to CPU caches - memory access jumps around a lot during traversal. &lt;i&gt;Counter-comment&lt;/i&gt;: benefit of caching is in the hit ratio. &amp;nbsp;Randomly querying a 64GB in-memory database when the CPU has a few MB cache, the hit ratio will be low no matter what data structure you use.&lt;/li&gt;
&lt;li&gt;C++ compilation will make the first query for each pattern really slow&lt;/li&gt;
&lt;li&gt;Will take many years to catch up to the features of existing SQL databases, if they can even be supported efficiently.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=TUmv165pLk8:_HEJw6gKmL4: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=TUmv165pLk8:_HEJw6gKmL4:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=TUmv165pLk8:_HEJw6gKmL4:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=TUmv165pLk8:_HEJw6gKmL4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=TUmv165pLk8:_HEJw6gKmL4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=TUmv165pLk8:_HEJw6gKmL4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=TUmv165pLk8:_HEJw6gKmL4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=TUmv165pLk8:_HEJw6gKmL4: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=TUmv165pLk8:_HEJw6gKmL4:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=TUmv165pLk8:_HEJw6gKmL4:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/TUmv165pLk8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.grahampoulter.com/feeds/3410380632761409977/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=22557003&amp;postID=3410380632761409977" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/3410380632761409977?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/3410380632761409977?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/TUmv165pLk8/memsqls-recipe-for-sql-database-thats.html" title="MemSQL's recipe for a SQL database that's as fast as memcached" /><author><name>Graham Poulter</name><uri>https://plus.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/AAAAAAAAG-I/f0UQRJRizxE/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-VbCNnpnNyIg/UDVA5UjLCBI/AAAAAAAAF9w/-6ndBA8cSIQ/s72-c/memsql.jpg" height="72" width="72" /><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://blog.grahampoulter.com/2012/08/memsqls-recipe-for-sql-database-thats.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QGR3s7eSp7ImA9WhJWFU4.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-4109190622512029954</id><published>2012-08-12T13:52:00.000+02:00</published><updated>2012-08-21T10:55:26.501+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-21T10:55:26.501+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="windows" /><category scheme="http://www.blogger.com/atom/ns#" term="review" /><title>A comparison of file synchronisation software</title><content type="html">This is my biased comparison of the following free software for local file synchronisation:&amp;nbsp;FreeFileSync,&amp;nbsp;SyncToy,&amp;nbsp;Create Synchronicity,&amp;nbsp;cwRsync, WinRoboCopy,&amp;nbsp;Unison,&amp;nbsp;DirSyncPro and&amp;nbsp;Synkron.&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;TL;DR:&amp;nbsp;&lt;a class="vt-p" href="http://sourceforge.net/projects/freefilesync/"&gt;FreeFileSync&lt;/a&gt;&amp;nbsp;is the best of the bunch, especially for two-way sync.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Given uncapped internet and money to spare,&amp;nbsp;&lt;a class="vt-p" href="http://dropbox.com/"&gt;Dropbox&lt;/a&gt;&amp;nbsp;would be an excellent all-round solution that puts your files on every computer you use and keeps them all in sync, and lets you recover deleted files. &amp;nbsp; &amp;nbsp;I also use&amp;nbsp;&lt;a class="vt-p" href="https://drive.google.com/"&gt;Google Drive&lt;/a&gt;&amp;nbsp;for for document storage:&amp;nbsp;word processing, spreadsheets and PDFs. &amp;nbsp; However, for those of us with multiple computers, need for backups, and caps on our home internet connection, there remains a requirement for offline software to synchronise camera photos, videos and other large files. &lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a class="vt-p" href="http://sourceforge.net/projects/freefilesync/"&gt;&lt;b&gt;FreeFileSync&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a class="vt-p" href="http://3.bp.blogspot.com/-DjLQGDW8IBA/UCf7HopmiPI/AAAAAAAAF80/QIQSlCVtT6Y/s1600/freefilesync.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="135" src="http://3.bp.blogspot.com/-DjLQGDW8IBA/UCf7HopmiPI/AAAAAAAAF80/QIQSlCVtT6Y/s200/freefilesync.jpg" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="font-size: 13px; text-align: center;"&gt;FreeFileSync&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
FreeFileSync does 1-way mirror and 2-way sync. &amp;nbsp;For 2-way sync it builds a hidden ".sync.ffs_db" database in each root that enables it to speed up sync when files have been renamed, and determine in which direction to sync new or deleted files. The UI makes it easy to specify entire subfolders to sync to the right or left or exclude temporarily. &amp;nbsp;FreeFileSync is a C++ app cross-platform for Win, Mac and Linux. &amp;nbsp;It loads huge directories (100,000+ files) easily.&lt;br /&gt;
&lt;br /&gt;
Tip: to sync a tree of symlinks, set "Symbolic Link Handling" to "Follow" under the "Compare" gear-icon. &amp;nbsp;If part of the tree has complex&amp;nbsp;changes coming from both sides, it's worth using the "temp exclude" feature to focus down to the tricky part and tweak the direction choices.&lt;br /&gt;
&lt;br /&gt;
Cons: No biggies, but there's a learning curve for discovering the features. &amp;nbsp;FFS is not &lt;i&gt;fully&lt;/i&gt;&amp;nbsp;automatic - it's worth checking the sync preview in case of conflicting changes on both sides.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: right;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;b&gt;&lt;a class="vt-p" href="http://www.microsoft.com/en-us/download/details.aspx?id=15155"&gt;SyncToy&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; text-align: right;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a class="vt-p" href="http://1.bp.blogspot.com/-0hmsaJSihOQ/UCd8JMwkxMI/AAAAAAAAF8c/Q6I8VZJ242o/s1600/synctoy.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="151" src="http://1.bp.blogspot.com/-0hmsaJSihOQ/UCd8JMwkxMI/AAAAAAAAF8c/Q6I8VZJ242o/s200/synctoy.png" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="font-size: 13px; text-align: center;"&gt;SyncToy&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
SyncToy is a popular older offering, fast and simple to use. &amp;nbsp;It creates a SyncToy_{GUID}.dat database file in the root of each folder.&lt;br /&gt;
&lt;br /&gt;
Cons: SyncToy throws errors on junctions and directory links. It's Windows only and was last updated in 2009. The SyncToy_*.dat files in the sync roots are annoying to look at. &amp;nbsp;2-way sync works but the 1-way sync "Echo mode" &lt;a class="vt-p" href="http://popcorn.cx/blog/2010/02/synctoy-is-dangerous-for-backups/"&gt;does not restore files that were deleted on the destination&lt;/a&gt;&amp;nbsp;so I can't recommend it for more than simple 2-way sync situations.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a class="vt-p" href="http://4.bp.blogspot.com/-wfPtt-6NCAs/UCf7JGG4fHI/AAAAAAAAF9E/AWrQrvSBaEw/s1600/synchronicity.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;br class="Apple-interchange-newline" /&gt;&lt;img border="0" height="200" src="http://4.bp.blogspot.com/-wfPtt-6NCAs/UCf7JGG4fHI/AAAAAAAAF9E/AWrQrvSBaEw/s200/synchronicity.png" width="170" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a class="vt-p" href="http://synchronicity.sourceforge.net/"&gt;Create Synchronicity&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Create Synchronicity is a tiny VB.Net app (230kb) with a simple user interface. &amp;nbsp;It handles symlinks and junctions and compares up to 4000 files per second.&lt;br /&gt;
&lt;br /&gt;
Cons: excluding files and folders gets finicky because excludes are defined in a single text box, and regex exclusions didn't work for me. &amp;nbsp;Although it "should" run on Mono, it crashes with&amp;nbsp;System.TypeLoadException on Linux.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a class="vt-p" href="http://www.itefix.no/cwrsync/"&gt;cwRsync&lt;/a&gt;&amp;nbsp;and &lt;a class="vt-p" href="http://www.opbyte.it/grsync/"&gt;Grsync&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: right;"&gt;
&lt;/div&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a class="vt-p" href="http://4.bp.blogspot.com/-Y_Z8V8u91CE/UCf7IgRb6fI/AAAAAAAAF88/SciCAR-JtmE/s1600/grsync-1.0.0.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="200" src="http://4.bp.blogspot.com/-Y_Z8V8u91CE/UCf7IgRb6fI/AAAAAAAAF88/SciCAR-JtmE/s200/grsync-1.0.0.png" width="196" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Grsync&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
Having used&amp;nbsp;&lt;a class="vt-p" href="http://en.wikipedia.org/wiki/Rsync"&gt;rsync&lt;/a&gt;&amp;nbsp;on Linux for many years, and sometimes the &lt;a class="vt-p" href="http://www.opbyte.it/grsync/"&gt;GRsync&lt;/a&gt;, I have naturally used&amp;nbsp;&lt;a class="vt-p" href="http://www.itefix.no/cwrsync/"&gt;cwRsync &lt;/a&gt;on Windows to do my one-way backups for some time.&lt;br /&gt;
&lt;br /&gt;
Cons: cwRsync costs money past version 4.0.3, which has no GUI. GRsync has a GUI. &amp;nbsp;They both use Cygwin posix layer, and I find them very slow on Windows compared to native Windows apps. &amp;nbsp; It gives a "cannot traverse non-regular file" error for Windows junctions and directory symlinks. &amp;nbsp;You can sort-of do 2-way sync with rsync by running it twice but there's no easy way to pick and choose which side to favour in complex cases, so don't do it. &amp;nbsp;The ".rsync-filter" files get unwieldly if you syn different subsets to different destinations. For NTFS destination they write strange security settings on the files that prevent other Windows installations from easily accessing the files.&lt;br /&gt;
&lt;br /&gt;
&lt;a class="vt-p" href="http://www.upway2late.com/projects/winrobocopy"&gt;&lt;b&gt;WinRoboCopy&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
&lt;/div&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a class="vt-p" href="http://4.bp.blogspot.com/-vr-W9-BiDs8/UCf7LjnylzI/AAAAAAAAF9U/sGQGNB8S_gU/s1600/winrobocopy.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="200" src="http://4.bp.blogspot.com/-vr-W9-BiDs8/UCf7LjnylzI/AAAAAAAAF9U/sGQGNB8S_gU/s200/winrobocopy.png" width="182" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;WinRoboCopy&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
WinRoboCopy is a GUI frontend to &lt;a class="vt-p" href="http://technet.microsoft.com/en-us/library/cc733145(v=ws.10).aspx"&gt;robocopy&lt;/a&gt;, which is the closest&amp;nbsp;Windows has to rsync as a built-in command. &amp;nbsp;Unlike cwRsync, it is robust and optimised for Windows directory links, junctions, encrypted data, remote shares and scheduled tasks. &amp;nbsp;It had the fastest transfer rates: 57MB/s over USB3.&lt;br /&gt;
&lt;br /&gt;
Cons: Like rsync it's designed for 1-way sync only.&lt;br /&gt;
&lt;br class="Apple-interchange-newline" /&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a class="vt-p" href="http://www.cis.upenn.edu/~bcpierce/unison/"&gt;&lt;b&gt;Unison&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a class="vt-p" href="http://4.bp.blogspot.com/-1QeYYK68RMo/UCd5UkfbGFI/AAAAAAAAF8M/qX8QA9CIhj8/s1600/UnisonScreenshot1.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="149" src="http://4.bp.blogspot.com/-1QeYYK68RMo/UCd5UkfbGFI/AAAAAAAAF8M/qX8QA9CIhj8/s320/UnisonScreenshot1.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Unison&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
Unison provides reliable 2-way sync, maintaining databases for each root with file hashes and metadata needed to detect renames accurately. &amp;nbsp;It's an OCaml app with GTK UI.&lt;br /&gt;
&lt;br /&gt;
Cons: due to hashing it's slow like molasses, only compares a few files per second, and it's several times slower running on Windows than on Linux. &amp;nbsp;It's ok up to a few hundred megs of data. &amp;nbsp;Tricky to run on Windows, as you have to install GTK+ separately.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a class="vt-p" href="http://www.dirsyncpro.org/"&gt;DirSyncPro&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a class="vt-p" href="http://2.bp.blogspot.com/-SnZmaDMQtUw/UCf7GmwmaVI/AAAAAAAAF8s/ifZdEU2RbxI/s1600/dirsyncpro.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="180" src="http://2.bp.blogspot.com/-SnZmaDMQtUw/UCf7GmwmaVI/AAAAAAAAF8s/ifZdEU2RbxI/s200/dirsyncpro.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
DirSyncPro is a cross-platform Java app with the icon set of a QT app. &amp;nbsp;It traverses symlinks and junctions and it's "Job Sets" can sync multiple pairs of folders in one click.&lt;br /&gt;
&lt;br /&gt;
Cons: The UI is cluttered and complex, with way too many steps to configure things.&amp;nbsp;Analysis takes much longer than FreeFileSync. It's annoying to have to hover over the base filename to see the relative path. Filters are disabled except in 2-way "Synchronization" mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a class="vt-p" href="https://sites.google.com/site/synkrondocumentation/"&gt;&lt;b&gt;Synkron&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div style="text-align: right;"&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; text-align: right;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a class="vt-p" href="http://4.bp.blogspot.com/-FN-6LPiRKG4/UCf7Kve4V3I/AAAAAAAAF9M/xmXGR0zk_rs/s1600/synkron.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="161" src="http://4.bp.blogspot.com/-FN-6LPiRKG4/UCf7Kve4V3I/AAAAAAAAF9M/xmXGR0zk_rs/s200/synkron.png" 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;Synkron&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
Synckron is a cross-platform QT App. &amp;nbsp;It appears to support N-way sync, not just 2-way.&lt;br /&gt;
&lt;br /&gt;
Cons: Although it compares the files&amp;nbsp;found&amp;nbsp;under&amp;nbsp;junctions and symlinks, it displays an error that it "cannot synchronise" them.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Coda: &lt;/b&gt;A few programs I've skipped over include&amp;nbsp;&lt;a class="vt-p" href="http://jfilesync.sourceforge.net/"&gt;JFileSync&amp;nbsp;&lt;/a&gt;(last: July 2007),&amp;nbsp;&lt;a class="vt-p" href="https://code.google.com/p/onesync/"&gt;OneSync&lt;/a&gt;&amp;nbsp;(windows-only, for sync via intermediate location), and&amp;nbsp;&lt;a class="vt-p" href="http://code.google.com/p/big5sync/"&gt;Syncless&lt;/a&gt;&amp;nbsp;(last: May 2010, focuses on real-time sync).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;My Provisional Solution&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;My approach is to use&amp;nbsp;&lt;a class="vt-p" href="http://en.wikipedia.org/wiki/NTFS_symbolic_link"&gt;mklink&lt;/a&gt;&amp;nbsp;to create a tree of symlinks to the various folders that I want to sync, which means I can use one big sync job for everything and don't need lots of subfolder exclusions. &amp;nbsp;I've ruled out cwRsync, SyncToy and Synkron on Windows as they don't deal with symlinks.&lt;br /&gt;
&lt;br /&gt;
For one-way synchronisation (mirroring) I recommend rsync on Linux and&amp;nbsp;WinRoboCopy on Windows. &lt;br /&gt;
&lt;br /&gt;
For two-way synchronisation, I recommend FreeFileSync because it's fast, usable, flexible and cross-platform.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=XURVzDpi3dA:3kpDS503F3Q: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=XURVzDpi3dA:3kpDS503F3Q:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=XURVzDpi3dA:3kpDS503F3Q:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=XURVzDpi3dA:3kpDS503F3Q:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=XURVzDpi3dA:3kpDS503F3Q:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=XURVzDpi3dA:3kpDS503F3Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=XURVzDpi3dA:3kpDS503F3Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=XURVzDpi3dA:3kpDS503F3Q: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=XURVzDpi3dA:3kpDS503F3Q:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=XURVzDpi3dA:3kpDS503F3Q:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/XURVzDpi3dA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.grahampoulter.com/feeds/4109190622512029954/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=22557003&amp;postID=4109190622512029954" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/4109190622512029954?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/4109190622512029954?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/XURVzDpi3dA/comparison-of-file-sync-programs.html" title="A comparison of file synchronisation software" /><author><name>Graham Poulter</name><uri>https://plus.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/AAAAAAAAG-I/f0UQRJRizxE/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-DjLQGDW8IBA/UCf7HopmiPI/AAAAAAAAF80/QIQSlCVtT6Y/s72-c/freefilesync.jpg" height="72" width="72" /><thr:total>3</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://blog.grahampoulter.com/2012/08/comparison-of-file-sync-programs.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcGQng6fCp7ImA9WhJREUs.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-4278381841507457248</id><published>2012-07-11T16:30:00.000+02:00</published><updated>2012-07-13T09:20:23.614+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-13T09:20:23.614+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="analysis" /><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><title>Powering the future</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-mvZybEX2p3E/T_1C4xbHQBI/AAAAAAAAF4s/yS1Xs2mPmPE/s1600/energy.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/-mvZybEX2p3E/T_1C4xbHQBI/AAAAAAAAF4s/yS1Xs2mPmPE/s1600/energy.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
I'm concerned about the potential for &lt;a href="http://en.wikipedia.org/wiki/Global_warming"&gt;anthropogenic&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Climate_change"&gt;climate change&lt;/a&gt; to irrevocably damage ecosystems and biodiversity, and cause a lot of human suffering. &amp;nbsp;I'm also excited about the potential of new technology to mitigate the damage by reducing carbon emissions.&lt;br /&gt;
&lt;br /&gt;
I found myself thinking about the technologies I've read about that could help, and below I've collected some of my favourites that, in my amateur opinion, have the potential to greatly reduce carbon emission in residences, commerce and wheeled-transport. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Energy Efficiency&lt;/b&gt;&lt;br /&gt;
Greater efficiency can reduce the building of new coal power, as well as make it more feasible to supply residences and commerce from wind and solar resources.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Replacing residential and commercial incandescent and halogen lamps with &lt;a href="http://en.wikipedia.org/wiki/LED_lamp"&gt;LED lamps&lt;/a&gt; &amp;amp; computer-controlled timing. &amp;nbsp; LEDs go one better than fluorescent.&lt;/li&gt;
&lt;li&gt;Replacing street lamps with dimmable &lt;a href="http://en.wikipedia.org/wiki/LED_street_light"&gt;LED street lights&lt;/a&gt;. &amp;nbsp;Traffic lights already under way.&lt;/li&gt;
&lt;li&gt;Replacing residential and commercial electric water heaters with &lt;a href="http://en.wikipedia.org/wiki/Solar_water_heating"&gt;solar water heaters&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Replacing conventional electric and gas cookers with &lt;a href="http://en.wikipedia.org/wiki/Induction_cooking"&gt;induction heating&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Use &lt;a href="http://en.wikipedia.org/wiki/Passive_house"&gt;passive house&lt;/a&gt; technologies to greatly reduce energy needed for heating and cooling.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Need technology to get more affordable. &amp;nbsp;Also the problem of old houses, less effective to retrofit.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;b&gt;Transportation without fossil fuels&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span style="background-color: white;"&gt;Electric transport pushes up grid power requirements, but even electricity from coal is more efficient than burning fuels directly.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Replacing buses, taxis and commercial delivery vehicles with battery-electric vehicles.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Requires standardised batteries/charging stations, and &lt;a href="http://www.evida.com/battery.htm"&gt;automated battery-changing systems&lt;/a&gt; so that vehicles can get a fresh battery every time they return to base.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Autonomous_car"&gt;Self-driving&lt;/a&gt;&amp;nbsp;electric taxis could serve most of the needs of most urban commuters - home, office, shopping, nights out. &amp;nbsp;Use smartphone to schedule pickup times and dropoff locations.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Requires further development of &lt;a href="http://techcrunch.com/2012/07/12/eric-schmidt-google-self-driving-cars-should-become-the-predominant-mode-of-transport-in-our-lifetime/"&gt;self-driving cars&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;b&gt;Energy Production and Storage&lt;/b&gt;&lt;br /&gt;
Moving to cost-effective renewable power generation is going to take more technical advances than efficiency or transport. &amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Exploiting onshore and offshore wind energy resources.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Requires generators not using expensive rare-earth permanent magnets. &amp;nbsp;Promising: electromagnetic excitation, &lt;a href="http://www.anl.gov/articles/powering-wind-energy-superconductivity"&gt;superconducting magnets&lt;/a&gt;. &amp;nbsp;Also requires advances in offshore generation.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Exploiting solar energy resources&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Requires cheap high-efficiency &lt;a href="http://en.wikipedia.org/wiki/Solar_panel"&gt;photovoltaic cells&lt;/a&gt;. Promising: vapor-deposited material on sheets of flexible substrate. &amp;nbsp;Imagine: 100 megawatts from carpeting 1square km of desert with photovoltaic material.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;span style="background-color: white;"&gt;Exploiting &lt;a href="http://en.wikipedia.org/wiki/Geothermal_electricity"&gt;geothermal&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Tidal_power"&gt;tidal power&lt;/a&gt;&amp;nbsp;resources. To a lesser extent, &lt;a href="http://en.wikipedia.org/wiki/Biomass"&gt;biomass&lt;/a&gt;.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="background-color: white;"&gt;Greater technical hurdles here: geothermal power is extremely deep down in most places. &amp;nbsp;Tidal and wave power is also in very early stages, difficult to make machines reliable at sea. &amp;nbsp;Re biomass, we'll never grow enough of it.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Pumped-storage_hydroelectricity"&gt;Pumped storage&lt;/a&gt; hydroelectric can smooth supply fluctuations. Also, gas turbines provide instant smoothing over fluctuatinos.&lt;/li&gt;
&lt;li&gt;Batteries the size of shipping containers placed at substations to enable distributed energy storage and load balancing in a &lt;a href="http://en.wikipedia.org/wiki/Smart_grid"&gt;smart grid&lt;/a&gt;, also helps with smoothing supply fluctuations.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Requires cheap way to make giant batteries. Promising: molten-salt and &lt;a href="http://www.ted.com/talks/donald_sadoway_the_missing_link_to_renewable_energy.html"&gt;liquid metal&lt;/a&gt; batteries.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;b&gt;Discussion&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="background-color: white;"&gt;The demands of heavy industry will probably require supplementary fossil or nuclear power, and of course air and sea transport will still need liquid fuels. I don't think biofuels are a good solution, because of the dubious carbon and energy balance (oil-intensive fertilisers and harvesters and energy used in processing), and that we'll never grow enough with shrinking availability of water and arable land due to climate change.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Even so, I reckon the combined effect deploying these technologies worldwide would go a long way in reducing the burning of fossil fuels. &amp;nbsp;Plus, most of them are really cool.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=J6sEZMtgePs:Im5K6lMBBb4: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=J6sEZMtgePs:Im5K6lMBBb4:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=J6sEZMtgePs:Im5K6lMBBb4:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=J6sEZMtgePs:Im5K6lMBBb4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=J6sEZMtgePs:Im5K6lMBBb4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=J6sEZMtgePs:Im5K6lMBBb4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=J6sEZMtgePs:Im5K6lMBBb4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=J6sEZMtgePs:Im5K6lMBBb4: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=J6sEZMtgePs:Im5K6lMBBb4:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=J6sEZMtgePs:Im5K6lMBBb4:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/J6sEZMtgePs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.grahampoulter.com/feeds/4278381841507457248/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=22557003&amp;postID=4278381841507457248" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/4278381841507457248?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/4278381841507457248?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/J6sEZMtgePs/powering-future.html" title="Powering the future" /><author><name>Graham Poulter</name><uri>https://plus.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/AAAAAAAAG-I/f0UQRJRizxE/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-mvZybEX2p3E/T_1C4xbHQBI/AAAAAAAAF4s/yS1Xs2mPmPE/s72-c/energy.jpg" height="72" width="72" /><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://blog.grahampoulter.com/2012/07/powering-future.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ENR388eip7ImA9WhRaEU8.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-2472045493150568082</id><published>2012-02-11T16:21:00.001+02:00</published><updated>2012-02-13T12:41:36.172+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-13T12:41:36.172+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>Maximum Wordpress Performance on an EC2 Micro Instance</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a class="vt-p" href="http://3.bp.blogspot.com/-8Jlo117TT0c/TzZ1p1k7tMI/AAAAAAAACeE/mFS7ApkNRsA/s1600/wordpress.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-8Jlo117TT0c/TzZ1p1k7tMI/AAAAAAAACeE/mFS7ApkNRsA/s1600/wordpress.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
This is how to get &lt;a class="vt-p" href="http://wordpress.org/"&gt;Wordpress &lt;/a&gt;handling a reasonable continuous load on an &lt;a class="vt-p" href="http://aws.amazon.com/ec2/instance-types/"&gt;Amazon EC2 t1.micro instance&lt;/a&gt; using only standard &lt;a class="vt-p" href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt; packages. I'm writing down the recipe before I forget how I managed it, and because I could not find a post that specifically details how to get all of Wordpress, Apache, mod_rewrite, mod_fastcgi, php-fpm and php-apc to play nicely together. Subsets, but not all of them. There's plenty out there for nginx though. Eventually I pieced an Apache solution together from many sources, and the synthesis follows. One post in particular from Brandon's Blog on &lt;a class="vt-p" href="http://www.brandonturner.net/blog/2009/07/fastcgi_with_php_opcode_cache/"&gt;FastCGI with PHP Opcode Cache&lt;/a&gt; does capture the basic principle and explains the benefits. &amp;nbsp;Note: most of the benefit is from opcode caching, mod_php will be fine for most sites.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Why an EC2 micro instance? Micro instances are only $0.025 per hour. However, a stock Wordpress/mod_php install quickly runs out of memory and CPU resources at just one request per second. One user ctrl-clicking on posts in the archive for a minute, or a vulnerability scanner, or rude crawler, can DOS your site for everyone else. Without these optimisations, your remaining option is to rent a small instance at 3.8x the price of a micro. I realise the irony of going to all this effort myself and yet my own blog is hosted on Blogger.&lt;br /&gt;
&lt;br /&gt;
Aside: If you are using mod_php on a micro, set &lt;i&gt;&lt;a class="vt-p" href="http://httpd.apache.org/docs/2.2/mod/mpm_common.html#maxclients"&gt;MaxClients&lt;/a&gt;&lt;/i&gt; from 150 down to 50 to respect the micro's limited 593MB of system memory, because each Apache+mod_php process chews about 10MB. Even with FastCGI bringing Apache processes down to 2.5MB, keep it low because there's only one CPU core for all 50 to share. On a micro I also recommend setting MaxRequestsPerChild to 1000, KeepAliveTimeout to 5, and MaxKeepAliveRequests to 30 (about two-thirds of MaxClients).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;List of ingredients:&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="vt-p" href="http://httpd.apache.org/docs/2.2/"&gt;apache2&lt;/a&gt; - standard Apache 2.2 webserver on Ubuntu 11.10&lt;/li&gt;
&lt;li&gt;&lt;a class="vt-p" href="http://php.net/manual/en/book.apc.php"&gt;php-apc&lt;/a&gt; - Alternative PHP Cache, providing shared opcode cache&lt;/li&gt;
&lt;li&gt;&lt;a class="vt-p" href="http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html"&gt;libapache2-mod-fastcgi&lt;/a&gt; - FastCGI module capable of talking to php-fpm.&lt;/li&gt;
&lt;li&gt;&lt;a class="vt-p" href="http://php-fpm.org/"&gt;php5-fpm&lt;/a&gt; - PHP FastCGI Process Manager. Does what it says on the box.&lt;/li&gt;
&lt;li&gt;&lt;a class="vt-p" href="http://wordpress.org/extend/plugins/apc/"&gt;APC Object Cache Backend&lt;/a&gt; - WP can use APC to retain objects between requests.&lt;/li&gt;
&lt;li&gt;&lt;a class="vt-p" href="http://wordpress.org/extend/plugins/wp-super-cache/"&gt;WP Super Cache&lt;/a&gt; - cache pages to static HTML&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
PHP FPM works with mod_fastcgi OR mod_fcgi_proxy but &lt;i&gt;NOT&lt;/i&gt; mod_fcgid, because the latter does its own process management exclusively, so does not support proxying to an external process manager like PHP-FPM, and FPM is necessary to get the benefit of opcode cache sharing.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;b&gt;Basic Setup&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
First &lt;a class="vt-p" href="http://codex.wordpress.org/Installing_WordPress" style="font-family: inherit;"&gt;install Wordpress from scratch&lt;/a&gt; under Apache + mod_php to a &lt;a "="" class="vt-p" href="http://httpd.apache.org/docs/2.2/mod/core.html#documentroot"&gt;DocumentRoot&lt;/a&gt; of /srv/wordpress. On Ubuntu,  run sudo apt-get install libapache2-mod-php5 &lt;i&gt;php5-mysql php5-gd&lt;/i&gt; to get dependencies.&lt;br /&gt;
&lt;br /&gt;
Configure &lt;a class="vt-p" href="http://codex.wordpress.org/Using_Permalinks"&gt;Permalinks&lt;/a&gt; using mod_rewrite, since they're pretty and getting mod_rewrite to play nice with FastCGI is part of the trick.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;WP Super Cache&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Install WP Super Cache from the plugin manager, using the default "PHP" caching. WP Super Cache is a huge win for minimal effort, serving cached HTML to anonymous users without regenerating the page.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Opcode and Object Caching&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Install the APC opcode cache with &lt;i&gt;sudo apt-get install php-apc&lt;/i&gt;. Run  &lt;i&gt;php -r 'phpinfo();'|grep apc&lt;/i&gt; to check that it's enabled. APC causes PHP sub-processes to inherit a warm opcode cache, greatly conserving CPU resources.&lt;br /&gt;
&lt;br /&gt;
Extract /usr/share/doc/php-apc/apc.php.gz to /srv/wordpress/apc.php and visit /apc.php to see how the cache is doing. If fragmentation is substantial then shm_size is too low. Restrict access to apc.php.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;apc.shm_size = 64M&lt;/i&gt; in /etc/php5/conf.d/apc.ini, because the default 32MB cache is too small for Wordpress (once you open Admin). Also set PHP &lt;i&gt;memory_limit&lt;/i&gt; to 64M. Also set &lt;i&gt;&lt;a class="vt-p" href="http://apc.slam_defense/"&gt;apc.slam_defense&lt;/a&gt; = 0&lt;/i&gt; to prevent piles of "Potential cache slam averted for key" in Apache's error.log. The the &lt;i&gt;slam_defense&lt;/i&gt; setting is deprecated by the default &lt;i&gt;apc.write_lock&lt;/i&gt; anyway.&lt;br /&gt;
&lt;br /&gt;
Install the &lt;a class="vt-p" href="http://plugins.svn.wordpress.org/apc/trunk/"&gt;trunk version&lt;/a&gt; (supports WP 3.1+) of APC Object Cache Backend simply by placing object-cache.php in the wp-content directory. Simply dropping the file in enables Wordpress to cache complex PHP objects between requests and is also a huge win for little effort.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Set up mod_fastcgi with FPM&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
FPM takes PHP out of Apache, cutting startup memory for new Apache workers from 10MB to 2.5MB per process.&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;WARNING&lt;/b&gt;: &lt;a href="http://www.brandonturner.net/blog/2009/07/fastcgi_php_opcode_cache_benchmarks/"&gt;Brandon's benchmarks&lt;/a&gt;&amp;nbsp;found&amp;nbsp;reqs/second performance is not improved by switching from mod_php to FastCGI, most of the performance gain came from opcode caching. &amp;nbsp;I now only recommend using FastCGI+FPM in case of (a) many concurrent requests and (b) serving a lot of static files (not just PHP content). &amp;nbsp;In those cases the memory saving should be substantial.&lt;br /&gt;
&lt;br /&gt;
Uncomment the "multiverse" lines in &lt;i&gt;/etc/apt/sources.list&lt;/i&gt; and run apt-get update to make libapache2-mod-fastcgi available. Run &lt;i&gt;sudo apt-get install libapache2-mod-fastcgi php5-cgi php5-fpm, &lt;/i&gt; which also enables mod_fastcgi and starts the "php5-fpm" service. For a micro instance, set FPM &lt;i&gt;max_children&lt;/i&gt; to 6, &lt;i&gt;max_requests&lt;/i&gt; to 500.  Immortal PHP processes been known to go crazy after a while - after a couple of days I found one hogging 100% CPU - so don't let them live forever.&lt;br /&gt;
&lt;br /&gt;
Add the following lines inside your WordPress &lt;a class="vt-p" href="http://httpd.apache.org/docs/2.2/vhosts/"&gt;VirtualHost&lt;/a&gt;, adapting "/srv/wordpress" to your DocumentRoot. It &lt;i&gt;pretends&lt;/i&gt; that there exists a PHP5 executable called "/php5.fcgi". mod_fastcgi intercepts calls to php5.fcgi and passes them to FPM instead. Also enable the "actions" module to support the "Action" line.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&amp;lt;IfModule !mod_php5.c&amp;gt;
&amp;lt;IfModule mod_fastcgi.c&amp;gt;
        Alias /php5.fcgi /srv/wordpress/php5.fcgi
        FastCgiExternalServer /srv/wordpress/php5.fcgi -host 127.0.0.1:9000
        AddHandler php-fpm .php
        Action php-fpm /php5.fcgi
&amp;lt;/IfModule&amp;gt;
&amp;lt;/IfModule&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;Making mod_fastcgi work with mod_rewrite&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The final trick is avoiding infinite recursion between mod_rewrite and mod_fastcgi, which shows up as lots of these in error.log: &lt;i&gt;the Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
The solution is to add a &lt;i&gt;RewriteCond %{REQUEST_URI} !^/php5.fcgi&lt;/i&gt; just before the final &lt;i&gt;RewriteRule . index.php [L]&lt;/i&gt; to prevent /php5.fcgi (the handler) from being re-written to /index.php, which then needs a handler (/php5.fcgi), which is then rewritten to /index.php, ad infinitum. The complete rule block looks as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;pre style="border-bottom-style: none; border-color: initial; border-image: 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="nb" style="color: #007020;"&gt;RewriteEngine&lt;/span&gt; &lt;span class="k" style="color: #007020; font-weight: bold;"&gt;On&lt;/span&gt;
&lt;span class="nb" style="color: #007020;"&gt;RewriteBase&lt;/span&gt; /
&lt;span class="nb" style="color: #007020;"&gt;RewriteRule&lt;/span&gt; ^index\.php$ - [L]
&lt;span class="nb" style="color: #007020;"&gt;RewriteRule&lt;/span&gt; ^files/(.+) wp-includes/ms-files.php?file=$1 [L]
&lt;span class="nb" style="color: #007020;"&gt;RewriteCond&lt;/span&gt; %{REQUEST_FILENAME} -f [OR]
&lt;span class="nb" style="color: #007020;"&gt;RewriteCond&lt;/span&gt; %{REQUEST_FILENAME} -d
&lt;span class="nb" style="color: #007020;"&gt;RewriteRule&lt;/span&gt; ^ - [L]
&lt;span class="nb" style="color: #007020;"&gt;RewriteCond&lt;/span&gt; %{REQUEST_URI} !^/php5.fcgi
&lt;span class="nb" style="color: #007020;"&gt;RewriteRule&lt;/span&gt; . index.php [L]&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
Now you are ready to &lt;i&gt;a2enmod fastcgi &amp;amp;&amp;amp; a2dismod php5 &amp;amp;&amp;amp; service apache2 restart.&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
Try a test query. If anything goes wrong, you can immediately revert to mod_php5 by running &lt;i&gt;a2enmod php5 &amp;amp;&amp;amp; a2dismod fastcgi &amp;amp;&amp;amp; service apache2 restart&lt;/i&gt;. Post a comment and I'll see if I can help.&lt;/div&gt;
&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=vs7OCUPAeOQ:raUt2d6P6mc: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=vs7OCUPAeOQ:raUt2d6P6mc:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=vs7OCUPAeOQ:raUt2d6P6mc:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=vs7OCUPAeOQ:raUt2d6P6mc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=vs7OCUPAeOQ:raUt2d6P6mc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=vs7OCUPAeOQ:raUt2d6P6mc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=vs7OCUPAeOQ:raUt2d6P6mc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/grahampoulter?a=vs7OCUPAeOQ:raUt2d6P6mc: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=vs7OCUPAeOQ:raUt2d6P6mc:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/grahampoulter?i=vs7OCUPAeOQ:raUt2d6P6mc:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/grahampoulter/~4/vs7OCUPAeOQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.grahampoulter.com/feeds/2472045493150568082/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=22557003&amp;postID=2472045493150568082" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/2472045493150568082?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22557003/posts/default/2472045493150568082?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/grahampoulter/~3/vs7OCUPAeOQ/maximum-wordpress-performance-on-ec2.html" title="Maximum Wordpress Performance on an EC2 Micro Instance" /><author><name>Graham Poulter</name><uri>https://plus.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/AAAAAAAAG-I/f0UQRJRizxE/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-8Jlo117TT0c/TzZ1p1k7tMI/AAAAAAAACeE/mFS7ApkNRsA/s72-c/wordpress.jpg" height="72" width="72" /><thr:total>2</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://blog.grahampoulter.com/2012/02/maximum-wordpress-performance-on-ec2.html</feedburner:origLink></entry><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="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="application/atom+xml" href="http://blog.grahampoulter.com/feeds/1842626738128927835/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=22557003&amp;postID=1842626738128927835" 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://plus.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/AAAAAAAAG-I/f0UQRJRizxE/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><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://blog.grahampoulter.com/2011/11/ubuntu-host-and-windows-7-virtualbox.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUESHc4fyp7ImA9WhJRFEk.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-7198247899616713082</id><published>2011-11-08T20:46:00.000+02:00</published><updated>2012-07-16T15:10:09.937+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-16T15:10:09.937+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;
&lt;i&gt;Update: editing to sound less like a commercial.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
In case anyone is interested, my&amp;nbsp;&lt;a href="http://www.firstascent.co.za/product-details.php?prodid=750&amp;amp;catid=245&amp;amp;level=3"&gt;waterproof jacket&lt;/a&gt; was infused with campfire smoke from the Cape Point overnight trail last weekend, and this is how I got the smell out.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="background-color: white;"&gt;The jacket uses "Vapour-Tex" breathable waterproofing, similar to Gore-Tex, so I couldn't clean it with normal detergents. &amp;nbsp;I washed it with a&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: white;"&gt;non-detergent liquid cleaner (&lt;/span&gt;&lt;a href="http://www.nikwax.com/en-gb/products/productdetail.php?productid=4" style="background-color: white;"&gt;Nikwax Tech Wash&lt;/a&gt;)&lt;span style="background-color: white;"&gt;, since normal detergents contain particles that can between the fibers of the jacket's&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.rei.com/expertadvice/articles/rainwear+dwr.html" style="background-color: white;"&gt;durable water repellant&lt;/a&gt;&lt;span style="background-color: white;"&gt; (DWR) coating and impede its performance.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I hand-washed 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;By "Hand-hot", I mean I could use my bare hands without getting burnt. &amp;nbsp;It soaked for about an hour. &amp;nbsp;After that 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 bottle instructed rinsing the garment three times. &amp;nbsp;I used hand-hot water for all three rinses. &amp;nbsp;I did not soak on the first rinse, soaked it for 15 minutes on the second rinse, and 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, I washed it again in hand-hot water, soaking it for 8+ hours. &amp;nbsp;Then I did the triple rinse again. &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;
I hung the jacket out for a few hours to drip-dry and sprayed it with&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;to maintain the durable water repellant layer. &amp;nbsp;I wiped off excess after a few minutes and left the garment 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, I used 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="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="application/atom+xml" href="http://blog.grahampoulter.com/feeds/7198247899616713082/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=22557003&amp;postID=7198247899616713082" 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://plus.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/AAAAAAAAG-I/f0UQRJRizxE/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><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><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="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="application/atom+xml" href="http://blog.grahampoulter.com/feeds/7293808881275324900/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=22557003&amp;postID=7293808881275324900" title="5 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://plus.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/AAAAAAAAG-I/f0UQRJRizxE/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>5</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><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;C0YNRnY9eip7ImA9WhVTE04.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-6547621127916203970</id><published>2011-09-13T15:41:00.001+02:00</published><updated>2012-02-27T10:26:37.862+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-27T10:26:37.862+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. &amp;nbsp;Here it is on &lt;a href="http://paste.ubuntu.com/858887/"&gt;Ubuntu Pastebin&lt;/a&gt;, and a &lt;a href="http://paste.ubuntu.com/858887/plain/"&gt;plaint-text download&lt;/a&gt;.&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="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="application/atom+xml" href="http://blog.grahampoulter.com/feeds/6547621127916203970/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=22557003&amp;postID=6547621127916203970" 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://plus.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/AAAAAAAAG-I/f0UQRJRizxE/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><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><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="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="application/atom+xml" href="http://blog.grahampoulter.com/feeds/1732763384515304578/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=22557003&amp;postID=1732763384515304578" 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://plus.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/AAAAAAAAG-I/f0UQRJRizxE/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><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><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="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="application/atom+xml" href="http://blog.grahampoulter.com/feeds/532783391090404944/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=22557003&amp;postID=532783391090404944" title="6 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://plus.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/AAAAAAAAG-I/f0UQRJRizxE/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>6</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><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="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="application/atom+xml" href="http://blog.grahampoulter.com/feeds/4348022487937572853/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=22557003&amp;postID=4348022487937572853" 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://plus.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/AAAAAAAAG-I/f0UQRJRizxE/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><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><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="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="application/atom+xml" href="http://blog.grahampoulter.com/feeds/6066979767648969856/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=22557003&amp;postID=6066979767648969856" 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://plus.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/AAAAAAAAG-I/f0UQRJRizxE/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><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><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="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="application/atom+xml" href="http://blog.grahampoulter.com/feeds/2307823304691145471/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=22557003&amp;postID=2307823304691145471" 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://plus.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/AAAAAAAAG-I/f0UQRJRizxE/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><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><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="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="application/atom+xml" href="http://blog.grahampoulter.com/feeds/7985253841156874240/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=22557003&amp;postID=7985253841156874240" 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://plus.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/AAAAAAAAG-I/f0UQRJRizxE/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><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><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="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="application/atom+xml" href="http://blog.grahampoulter.com/feeds/8211845231962671673/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=22557003&amp;postID=8211845231962671673" 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://plus.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/AAAAAAAAG-I/f0UQRJRizxE/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><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><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="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="application/atom+xml" href="http://blog.grahampoulter.com/feeds/561120836562891428/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=22557003&amp;postID=561120836562891428" 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://plus.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/AAAAAAAAG-I/f0UQRJRizxE/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><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><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="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="application/atom+xml" href="http://blog.grahampoulter.com/feeds/9206162008656973091/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=22557003&amp;postID=9206162008656973091" 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://plus.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/AAAAAAAAG-I/f0UQRJRizxE/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><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><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="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="application/atom+xml" href="http://blog.grahampoulter.com/feeds/8572955450956837785/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=22557003&amp;postID=8572955450956837785" 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://plus.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/AAAAAAAAG-I/f0UQRJRizxE/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><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><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="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="application/atom+xml" href="http://blog.grahampoulter.com/feeds/5491905944497484672/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=22557003&amp;postID=5491905944497484672" 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://plus.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/AAAAAAAAG-I/f0UQRJRizxE/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><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><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="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="application/atom+xml" href="http://blog.grahampoulter.com/feeds/1507195301420791523/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=22557003&amp;postID=1507195301420791523" 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://plus.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/AAAAAAAAG-I/f0UQRJRizxE/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><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://blog.grahampoulter.com/2009/03/qwerty-layout-dumped-in-favour-of-low.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYER3k-eyp7ImA9WhJRFEk.&quot;"><id>tag:blogger.com,1999:blog-22557003.post-3286421113737244403</id><published>2009-01-29T13:34:00.289+02:00</published><updated>2012-07-16T14:51:46.753+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-16T14:51:46.753+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;
&lt;br /&gt;
&lt;b&gt;Update 2012-07-16:&lt;/b&gt;&amp;nbsp; Since this post is still popular 3.5 years later, let me mention that the examples fall into three general categories of bad practices that really are not specific to Python:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="background-color: white;"&gt;"Bad Python" is often "Old Python": using only the conveniences available in Python before 2.4/2.5. In a fast-moving language, the old ways are often going to look bad.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="background-color: white;"&gt;"Bad Python" is often "Java Python": Python written in Java idioms. It's poor form to write in one language using the idioms of another.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="background-color: white;"&gt;"Bad Python" is often "Bad Programming": many of the practices would be poor form in any programming language.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Original Post&lt;/b&gt;&lt;br /&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 src="http://reddit.com/static/button/button1.js" type="text/javascript"&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="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="application/atom+xml" href="http://blog.grahampoulter.com/feeds/3286421113737244403/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=22557003&amp;postID=3286421113737244403" 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://plus.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/AAAAAAAAG-I/f0UQRJRizxE/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><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://blog.grahampoulter.com/2009/01/bad-python.html</feedburner:origLink></entry></feed>
