[{"content":"","date":"18 June 2026","externalUrl":null,"permalink":"/photos/2026/06/18-photo/","section":"Photos","summary":"","title":"#NoFun","type":"photos"},{"content":"","date":"18 June 2026","externalUrl":null,"permalink":"/","section":"daves-adventures","summary":"","title":"daves-adventures","type":"page"},{"content":"","date":"18 June 2026","externalUrl":null,"permalink":"/tags/nofun/","section":"Tags","summary":"","title":"NoFun","type":"tags"},{"content":"","date":"18 June 2026","externalUrl":null,"permalink":"/photos/","section":"Photos","summary":"","title":"Photos","type":"photos"},{"content":"","date":"18 June 2026","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","date":"17 June 2026","externalUrl":null,"permalink":"/photos/2026/06/17-not-one-to-find-cheap-hobbies/","section":"Photos","summary":"","title":"Not one to find cheap hobbies","type":"photos"},{"content":"","date":"4 June 2026","externalUrl":null,"permalink":"/photos/2026/06/04-on-a-train-in-a-car-about-to-go-under-the-sea-next/","section":"Photos","summary":"","title":"On a train, in a car about to go under the sea - next stop 🇫🇷","type":"photos"},{"content":"Activity data synced from Strava. All years, all sports.\n","date":"1 June 2026","externalUrl":null,"permalink":"/fitness/","section":"Fitness","summary":"","title":"Fitness","type":"fitness"},{"content":"","date":"1 June 2026","externalUrl":null,"permalink":"/fitness/2026/06/","section":"Fitness","summary":"","title":"June 2026","type":"fitness"},{"content":"","date":"25 May 2026","externalUrl":null,"permalink":"/photos/2026/05/25-hottest-day-of-the-year/","section":"Photos","summary":"","title":"Hottest day of the year …","type":"photos"},{"content":"","date":"23 May 2026","externalUrl":null,"permalink":"/photos/2026/05/23-ready-for-the-bank-holiday-and-it-looks-like-the-w/","section":"Photos","summary":"","title":"Ready for the bank holiday, and it looks like the weather is going to be good","type":"photos"},{"content":"","date":"22 May 2026","externalUrl":null,"permalink":"/photos/2026/05/22-the-most-expensive-shoes-i-own/","section":"Photos","summary":"","title":"The most expensive shoes I own","type":"photos"},{"content":"","date":"2 May 2026","externalUrl":null,"permalink":"/photos/2026/05/02-if-only-there-was-clip-handy-to-help-keep-the-brea/","section":"Photos","summary":"","title":"If only there was clip handy to help keep the bread fresh","type":"photos"},{"content":"","date":"1 May 2026","externalUrl":null,"permalink":"/fitness/2026/05/","section":"Fitness","summary":"","title":"May 2026","type":"fitness"},{"content":"","date":"21 April 2026","externalUrl":null,"permalink":"/photos/2026/04/21-its-good-to-walk/","section":"Photos","summary":"","title":"It’s good to walk","type":"photos"},{"content":"","date":"18 April 2026","externalUrl":null,"permalink":"/photos/2026/04/18-saturday-chore-cleaning-the-cars/","section":"Photos","summary":"","title":"Saturday chore, cleaning the cars ✅","type":"photos"},{"content":"","date":"18 April 2026","externalUrl":null,"permalink":"/photos/2026/04/18-the-start-hopefully-of-the-recovery/","section":"Photos","summary":"","title":"The start (hopefully) of the recovery","type":"photos"},{"content":"","date":"18 April 2026","externalUrl":null,"permalink":"/photos/2026/04/18-testing-the-draft-functionality-on-the-website-app/","section":"Photos","summary":"","title":"Testing the draft functionality on the website app.\n\nAnd posting a draft","type":"photos"},{"content":"","date":"11 April 2026","externalUrl":null,"permalink":"/photos/2026/04/11-france/","section":"Photos","summary":"","title":"France 🇫🇷","type":"photos"},{"content":"","date":"11 April 2026","externalUrl":null,"permalink":"/photos/2026/04/11-photo/","section":"Photos","summary":"","title":"#fire","type":"photos"},{"content":"","date":"11 April 2026","externalUrl":null,"permalink":"/tags/fire/","section":"Tags","summary":"","title":"Fire","type":"tags"},{"content":"","date":"9 April 2026","externalUrl":null,"permalink":"/photos/2026/04/09-next-stop-france/","section":"Photos","summary":"","title":"Next stop, France 🇫🇷","type":"photos"},{"content":"","date":"7 April 2026","externalUrl":null,"permalink":"/photos/2026/04/07-leap/","section":"Photos","summary":"","title":"#cat leap","type":"photos"},{"content":"","date":"7 April 2026","externalUrl":null,"permalink":"/tags/cat/","section":"Tags","summary":"","title":"Cat","type":"tags"},{"content":"","date":"3 April 2026","externalUrl":null,"permalink":"/tags/awsdeepracer/","section":"Tags","summary":"","title":"Awsdeepracer","type":"tags"},{"content":"","date":"3 April 2026","externalUrl":null,"permalink":"/photos/2026/04/03-because-who-doesnt-a-scrolling-display/","section":"Photos","summary":"","title":"Because who doesn’t ❤️ a scrolling display #DREM #AWSDeepRacer","type":"photos"},{"content":"","date":"3 April 2026","externalUrl":null,"permalink":"/tags/drem/","section":"Tags","summary":"","title":"DREM","type":"tags"},{"content":"","date":"1 April 2026","externalUrl":null,"permalink":"/fitness/2026/04/","section":"Fitness","summary":"","title":"April 2026","type":"fitness"},{"content":"","date":"30 March 2026","externalUrl":null,"permalink":"/tags/3dprinting/","section":"Tags","summary":"","title":"3DPrinting","type":"tags"},{"content":"","date":"30 March 2026","externalUrl":null,"permalink":"/photos/2026/03/30-when-goes-wrong/","section":"Photos","summary":"","title":"When #3DPrinting goes wrong","type":"photos"},{"content":"","date":"25 March 2026","externalUrl":null,"permalink":"/tags/appendicitis/","section":"Tags","summary":"","title":"Appendicitis","type":"tags"},{"content":"","date":"25 March 2026","externalUrl":null,"permalink":"/photos/2026/03/25-unexpected-start-to-a-wednesday-morning/","section":"Photos","summary":"","title":"Unexpected start to a Wednesday morning #Appendicitis","type":"photos"},{"content":"","date":"22 March 2026","externalUrl":null,"permalink":"/tags/code/","section":"Tags","summary":"","title":"Code","type":"tags"},{"content":"","date":"22 March 2026","externalUrl":null,"permalink":"/photos/2026/03/22-tinkering/","section":"Photos","summary":"","title":"Tinkering #code","type":"photos"},{"content":"","date":"21 March 2026","externalUrl":null,"permalink":"/photos/2026/03/21-view-from-a-car-window/","section":"Photos","summary":"","title":"View from a car window","type":"photos"},{"content":"","date":"21 March 2026","externalUrl":null,"permalink":"/tags/3d/","section":"Tags","summary":"","title":"3D","type":"tags"},{"content":"","date":"21 March 2026","externalUrl":null,"permalink":"/photos/2026/03/21-well-the-bits-for-the-server-rack-are-coming-along/","section":"Photos","summary":"","title":"Well the bits for the server rack are coming along nicely #3D-Printing","type":"photos"},{"content":"","date":"20 March 2026","externalUrl":null,"permalink":"/photos/2026/03/20-spring-morning-walk-headspace-break/","section":"Photos","summary":"","title":"Spring morning walk - headspace break","type":"photos"},{"content":"","date":"16 March 2026","externalUrl":null,"permalink":"/photos/2026/03/16-its-been-a-while/","section":"Photos","summary":"","title":"It’s been a while #AWSDeepRacer","type":"photos"},{"content":"","date":"15 March 2026","externalUrl":null,"permalink":"/photos/2026/03/15-suits-you-sir/","section":"Photos","summary":"","title":"Suits you sir!","type":"photos"},{"content":"","date":"15 March 2026","externalUrl":null,"permalink":"/categories/blog/","section":"Categories","summary":"","title":"Blog","type":"categories"},{"content":"","date":"15 March 2026","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"","date":"15 March 2026","externalUrl":null,"permalink":"/tags/hugo/","section":"Tags","summary":"","title":"Hugo","type":"tags"},{"content":"","date":"15 March 2026","externalUrl":null,"permalink":"/tags/javascript/","section":"Tags","summary":"","title":"Javascript","type":"tags"},{"content":"","date":"15 March 2026","externalUrl":null,"permalink":"/posts/","section":"Posts","summary":"","title":"Posts","type":"posts"},{"content":"","date":"15 March 2026","externalUrl":null,"permalink":"/tags/pwa/","section":"Tags","summary":"","title":"Pwa","type":"tags"},{"content":"","date":"15 March 2026","externalUrl":null,"permalink":"/tags/side-projects/","section":"Tags","summary":"","title":"Side-Projects","type":"tags"},{"content":"A few weeks back I wrote about moving this site to Hugo. One of the things I built alongside it was a small PWA — a photo upload tool that let me post directly to the site from my phone without touching a laptop. It worked, but it only did one thing.\nThen, as ideas tend to do, it grew.\nWhat it does now # What started as a photo poster is now a full mobile CMS. From an icon on my home screen I can:\nWrite and publish blog posts — full markdown editor with a formatting toolbar (bold, italic, headings, links, lists, blockquotes, code) and auto-growing textarea Manage images — attach photos to a post, tap to set the cover, insert a gallery shortcode at the cursor Draft or publish — save as a draft to come back to, or publish straight to the site Browse and edit existing posts — a post list pulls from the GitHub API, tap any post to load it back into the editor Tag suggestions — tags from existing posts are cached locally and offered as suggestions as you type, which helps avoid ending up with near-duplicate tags Everything still goes via the GitHub API — no server, no database, just commits.\nLight and dark mode # The original app was dark-only. It now follows your system preference automatically, with a manual toggle if you want to override it. Small thing, but it makes a difference when you\u0026rsquo;re writing in daylight.\nOffline support # The more interesting addition. The app shell was already cached by the service worker, but any actual posting required a network connection. Now:\nThe post list is cached in localStorage after each fetch — open the app offline and you still see your posts If you write a post offline, it gets queued locally rather than failing When you come back online the queue syncs automatically — or there\u0026rsquo;s a \u0026ldquo;Sync now\u0026rdquo; button on the home screen if you want to trigger it manually If the images are too large for the storage quota, the text is saved and you\u0026rsquo;re told the images need re-adding It\u0026rsquo;s not a full offline-first app, but it covers the realistic use case of being somewhere with no signal and wanting to jot something down.\nThe icon # The original icon was a camera, which made sense when it only posted photos. It\u0026rsquo;s now a pencil — more honest about what the thing actually does.\nThe app lives at /compose/ if you want to take a look — though you\u0026rsquo;ll need your own GitHub token and repo to do anything useful with it.\n","date":"15 March 2026","externalUrl":null,"permalink":"/posts/2026/03/15/","section":"Posts","summary":"","title":"Turning a photo upload tool into a mobile CMS","type":"posts"},{"content":"","date":"12 March 2026","externalUrl":null,"permalink":"/tags/ai/","section":"Tags","summary":"","title":"Ai","type":"tags"},{"content":"","date":"12 March 2026","externalUrl":null,"permalink":"/tags/aws/","section":"Tags","summary":"","title":"Aws","type":"tags"},{"content":" How it started # Bored at the kitchen table on a Sunday afternoon, feeling the need to do something other than complete another Sudoku, and feeling inspired after ffconf on Friday\u0026hellip;.\nA quick search \u0026ldquo;use github for website hosting\u0026rdquo; later and a scan of some of the links it turns up leads me quickly to the idea of using Hugo on GitHub (even though one of the articles suggested not using GitHub pages).\nMigrating my WordPress sites to GitHub pages Moving from WordPress to an Azure static site with Hugo So ignoring the \u0026ldquo;don\u0026rsquo;t use GitHub pages\u0026rdquo; advice, I got started. Using the excellent WordPress to Markdown tool I quickly re-created my existing site as a series of Markdown files (most of the images appeared to have failed to download, but that was a \u0026ldquo;future Dave™\u0026rdquo; problem which I\u0026rsquo;d come back to). On to building the site — I\u0026rsquo;ve tinkered with Hugo before and mostly enjoyed the experience, so I went with it again. For anyone keeping score, this is the fourth time I\u0026rsquo;ve built or rebuilt my personal website: Tumblr → static site → WordPress → static site (Hugo). I picked the Blowfish theme and had something up and running pretty quickly.\nAnd then\u0026hellip; I got bored of trying to sort out all of the broken images and tidying up old posts. So it sat there, half finished, for a few months.\nHow it\u0026rsquo;s going # Fast forward to a weekend in March and a conversation with Claude — Anthropic\u0026rsquo;s AI assistant — which turned into a proper pair programming session, and then another one, and probably another one after that (I\u0026rsquo;ve lost count). What started as \u0026ldquo;let\u0026rsquo;s fix a few broken image paths\u0026rdquo; turned into something considerably more involved.\nFirst though, we went back and tackled the thing that had stopped me in my tracks in November — the broken images. The WordPress export had left a trail of ../images/ paths that meant nothing to Hugo, WordPress shortcodes still sitting raw in post content, and a handful of posts with galleries that needed rebuilding entirely using Blowfish\u0026rsquo;s gallery shortcode. Not the most glamorous work, but satisfying in the way that tidying a drawer is satisfying. Sixteen years of posts, more or less intact.\nFirst up was the fitness section. I\u0026rsquo;d wanted somewhere to surface my Strava data for a while, so we built a sync tool in TypeScript that pulls activity data from the Strava API and writes it out as JSON files that Hugo can read at build time. The result is a full fitness section on the site: annual and monthly breakdowns, year-on-year comparisons, and Chart.js graphs — all driven entirely from data files with no database in sight. There\u0026rsquo;s a sticky table header on the history page that required a slightly embarrassing amount of JavaScript because CSS position: sticky doesn\u0026rsquo;t play nicely when there\u0026rsquo;s an overflow-x: auto wrapper in the way. One of those things that should take five minutes and takes considerably longer. You know the ones.\nThe other thing that came out of the weekend was sorting out the photos section properly. I\u0026rsquo;d deleted my Instagram account a while back — Meta: ick — which meant the only way to recover those photos was from the data export. So we built a Docker-based import tool that takes that export, fixes the mojibake UTF-8 encoding that Instagram helpfully applies to everything, and creates proper Hugo page bundles from it — a few hundred posts imported in one go. That done, it felt wrong not to have a nice way to keep adding photos going forward, so we built a PWA — a web app you can pin to your iPhone home screen — for posting photos directly to the site without needing a laptop. Take a photo, write a caption, add some hashtags, and it commits everything straight to the GitHub repo via the API and triggers a build automatically. It\u0026rsquo;s probably overkill for a personal blog, but it does mean I can post from a pub garden which, let\u0026rsquo;s be honest, is the real use case. There were a few iterations along the way — hashtags appearing as individual characters, the Post button disappearing off the bottom of the screen, the app stubbornly refusing to update itself on my phone — all of which is just normal software development really, AI-assisted or otherwise.\nFinally, with all of that in place, it felt like the right time to properly sort out the DNS. The domain has been sitting on old shared hosting for years, so we migrated everything over to Route53, updated the nameservers, pointed the apex and www records at GitHub Pages, and waited patiently for propagation to finish. It did.\nThe whole experience has been a genuinely interesting way to work. Having an AI that can hold the full context of a project, suggest approaches, write and iterate on code, and explain what it\u0026rsquo;s doing (and why it went wrong) makes for a very different kind of weekend tinkering than sitting alone with Stack Overflow. Could I have done all of this myself? Probably. Would it still be half-finished and sitting in a branch somewhere? Almost certainly. The site\u0026rsquo;s not quite finished — but then again this is the fourth version of this site, so \u0026ldquo;not quite finished\u0026rdquo; is basically a design feature at this point.\nAnd yes, I\u0026rsquo;m writing this sat at the kitchen table. Some things don\u0026rsquo;t change.\n","date":"12 March 2026","externalUrl":null,"permalink":"/posts/2026/03/12/","section":"Posts","summary":"","title":"Playing with Hugo (for poops and lols)","type":"posts"},{"content":"","date":"12 March 2026","externalUrl":null,"permalink":"/tags/strava/","section":"Tags","summary":"","title":"Strava","type":"tags"},{"content":"","date":"12 March 2026","externalUrl":null,"permalink":"/categories/tinkering/","section":"Categories","summary":"","title":"Tinkering","type":"categories"},{"content":"","date":"12 March 2026","externalUrl":null,"permalink":"/tags/wordpress/","section":"Tags","summary":"","title":"Wordpress","type":"tags"},{"content":"","date":"11 March 2026","externalUrl":null,"permalink":"/photos/2026/03/11-close-to-the-kerb/","section":"Photos","summary":"","title":"Close to the kerb","type":"photos"},{"content":"","date":"8 March 2026","externalUrl":null,"permalink":"/photos/2026/03/08-photo/","section":"Photos","summary":"","title":"#moon","type":"photos"},{"content":"","date":"8 March 2026","externalUrl":null,"permalink":"/tags/moon/","section":"Tags","summary":"","title":"Moon","type":"tags"},{"content":"","date":"8 March 2026","externalUrl":null,"permalink":"/photos/2026/03/08-removing-the-phone-mount-from-new-tinycar/","section":"Photos","summary":"","title":"Removing the #ugly phone mount from new TinyCar","type":"photos"},{"content":"","date":"8 March 2026","externalUrl":null,"permalink":"/tags/ugly/","section":"Tags","summary":"","title":"Ugly","type":"tags"},{"content":"","date":"8 March 2026","externalUrl":null,"permalink":"/photos/2026/03/08-cat-stretch/","section":"Photos","summary":"","title":"Cat stretch","type":"photos"},{"content":"","date":"1 March 2026","externalUrl":null,"permalink":"/fitness/2026/03/","section":"Fitness","summary":"","title":"March 2026","type":"fitness"},{"content":"","date":"1 February 2026","externalUrl":null,"permalink":"/fitness/2026/02/","section":"Fitness","summary":"","title":"February 2026","type":"fitness"},{"content":"","date":"1 January 2026","externalUrl":null,"permalink":"/fitness/2026/","section":"Fitness","summary":"","title":"2026","type":"fitness"},{"content":"","date":"1 January 2026","externalUrl":null,"permalink":"/fitness/2026/01/","section":"Fitness","summary":"","title":"January 2026","type":"fitness"},{"content":"","date":"1 December 2025","externalUrl":null,"permalink":"/fitness/2025/12/","section":"Fitness","summary":"","title":"December 2025","type":"fitness"},{"content":"","date":"1 November 2025","externalUrl":null,"permalink":"/fitness/2025/11/","section":"Fitness","summary":"","title":"November 2025","type":"fitness"},{"content":"","date":"1 October 2025","externalUrl":null,"permalink":"/fitness/2025/10/","section":"Fitness","summary":"","title":"October 2025","type":"fitness"},{"content":"","date":"1 September 2025","externalUrl":null,"permalink":"/fitness/2025/09/","section":"Fitness","summary":"","title":"September 2025","type":"fitness"},{"content":"","date":"1 August 2025","externalUrl":null,"permalink":"/fitness/2025/08/","section":"Fitness","summary":"","title":"August 2025","type":"fitness"},{"content":"","date":"1 July 2025","externalUrl":null,"permalink":"/fitness/2025/07/","section":"Fitness","summary":"","title":"July 2025","type":"fitness"},{"content":"","date":"1 June 2025","externalUrl":null,"permalink":"/fitness/2025/06/","section":"Fitness","summary":"","title":"June 2025","type":"fitness"},{"content":"","date":"1 May 2025","externalUrl":null,"permalink":"/fitness/2025/05/","section":"Fitness","summary":"","title":"May 2025","type":"fitness"},{"content":"So 11695 pieces\u0026hellip;.\n\u0026hellip;and \u0026ldquo;some\u0026rdquo; time (and a sore thumb) gives you\nLego - World Map 31203\n","date":"25 April 2025","externalUrl":null,"permalink":"/posts/2025/04/25/","section":"Posts","summary":"","title":"Building the World","type":"posts"},{"content":"","date":"25 April 2025","externalUrl":null,"permalink":"/tags/lego/","section":"Tags","summary":"","title":"Lego","type":"tags"},{"content":"","date":"1 April 2025","externalUrl":null,"permalink":"/fitness/2025/04/","section":"Fitness","summary":"","title":"April 2025","type":"fitness"},{"content":"","date":"1 March 2025","externalUrl":null,"permalink":"/fitness/2025/03/","section":"Fitness","summary":"","title":"March 2025","type":"fitness"},{"content":"","date":"2 February 2025","externalUrl":null,"permalink":"/photos/2025/02/02-just-2560-more-studs-to-place/","section":"Photos","summary":"","title":"Just 2560 more studs to place","type":"photos"},{"content":"","date":"1 February 2025","externalUrl":null,"permalink":"/photos/2025/02/01-making-progress-256-studs-at-a-time/","section":"Photos","summary":"","title":"Making progress 256 studs at a time","type":"photos"},{"content":"","date":"1 February 2025","externalUrl":null,"permalink":"/fitness/2025/02/","section":"Fitness","summary":"","title":"February 2025","type":"fitness"},{"content":"","date":"31 January 2025","externalUrl":null,"permalink":"/photos/2025/01/31-a-few-more-16x16-squares-completed/","section":"Photos","summary":"","title":"A few more 16x16 squares completed","type":"photos"},{"content":"","date":"29 January 2025","externalUrl":null,"permalink":"/photos/2025/01/29-and-thats-another-row-done/","section":"Photos","summary":"","title":"And that’s another row done","type":"photos"},{"content":"","date":"28 January 2025","externalUrl":null,"permalink":"/photos/2025/01/28-next-row-completed-one-16x16-panel-at-a-time-5-to/","section":"Photos","summary":"","title":"Next row completed one 16x16 panel at a time (5 to a row)","type":"photos"},{"content":"","date":"27 January 2025","externalUrl":null,"permalink":"/photos/2025/01/27-progress-1-row-completed/","section":"Photos","summary":"","title":"Progress - 1 row completed","type":"photos"},{"content":"","date":"27 January 2025","externalUrl":null,"permalink":"/photos/2025/01/27-time-to-build-the-world-map-11695-pieces/","section":"Photos","summary":"","title":"Time to build the World Map - 11695 pieces ;-)","type":"photos"},{"content":"","date":"2 January 2025","externalUrl":null,"permalink":"/photos/2025/01/02-not-sure-about-the-message-here/","section":"Photos","summary":"","title":"Not sure about the message here….","type":"photos"},{"content":"","date":"1 January 2025","externalUrl":null,"permalink":"/photos/2025/01/01-happy-dry-january-cheers/","section":"Photos","summary":"","title":"Happy dry January - cheers ;-)","type":"photos"},{"content":"","date":"1 January 2025","externalUrl":null,"permalink":"/fitness/2025/","section":"Fitness","summary":"","title":"2025","type":"fitness"},{"content":"","date":"1 January 2025","externalUrl":null,"permalink":"/fitness/2025/01/","section":"Fitness","summary":"","title":"January 2025","type":"fitness"},{"content":"","date":"8 December 2024","externalUrl":null,"permalink":"/photos/2024/12/08-last-photos-from-my-us-trip-heading-home-later-tod/","section":"Photos","summary":"","title":"Last photos from my US trip, heading home later today (finally)","type":"photos"},{"content":"","date":"8 December 2024","externalUrl":null,"permalink":"/photos/2024/12/08-small-road-trip/","section":"Photos","summary":"","title":"Small road trip","type":"photos"},{"content":"","date":"4 December 2024","externalUrl":null,"permalink":"/photos/2024/12/04-las-vegas/","section":"Photos","summary":"","title":"Las Vegas","type":"photos"},{"content":"","date":"1 December 2024","externalUrl":null,"permalink":"/fitness/2024/12/","section":"Fitness","summary":"","title":"December 2024","type":"fitness"},{"content":"","date":"28 November 2024","externalUrl":null,"permalink":"/photos/2024/11/28-apple-park-visitor-centre/","section":"Photos","summary":"","title":"Apple Park visitor centre","type":"photos"},{"content":"","date":"27 November 2024","externalUrl":null,"permalink":"/photos/2024/11/27-san-francisco/","section":"Photos","summary":"","title":"San Francisco","type":"photos"},{"content":"","date":"1 November 2024","externalUrl":null,"permalink":"/fitness/2024/11/","section":"Fitness","summary":"","title":"November 2024","type":"fitness"},{"content":"","date":"17 October 2024","externalUrl":null,"permalink":"/photos/2024/10/17-photo/","section":"Photos","summary":"","title":"Photos — 17 10 2024","type":"photos"},{"content":"","date":"1 October 2024","externalUrl":null,"permalink":"/fitness/2024/10/","section":"Fitness","summary":"","title":"October 2024","type":"fitness"},{"content":"","date":"26 September 2024","externalUrl":null,"permalink":"/photos/2024/09/26-im-sure-the-chimneys-used-to-be-bigger/","section":"Photos","summary":"","title":"I’m sure the chimneys used to be bigger ;-)","type":"photos"},{"content":"","date":"18 September 2024","externalUrl":null,"permalink":"/photos/2024/09/18-photo/","section":"Photos","summary":"","title":"Photos — 18 09 2024","type":"photos"},{"content":"","date":"13 September 2024","externalUrl":null,"permalink":"/photos/2024/09/13-photo/","section":"Photos","summary":"","title":"Photos — 13 09 2024","type":"photos"},{"content":"So this has taken a lot longer to post mainly due to the fact that every time I add in the command to restart the RPi I get locked out of my account for an hour or so as the software my host has on the server thinks I\u0026rsquo;m trying to do something bad\u0026hellip;.\nAlso this post will be updated over the next week or so to add in the rest of the images and also to add clarity around the printing - since I originally wrote this draft changes have been made to some of the print files (and I\u0026rsquo;ve changed job and lost a few of the original images)\nUpdate: 16th November - Changes to reflect the new(ish) repository and build changes\nSo we’re going to walk through building our own DeepRacer vehicle to accelerate our machine learning journey thanks to the DeepRacer community. Pro racer Lars “Duckworth” Ludvigsen has created an open source build of the DeepRacer vehicle, which is now hosted by the DeepRace community and makes it easy to get started using readily available parts and helping solve the problem of AWS DeepRacer vehicle availability in some locales. (Or is just a fun way for people who already have access to a DeepRacer donor car to update their car to a more recent build.\nOverview of solution # The community version of DeepRacer takes the original vehicle code that AWS open sourced in 2021 and re-packages it to run on a Raspberry Pi (RPi) along the way updating both the operating system and software libraries to more recent versions. The GitHub repository (https://github.com/aws-deepracer-community/deepracer-custom-car) lists all of the steps required to get racing at a high level, including all of the software steps, hardware required and 3D print files for mounting on a donor 1/18th scale RC car chassis.\nI\u0026rsquo;m building on to an RPi 4 with 8Gb RAM, 3D Printing the frame and mounting it all on an original AWS DeepRacer r/c car (a version of the WL Toys 9x9 car) as I happen to have a couple lying around the offie.\nSo I\u0026rsquo;m following these instructions to build my RPi Racer\nWalkthrough # The purpose of this walkthrough is to detail the steps needed to print, install and build your own DeepRacer vehicle using a Raspberry Pi as the main computer.\nThis walkthrough comprises the following steps\n3D printing the computer chassis components\n(Aside from waiting for the purchased parts to arrive, printing the parts you need takes the longest time)\n(Aside from waiting for the purchased parts to arrive, printing the parts you need takes the longest time)\nRaspberry Pi setup\nInitial setup of Raspberry Pi – Flashing the SD card with Ubuntu and updating the operating system\nCommunity DeepRacer Pi on GitHub: https://github.com/larsll/deepracer-pi/\nDeepRacer vehicle software install – Installing the required packages prior to installing the DeepRacer vehicle software Car build\nRaspberry Pi build – Adding the (optional) cooling fan, GPIO riser, servo hat and camera\nChassis and Raspberry Pi mounting – Bringing it all together\nPrerequisites # For this walkthrough, you should have the following prerequisites (full parts list):\nRPi 4\nRPi Servo Hat\nRPi Camera\nAccess to a 3D printer\nDonor 1/18th scale RC car (WL Toys 9x9 model) or AWS DeepRacer vehicle\nAn AWS Account to train your models using the DeepRacer console or DRfC\n3D Printing the computer chassis components # The most time-consuming part is printing the components that are needed for the chassis to mount the Raspberry Pi and camera to the car. There are 4 components to print, front camera mount, main plate, rear mount and body mounts (2). Printing on a Prusa Mini took 12 hours 19 minutes and used a total of 26.87m of PLA (in my case) filament. For printing I have infill set to 25% and printing supports everywhere with a brim to help with bed adhesion (probably overkill but worked for me).\nPiMount v1.2 Front - 1 hours 20 minutes - 9.31m of filament\nPiMount v1.3 Plate - 2 hours 29 minutes (with legs for DeepRacer) - 13.64m of filament\nPiMount v1.3 Plate (No legs) - 1 hours 10 minutes (without legs for WL Toys) - 10.89m of filament\nPiMount v1.2 Back - 59 minutes - 3.11 m of filament\nA979 Body mount (if building for a WL Toys car) - 28minutes (2 needed - be careful removing the supports) - 1.22m of filament for each support\nSo whilst everything is printing we can move on to the next step and get the Raspberry Pi ready\nRaspberry Pi setup # Initial setup of the Raspberry Pi - To prepare the SD card you can either download the Ubuntu 22.04 Server ISO (64 Bit) and write it to an SD card (recommended size is 32Gb or larger) using your preferred tool, or use Raspberry Pi Imager and just select “Other general-purpose OS” → “Ubuntu” → “Ubuntu Server 22.04.5 LTS (64Bit)” and write to your SD card\nWhen prompted if “Would you like to apply OS customisation settings\u0026quot;?\u0026quot; select \u0026ldquo;Edit Settings\u0026rdquo;\nThis allows you to set the default username and password as well as the WiFi settings for your local network.\nI’ve set the hostname, username and password and added in my WiFi settings, click “Save” which brings you back to “Use OS customisation” prompt\nClicking “Yes” prompts you that you are about to erase all content on the selected SD card, clicking “Yes” again starts the process, depending on the operating system you are using you may get prompted for your password at this point to allow access to removable storage.\nWriting the SD card will take a number of minutes depending on the card size and also if you allow the verification of the image.\nNow we have our initial image ready we can put the SD card into our RPi and power on, it should boot up in ~30 seconds (it might take longer on the first boot as updates are installed) and show up on your network with the hostname as per the configuration (in my case “rpi-racer.local”). You can check on your network router for devices to check the hostname / IP address of your RPi Racer (This tends to be my preferred method from flashing multiple cars at AWS summits where we would have 20 cars and reinvent where we\u0026rsquo;ve had over 50 in some years - all of which need flashing!)\nOnce on the network we’re going to remote login to the RPi using SSH and install the DeepRacer software from GitHub. Using terminal on your computer, SSH into the RPi (connecting computer and Pi should be on the same network) alternatively you can connect a monitor and keyboard to the RPi and complete the following steps locally.\nTo remote log into the RPi using SSH:\nssh deepracer@rpi-racer.local The username and password will be as you specified when flashing the SD card. (Protip: when using SSH setup password less login just to make life a little bit easier) Once connected to the RPi (either over SSH or locally using monitor and keyboard) we’re going to clone the repository containing the installing scripts from GitHub on to the Pi\ngit clone https://github.com/aws-deepracer-community/deepracer-custom-car Change to the cloned directory and start installing the packages needed for DeepRacer to run\ncd deepracer-custom-car sudo ./install_scripts/rpi4-22.04/install-prerequisites.sh Depending on the speed of your internet connection this will take ~15 minutes to run and update / install all of the required libraries. During this step you may receive the message below when some of the firewall rules are being updated:\nCommand may disrupt existing ssh connections. Proceed with operation (y|n)? Press Y and the install process will continue without interruption to your SSH connection as the required rules are already in place (if you are connected locally you will still be prompted), once this step has completed reboot the RPi.\nsudo /sbin/shutdown -r now Again it should take ~30 seconds for the RPi to reboot, log back into the RPi (either over SSH or locally) now we finally install DeepRacer. Change directory back into the cloned repository and run the command to install DeepRacer\ncd deepracer-custom-car sudo ./install_scripts/rpi4-22.04/install-deepracer.sh This stage takes the longest (aside from the 3D printing) taking up to ~30 minutes.\nNote: If you are using a Raspberry Pi v2 Camera module you need to enable the legacy camera setting using “raspi-config”\nsudo raspi-config To enable the camera: “Interface Options” -\u0026gt; “Legacy Camera” -\u0026gt; “Enable”\nAnd we\u0026rsquo;re done with the setup of the RPi, power down and once the 3D printing has completed it\u0026rsquo;s time to build our car.\nCar build # First off let’s build the Raspberry Pi, I’ve got the cooling fan on mine and added a riser to the GPIO, securing the servo driver hat using the M2.5 stand-offs to keep everything together. The cooling fan connects to pin 4 (5V - red) and pin 6 (ground - black) of the GPIO for power and I’ve added a 2S JST connector to the power the servo hat and Raspberry Pi (having removed the middle cable from the JST connector first)\nOur RPi is now ready to be mounted on to the 3D printed chassis\nThe 3D printed parts are bolted together using the M2 nylon stand off kit, 3x 15mm bolts to join the front and rear sections to the main plate and then mount the DeepRacer shell brackets. I’ve also put in 3x brass M2.5 screws into the chassis ready to add the RPi\nMounting the camera uses 4x 15mm M2 nylon screws tightening the bottom screws first to get the lower part of the camera as close to the mount as possible.\nConnect up 200mm camera cable to the camera module and the Pi and we have our compute unit ready for adding to the car\nIMPORTANT - Before connecting up everything going racing - You need to remove the middle red wire from the speed controller lead (or you risk damaging your servo hat and Raspberry Pi) - The connector can be carefully removed from the plug and then the wire either cut or tucked out of the way.\nChassis and Raspberry Pi mounting # With both the car chassis and the RPi attached to the 3D printed parts we’re ready for the final assembly.\nDeepRacer build (left) and WL Toys car build (right)\nWe can attach the computer chassis and wire everything up Attach the Raspberry Pi to the car chassis and connect the speed controller wire to 0 on the servo hat (black on the connector to black on the hat and white to yellow) and the steering controller wire to 1 on the servo hat (brown on the connector to black on the hat and yellow to yellow) as below\nPlug in your battery using both connectors (one for the car, one for the RPi) wait 30 seconds for the Pi to boot up and you should be able to access the car console and get started with the car calibration - remember there is a switch just behind the left front wheel to turn the car on.\nDeepRacer build complete\nWith everything built and running we’re going to SSH into the RPi again and start the DeepRacer process manually to check everything is working correctly before enabling the DeepRacer service on the car so that it starts automatically in future.\nsudo /opt/aws/deepracer/start_ros.sh Open a browser and enter the address of the car https://rpi-racer.local you will get a certificate warning as a self-signed cert is used, but you can accept this and then you should be presented with the DeepRacer car console log in page\nThe default password for the car console is deepracer and once you have logged in you should get the home page\nEnable the camera if it isn’t already, it might be upside down (after all the camera is mounted upside down) so we’re going to edit (or create) /etc/rc.local using nano to rotate the camera image. Ctrl+C out of the running process to stop the DeepRacer service\nsudo nano /etc/rc.local Add the line to solve the issue with the camera image being upside down\nv4l2-ctl --set-ctrl=rotate=180 Whilst we’re here lets quickly enable DeepRacer as a service on the car, reboot and we’re done.\nsudo systemctl enable deepracer-core sudo systemctl start deepracer-core sudo /sbin/shutdown -r now Once the RPi has rebooted open the car console in a browser window again and this time after logging in the camera image should be the right way up.\nNow it’s time to start our machine learning journey to train some models and get racing\u0026hellip;. see you on the track and good luck.\nConclusion # Through completing this we’ve learnt about installing and updating linux on a Raspberry Pi, with thanks to the community we‘ve installed DeepRacer and 3D printed all of the parts needed to build our own DeepRacer vehicle. We can now test our our DeepRacer models in the real world (or start training models) and see how they compare from the simulator. The physical conditions are very different with light being a major influence in how the car \u0026amp; model performs (whilst the image feed in the car console is in colour, the images used by the model are converted to greyscale to reduce compute resource requirements)\nFor additional help and support be sure to join the DeepRacer community and get involved.\nPrior to leaving AWS in June I worked with the DeepRacer team to test and compare RPi Racer against an original DeepRacer car running the most recent software available at the time.\n","date":"9 September 2024","externalUrl":null,"permalink":"/posts/2024/09/09/","section":"Posts","summary":"","title":"Building your own DeepRacer","type":"posts"},{"content":"","date":"9 September 2024","externalUrl":null,"permalink":"/tags/deepracer/","section":"Tags","summary":"","title":"Deepracer","type":"tags"},{"content":"","date":"9 September 2024","externalUrl":null,"permalink":"/tags/rpi/","section":"Tags","summary":"","title":"Rpi","type":"tags"},{"content":"","date":"1 September 2024","externalUrl":null,"permalink":"/fitness/2024/09/","section":"Fitness","summary":"","title":"September 2024","type":"fitness"},{"content":"","date":"23 August 2024","externalUrl":null,"permalink":"/photos/2024/08/23-new-desk-and-a-temporary-place-for-the-lego-garage/","section":"Photos","summary":"","title":"New desk and a temporary place for the Lego garage","type":"photos"},{"content":"","date":"14 August 2024","externalUrl":null,"permalink":"/photos/2024/08/14-london-summers-evening/","section":"Photos","summary":"","title":"London summers evening","type":"photos"},{"content":"","date":"1 August 2024","externalUrl":null,"permalink":"/fitness/2024/08/","section":"Fitness","summary":"","title":"August 2024","type":"fitness"},{"content":"","date":"13 July 2024","externalUrl":null,"permalink":"/photos/2024/07/13-new-york-walking/","section":"Photos","summary":"","title":"New York walking","type":"photos"},{"content":"","date":"11 July 2024","externalUrl":null,"permalink":"/photos/2024/07/11-new-york-new-york-so-good-they-named-it-twice/","section":"Photos","summary":"","title":"New York, New York (so good they named it twice)","type":"photos"},{"content":"","date":"9 July 2024","externalUrl":null,"permalink":"/photos/2024/07/09-all-set-up-and-ready-to-stream-in-new-york/","section":"Photos","summary":"","title":"All set up and ready to stream in New York","type":"photos"},{"content":"","date":"9 July 2024","externalUrl":null,"permalink":"/photos/2024/07/09-good-morning-new-york/","section":"Photos","summary":"","title":"Good morning New York","type":"photos"},{"content":"","date":"7 July 2024","externalUrl":null,"permalink":"/photos/2024/07/07-pete-tong-ibiza-classics-at-silverstone/","section":"Photos","summary":"","title":"Pete Tong. Ibiza classics at Silverstone","type":"photos"},{"content":"","date":"1 July 2024","externalUrl":null,"permalink":"/fitness/2024/07/","section":"Fitness","summary":"","title":"July 2024","type":"fitness"},{"content":"","date":"20 June 2024","externalUrl":null,"permalink":"/tags/life/","section":"Tags","summary":"","title":"Life","type":"tags"},{"content":"\u0026hellip;.back here again doing some tidying of my digital estate and also at the end of a +6 year stint working at AWS (follow up post coming soonish)\n","date":"20 June 2024","externalUrl":null,"permalink":"/posts/2024/06/20/","section":"Posts","summary":"","title":"So here we are....","type":"posts"},{"content":"","date":"20 June 2024","externalUrl":null,"permalink":"/tags/work/","section":"Tags","summary":"","title":"Work","type":"tags"},{"content":"","date":"1 June 2024","externalUrl":null,"permalink":"/fitness/2024/06/","section":"Fitness","summary":"","title":"June 2024","type":"fitness"},{"content":"","date":"26 May 2024","externalUrl":null,"permalink":"/photos/2024/05/26-about-to-go-racing/","section":"Photos","summary":"","title":"About to go racing","type":"photos"},{"content":"","date":"26 May 2024","externalUrl":null,"permalink":"/tags/indy500/","section":"Tags","summary":"","title":"Indy500","type":"tags"},{"content":"","date":"1 May 2024","externalUrl":null,"permalink":"/fitness/2024/05/","section":"Fitness","summary":"","title":"May 2024","type":"fitness"},{"content":"","date":"7 April 2024","externalUrl":null,"permalink":"/photos/2024/04/07-3-down-1-to-build/","section":"Photos","summary":"","title":"3 down, 1 to build….","type":"photos"},{"content":"","date":"15 March 2024","externalUrl":null,"permalink":"/photos/2024/03/15-chilling-at-my-second-favourite-virginatlantic-clu/","section":"Photos","summary":"","title":"Chilling at my second favourite @virginatlantic Clubhouse whilst waiting for the the VS20 to fly me home - I’ve always liked this lounge at SFO but it can’t quite beat the LHR Clubhouse","type":"photos"},{"content":"","date":"10 March 2024","externalUrl":null,"permalink":"/photos/2024/03/10-having-a-terrible-time-in-the-virgin-atlantic-loun/","section":"Photos","summary":"","title":"Having a terrible time in the Virgin Atlantic lounge in LHR … the Clubhouse at T3 could be one of my favourite places to kill time","type":"photos"},{"content":"","date":"1 February 2024","externalUrl":null,"permalink":"/fitness/2024/02/","section":"Fitness","summary":"","title":"February 2024","type":"fitness"},{"content":"","date":"24 January 2024","externalUrl":null,"permalink":"/photos/2024/01/24-when-royalty-dbro-meets-physics-royalty-profbrianc/","section":"Photos","summary":"","title":"When #AWSDeepRacer royalty @_dbro meets physics royalty @profbriancox","type":"photos"},{"content":"","date":"1 January 2024","externalUrl":null,"permalink":"/photos/2024/01/01-got-wood/","section":"Photos","summary":"","title":"Got wood","type":"photos"},{"content":"","date":"1 January 2024","externalUrl":null,"permalink":"/fitness/2024/","section":"Fitness","summary":"","title":"2024","type":"fitness"},{"content":"","date":"1 January 2024","externalUrl":null,"permalink":"/fitness/2024/01/","section":"Fitness","summary":"","title":"January 2024","type":"fitness"},{"content":"","date":"29 December 2023","externalUrl":null,"permalink":"/photos/2023/12/29-quick-visit-to-france/","section":"Photos","summary":"","title":"Quick visit to France","type":"photos"},{"content":"","date":"24 December 2023","externalUrl":null,"permalink":"/photos/2023/12/24-vegas-baby/","section":"Photos","summary":"","title":"Vegas baby…..","type":"photos"},{"content":"","date":"24 December 2023","externalUrl":null,"permalink":"/photos/2023/12/24-replay/","section":"Photos","summary":"","title":"re:Play","type":"photos"},{"content":"","date":"20 December 2023","externalUrl":null,"permalink":"/photos/2023/12/20-photo/","section":"Photos","summary":"","title":"Photos — 20 12 2023","type":"photos"},{"content":"","date":"16 December 2023","externalUrl":null,"permalink":"/photos/2023/12/16-what-happens-in-vegas-stays-in-vegas/","section":"Photos","summary":"","title":"What happens in Vegas, stays in Vegas","type":"photos"},{"content":"","date":"10 December 2023","externalUrl":null,"permalink":"/photos/2023/12/10-photo/","section":"Photos","summary":"","title":"Photos — 10 12 2023","type":"photos"},{"content":"","date":"1 December 2023","externalUrl":null,"permalink":"/fitness/2023/12/","section":"Fitness","summary":"","title":"December 2023","type":"fitness"},{"content":"So as part of the work I do with AWS DeepRacer I use SSM Agent on the cars and (finally) now also on the Raspberry Pi based timing system, to make things easier I thought I\u0026rsquo;d \u0026ldquo;quickly\u0026rdquo; install and activate SSM on the RPi so I can access them remotely and show the timer online as part of DeepRacer Event Manager (DREM - more on which in another blog post)\nInstalling SSM on a 32bit OS on an RPi Zero or 4 was easy, just works, however on a 64bit OS I was getting errors:\ndpkg: dependency problems prevent configuration of amazon-ssm-agent:armhf: amazon-ssm-agent:armhf depends on libc6. dpkg: error processing package amazon-ssm-agent:armhf (--install): dependency problems - leaving unconfigured Errors were encountered while processing: amazon-ssm-agent:armhf Took me a while to find the answer as I didn\u0026rsquo;t happen to have the time to get an uninterrupted run at fixing the issue and more importantly testing the fix (because I was activating SSM as part of a scripted process) each attempt meant I needed to re-install the OS on the RPi to ensure it was working correctly.\nAnyway, the solution was to install libc6:armhf so now my code to install SSM on an RPi 4 running 64bit OS is as follows:\nsudo dpkg --add-architecture armhf sudo apt-get update sudo apt-get install -y libc6:armhf mkdir /tmp/ssm sudo curl https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/debian_arm/amazon-ssm-agent.deb -o /tmp/ssm/amazon-ssm-agent.deb dpkg -i /tmp/ssm/amazon-ssm-agent.deb rm -rf /tmp/ssm And once installed activate SSM as normal.\nHopefully this helps someone, and if not it will probably help future me.\n","date":"2 November 2023","externalUrl":null,"permalink":"/posts/2023/11/02/","section":"Posts","summary":"","title":"AWS SSM Agent on an RPi 4","type":"posts"},{"content":"","date":"1 November 2023","externalUrl":null,"permalink":"/fitness/2023/11/","section":"Fitness","summary":"","title":"November 2023","type":"fitness"},{"content":"","date":"1 October 2023","externalUrl":null,"permalink":"/fitness/2023/10/","section":"Fitness","summary":"","title":"October 2023","type":"fitness"},{"content":"","date":"1 September 2023","externalUrl":null,"permalink":"/fitness/2023/09/","section":"Fitness","summary":"","title":"September 2023","type":"fitness"},{"content":"","date":"1 August 2023","externalUrl":null,"permalink":"/fitness/2023/08/","section":"Fitness","summary":"","title":"August 2023","type":"fitness"},{"content":"","date":"1 July 2023","externalUrl":null,"permalink":"/fitness/2023/07/","section":"Fitness","summary":"","title":"July 2023","type":"fitness"},{"content":"","date":"1 June 2023","externalUrl":null,"permalink":"/fitness/2023/06/","section":"Fitness","summary":"","title":"June 2023","type":"fitness"},{"content":"","date":"1 May 2023","externalUrl":null,"permalink":"/fitness/2023/05/","section":"Fitness","summary":"","title":"May 2023","type":"fitness"},{"content":"","date":"1 April 2023","externalUrl":null,"permalink":"/fitness/2023/04/","section":"Fitness","summary":"","title":"April 2023","type":"fitness"},{"content":"","date":"1 March 2023","externalUrl":null,"permalink":"/fitness/2023/03/","section":"Fitness","summary":"","title":"March 2023","type":"fitness"},{"content":"","date":"1 February 2023","externalUrl":null,"permalink":"/fitness/2023/02/","section":"Fitness","summary":"","title":"February 2023","type":"fitness"},{"content":"","date":"1 January 2023","externalUrl":null,"permalink":"/fitness/2023/","section":"Fitness","summary":"","title":"2023","type":"fitness"},{"content":"","date":"1 January 2023","externalUrl":null,"permalink":"/fitness/2023/01/","section":"Fitness","summary":"","title":"January 2023","type":"fitness"},{"content":"","date":"1 December 2022","externalUrl":null,"permalink":"/fitness/2022/12/","section":"Fitness","summary":"","title":"December 2022","type":"fitness"},{"content":"","date":"1 November 2022","externalUrl":null,"permalink":"/fitness/2022/11/","section":"Fitness","summary":"","title":"November 2022","type":"fitness"},{"content":"","date":"1 October 2022","externalUrl":null,"permalink":"/fitness/2022/10/","section":"Fitness","summary":"","title":"October 2022","type":"fitness"},{"content":"","date":"1 September 2022","externalUrl":null,"permalink":"/fitness/2022/09/","section":"Fitness","summary":"","title":"September 2022","type":"fitness"},{"content":"","date":"1 August 2022","externalUrl":null,"permalink":"/fitness/2022/08/","section":"Fitness","summary":"","title":"August 2022","type":"fitness"},{"content":"","date":"1 July 2022","externalUrl":null,"permalink":"/fitness/2022/07/","section":"Fitness","summary":"","title":"July 2022","type":"fitness"},{"content":"","date":"1 June 2022","externalUrl":null,"permalink":"/fitness/2022/06/","section":"Fitness","summary":"","title":"June 2022","type":"fitness"},{"content":"","date":"1 May 2022","externalUrl":null,"permalink":"/fitness/2022/05/","section":"Fitness","summary":"","title":"May 2022","type":"fitness"},{"content":"","date":"1 April 2022","externalUrl":null,"permalink":"/fitness/2022/04/","section":"Fitness","summary":"","title":"April 2022","type":"fitness"},{"content":"","date":"1 March 2022","externalUrl":null,"permalink":"/fitness/2022/03/","section":"Fitness","summary":"","title":"March 2022","type":"fitness"},{"content":"","date":"1 February 2022","externalUrl":null,"permalink":"/fitness/2022/02/","section":"Fitness","summary":"","title":"February 2022","type":"fitness"},{"content":"","date":"1 January 2022","externalUrl":null,"permalink":"/fitness/2022/","section":"Fitness","summary":"","title":"2022","type":"fitness"},{"content":"","date":"1 January 2022","externalUrl":null,"permalink":"/fitness/2022/01/","section":"Fitness","summary":"","title":"January 2022","type":"fitness"},{"content":"","date":"1 December 2021","externalUrl":null,"permalink":"/fitness/2021/12/","section":"Fitness","summary":"","title":"December 2021","type":"fitness"},{"content":"","date":"1 November 2021","externalUrl":null,"permalink":"/fitness/2021/11/","section":"Fitness","summary":"","title":"November 2021","type":"fitness"},{"content":"","date":"1 October 2021","externalUrl":null,"permalink":"/fitness/2021/10/","section":"Fitness","summary":"","title":"October 2021","type":"fitness"},{"content":"","date":"1 September 2021","externalUrl":null,"permalink":"/fitness/2021/09/","section":"Fitness","summary":"","title":"September 2021","type":"fitness"},{"content":"","date":"1 August 2021","externalUrl":null,"permalink":"/fitness/2021/08/","section":"Fitness","summary":"","title":"August 2021","type":"fitness"},{"content":"","date":"1 July 2021","externalUrl":null,"permalink":"/fitness/2021/07/","section":"Fitness","summary":"","title":"July 2021","type":"fitness"},{"content":"","date":"1 June 2021","externalUrl":null,"permalink":"/fitness/2021/06/","section":"Fitness","summary":"","title":"June 2021","type":"fitness"},{"content":"","date":"1 May 2021","externalUrl":null,"permalink":"/fitness/2021/05/","section":"Fitness","summary":"","title":"May 2021","type":"fitness"},{"content":"","date":"1 April 2021","externalUrl":null,"permalink":"/fitness/2021/04/","section":"Fitness","summary":"","title":"April 2021","type":"fitness"},{"content":"","date":"1 March 2021","externalUrl":null,"permalink":"/fitness/2021/03/","section":"Fitness","summary":"","title":"March 2021","type":"fitness"},{"content":"","date":"1 February 2021","externalUrl":null,"permalink":"/fitness/2021/02/","section":"Fitness","summary":"","title":"February 2021","type":"fitness"},{"content":"","date":"1 January 2021","externalUrl":null,"permalink":"/fitness/2021/","section":"Fitness","summary":"","title":"2021","type":"fitness"},{"content":"","date":"1 January 2021","externalUrl":null,"permalink":"/fitness/2021/01/","section":"Fitness","summary":"","title":"January 2021","type":"fitness"},{"content":"","date":"1 December 2020","externalUrl":null,"permalink":"/fitness/2020/12/","section":"Fitness","summary":"","title":"December 2020","type":"fitness"},{"content":"","date":"1 November 2020","externalUrl":null,"permalink":"/fitness/2020/11/","section":"Fitness","summary":"","title":"November 2020","type":"fitness"},{"content":"","date":"1 October 2020","externalUrl":null,"permalink":"/fitness/2020/10/","section":"Fitness","summary":"","title":"October 2020","type":"fitness"},{"content":"","date":"1 September 2020","externalUrl":null,"permalink":"/fitness/2020/09/","section":"Fitness","summary":"","title":"September 2020","type":"fitness"},{"content":"","date":"1 August 2020","externalUrl":null,"permalink":"/fitness/2020/08/","section":"Fitness","summary":"","title":"August 2020","type":"fitness"},{"content":"","date":"1 July 2020","externalUrl":null,"permalink":"/fitness/2020/07/","section":"Fitness","summary":"","title":"July 2020","type":"fitness"},{"content":"","date":"1 June 2020","externalUrl":null,"permalink":"/fitness/2020/06/","section":"Fitness","summary":"","title":"June 2020","type":"fitness"},{"content":"","date":"1 May 2020","externalUrl":null,"permalink":"/fitness/2020/05/","section":"Fitness","summary":"","title":"May 2020","type":"fitness"},{"content":"","date":"1 April 2020","externalUrl":null,"permalink":"/fitness/2020/04/","section":"Fitness","summary":"","title":"April 2020","type":"fitness"},{"content":"So as we come to the end of 2019 I found myself back here, mainly because I\u0026rsquo;m in the process of winding up Wirewool Limited (my freelancing company) and with that comes the fun and games of unpicking all of the hosting / websites / domain name registration / email that I\u0026rsquo;d been running for a number of customers for up to 8 years.\nOne of the sites was this one, and that meant I was shutting down where it had been hosted so it needed moving.\nThe moving part was easy enough, (seriously how hard can it be to move a WordPress site). but then I had a look at when I had last posted, and what I had in the last couple of years posted about. There is a lot missing and a lot has changed. Some better, some just different, here\u0026rsquo;s a vague recap of what our hero has been up to\u0026hellip;.\nSo starting with the obvious, why shut down Wirewool?\nWell since April 2018 I\u0026rsquo;ve been gainfully employed by Amazon Web Services as a Solution Architect, sure I could earn more as a freelancer, but only when working, and only if I have work. One of the things that I found with freelancing was that it was very much feast and famine. Also the idea of freedom of work doesn\u0026rsquo;t apply when you have bills to pay, kids to feed and a house to pay for. I managed to keep it going for 8 years and when a decent offer came along (in fact I had a couple of offers at the same) I took the one that felt like it would be the best for me long term. So far it\u0026rsquo;s worked out well and now it\u0026rsquo;s time to shut down Wirewool and remove something that is costing me money to run having finally gone through and tracked down all of the services I\u0026rsquo;m / Wirewool is using. (Note: something I should\u0026rsquo;ve done a long time ago, 20:20 hindsight is a wonderful thing.)\nOoh working for Amazon, gosh!\nYep, gone from a one man band to the largest company I\u0026rsquo;ve ever worked for (and will probably ever work for). It\u0026rsquo;s certainly interesting, but it\u0026rsquo;s also pretty awesome. I mean there is the basic stuff you get when you go back to working for someone, like paid holiday and sickness which is cool, and monthly pay (still freak out towards the end of each month as the account drains down) but also private healthcare (more of why this is good later). Training and education are massively important, I work with loads of awesome people to help customers, I\u0026rsquo;m enjoying presenting, helping to educate groups of people (ex-forces transitioning into a career in IT and also Princes Trust \u0026ldquo;kids\u0026rdquo;) on cloud, playing with DeepRacer and showing how it can help with learning AI / ML, helping to organise Meetups, and just well everything. I even enjoyed going to Vegas in December 2019 for re:Invent (and I hate Las Vegas). I even get to do some code hacking every now and then and have access to the best cloud toy box on the planet.\nIntroducing Brian\nEveryone gets baggage that they carry around after a time, just I managed to name mine.\nSo I\u0026rsquo;d been feeling rubbish for a number of years, couldn\u0026rsquo;t shift the weight that I had gained over time, more than just \u0026ldquo;getting old\u0026rdquo;, couldn\u0026rsquo;t really train without taking days to recover (even after a slow 5km run / walk I\u0026rsquo;d need 3-4 days for my legs to start working again). I\u0026rsquo;d been to the doctor 6 years or so ago and said \u0026ldquo;this isn\u0026rsquo;t right\u0026rdquo; and they said what do you think it might be \u0026ldquo;well worst case, a brain tumor\u0026rdquo; said I and oh how we laughed\u0026hellip;.\n\u0026hellip;.right until the point where I tried again with the doctors early last year. This time around I was taken more seriously and sent off for a load of blood tests which revealed I had 0 testosterone. Back to the doctors to discuss the result and the possible causes and it was time to test out the private health care I now had access to (see earlier note on private health care and the joys of working for a large company) More bloods revealed I had a prolactin level of 116290 (normal is below 500) and this was high enough that the day after I\u0026rsquo;d given the blood to be tested the consultant was called by the vampires who were slightly alarmed by the results. So something was wrong. An Ultrasound revealed nothing out of the ordinary with my testicles (one of the possible causes of 0 testosterone) however an MRI scan revealed I had a benign brain tumor that a) I christened \u0026ldquo;Brian\u0026rdquo; and b) that it was a macroprolactinoma approx 28mm in size.\nNo one wants to hear the phrase \u0026ldquo;brain tumor\u0026rdquo; when talking about their health but some reassurance from my consultant and some digging around showed it was easily sorted (well probably) and here take these drugs which have some \u0026ldquo;interesting\u0026rdquo; potential side effects (never read the side effects leaflets or google for \u0026ldquo;side effects of drug I am taking\u0026rdquo;)\nSo in the first three months of taking the drugs the prolactin levels were back down near normal, I was losing weight and able to train, aside from a few incidents with a black dog (which I haven\u0026rsquo;t named) I\u0026rsquo;d say it\u0026rsquo;s all pretty good, some members of the family may have a different view, and a couple of work colleagues thought I was suffering from a terrible hangover a few times as my body adjusted to the drugs. Anyhew since starting on the drugs I\u0026rsquo;ve lost 18 kilos in weight, taken 10 minutes or so off my half marathon PB and have managed to get my Parkrun PB to 23 minutes 13 seconds.\n","date":"6 March 2020","externalUrl":null,"permalink":"/posts/2020/03/06/","section":"Posts","summary":"","title":"Goodbye to all that","type":"posts"},{"content":"","date":"6 March 2020","externalUrl":null,"permalink":"/categories/life/","section":"Categories","summary":"","title":"Life","type":"categories"},{"content":"","date":"1 March 2020","externalUrl":null,"permalink":"/fitness/2020/03/","section":"Fitness","summary":"","title":"March 2020","type":"fitness"},{"content":"","date":"1 February 2020","externalUrl":null,"permalink":"/fitness/2020/02/","section":"Fitness","summary":"","title":"February 2020","type":"fitness"},{"content":"","date":"3 January 2020","externalUrl":null,"permalink":"/tags/fitness/","section":"Tags","summary":"","title":"Fitness","type":"tags"},{"content":"So I get to this point every year, look back on my fitness activity and think \u0026ldquo;should\u0026rsquo;ve done better.\u0026rdquo; Except for 2019 I\u0026rsquo;m feeling pretty good about it, but to make sure that I\u0026rsquo;m not just kidding myself I needed some data and that meant I first needed to import 7 years of data from Garmin into Strava so all of my activity data was in one place. I actually have data going back to 2008 but it\u0026rsquo;s a bit sparse so for the sake of the table below I\u0026rsquo;ve dropped it.\nImporting all the things from Garmin into Strava was made easy thanks to garminexport (well I had a local archive of 1300+ activities that I had to manually import, 25 at a time, and check were assigned to the correct activity type.)\nAmusing to note that as I was adding the entries I spotted a 3km run in 2015 that took me 22 minutes. In 2019 I managed to get my Parkrun PB down to 22:13 ;-)\nSo with the data all in one place, time to look at it (a bit)\u0026hellip;. using this handy site I was able to quickly see annual summary data which is below, the biggest surprise for me is the lack of swimming, oh and a lot of the riding is made up of bike commuting. The interesting part (for me) is the improvement in my running pace over the last few years.\n2012 2013 2014 2015 2016 2017 2018 2019 Ride Count 10 12 79 151 163 53 84 74 Distance (km) 413 262 423 399 672 250 394 350 Time (hh:mm:ss) 21:53:51 10:50:22 23:56:42 21:09:31 34:24:52 13:34:27 21:50:58 18:00:36 Run Count 58 37 33 31 85 89 71 131 Distance (km) 358 247 201 211 238 457 270 847 Time (hh:mm:ss) 35:49:27 26:55:34 23:54:00 23:58:01 30:28:49 52:12:56 27:29:12 78:02:32 Avg / Speed min/km 6:00 6:32 7:08 6:50 7:42 6:51 6:07 5:32 Swim Count 5 1 - - - - 23 44 Distance (km) 8 1 - - - - 14 55 Time (hh:mm:ss) 02:34:34 00:46:34 - - - - 03:57:34 15:40:27 This is due to my \u0026ldquo;if you want to run faster, run faster\u0026rdquo; brain wave I had in the middle of 2018, where I suddenly worked out what I needed to do to stop my parkrun taking so long (and getting longer) and to just generally improve my running, going from a tedious and sometime boring plod, into something that almost feels like running. Just need to apply it to my swimming now ;-)\n","date":"3 January 2020","externalUrl":null,"permalink":"/posts/2020/01/03/","section":"Posts","summary":"","title":"Over the years","type":"posts"},{"content":"","date":"3 January 2020","externalUrl":null,"permalink":"/tags/training/","section":"Tags","summary":"","title":"Training","type":"tags"},{"content":"","date":"1 January 2020","externalUrl":null,"permalink":"/fitness/2020/","section":"Fitness","summary":"","title":"2020","type":"fitness"},{"content":"","date":"1 January 2020","externalUrl":null,"permalink":"/tags/bluetooth/","section":"Tags","summary":"","title":"Bluetooth","type":"tags"},{"content":"","date":"1 January 2020","externalUrl":null,"permalink":"/fitness/2020/01/","section":"Fitness","summary":"","title":"January 2020","type":"fitness"},{"content":"So I had an idea that fell out of being Track Boss at re:Invent for a few hours each day during the DeepRacer championship. Wouldn\u0026rsquo;t it be interesting to see what the heart rate and step count of the track boss was\u0026hellip;.?\nSo quick bit of DuckDuckGo(ing) later and I had a Polar H10 on the way and was looking at how I could get going - this post on RepRage formed the basis of some early work.\nSo I was able to scan for my device:\n$ sudo hcitool lescan LE Scan … F4:DF:3F:95:DE:EA (unknown) F4:DF:3F:95:DE:EA Polar H10 65AAF325 But trying to connect to it failed using hcitool, so I switched to using gatttool with success (connection and data):\n$ gatttool -t random -b F4:DF:3F:95:DE:EA -I [F4:DF:3F:95:DE:EA][LE]\u0026gt; connect Attempting to connect to F4:DF:3F:95:DE:EA Connection successful [F4:DF:3F:95:DE:EA][LE]\u0026gt; characteristics handle: 0x0002, char properties: 0x02, char value handle: 0x0003, uuid: 00002a00-0000-1000-8000-00805f9b34fb handle: 0x0004, char properties: 0x02, char value handle: 0x0005, uuid: 00002a01-0000-1000-8000-00805f9b34fb handle: 0x0006, char properties: 0x02, char value handle: 0x0007, uuid: 00002a04-0000-1000-8000-00805f9b34fb handle: 0x0008, char properties: 0x02, char value handle: 0x0009, uuid: 00002aa6-0000-1000-8000-00805f9b34fb handle: 0x000b, char properties: 0x20, char value handle: 0x000c, uuid: 00002a05-0000-1000-8000-00805f9b34fb So that\u0026rsquo;s some information from the strap, now to subscribe to notifications to get the heart rate data:\n[F4:DF:3F:95:DE:EA][LE]\u0026gt; char-write-req 0x0011 0100 Characteristic value was written successfully Notification handle = 0x0010 value: 10 40 e4 03 Notification handle = 0x0010 value: 10 40 92 03 Notification handle = 0x0010 value: 10 40 7e 03 Notification handle = 0x0010 value: 10 41 8f 03 76 03 For me I get ~79 notifications before an error, however for now getting something back is better than nothing especially given the second \u0026ldquo;value\u0026rdquo; is the important one, my heart rate in hexadecimal. So we can (sort of) read the data from the strap, now to do this in code.\nPython is my current go to language so it was time to add some libraries and see what we could get working:\n$ sudo apt-get install -y python3 python3-pip libglib2.0-dev $ sudo pip3 install bluepy Adding in MQTT and python libraries so the data can be used in a presentation layer:\n$ sudo apt-get install -y mosquitto mosquitto-clients $ sudo systemctl enable mosquitto.service $ sudo pip3 install argparse paho-mqtt My code is still bombing out with a connection error though after 147 notifications from bluepy. On the up side I\u0026rsquo;m not the only hitting this issue, on the down side there doesn\u0026rsquo;t appear to be a decent fix. For me running:\n$ hcitool con Connections: \u0026lt; LE F4:DF:3F:95:DE:EA handle 64 state 1 lm MASTER To find out the connection handle (in this case 64) followed by:\n$ sudo hcitool lecup --handle 64 --min 250 --max 400 --latency 0 --timeout 600 Fixes the problem (todo: make this happen using magic)\nSo with the code below:\nimport datetime import bluepy.btle as btle import paho.mqtt.client as mqtt import argparse import json packets = 0 class MyDelegate(btle.DefaultDelegate): def __init__(self): btle.DefaultDelegate.__init__(self) def handleNotification(self, cHandle, data): global packets packets += 1 global hr hr = str(data[1]) global time time = datetime.datetime.now().time() print(\u0026#34;time: {} packet: {} Handle: {} HR (bpm): {}\u0026#34;.format(time, packets, cHandle, data[1])) parser = argparse.ArgumentParser(description=\u0026#34;Connect to Polar H10 HRM\u0026#34;) parser.add_argument(\u0026#39;device\u0026#39;, type=str, help=\u0026#39;HRM strap device ID\u0026#39;) args = parser.parse_args() print(\u0026#39;args: {}\u0026#39;.format(args.device)) p = btle.Peripheral(args.device, addrType=\u0026#34;random\u0026#34;) p.setDelegate(MyDelegate()) #start hr notification service_uuid = 0x180D svc = p.getServiceByUUID(service_uuid) ch = svc.getCharacteristics()[0] desc = ch.getDescriptors()[0] desc.write(b\u0026#34;\\x01\\x00\u0026#34;, True) # MQTT broker_url = \u0026#34;10.10.10.71\u0026#34; broker_port = 1883 client = mqtt.Client() client.connect(broker_url, broker_port) # listen for notifications while True: if p.waitForNotifications(1.0): payload = json.dumps({\u0026#39;time\u0026#39;: str(time), \u0026#39;heart_rate\u0026#39;: hr}) client.publish(topic=\u0026#34;TrackBossHRM\u0026#34;, payload=str(payload), qos=0, retain=False) continue I have continuous heart rate data getting added into an MQTT based queue for use elsewhere\u0026hellip;\n$ mosquitto_sub -d -t TrackBossHRMClient mosqsub|2671-raspberryp sending CONNECT Client mosqsub|2671-raspberryp received CONNACK (0) Client mosqsub|2671-raspberryp sending SUBSCRIBE (Mid: 1, Topic: TrackBossHRM, QoS: 0) Client mosqsub|2671-raspberryp received SUBACK Subscribed (mid: 1): 0 Client mosqsub|2671-raspberryp received PUBLISH (d0, q0, r0, m0, \u0026#39;TrackBossHRM\u0026#39;, … (47 bytes)) {\u0026#34;time\u0026#34;: \u0026#34;17:26:43.999799\u0026#34;, \u0026#34;heart_rate\u0026#34;: \u0026#34;72\u0026#34;} Client mosqsub|2671-raspberryp received PUBLISH (d0, q0, r0, m0, \u0026#39;TrackBossHRM\u0026#39;, … (47 bytes)) {\u0026#34;time\u0026#34;: \u0026#34;17:26:44.997310\u0026#34;, \u0026#34;heart_rate\u0026#34;: \u0026#34;72\u0026#34;} Now to do something with it.\n","date":"1 January 2020","externalUrl":null,"permalink":"/posts/2020/01/01/","section":"Posts","summary":"","title":"Pi + Bluetooth = Is the track boss going to have a heart attack","type":"posts"},{"content":"","date":"1 January 2020","externalUrl":null,"permalink":"/tags/raspberrypi/","section":"Tags","summary":"","title":"Raspberrypi","type":"tags"},{"content":"\u0026hellip;.but I doubt the internet missed me adding more guff and noise ;-)\n","date":"24 December 2019","externalUrl":null,"permalink":"/posts/2019/12/24/","section":"Posts","summary":"","title":"Been a while....","type":"posts"},{"content":"","date":"24 December 2019","externalUrl":null,"permalink":"/tags/random/","section":"Tags","summary":"","title":"Random","type":"tags"},{"content":"","date":"1 December 2019","externalUrl":null,"permalink":"/fitness/2019/12/","section":"Fitness","summary":"","title":"December 2019","type":"fitness"},{"content":"","date":"1 November 2019","externalUrl":null,"permalink":"/fitness/2019/11/","section":"Fitness","summary":"","title":"November 2019","type":"fitness"},{"content":"","date":"1 October 2019","externalUrl":null,"permalink":"/fitness/2019/10/","section":"Fitness","summary":"","title":"October 2019","type":"fitness"},{"content":"","date":"1 September 2019","externalUrl":null,"permalink":"/fitness/2019/09/","section":"Fitness","summary":"","title":"September 2019","type":"fitness"},{"content":"","date":"1 August 2019","externalUrl":null,"permalink":"/fitness/2019/08/","section":"Fitness","summary":"","title":"August 2019","type":"fitness"},{"content":"","date":"1 July 2019","externalUrl":null,"permalink":"/fitness/2019/07/","section":"Fitness","summary":"","title":"July 2019","type":"fitness"},{"content":"","date":"1 June 2019","externalUrl":null,"permalink":"/fitness/2019/06/","section":"Fitness","summary":"","title":"June 2019","type":"fitness"},{"content":"","date":"1 May 2019","externalUrl":null,"permalink":"/fitness/2019/05/","section":"Fitness","summary":"","title":"May 2019","type":"fitness"},{"content":"","date":"1 April 2019","externalUrl":null,"permalink":"/fitness/2019/04/","section":"Fitness","summary":"","title":"April 2019","type":"fitness"},{"content":"","date":"1 March 2019","externalUrl":null,"permalink":"/fitness/2019/03/","section":"Fitness","summary":"","title":"March 2019","type":"fitness"},{"content":"","date":"1 February 2019","externalUrl":null,"permalink":"/fitness/2019/02/","section":"Fitness","summary":"","title":"February 2019","type":"fitness"},{"content":"","date":"1 January 2019","externalUrl":null,"permalink":"/fitness/2019/","section":"Fitness","summary":"","title":"2019","type":"fitness"},{"content":"","date":"1 January 2019","externalUrl":null,"permalink":"/fitness/2019/01/","section":"Fitness","summary":"","title":"January 2019","type":"fitness"},{"content":"","date":"1 December 2018","externalUrl":null,"permalink":"/fitness/2018/12/","section":"Fitness","summary":"","title":"December 2018","type":"fitness"},{"content":"","date":"1 November 2018","externalUrl":null,"permalink":"/fitness/2018/11/","section":"Fitness","summary":"","title":"November 2018","type":"fitness"},{"content":"","date":"1 October 2018","externalUrl":null,"permalink":"/fitness/2018/10/","section":"Fitness","summary":"","title":"October 2018","type":"fitness"},{"content":"So once again I was the lucky recipient of a large box of Lego, this time the Lego Bugatti Chiron (sadly not the full size one which might have taken a bit longer to build)\nGreat fun to build\n","date":"16 September 2018","externalUrl":null,"permalink":"/posts/2018/09/16/","section":"Posts","summary":"","title":"Lego Bugatti Chiron Build","type":"posts"},{"content":"","date":"1 September 2018","externalUrl":null,"permalink":"/fitness/2018/09/","section":"Fitness","summary":"","title":"September 2018","type":"fitness"},{"content":"","date":"1 August 2018","externalUrl":null,"permalink":"/fitness/2018/08/","section":"Fitness","summary":"","title":"August 2018","type":"fitness"},{"content":"","date":"1 July 2018","externalUrl":null,"permalink":"/fitness/2018/07/","section":"Fitness","summary":"","title":"July 2018","type":"fitness"},{"content":"So in follow up to my previous post about the Lego Porsche 911 GT3 RS I have been fortunate enough to receive the gift of a Lego Bugatti Chiron thanks to the ever patient Octavia.\nAgain a massive box of Lego, and what looks to be amazing building experience, over the next few days I\u0026rsquo;m going to listen to the podcasts that accompany the build and hopefully at the weekend at least open the first bag of bits to get cracking on the build\u0026hellip;.\n\u0026hellip;.not a fan of Lego, probably best to come back in a few weeks time when I might have posted about something else (maybe)\n","date":"6 June 2018","externalUrl":null,"permalink":"/posts/2018/06/06/","section":"Posts","summary":"","title":"Lego Bugatti Chiron","type":"posts"},{"content":"","date":"1 June 2018","externalUrl":null,"permalink":"/fitness/2018/06/","section":"Fitness","summary":"","title":"June 2018","type":"fitness"},{"content":"","date":"1 May 2018","externalUrl":null,"permalink":"/fitness/2018/05/","section":"Fitness","summary":"","title":"May 2018","type":"fitness"},{"content":"","date":"1 April 2018","externalUrl":null,"permalink":"/fitness/2018/04/","section":"Fitness","summary":"","title":"April 2018","type":"fitness"},{"content":"","date":"1 March 2018","externalUrl":null,"permalink":"/fitness/2018/03/","section":"Fitness","summary":"","title":"March 2018","type":"fitness"},{"content":"","date":"1 February 2018","externalUrl":null,"permalink":"/fitness/2018/02/","section":"Fitness","summary":"","title":"February 2018","type":"fitness"},{"content":"","date":"1 January 2018","externalUrl":null,"permalink":"/fitness/2018/","section":"Fitness","summary":"","title":"2018","type":"fitness"},{"content":"","date":"1 January 2018","externalUrl":null,"permalink":"/fitness/2018/01/","section":"Fitness","summary":"","title":"January 2018","type":"fitness"},{"content":"","date":"29 December 2017","externalUrl":null,"permalink":"/tags/running/","section":"Tags","summary":"","title":"Running","type":"tags"},{"content":"\u0026hellip;once again failed this year.\nStarted well with a few months of marathon training and getting to my longest run ever (25km) but then as ever injury and lethargy \u0026ldquo;prevented\u0026rdquo; me doing much more.\nClearly I need a target to motivate me to do something and \u0026ldquo;fitness\u0026rdquo; isn\u0026rsquo;t enough.\nAnyway the stats from 2017:\nCycling : 263Km (all commuting to and from the station) Running : 440Km (mostly in the first 3 months of 2017) Swimming: 12Km\nLots of changes happening in 2018, but alongside the changes and unknowns I\u0026rsquo;d really like to find a way to consistently exercise.\n","date":"29 December 2017","externalUrl":null,"permalink":"/posts/2017/12/29/","section":"Posts","summary":"","title":"So the fitness thing...","type":"posts"},{"content":"","date":"28 December 2017","externalUrl":null,"permalink":"/tags/apple/","section":"Tags","summary":"","title":"Apple","type":"tags"},{"content":"So after drawing inspiration from a couple of people and the fact my daughter is now attending the local Coder Dojo. I thought maybe I should get into a bit of hacking and playing around with coding more so I can help answer some of the inevitable questions.\nI now have a Pi Zero (W) sitting on my desk with no easy way of setting it up. Download the latest Raspbian from here. I\u0026rsquo;m using 2017-11-29-raspbian-stretch-lite in this example which was the latest as of writing.\nOh and because I still can\u0026rsquo;t solder very well I got the hammer header set to make things a bit easier. (and so I can use a hammer as a soldering iron!)\nSo this was completed using OSX and serves mainly as a reference for me, but might also be useful for anyone else trying to get Wifi working on a headless Raspberry Pi Zero W\nTo get the image on to the SD card:\n$ brew cask install etcher And use the simple interface to select the previously downloaded image and your SD card, if the SD card isn\u0026rsquo;t showing, unplug it from the card reader and plug it back in.\nOnce etcher has finished writing the image to the card you should be able to use terminal to access the boot volume of the card:\n$ cd /Volumes/boot Create the files you need:\n$ touch wpa_supplicant.conf ssh ssh remains empty and is just there so that SSH is enabled on the Pi at boot time.\n** Note: ** If you look at the boot volume of the SD card once it has been used in a Pi you will find that the two files created aren\u0026rsquo;t present, it\u0026rsquo;s ok they are moved to the correct location on start up.\nYou need to configure the wpa_supplicant.conf with your wireless connection(s):\n$ vim wpa_supplicant.conf Add your wifi configuration(s):\nctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid=\u0026#34;ESSID\u0026#34; psk=\u0026#34;Your_wifi_password\u0026#34; } Or for multiple connection profiles:\nctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid=\u0026#34;ESSID1\u0026#34; psk=\u0026#34;Your_wifi_password\u0026#34; priority=100 } network={ ssid=\u0026#34;ESSID2\u0026#34; psk=\u0026#34;Your_wifi_password\u0026#34; priority=90 } Save the file\nFor added winning following this gist you can also set up your Pi Zero W so that you can ssh into it using a USB connection (just plug your USB cable into the right connection, not the power one)\nAll done? (maybe) unmount the SD card plug into your Pi and power on.\nOnce you the Pi has successfully booted up you should be able to access it using ssh pi@raspberrypi.local\nTo get around the inconvenience of having to type your password:\n$ scp ~/.ssh/id_rsa.pub pi@raspberrypi.local:~/.ssh/authorized_keys Don\u0026rsquo;t forget to still change the default password on the Pi, every time you log in it will be there just above the prompt until you do anyway.\n","date":"28 December 2017","externalUrl":null,"permalink":"/posts/2017/12/28/","section":"Posts","summary":"","title":"Headless wifi setup on a Raspberry Pi Zero W","type":"posts"},{"content":"","date":"28 December 2017","externalUrl":null,"permalink":"/tags/learning/","section":"Tags","summary":"","title":"Learning","type":"tags"},{"content":"","date":"28 December 2017","externalUrl":null,"permalink":"/tags/pi/","section":"Tags","summary":"","title":"Pi","type":"tags"},{"content":"","date":"28 December 2017","externalUrl":null,"permalink":"/tags/technology/","section":"Tags","summary":"","title":"Technology","type":"tags"},{"content":"Update and install some things, this is of course biased to how I like things to be setup ;-)\n$ sudo apt-get update \u0026amp;\u0026amp; sudo apt-get upgrade -y $ sudo apt-get install -y vim-nox git zsh python3-pip python3-smbus i2c-tools python3-envirophat python3-blinkt python3-inkyphat $ sh -c \u0026#34;$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)\u0026#34; $ mkdir -p ~/.vim/pack/\u0026lt;github_username\u0026gt;/start \u0026amp;\u0026amp; $_ $ git clone https://github.com/python-mode/python-mode.git $ cd python-mode $ git submodule update --init --recursive note: just using my github_username above as a handy folder name, probably good if you\u0026rsquo;re using the dotfiles pattern as well.\nAnd then this guide to configure I2C helped with get the EnviroPhat working\n","date":"27 December 2017","externalUrl":null,"permalink":"/posts/2017/12/27/","section":"Posts","summary":"","title":"Getting your (Pi) dev on","type":"posts"},{"content":"","date":"27 December 2017","externalUrl":null,"permalink":"/tags/python/","section":"Tags","summary":"","title":"Python","type":"tags"},{"content":"So of course having posted about setting up a Raspberry Pi Zero W there now follows the inevitable debugging connection problems post ;-)\nWithout a monitor to use, or a working connection to the Pi debugging was going to be less than simple as I need to look at the logs.\nSo how do I mount an ext4 volume on a Mac to take a look at the logs?\n$ brew cask install osxfuse $ brew install ext4fuse So now I can plug the SD card into a reader and mount up the volume which in my case was as simple as:\n$ sudo ext4fuse /dev/disk2s2 /Volumes/pi -o allow_other Then I could navigate into /Volumes/pi and start poking around at the log files to try and find what the issue was.\n$ more /var/log/syslog In my case it was down to user error and not checking the types of WiFi the Zero could support. 5Ghz isn\u0026rsquo;t supported it would appear, switching to my 2.4Ghz WiFi resolved the problem.\n","date":"26 December 2017","externalUrl":null,"permalink":"/posts/2017/12/26/","section":"Posts","summary":"","title":"Debugging headless Raspberry Pi Zero W","type":"posts"},{"content":"","date":"1 November 2017","externalUrl":null,"permalink":"/fitness/2017/11/","section":"Fitness","summary":"","title":"November 2017","type":"fitness"},{"content":"","date":"1 October 2017","externalUrl":null,"permalink":"/fitness/2017/10/","section":"Fitness","summary":"","title":"October 2017","type":"fitness"},{"content":"","date":"1 September 2017","externalUrl":null,"permalink":"/fitness/2017/09/","section":"Fitness","summary":"","title":"September 2017","type":"fitness"},{"content":"","date":"1 August 2017","externalUrl":null,"permalink":"/fitness/2017/08/","section":"Fitness","summary":"","title":"August 2017","type":"fitness"},{"content":"","date":"1 July 2017","externalUrl":null,"permalink":"/fitness/2017/07/","section":"Fitness","summary":"","title":"July 2017","type":"fitness"},{"content":"","date":"1 June 2017","externalUrl":null,"permalink":"/fitness/2017/06/","section":"Fitness","summary":"","title":"June 2017","type":"fitness"},{"content":"","date":"1 May 2017","externalUrl":null,"permalink":"/fitness/2017/05/","section":"Fitness","summary":"","title":"May 2017","type":"fitness"},{"content":"","date":"1 April 2017","externalUrl":null,"permalink":"/fitness/2017/04/","section":"Fitness","summary":"","title":"April 2017","type":"fitness"},{"content":"","date":"1 March 2017","externalUrl":null,"permalink":"/fitness/2017/03/","section":"Fitness","summary":"","title":"March 2017","type":"fitness"},{"content":"","date":"1 February 2017","externalUrl":null,"permalink":"/fitness/2017/02/","section":"Fitness","summary":"","title":"February 2017","type":"fitness"},{"content":"","date":"1 January 2017","externalUrl":null,"permalink":"/fitness/2017/","section":"Fitness","summary":"","title":"2017","type":"fitness"},{"content":"","date":"1 January 2017","externalUrl":null,"permalink":"/fitness/2017/01/","section":"Fitness","summary":"","title":"January 2017","type":"fitness"},{"content":"","date":"1 December 2016","externalUrl":null,"permalink":"/fitness/2016/12/","section":"Fitness","summary":"","title":"December 2016","type":"fitness"},{"content":"","date":"1 November 2016","externalUrl":null,"permalink":"/fitness/2016/11/","section":"Fitness","summary":"","title":"November 2016","type":"fitness"},{"content":"","date":"1 October 2016","externalUrl":null,"permalink":"/fitness/2016/10/","section":"Fitness","summary":"","title":"October 2016","type":"fitness"},{"content":"I come here so infrequently that I\u0026rsquo;ve only just noticed the fact I have a winter image as the banner for the site. (Which I\u0026rsquo;ve now resolved)\n","date":"20 September 2016","externalUrl":null,"permalink":"/posts/2016/09/20/","section":"Posts","summary":"","title":"Time passes","type":"posts"},{"content":"So I was fortunate enough to receive an unexpected box of Lego goodness at the end of last week which just happened to contain the Porsche 911 GT3 RS. Which meant I spent \u0026ldquo;some\u0026rdquo; time over the weekend a) building it and b) explaining to the kids that this wasn\u0026rsquo;t Lego for them.\nThis should be a longer post about building the Porsche, but I\u0026rsquo;ll just let the photos of the build do the \u0026ldquo;talking\u0026rdquo; instead.\n","date":"19 September 2016","externalUrl":null,"permalink":"/posts/2016/09/19/","section":"Posts","summary":"","title":"Lego Porsche 911 GT3 RS","type":"posts"},{"content":"","date":"19 September 2016","externalUrl":null,"permalink":"/tags/porsche/","section":"Tags","summary":"","title":"Porsche","type":"tags"},{"content":"","date":"1 September 2016","externalUrl":null,"permalink":"/fitness/2016/09/","section":"Fitness","summary":"","title":"September 2016","type":"fitness"},{"content":"","date":"1 August 2016","externalUrl":null,"permalink":"/fitness/2016/08/","section":"Fitness","summary":"","title":"August 2016","type":"fitness"},{"content":"","date":"1 July 2016","externalUrl":null,"permalink":"/fitness/2016/07/","section":"Fitness","summary":"","title":"July 2016","type":"fitness"},{"content":"","date":"1 June 2016","externalUrl":null,"permalink":"/fitness/2016/06/","section":"Fitness","summary":"","title":"June 2016","type":"fitness"},{"content":"","date":"3 May 2016","externalUrl":null,"permalink":"/tags/bt/","section":"Tags","summary":"","title":"Bt","type":"tags"},{"content":"So in fairness to BT my letters to Gavin (letter 1 and letter 2)haven\u0026rsquo;t gone without a response and my numerous complaints have been handed over to the \u0026ldquo;Executive Level Complaints: BT Consumer\u0026rdquo; team and they have been pretty good with updating me with no news or positive updates when they say they will.\nHowever there is now news:\nGREAT NEWS\nI had an email a couple of weeks ago from the automated ordering system that BT run to say that my order had been updated, and then the phone rang with update from the person dealing with my complaints, my order for FTTP had been placed and I had an install date. A month into the future at that time but still there was a date.\nSo now the exterior work has been completed and all things being equal tomorrow the rest of the installation work will be completed and we rejoin the 20th century with working home internet. (I hope)\nsidenote: my neighbours who moved in after us had their order completed last week, not happy\u0026hellip;.\n","date":"3 May 2016","externalUrl":null,"permalink":"/posts/2016/05/03/","section":"Posts","summary":"\u003cp\u003eSo in fairness to BT my letters to Gavin (\u003ca\n  href=\"/posts/2016/04/08/\"\u003eletter 1\u003c/a\u003e and \u003ca\n  href=\"/posts/2016/04/09/\"\u003eletter 2\u003c/a\u003e)haven\u0026rsquo;t gone without a response and my numerous complaints have been handed over to the \u0026ldquo;Executive Level Complaints: BT Consumer\u0026rdquo; team and they have been pretty good with updating me with no news or positive updates when they say they will.\u003c/p\u003e\n\u003cp\u003eHowever there is now news:\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eGREAT NEWS\u003c/strong\u003e\u003c/p\u003e","title":"BT Update","type":"posts"},{"content":"","date":"1 May 2016","externalUrl":null,"permalink":"/fitness/2016/05/","section":"Fitness","summary":"","title":"May 2016","type":"fitness"},{"content":"My previous letter can be found here.\nSo still waiting on a decent internet connection, still being fobbed off, still burning through my 4G data allowance to live life in a modern web based world.\nSo I\u0026rsquo;ve sent another letter to Gavin Patterson. As I mention in the email I\u0026rsquo;ve been updated of the situation, but the update has been \u0026ldquo;no you can\u0026rsquo;t have a usable internet connection even though the planning permission for the estate was granted in 2010 and we\u0026rsquo;ve had nearly six years to upgrade our systems\u0026rdquo;\nI\u0026rsquo;m not expecting anything to happen, after all this is a company well known for appalling customer service and having the added benefit of being in a monopoly position, still you have to try\u0026hellip;. (after all not like I can go to another provider.)\nGood afternoon,\nI’m still trying to resolve the issue around getting a fibre install to my property and a month since I raised the issue with your team I feel like I’m no further to an adequate resolution.\nWhilst I’m getting regular updates about the situation nothing is happening. So there was an engineer on site last week who told the team on the estate where I live that they were installing hardware to sort out the capacity issues nothing has happened, having managed to place an order in January for FTTP several times all of which were cancelled, I was told this morning that it would be August before I could get a connection that could be considered fit for purpose.\nPut simply I have no faith in your company or your ability to deliver anything meaningful in terms of an internet connection, currently I have a DSL connection supplied by you which is slower than a 28k modem during evenings and weekends whilst I’m continually fobbed off with \u0026ldquo;capacity issue” excuses.\nUsing the BT availability checker (http://www.dslchecker.bt.com/adsl/adslchecker.welcome) it indicates there is availability for the FTTP product at my exchange and other people on the same exchange have been able to place orders or are having their orders fulfilled, I’d be interested to know why you can’t provide this product in the three months since I placed my original order and why you now feel it is ok to suggest I could have to wait until August to get a usable internet connection.\nI look forward to your response.\nFor your convenience I attach an image of the availability checker results, I’ve also published this and my previous email to you on my blog and will be linking to Twitter and Facebook as well as contacting and raising a complaint with the Communications Ombudsman.\nRegards David Smith\n","date":"9 April 2016","externalUrl":null,"permalink":"/posts/2016/04/09/","section":"Posts","summary":"\u003cp\u003eMy previous letter can be found \u003ca\n  href=\"/posts/2016/04/08/\"\u003ehere\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eSo still waiting on a decent internet connection, still being fobbed off, still burning through my 4G data allowance to live life in a modern web based world.\u003c/p\u003e\n\u003cp\u003eSo I\u0026rsquo;ve sent another letter to \u003ca\n  href=\"mailto:gavin.e.patterson@bt.com\"\u003eGavin Patterson\u003c/a\u003e.  As I mention in the email I\u0026rsquo;ve been updated of the situation, but the update has been \u0026ldquo;no you can\u0026rsquo;t have a usable internet connection even though the planning permission for the estate was granted in 2010 and we\u0026rsquo;ve had nearly six years to upgrade our systems\u0026rdquo;\u003c/p\u003e","title":"Letter to Gavin","type":"posts"},{"content":"So since moving in January I\u0026rsquo;ve been trying to get a decent internet connection installed.\nIn a bid to get things sorted I ended up emailing Gavin Patterson as the CEO of BT on the 9th March when I felt that I wasn\u0026rsquo;t getting anywhere in spite of my complaints being escalated to UK based team:\nGavin,\nHope you are well. It has been suggested that I contact you in order to try and resolve an issue with getting FTTP installed into a new build in the Horsham area.\nPut simply I’ve been told a number of different things by various people within BT around when I might and might not get FTTP, I’ve had three orders create, and cancelled for various reasons and as an interim measure been provided with a copper broadband connection that is slower than the modem I had 20 years ago. When I looked to move to the house I purchased I checked on your site and as an existing customer to see what sort of internet connection I might get. I work in IT and having a fast and reliable connection is not just useful for my livelihood, it is pretty much a requirement to be a member of society in the UK. I’ve been told that the estate I’m on is prewired with optical fibre to each house so clearly you must have done some level of capacity planning so to be told that it’s not available, there is no capacity, or that I’m getting FTTP installed next week depending on who I speak to and what time of day it is has become a somewhat frustrating experience, the right hand, doesn’t appear to know what the left hand is up to.\nI originally placed my order on the 11th January 2016 and as yet still have no install date, or idea from your company when I might have a useable internet connection.\nI’m pretty frustrated to have been informed today that the order I was told would be completing on the 17th March with a fibre install is now not going ahead, and that no one within BT appears to know if I can get an FTTP connection or not. Please can you escalate this to your complaints team and respond back telling me how this is going to be resolved and by when, something that everyone else in your company appears to be completely unable to do.\nRegards\nDavid Smith\n","date":"8 April 2016","externalUrl":null,"permalink":"/posts/2016/04/08/","section":"Posts","summary":"","title":"Letter to Gavin","type":"posts"},{"content":"","date":"1 April 2016","externalUrl":null,"permalink":"/fitness/2016/04/","section":"Fitness","summary":"","title":"April 2016","type":"fitness"},{"content":"","date":"21 March 2016","externalUrl":null,"permalink":"/tags/jenkins/","section":"Tags","summary":"","title":"Jenkins","type":"tags"},{"content":"So if you plan on scaling out Jenkins with slaves and the like you\u0026rsquo;ll probably want to ensure your configuration is kept someone secure, handily there\u0026rsquo;s a plugin for that.\nJenkins SCM Sync - which to be fair I have a bit of a love hate relationship with and since building up a new Jenkins server last week hasn\u0026rsquo;t got any better, the config loaded in fine, but then would error on every save / change.\nSo a new week and time to hit google and I found the answer of how to get it working again within the detail on issue Jenkins-25786 which is basically manually push the changes in the local git repo.\nsudo su jenkins -s /bin/bash cd ~/scm-sync-configuration/checkoutConfiguration/ git status # see untracked files git add -a git commit -a -m \u0026#34;fix all the things\u0026#34; git push origin master ","date":"21 March 2016","externalUrl":null,"permalink":"/posts/2016/03/21/","section":"Posts","summary":"\u003cp\u003eSo if you plan on scaling out Jenkins with slaves and the like you\u0026rsquo;ll probably want to ensure your configuration is kept someone secure, handily there\u0026rsquo;s a plugin for that.\u003c/p\u003e\n\u003cp\u003e\u003ca\n  href=\"https://wiki.jenkins-ci.org/display/JENKINS/SCM\u0026#43;Sync\u0026#43;configuration\u0026#43;plugin\"\n    target=\"_blank\"\n  \u003eJenkins SCM Sync\u003c/a\u003e - which to be fair I have a bit of a love hate relationship with and since building up a new Jenkins server last week hasn\u0026rsquo;t got any better, the config loaded in fine, but then would error on every save / change.\u003c/p\u003e","title":"Jenkins and SCM Sync","type":"posts"},{"content":"","date":"21 March 2016","externalUrl":null,"permalink":"/categories/work/","section":"Categories","summary":"","title":"Work","type":"categories"},{"content":"So now that we\u0026rsquo;re able to have code deploying into AWS and notifications from Jenkins into Slack it would make sense if we could check what\u0026rsquo;s happening with Elastic Beanstalk when the code is deployed (and also get a heads up of any issues with our environments.)\nSo Lambda and SNS to the rescue, here\u0026rsquo;s what you need:\nThis post about Lambda and SNS as well as this updated code, which gets a mention in the comments.\n","date":"18 March 2016","externalUrl":null,"permalink":"/posts/2016/03/18/","section":"Posts","summary":"","title":"AWS and a bit of Slack","type":"posts"},{"content":"","date":"18 March 2016","externalUrl":null,"permalink":"/tags/lambda/","section":"Tags","summary":"","title":"Lambda","type":"tags"},{"content":"","date":"18 March 2016","externalUrl":null,"permalink":"/tags/slack/","section":"Tags","summary":"","title":"Slack","type":"tags"},{"content":"Right so we have our handy services Virtual Private Cloud (VPC) with access via OpenVPN (and the awesome Viscosity OSX VPN Client) now we need to start adding useful things into it.\n(See this blog post for info)\nFor me the next step was looking at how we could automate deployments using our own tool chain, part of the reason we are looking at AWS is to get a bit more flexibility and also the benefits of greater automation. We\u0026rsquo;ve already had success using BitBucket -\u0026gt; Codeship -\u0026gt; Heroku as a work flow to make our code visible and available in readily shareable environment, and it took \u0026lt; 5 minutes to get it up and running ;-)\nCertainly easier than expecting a non-developer to checkout the code and run a whole load of NPM / Bower / Gulp commands to review progress, so much easier to just send through a link using Slack (other IM services are available) to a server that always has the latest \u0026ldquo;working\u0026rdquo; code in place ;-)\nBut moving on we need to smarten things up a bit and be a bit more clever, to get things deploying correctly on Heroku we had to use a custom build back. This is because we are using Yeoman as the basis of the code and didn\u0026rsquo;t want to commit \u0026ldquo;built\u0026rdquo; files into the repo, but we had to move all of the \u0026ldquo;devDependencies\u0026rdquo; into just \u0026ldquo;dependencies\u0026rdquo; and then build in production, oh and also build in Codeship so that the tests could run. This delays the build going live and is duplicated work.\nReally what we wanted and needed is to test, build, deploy (repeat). Hence rolling our own.\nSo now that we have a VPC with NAT and VPN access running in AWS it made sense to get Jenkins running in our services VPC as well.\nGetting Jenkins installed was relatively painless, build a new instance in the VPC (using Amazon Linux) add in the Jenkins repo and install, check the service is setup to run at the correct run levels and finally start Jenkins. Sometimes stuff just works.\n$ sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo $ sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key $ sudo yum install jenkins $ chkconfig --list jenkins $ sudo service jenkins start Give it a few minutes and with a bit of luck you\u0026rsquo;ll have Jenkins installed. You\u0026rsquo;ll need to check your firewall rules for the EC2 instance to ensure you can access port 8080\nCreated a new ssh key for the jenkins user and did a quick test of a git clone to get Github added to ~/.ssh/known_hosts and ensure the ssh key is working.\n$ sudo su jenkins $ cd ~/ $ ssh-keygen -t rsa -b 4096 -C \u0026#34;your_email@example.com\u0026#34; $ more ~/.ssh/id_rsa.pub ssh-rsa .... hey stuff in here which you need to copy and add into Github or SCM repo of choice. $ git clone git@bitbucket.org:team/repo.git test_clone Add in some plugins:\nBitbucket OAuth Plugin Bitbucket Plugin NodeJS Plugin (if the auto-installers aren\u0026rsquo;t available this will fix it) Poll SCM plugin (Jenkins is in a VPC and not accessible from Bitbucket so webhooks are no good) SCM Sync Configuration Plugin Slack Notification Plugin Wall Display Master Project I had an issue with the build I was running whilst it was trying to pull down packages from GitHub, the error message was pointing to a timeout which was surprising however the clue was in the protocol being used:\ngit://github.com/.... So changing /etc/gitconfig to:\n[url \u0026#34;https://github\u0026#34;] insteadOf = git://github Solved the issue, there is a chance I\u0026rsquo;ll have to change it for \u0026ldquo;git://\u0026rdquo; rather than just Github but at least now my build is able to pull in the dependancies and then fail further down the process.\nAutomation comes later.\n","date":"16 March 2016","externalUrl":null,"permalink":"/posts/2016/03/16/","section":"Posts","summary":"\u003cp\u003eRight so we have our handy services Virtual Private Cloud (VPC) with access via OpenVPN (and the awesome \u003ca\n  href=\"https://www.sparklabs.com/viscosity/\"\n    target=\"_blank\"\n  \u003eViscosity\u003c/a\u003e OSX VPN Client) now we need to start adding useful things into it.\u003c/p\u003e\n\u003cp\u003e(See \u003ca\n  href=\"/work/amazon-web-services-vpc-nat-openvpn\"\u003ethis\u003c/a\u003e blog post for info)\u003c/p\u003e\n\u003cp\u003eFor me the next step was looking at how we could automate deployments using our own tool chain, part of the reason we are looking at AWS is to get a bit more flexibility and also the benefits of greater automation.  We\u0026rsquo;ve already had success using \u003ca\n  href=\"https://bitbucket.org\"\n    target=\"_blank\"\n  \u003eBitBucket\u003c/a\u003e -\u0026gt; \u003ca\n  href=\"https://codeship.com\"\n    target=\"_blank\"\n  \u003eCodeship\u003c/a\u003e -\u0026gt; \u003ca\n  href=\"https://www.heroku.com/\"\n    target=\"_blank\"\n  \u003eHeroku\u003c/a\u003e as a work flow to make our code visible and available in readily shareable environment, and it took \u0026lt; 5 minutes to get it up and running ;-)\u003c/p\u003e","title":"Amazon Web Services (Jenkins)","type":"posts"},{"content":"","date":"1 March 2016","externalUrl":null,"permalink":"/fitness/2016/03/","section":"Fitness","summary":"","title":"March 2016","type":"fitness"},{"content":"","date":"1 February 2016","externalUrl":null,"permalink":"/fitness/2016/02/","section":"Fitness","summary":"","title":"February 2016","type":"fitness"},{"content":"So one of the things I\u0026rsquo;ve always liked about AWS^WCloud based services is the ability to just spin up development instances and use them, however I\u0026rsquo;m generally working for between 8 - 10 hours a day and not so often at weekends, but during those hours my servers are running and not doing much, BUT as they are racking up costs (ok so not too much for a t1.micro but the point still stands) and I knew of companies shutting down unused servers during the night and weekends and thought I should give that a go.\nSo the first attempt at this uses a scheduled data pipeline to run an AWSCLI command to either stop or start servers, sadly due to the lack of complexity in the scheduler in the console (please AWS just put in a text box so I can add in a crontab line) the servers get started and stopped at weekends too, but I\u0026rsquo;ve now reduced the daily uptime by 14 hours a day, 98 hours a week or 5096 hours a year (you get the point) actually if you take weekends into a count it\u0026rsquo;s even more than this.\nAnd to do this took 10 minutes thanks to this handy tutorial provided by AWS.\n","date":"13 January 2016","externalUrl":null,"permalink":"/posts/2016/01/13/","section":"Posts","summary":"","title":"Auto Start / Stop servers FTW","type":"posts"},{"content":"","date":"13 January 2016","externalUrl":null,"permalink":"/tags/datapipeline/","section":"Tags","summary":"","title":"Datapipeline","type":"tags"},{"content":"So I signed the petition \u0026ldquo;Scrap plans forcing self employed \u0026amp; small business to do 4 tax returns a yearly\u0026rdquo; and due to the number of signaturies a response from the government was required.\nHere it is in full taken from the email update:\nMaking Tax Digital will not mean ‘four tax returns a year’. Quarterly updates will largely be a matter of checking data generated from record keeping software or apps and clicking ‘send’.\nThese reforms will not mean that businesses have to provide the equivalent of four tax returns every year. Updating HMRC through software or apps will deliver a light-touch process, much less burdensome and time-consuming than it is today.\nAt the March 2015 Budget the government committed to transform the tax system by introducing simple, secure and personalised digital tax accounts, removing the need for annual tax returns.\nAt the 2015 Spending Review the government announced it would invest £1.3bn in HMRC to make this vision a reality, transforming HMRC into one of the most digitally advanced tax administrations in the world.\nOne element of this vision will be asking most businesses, self-employed people and landlords to keep track of their tax affairs digitally and update HMRC at least quarterly via their digital tax account.\nMany taxpayers have told HMRC that they want more certainty over their tax bill, and don’t want to wait until the end of the year, or even longer, before knowing where they stand with their taxes.\nWe also estimate that £6.5bn in tax goes unpaid every year because of mistakes made when filling in tax returns. These reforms will make it easier for taxpayers to maintain accurate and up-to-date tax affairs, reducing the scope for error.\nWith businesses keeping track of their tax affairs digitally, quarterly updates will be fundamentally different from filling out an annual tax return in a number of crucial respects:\n• Quarterly updates will not involve all the complexity of a full tax return. The updates will be generated from existing digital business records. In most cases, little or no further entry of information will be needed. It will be much quicker to complete than the current tax return. • As part of the process the business owner or individual will receive a developing in-year picture of their tax position, helping people have greater certainty about what they owe, allowing them to plan their finances more effectively. This differs from the current system where many taxpayers are caught out by their tax bill when it finally arrives. • In-year updates will not be subject to the same sanctions for lateness or inaccuracies as apply now to the year-end position. HMRC will consult during 2016 on what sanctions might be appropriate for a more digital tax administration.\nThe government has already announced that these measures will not apply to individuals in employment or pensioners, unless they have secondary incomes of more than £10,000 per year from self-employment or property.\nThe reforms will rely on businesses, self-employed people and landlords using software or apps that can connect securely to their digital tax account. The government will ensure that free products are available. The Gov.UK service will signpost taxpayers to the right product, with clear HMRC guidance about how to choose software.\nHMRC will ensure support is available for people to get online if they need it. We will also provide alternatives for those who genuinely cannot use digital tools, like telephone filing. This will build on our Needs Extra Support service, which has gone from strength to strength in helping more vulnerable customers.\nWe’re introducing these reforms gradually. We’ve been in discussion with stakeholders since March 2015 and will be consulting on the details of the proposals throughout 2016.\nWe will use volunteers to test the new tools and processes and give us feedback. Quarterly updates will be introduced for some from 2018, and will be phased in fully by 2020, giving taxpayers time to adapt.\nWe want to work with all stakeholders to ensure these changes work for them. For more information about the proposed reforms please search for ‘Making Tax Digital’ on Gov.UK or use the following link:\nhttps://www.gov.uk/government/publications/making-tax-digital\nHMRC\nand this is the bit that I\u0026rsquo;m really not so impressed with:\n\u0026ldquo;At the 2015 Spending Review the government announced it would invest £1.3bn in HMRC to make this vision a reality, transforming HMRC into one of the most digitally advanced tax administrations in the world.\u0026rdquo;\nBecause any UK government (of the time) has such a great success with IT projects. When the system is half launched several years late and many times over budget I wonder who will get fined when the self employed / small business tax return fails to be received correctly by the new system.\nI\u0026rsquo;m certainly not against the idea of sending through more regular updates on income and expenses, and having a better idea of my tax position from an HMRC point of view can only be a good thing. (Although in the 5 years I\u0026rsquo;ve been self-employed my accountant has got the numbers right every time - so I\u0026rsquo;m always aware 9 months before payment of my corporate tax is due what the numbers are.)\nOh and £1.3Bn feels like an absolute fuckmunch(tm) of cash, but then without a full specification and a brief of \u0026ldquo;transforming HMRC\u0026rdquo; the number plucked out of the air was bound to be large, especially when I imagine the queue of large consulting firms waiting in the wings to roll in with armies of consultants and burn through that particular pile of cash.\nFinally I would imagine that if any government (of the time) went up to the large enterprises currently engaged in wholesale tax avoidance programs they will recover more than the £6.5Bn they \u0026ldquo;estimate\u0026rdquo; the self employed and small businesses are currently not paying. I would also suggest they would end up with some spare change to fund this program, but then I guess the large enterprises have better and more expensive lawyers than small business.\n","date":"5 January 2016","externalUrl":null,"permalink":"/posts/2016/01/05/","section":"Posts","summary":"\u003cp\u003eSo I signed the petition \u0026ldquo;\u003ca\n  href=\"https://petition.parliament.uk/petitions/115895\"\n    target=\"_blank\"\n  \u003eScrap plans forcing self employed \u0026amp; small business to do 4 tax returns a yearly\u003c/a\u003e\u0026rdquo; and due to the number of signaturies a response from the government was required.\u003c/p\u003e","title":"HMRC quarterly tax submission petition response","type":"posts"},{"content":"","date":"5 January 2016","externalUrl":null,"permalink":"/tags/hrmc/","section":"Tags","summary":"","title":"Hrmc","type":"tags"},{"content":"","date":"5 January 2016","externalUrl":null,"permalink":"/tags/tax/","section":"Tags","summary":"","title":"Tax","type":"tags"},{"content":"","date":"1 January 2016","externalUrl":null,"permalink":"/fitness/2016/","section":"Fitness","summary":"","title":"2016","type":"fitness"},{"content":"","date":"1 January 2016","externalUrl":null,"permalink":"/fitness/2016/01/","section":"Fitness","summary":"","title":"January 2016","type":"fitness"},{"content":"So in the process of setting up a few bits and pieces on AWS and the first area (well second after a couple of quick deploys using Elastic Beanstalk) is to get a Jenkins server up and running.\nSo I\u0026rsquo;m looking to deploy the Jenkins box within a Virtual Private Cloud (VPC) to block off access to Jenkins and also any test slaves it will eventually spin up. To ensure smooth access into the VPC I\u0026rsquo;m using OpenVPN. First step is use the VPC wizard to create the basics, I went with the \u0026ldquo;VPC with Public and Private Subnets\u0026rdquo; as this handily creates the NAT Gateway box to allow servers inside the VPC to access the interwebs.\nOnce built and tagged (to ensure ease of visibility in the billing) it was time to look at the next steps. My original plan was to now add in an OpenVPN box using their AMI but with a \u0026ldquo;spare\u0026rdquo; instance in place as the NAT gateway it made sense to put OpenVPN on to that box, and so begins the tale of woe (well more like a bit of stress and some google action)\nInstalling and running OpenVPN seemed to go pretty well, except for the lack of init.d scripts created and the fact I couldn\u0026rsquo;t then authenticate.\nOnce you provide a few initial configuration settings, OpenVPN Access Server can be configured by accessing its Admin Web UI using your Web browser. Will this be the primary Access Server node? (enter \u0026#39;no\u0026#39; to configure as a backup or standby node) \u0026gt; Press ENTER for default [yes]: Please specify the network interface and IP address to be used by the Admin Web UI: (1) all interfaces: 0.0.0.0 (2) eth0: 10.0.0.121 Please enter the option number from the list above (1-2). \u0026gt; Press Enter for default [2]: 1 Please specify the port number for the Admin Web UI. \u0026gt; Press ENTER for default [943]: Please specify the TCP port number for the OpenVPN Daemon \u0026gt; Press ENTER for default [443]: Should client traffic be routed by default through the VPN? \u0026gt; Press ENTER for default [no]: Should client DNS traffic be routed by default through the VPN? \u0026gt; Press ENTER for default [no]: Use local authentication via internal DB? \u0026gt; Press ENTER for default [yes]: Private subnets detected: [\u0026#39;10.0.0.0/16\u0026#39;] Should private subnets be accessible to clients by default? \u0026gt; Press ENTER for EC2 default [yes]: To initially login to the Admin Web UI, you must use a username and password that successfully authenticates you with the host UNIX system (you can later modify the settings so that RADIUS or LDAP is used for authentication instead). You can login to the Admin Web UI as \u0026#34;openvpn\u0026#34; or specify a different user account to use for this purpose. Do you wish to login to the Admin UI as \u0026#34;openvpn\u0026#34;? \u0026gt; Press ENTER for default [yes]: \u0026gt; Please specify your OpenVPN-AS license key (or leave blank to specify later): Initializing OpenVPN... Adding new user login... useradd -s /sbin/nologin \u0026#34;openvpn\u0026#34; Writing as configuration file... Perform sa init... Wiping any previous userdb... Creating default profile... Modifying default profile... Adding new user to userdb... Modifying new user as superuser in userdb... Getting hostname... Hostname: 52.48.26.62 Preparing web certificates... Getting web user account... Adding web group account... Adding web group... Adjusting license directory ownership... Initializing confdb... Generating PAM config... Generating init scripts auto command... Error: Could not generate server script auto. To try and work out the issues I spun up the OpenVPN instance and ran through the basic config and started to look for the issues.\nOnce you provide a few initial configuration settings, OpenVPN Access Server can be configured by accessing its Admin Web UI using your Web browser. Will this be the primary Access Server node? (enter \u0026#39;no\u0026#39; to configure as a backup or standby node) \u0026gt; Press ENTER for default [yes]: Please specify the network interface and IP address to be used by the Admin Web UI: (1) all interfaces: 0.0.0.0 (2) eth0: 10.0.0.121 Please enter the option number from the list above (1-2). \u0026gt; Press Enter for default [2]: 1 Please specify the port number for the Admin Web UI. \u0026gt; Press ENTER for default [943]: Please specify the TCP port number for the OpenVPN Daemon \u0026gt; Press ENTER for default [443]: Should client traffic be routed by default through the VPN? \u0026gt; Press ENTER for default [no]: Should client DNS traffic be routed by default through the VPN? \u0026gt; Press ENTER for default [no]: Use local authentication via internal DB? \u0026gt; Press ENTER for default [yes]: Private subnets detected: [\u0026#39;10.0.0.0/16\u0026#39;] Should private subnets be accessible to clients by default? \u0026gt; Press ENTER for EC2 default [yes]: To initially login to the Admin Web UI, you must use a username and password that successfully authenticates you with the host UNIX system (you can later modify the settings so that RADIUS or LDAP is used for authentication instead). You can login to the Admin Web UI as \u0026#34;openvpn\u0026#34; or specify a different user account to use for this purpose. Do you wish to login to the Admin UI as \u0026#34;openvpn\u0026#34;? \u0026gt; Press ENTER for default [yes]: \u0026gt; Please specify your OpenVPN-AS license key (or leave blank to specify later): Initializing OpenVPN... Adding new user login... useradd -s /sbin/nologin \u0026#34;openvpn\u0026#34; Writing as configuration file... Perform sa init... Wiping any previous userdb... Creating default profile... Modifying default profile... Adding new user to userdb... Modifying new user as superuser in userdb... Getting hostname... Hostname: 54.194.191.108 Preparing web certificates... Getting web user account... Adding web group account... Adding web group... Adjusting license directory ownership... Initializing confdb... Generating init scripts... Generating PAM config... Generating init scripts auto command... Starting openvpnas... \u0026hellip;.and there\u0026rsquo;s the issue, on my NAT box the script bombs out when trying to generate the server scripts, and from looking at the list of steps on the OpenVPN box it also looks like the PAM config fails, so no authentication either.\nError: Could not generate server script auto. Time to get busy with Google and VIM and tailing log files to get things working *cracks knuckles* and gets to work\nSo creating and installing the the server scripts was easy using information from this post:\n$ sudo /usr/local/openvpn_as/scripts/openvpnas_gen_init --distro redhat $ sudo chkconfig --add openvpnas $ sudo chkconfig openvpnas on $ sudo service openvpnas start Which gave us the ability to run the server, but without the authentication installed there was little point, the same post also gave me a clue to a possible \u0026ldquo;fix\u0026rdquo;. So time to edit the Python config file and comment out the init scripts element:\n$ vim /usr/local/openvpn_as/bin/_ovpn-init Comment out the lines as below (869 - 876):\n# Execute gen script... #print \u0026#34;Generating init scripts...\u0026#34; #GEN = \u0026#34;/usr/local/openvpn_as/scripts/openvpnas_gen_init\u0026#34; #retv = commands.getstatusoutput( GEN ) #if DEBUG: print \u0026#34;gen init cmd=\u0026#34;, GEN, retv #if retv[0] != 0: # print \u0026#34;Error: Could not generate server script.\u0026#34; # sys.exit(1) Re-run the config and we\u0026rsquo;re golden\u0026hellip;.\n$ sudo /usr/local/openvpn_as/bin/ovpn-init --ec2 $ sudo passwd openvpn I can login and everything \u0026hellip;apart from some issue with ifconfig appearing in the logs\u0026hellip;.\n[-] OVPN 1 OUT: \u0026#39;Thu Dec 10 20:51:16 2015 /usr/sbin/ifconfig as0t1 172.27.232.1 netmask 255.255.248.0 mtu 1500 broadcast 172.27.239.255\u0026#39; [-] OVPN 1 OUT: \u0026#39;Thu Dec 10 20:51:16 2015 MANAGEMENT: Client disconnected\u0026#39; [-] OVPN 1 ERR: \u0026#39;Thu Dec 10 20:51:16 2015 Linux ifconfig failed: could not execute external program\u0026#39; [-] OVPN 1 OUT: \u0026#39;Thu Dec 10 20:51:16 2015 Exiting due to fatal error\u0026#39; A quick\n$ which ifconfig /sbin/ifconfig Confirms that the script is looking in the wrong place, so symbolic links to the rescue.\n$ sudo ln -s /sbin/ifconfig /usr/sbin/ifconfig Then\n$ sudo service openvpnas restart And now we\u0026rsquo;re good.\n;-)\nHope this helps somebody, if not it might help me in the future although of course I now have my own AMI of the instance.\n","date":"11 December 2015","externalUrl":null,"permalink":"/posts/2015/12/11/","section":"Posts","summary":"\u003cp\u003eSo in the process of setting up a few bits and pieces on AWS and the first area (well second after a couple of quick deploys using Elastic Beanstalk) is to get a Jenkins server up and running.\u003c/p\u003e\n\u003cp\u003eSo I\u0026rsquo;m looking to deploy the Jenkins box within a Virtual Private Cloud (VPC) to block off access to Jenkins and also any test slaves it will eventually spin up.  To ensure smooth access into the VPC I\u0026rsquo;m using \u003ca\n  href=\"http://openvpn.net\"\n    target=\"_blank\"\n  \u003eOpenVPN\u003c/a\u003e.  First step is use the VPC wizard to create the basics, I went with the \u0026ldquo;VPC with Public and Private Subnets\u0026rdquo; as this handily creates the NAT Gateway box to allow servers inside the VPC to access the interwebs.\u003c/p\u003e","title":"Amazon Web Services (VPC + NAT + OpenVPN)","type":"posts"},{"content":"","date":"11 December 2015","externalUrl":null,"permalink":"/tags/openvpn/","section":"Tags","summary":"","title":"Openvpn","type":"tags"},{"content":"","date":"1 December 2015","externalUrl":null,"permalink":"/fitness/2015/12/","section":"Fitness","summary":"","title":"December 2015","type":"fitness"},{"content":"","date":"1 November 2015","externalUrl":null,"permalink":"/fitness/2015/11/","section":"Fitness","summary":"","title":"November 2015","type":"fitness"},{"content":"","date":"22 October 2015","externalUrl":null,"permalink":"/tags/drone/","section":"Tags","summary":"","title":"Drone","type":"tags"},{"content":"So recently I ended up involved with a project where we were looking to build a drone of some kind, the people involved were smart and watching one of the quadcopters being flown using first person view (FPV) goggles got me really interested\u0026hellip;\n\u0026hellip;and now here I am trying to learn to fly my quadcopter.\nThe building side of it was relatively easy, and I\u0026rsquo;ve already got some thoughts on how to improve the current drone. Firstly by cutting out a load of wiring from the battery to the ESC loom I used, and also adding in some tail LEDs, the latter will hopefully make it easier to keep track of orientation when I\u0026rsquo;m flying it without using the goggles.\nNow it\u0026rsquo;s a case of practicing the flying and always ensuring I have a stash of spare (balanced) props.\n","date":"22 October 2015","externalUrl":null,"permalink":"/posts/2015/10/22/","section":"Posts","summary":"","title":"Quadtastic","type":"posts"},{"content":"","date":"1 October 2015","externalUrl":null,"permalink":"/fitness/2015/10/","section":"Fitness","summary":"","title":"October 2015","type":"fitness"},{"content":"So I think I might have got a bit carried away sorting out the wiring for the replacement television.\n","date":"26 September 2015","externalUrl":null,"permalink":"/posts/2015/09/26/","section":"Posts","summary":"","title":"Wiring","type":"posts"},{"content":"","date":"20 September 2015","externalUrl":null,"permalink":"/tags/france/","section":"Tags","summary":"","title":"France","type":"tags"},{"content":"So a while back I had the \u0026ldquo;great\u0026rdquo; idea that it would be nice to take the girls down to France for a few days holiday during the summer on my own, no backup for the journey! It would great to spend some time with Grandpa, Jane and Amelie, and in the course of the travelling between us we would record a few firsts:\nFirst time I had spent more than a day (where a day is probably about 6 hours TBH) with any of the kids on my own. First time either of the girls had been on a plane. First time I\u0026rsquo;d used the hold luggage on a Ryanair flight, would it turn up? In the end it all worked out pretty well, the first couple of days the weather wasn\u0026rsquo;t so great but that gave me a chance to upgrade the computer with a new hard drive, max out the RAM and install Windows 7 (old build was XP!) without taking time out of the good weather. Gradually the weather cleared up and normal service was resumed with time spend in and around the pool and generally take it easy.\nWe all had a great time and I have to say it was actually surprisingly relaxing, the girls loved their time in the pool and enjoyed playing with Amelie. I enjoyed spending time at Les Grand Coudrais (as ever) the girls behaved really well, and tried all sorts of food you would never get them to eat at home.\nTo be honest I should also write more here about it all, but to do that I should\u0026rsquo;ve probably written it on the way home, or just after getting back - I meant to ;-) (no really I did)\nI\u0026rsquo;m very jealous of the lovely part of France that Dad, Jane and Amelie have made their home and if you\u0026rsquo;re looking for a great place to stay not too far away then I certainly recommend it, but if you want to go in summer 2016 you better book it quickly!\n","date":"20 September 2015","externalUrl":null,"permalink":"/posts/2015/09/20/","section":"Posts","summary":"","title":"France 2015","type":"posts"},{"content":"","date":"20 September 2015","externalUrl":null,"permalink":"/tags/les-grand-courdrais/","section":"Tags","summary":"","title":"Les-Grand-Courdrais","type":"tags"},{"content":"","date":"20 September 2015","externalUrl":null,"permalink":"/tags/travel/","section":"Tags","summary":"","title":"Travel","type":"tags"},{"content":"","date":"1 September 2015","externalUrl":null,"permalink":"/fitness/2015/09/","section":"Fitness","summary":"","title":"September 2015","type":"fitness"},{"content":"","date":"1 August 2015","externalUrl":null,"permalink":"/fitness/2015/08/","section":"Fitness","summary":"","title":"August 2015","type":"fitness"},{"content":"","date":"6 July 2015","externalUrl":null,"permalink":"/posts/2015/07/06/","section":"Posts","summary":"","title":"Writers block","type":"posts"},{"content":"","date":"1 July 2015","externalUrl":null,"permalink":"/fitness/2015/07/","section":"Fitness","summary":"","title":"July 2015","type":"fitness"},{"content":"","date":"1 June 2015","externalUrl":null,"permalink":"/fitness/2015/06/","section":"Fitness","summary":"","title":"June 2015","type":"fitness"},{"content":"","date":"1 May 2015","externalUrl":null,"permalink":"/fitness/2015/05/","section":"Fitness","summary":"","title":"May 2015","type":"fitness"},{"content":"","date":"1 April 2015","externalUrl":null,"permalink":"/fitness/2015/04/","section":"Fitness","summary":"","title":"April 2015","type":"fitness"},{"content":"So having helped SBrick on Kickstarter I thought it was probably a good idea / excuse to pick up a powered Lego kit, so a quick hunt around Amazon turned up the 42030. A model of the Volvo L350F Wheel Loader.\nSo it took a few session and quite a few hours to build, certainly longer than the Camper Van I built last year, and for the first time ever there were two missing pieces, nothing vital but an annoyance none the less. Quickly hitting the Lego website got me to the replacement parts service. Amazing, enter the relevant details and pieces arrived free of charge within a week.\nAnyway, the model is now complete as can be seen in the pictures and has been used a couple of times to tidy up tipped out Lego, the next step is to add in the SBrick and also a couple of lights that I have\u0026hellip;. (then the key decision is what to build next)\n","date":"8 March 2015","externalUrl":null,"permalink":"/posts/2015/03/08/","section":"Posts","summary":"","title":"Lego","type":"posts"},{"content":"","date":"8 March 2015","externalUrl":null,"permalink":"/tags/playing/","section":"Tags","summary":"","title":"Playing","type":"tags"},{"content":"","date":"1 March 2015","externalUrl":null,"permalink":"/fitness/2015/03/","section":"Fitness","summary":"","title":"March 2015","type":"fitness"},{"content":"Have had to recently update my bio for a pitch document, clearly I\u0026rsquo;m getting better at this sort of thing (until the grammar police catch up with me) as this was my first attempt to make a more relevant, high level summary of my professional life. I\u0026rsquo;d hire this guy, would you?\n\u0026ldquo;David has worked with internet related technologies for over 15 years, from small CGI scripts for the BBC to the worlds first package collection service with TNT. David has worked with various programming languages and database technologies to enable small and large organisations use the internet for business. Projects have included working with TNT, Acer, Sky, Unilever, GSK, British Airways, Colgate Palmolive, BAT. Technologies have included PHP, Python, JavaScript, MySQL, Postgres, MongoDB, various Cloud service providers and use of API based services including YouTube, Google Analytics, Twitter and Facebook as well as building mobile applications using PhoneGap.\u0026rdquo;\n","date":"5 February 2015","externalUrl":null,"permalink":"/posts/2015/02/05/","section":"Posts","summary":"","title":"Bio","type":"posts"},{"content":"","date":"5 February 2015","externalUrl":null,"permalink":"/tags/wirewool/","section":"Tags","summary":"","title":"Wirewool","type":"tags"},{"content":"","date":"1 February 2015","externalUrl":null,"permalink":"/fitness/2015/02/","section":"Fitness","summary":"","title":"February 2015","type":"fitness"},{"content":"Achievement unlocked - Swim further in 2015 than 2014\n","date":"18 January 2015","externalUrl":null,"permalink":"/posts/2015/01/18/","section":"Posts","summary":"","title":"Achievement unlocked","type":"posts"},{"content":"So 2014 wasn\u0026rsquo;t the best of year for training (following on from a fairly lack lustre 2013 if I\u0026rsquo;m honest) so how did I do - let\u0026rsquo;s look at the numbers.\n2011 Swim Bike Run Count 2 1 41 Distance 0.8 km 28.68 km 274.44 km Time 00:25:00 (h\u0026#x24c2;\u0026#xfe0f;s) 02:16:50 (h\u0026#x24c2;\u0026#xfe0f;s) 36:30:35 (h\u0026#x24c2;\u0026#xfe0f;s) Elevation Gain 146 m 1,859 m Avg Speed 1.9 km/h 12.6 km/h 7.5 km/h Avg Cadence 58 rpm 150 spm Calories 1,016 25,352 2012 Swim Bike Run Count 33 11 60 Distance 48.88 km 428.75 km 368.57 km Time 20:25:21 (h\u0026#x24c2;\u0026#xfe0f;s) 23:28:15 (h\u0026#x24c2;\u0026#xfe0f;s) 37:39:18 (h\u0026#x24c2;\u0026#xfe0f;s) Elevation Gain 3,022 m 9,903 m Avg Speed 2.4 km/h 18.3 km/h 9.8 km/h Avg Cadence 71 rpm 162 spm Calories 5,019 15,332 30,600 2013 Swim Bike Run Count 9 14 40 Distance 7.63 km 277.51 km 259.31 km Time 3:39:37 (h\u0026#x24c2;\u0026#xfe0f;s) 11:33:00 (h\u0026#x24c2;\u0026#xfe0f;s) 28:40:39 (h\u0026#x24c2;\u0026#xfe0f;s) Elevation Gain 1,393 m 2,131 m Avg Speed 2.3 km/h 24.0 km/h 9.0 km/h Avg Cadence 78 rpm 160 spm Calories 1,776 8,386 22,499 2014 Swim Bike Run Count 1 83 55 Distance 1500 m 445.97 km 229.58 km Time 0:37:35 (h\u0026#x24c2;\u0026#xfe0f;s) 27:17:04 (h\u0026#x24c2;\u0026#xfe0f;s) 28:17:46 (h\u0026#x24c2;\u0026#xfe0f;s) Elevation Gain 2,015m 1,305 m Avg Speed 2.6 km/h 16.3 km/h 8.1 km/h Avg Cadence 75 rpm 158 spm Calories 412 5,020 2,1374 Ok so stupidly I\u0026rsquo;ve included 2012, when I was \u0026ldquo;training\u0026rdquo; for the Escape from Alcatraz just to really show how badly I\u0026rsquo;m doing, 2013 was a bit of a surprise, it doesn\u0026rsquo;t feel like I\u0026rsquo;ve trained since June 2012 when I crossed the finish line in San Francisco, but clearly I did a few bits and pieces.\nSo 2014 - the cycling is a line as it covers a lot of commuting on a Boris Bike, perhaps not the best training, but better than nothing and certainly better than the underground, and I would imagine the average cost of my gym visits was in the region of £50 a visit! (if not more)\nAnd on to 2015, well I start the new year working from home for a few months which should give me some training time, been to the gym once already, which is a positive start, in fact since finishing work I\u0026rsquo;ve done 3 gym sessions, which is probably more than the last 6 months.\nTarget weight is considerably lower than the 92.1 Kg I was this morning, ideally back under 80 Kg but that will require a major effort. So I\u0026rsquo;ve sort of set my major goals, now to work out the smaller goals that get me there\n","date":"5 January 2015","externalUrl":null,"permalink":"/posts/2015/01/05/","section":"Posts","summary":"","title":"2014 by the (lack of) training numbers.","type":"posts"},{"content":"","date":"5 January 2015","externalUrl":null,"permalink":"/tags/triathlon/","section":"Tags","summary":"","title":"Triathlon","type":"tags"},{"content":"","date":"1 January 2015","externalUrl":null,"permalink":"/fitness/2015/","section":"Fitness","summary":"","title":"2015","type":"fitness"},{"content":"","date":"1 January 2015","externalUrl":null,"permalink":"/fitness/2015/01/","section":"Fitness","summary":"","title":"January 2015","type":"fitness"},{"content":"","date":"1 December 2014","externalUrl":null,"permalink":"/fitness/2014/12/","section":"Fitness","summary":"","title":"December 2014","type":"fitness"},{"content":"","date":"1 November 2014","externalUrl":null,"permalink":"/fitness/2014/11/","section":"Fitness","summary":"","title":"November 2014","type":"fitness"},{"content":"","date":"1 October 2014","externalUrl":null,"permalink":"/fitness/2014/10/","section":"Fitness","summary":"","title":"October 2014","type":"fitness"},{"content":"","date":"1 September 2014","externalUrl":null,"permalink":"/fitness/2014/09/","section":"Fitness","summary":"","title":"September 2014","type":"fitness"},{"content":"","date":"1 August 2014","externalUrl":null,"permalink":"/fitness/2014/08/","section":"Fitness","summary":"","title":"August 2014","type":"fitness"},{"content":"","date":"1 July 2014","externalUrl":null,"permalink":"/fitness/2014/07/","section":"Fitness","summary":"","title":"July 2014","type":"fitness"},{"content":"","date":"1 June 2014","externalUrl":null,"permalink":"/fitness/2014/06/","section":"Fitness","summary":"","title":"June 2014","type":"fitness"},{"content":"Finally managed to go down Aldwych today - amazing and some what eerie.\n","date":"31 May 2014","externalUrl":null,"permalink":"/posts/2014/05/31/","section":"Posts","summary":"","title":"Aldwych","type":"posts"},{"content":"","date":"1 May 2014","externalUrl":null,"permalink":"/fitness/2014/05/","section":"Fitness","summary":"","title":"May 2014","type":"fitness"},{"content":"","date":"1 April 2014","externalUrl":null,"permalink":"/fitness/2014/04/","section":"Fitness","summary":"","title":"April 2014","type":"fitness"},{"content":"","date":"1 March 2014","externalUrl":null,"permalink":"/fitness/2014/03/","section":"Fitness","summary":"","title":"March 2014","type":"fitness"},{"content":"","date":"1 January 2014","externalUrl":null,"permalink":"/fitness/2014/","section":"Fitness","summary":"","title":"2014","type":"fitness"},{"content":"","date":"1 January 2014","externalUrl":null,"permalink":"/fitness/2014/01/","section":"Fitness","summary":"","title":"January 2014","type":"fitness"},{"content":"","date":"3 December 2013","externalUrl":null,"permalink":"/tags/marlow/","section":"Tags","summary":"","title":"Marlow","type":"tags"},{"content":"Sunday morning was time for the annual Marlow Santa Fun Run, except this year as well as the logistical challenge of doing the run with three kids (Iona and on scooters, Hamish in a buggy) there was the additional logistical challenge of a Party we needed to get Iona to. The party of course happened to be at a cinema so arriving fashionably late wouldn\u0026rsquo;t be the done thing.\nWe managed to get a free parking space at the Marlow Sports Club which was handy and do a fast trot over to the park where the race started just as we were rounding the corner, having managed to get everything in order on the way to the park we were good to go, the mission was simple, I would run with Iona and go as fast as we could, once finished I would then get her to the party, Octavia would run with the buggy (and Hamish) and Nell on her scooter. Getting to the race slightly later we pushed through the crowd watching and with a shout over my shoulder of \u0026lsquo;good luck\u0026rsquo; Iona and I joined the steady stream of Santa\u0026rsquo;s running past (just 2000 all dressed up)\nIona was on a mission, knowing there was a party to get to she set a fast speed, whilst pushing the noisiest scooter in the world to record pace we based out the first couple of kilometres in 5 min 30 second pace, yep I was at max HR the whole way round (more junk miles) We had some great shouts of encouragement as we went around the course, my favourite being \u0026ldquo;Keep up dad!\u0026rdquo; as Iona led the way round with a big grin on her face. In spite of swiping my beard and wearing my Santa hat Iona was recognised by a few people which was nice. Counting off the kilometres was good fun and there were a couple of times where I had to ask Iona to slow down as the pace she was setting was blistering. We stopped for a couple of minutes at the water station to give me a chance to catch my breath, and allow my pace maker a chance to drink some water without wearing it, and then we were off again, heading back to Higginson Park.\nThe only time Iona slowed down aside from the water stop was when she spotted a Santa being sick by the side of the road, amazing how kids can always spot things like! As we entered the park and the final 200 meters Iona pulled ahead by 5 seconds, enough of a lead when she crossed the line that she\u0026rsquo;s been saying ever since that she beat me, which I guess she did. Having completed the warm up race, it was time for the race to the party, and here it was that Iona finally slowed down as I carried the scooter back to the car. In the process of heading to the cinema we of course got stuck behind every Sunday driver in the area, but thankfully made it in time for Iona to join her friends. Now I just head back to Marlow to pick up the rest of the family ;-)\nOh and my time? 29 minutes 48 seconds, Iona of course was 29 minutes 43 seconds ;-) According to the GPS the course was 5.25km and we both stopped at the water station, so a pretty pleasing time, even if the effort felt like it might kill me!!\n","date":"3 December 2013","externalUrl":null,"permalink":"/posts/2013/12/03/","section":"Posts","summary":"","title":"Marlow Santa Fun Run","type":"posts"},{"content":"","date":"3 December 2013","externalUrl":null,"permalink":"/tags/santa-fun-run/","section":"Tags","summary":"","title":"Santa-Fun-Run","type":"tags"},{"content":"","date":"1 December 2013","externalUrl":null,"permalink":"/fitness/2013/12/","section":"Fitness","summary":"","title":"December 2013","type":"fitness"},{"content":"So in a bid to keep me motivated and training over the last few months of the year (didn\u0026rsquo;t work) I entered a couple of races, the Marlow Half Marathon (covered here) and then for some reason best known to myself I also entered the Mens Health Survival of the Fitest race, the last time it would be run in Battersea Power Station. Thanks to Octavia, the logistics were pretty easy with the family dropping me off at the entrance (and several hours later picking up a dirty, tired but elated version of the same person). Walking into the temporary village that had been set up to cater for the athletes and spectators it was clear this was a well organised affair. It needed to be, with 12000 athletes taking part in waves starting every 15 minutes the registration, bag drop, warm up and race start was pretty slick. I joined the queue to register, filtered through to get in the next queue to get my t-shirt by passing through the tent (Note to anyone running a large registration for an event, don\u0026rsquo;t make the athlete go back through the queue once s/he has registered) and then strolled out to start getting ready.\nThe earlier clear blue skies and chill in the air had been replaced with cloud with a threat of rain, I joined what I hoped was the end of a very long queue for bag drop and got myself ready, removing all valuables and tech. Shuffling forward with my bag as the queue moved forward at a faster pace then I expected, in the process losing my tag for my bag, handy. At the front of the queue, I grabbed a replacement tag which had my race number written on, attached to the bag and strolled back out of the tent, just 20 minutes to kill now until the start of my wave, 10 minutes or so until I entered the start holding / warm up area. There was a brief appearance by the sun which was nice and I headed off to the on site barbers to see what the queue was like for a free haircut, too long for my start time, but the tent was heated and a good place to hide.\nTen minutes before the start of my race my wave was allowed into the holding / start area, for a quick briefing about the various signs we would see on the route, the obligatory cheering and shouting, which for once I found myself taking part in and enjoying, followed by an even bigger shock, the warm up! Yep I even did some of the jumping around and stretching ahead of the countdown from 10\u0026hellip;9\u0026hellip;8\u0026hellip;\n\u0026hellip;3\u0026hellip;2\u0026hellip;1 and with a loud cheer we were off, except only the front row was, the first obstacles were large hay bales which backed the wave up as people clambered over the bales, but also meant that the rest of the obstacles didn\u0026rsquo;t require any wait before tackling, the race was essentially broken into thirds, the first part around Battersea Power station, a run into the Battersea Park, and then back into Battersea Power Station for the final set of obstacles (including the nice muddy pools, a person with a fire hose, cold water, and the wall at the end)\nTo get an idea of the course and the obstacles there is a handy review with photos and videos from the event that you can watch here.\nThe course was great, loved it, the way it works you are gradually built up so that when it comes to the muddy water filled pools that you crawl through you don\u0026rsquo;t care, you just get in and crack on with it, by then you\u0026rsquo;ve got wet doing a lap of the Battersea Park running track, once with a traffic cone, (of course) and then with steeplechase jumps, the last being a water jump which as I entered the track I saw someone fall into rather than jump into, getting considerably wetter than expected.\nThe third of the race that added the distance in Battersea Park was the hardest part for me, my running fitness not being that great at the moment, I was certainly amused running past the Peace Pagoda in the park, which Barnaby and I used to use as the marker for starting a sprint, I tried to pick up the pace and went past some people who had just over taken me, but soon dropped back to the pace I knew I could survive. Looking around I was still being overtaken by people in my wave, which was nice, by the time I completed the second lap of the running track the wave after us was coming through.\nAfter the run through the park it was nice to get back into the power station grounds knowing I\u0026rsquo;d be facing lots of obstacles over long running, people were heading out to the park still, climbing through the cars and finding the one with the working horn to great cheers from those around, there were queues again for some of the obstacles as fast people from the wave behind us were pushing through (note: if you want a fast time, get in an early wave) amused by someone behind me complaining that another bloke was holding her up, I didn\u0026rsquo;t care, and I\u0026rsquo;m not sure that anyone around her did, maybe she felt better for it. Coming up on to where the fire hose was, was an exercise in getting wetter and muddier, jumping into water filled skips of various depths. A few people were avoiding the fuller skips and ponds, I didn\u0026rsquo;t really see the point and happily waded in, or crawled through, I\u0026rsquo;d signed up to get wet and muddy and I wanted my monies worth ;-) the camaraderie was great throughout the event with people offering help on all of the walls and higher obstacles, it was also great seeing teams racing together and waiting for each other having completed an obstacle.\nSo my first obstacle race, but not my last.\nAnd the beer at the end, tasted amazing.\n","date":"22 November 2013","externalUrl":null,"permalink":"/posts/2013/11/22/","section":"Posts","summary":"","title":"Mud, Sweat and Beer","type":"posts"},{"content":"So on Sunday with the thought running through the back of my mind that I was completely under prepared for what I was about to undertake, I and 999 others toed the line for the start of the Marlow Half Marathon. This was my third run of the course and probably with as little preparation as I\u0026rsquo;ve ever had for a race. 13 odd hilly miles would soon find me out.\nTraining had been going well until a run of three hard weeks at the office, followed by dark and wet mornings put pay to the fact that I was able to do 12 - 16km without feeling too bad. So this was going to be the longest distance I\u0026rsquo;d run in a couple of years, what could possibly go wrong.\nWith a rather lame \u0026ldquo;whoosh\u0026rdquo; and a feeble \u0026ldquo;bang\u0026rdquo; Guy Fawkes set us off for the run. The first few kilometers are a steady up hill run and good introduction to the course, the weather was almost perfect, cold but sunny but maybe a bit windy. I was aiming to complete the course and hoping to get around in under two and a half hours, my training had gone *that* well and I had a good idea of how well (or badly) I was going to do and what I was capable of doing, still it would be a good test of mental strength.\nI enjoy the course, it\u0026rsquo;s a lovely run through the Chilterns and reminds me that I\u0026rsquo;m lucky to live in such a nice location, however the scenery can only distract you from the fact you\u0026rsquo;re running 13 miles a certain amount. I ran pretty much alone most of the race after the first couple of kilometres which I quite liked, had a couple of people that I would go past on the downhills (if you\u0026rsquo;ve just run up it, you\u0026rsquo;ve earned the right to let yourself go on the way down it!) as they were more cautious than me only for them to go past me again when their more consistent pace caught up with me again. I only walked one of the hills and it\u0026rsquo;s the steepest climb of the course and 13km into the run.\nI hit a bit of a wall around 16km, and had to have a quick word with my brain, after all the only way I was getting home was to complete the course, so might as well run it! Even if that meant another 5km to go (approximately a further 30 minutes)\nThere was also an incident on the course where a Land Rover defender passed by me in close proximity at what I would consider excessive speed for the lane, never mind the fact it was dotted with runners, the pass not helped by the driver seemingly forgetting the dirty great trailer he was towing. Sure enough 200 hundred metres ahead of me he managed to clip a couple of runners, no real harm done, but a warning to all of us that we share the roads. I checked the two fallen runners were ok, they were, and continued on my way past the now stopped Land Rover whose driver was in heated discussion with a runner. It was good to note that when he passed me and the runner ahead he was considerably more careful about it the second time around.\nClosing in on the final hill it was time to dig deep for the final push ahead of the 3km drop back into Marlow. The final descent was lovely, the course almost complete and I was able to use the downhill to knock out my fastest km of the race, cheating a bit, but it felt good, I even managed to out sprint someone for the line.\nSo whilst my time might have been slow, it was a better time than I had anticipated and teaches me some important lessons:\nYou get the time you train for. If you always run at the same pace, you\u0026rsquo;ll race at the same pace. Cut your toenails before running any great distance. Don\u0026rsquo;t wear trainers that you have only done 10km in prior to the race. Obvious maybe, but experience teaches you to recognise a mistake when you make it again ;-)\nJust the Mens Health Survival of the Fittest in Battersea to get through now on the 16th November!\nSo for your amusement are the graphs of the run from my Garmin along with a race comparison for the three times I\u0026rsquo;ve completed the Marlow Half.\n2009 2011 2013 Time 02:04:48 02:19:22 02:18:28 Avg Speed 10.3 km/h 9.1 km/h 9.2 km/h Avg Pace 5:51 min/km 6:35 min/km 6:31 min/km Calories 1781 1979 2060 Avg HR 174 bpm 167 bpm 178 bpm Max HR 191 bpm 187 bpm 194 bpm Avg Run Cadence 162 spm 162 spm 160 spm Max Run Cadence 182 spm 178 spm 174 spm ","date":"6 November 2013","externalUrl":null,"permalink":"/posts/2013/11/06/","section":"Posts","summary":"","title":"Marlow Half Marathon (Again)","type":"posts"},{"content":"So before I get started with Code Club one of the things I need to do is learn Scratch, I\u0026rsquo;ve had a quick play and don\u0026rsquo;t imagine it will be too hard (he says setting himself up for a fall) and so as part of that it\u0026rsquo;s time for a proper month of learning, liking movember but without the shit facial hair. I have a Code School account so I have access to a good resource and have already completed a couple of their courses (GIT, R, Rails for Zombies), but this month I\u0026rsquo;m going to focus on JavaScript track, I\u0026rsquo;ve tinkered with and used it in the past, maybe now it\u0026rsquo;s time to learn it properly.\n","date":"1 November 2013","externalUrl":null,"permalink":"/posts/2013/11/01/","section":"Posts","summary":"","title":"Code School","type":"posts"},{"content":"","date":"1 November 2013","externalUrl":null,"permalink":"/tags/code-club/","section":"Tags","summary":"","title":"Code-Club","type":"tags"},{"content":"","date":"1 November 2013","externalUrl":null,"permalink":"/tags/code-school/","section":"Tags","summary":"","title":"Code-School","type":"tags"},{"content":"","date":"1 November 2013","externalUrl":null,"permalink":"/fitness/2013/11/","section":"Fitness","summary":"","title":"November 2013","type":"fitness"},{"content":"Starting to wonder if it is time to remove my small bit of clutter from the internet?\n","date":"2 October 2013","externalUrl":null,"permalink":"/posts/2013/10/02/","section":"Posts","summary":"","title":"Starting to wonder...","type":"posts"},{"content":"","date":"1 October 2013","externalUrl":null,"permalink":"/fitness/2013/10/","section":"Fitness","summary":"","title":"October 2013","type":"fitness"},{"content":"","date":"1 September 2013","externalUrl":null,"permalink":"/fitness/2013/09/","section":"Fitness","summary":"","title":"September 2013","type":"fitness"},{"content":"Had forgotten this was still here /my bad\n","date":"13 August 2013","externalUrl":null,"permalink":"/posts/2013/08/13/","section":"Posts","summary":"","title":"My bad","type":"posts"},{"content":"","date":"1 August 2013","externalUrl":null,"permalink":"/fitness/2013/08/","section":"Fitness","summary":"","title":"August 2013","type":"fitness"},{"content":"","date":"1 July 2013","externalUrl":null,"permalink":"/fitness/2013/07/","section":"Fitness","summary":"","title":"July 2013","type":"fitness"},{"content":"","date":"5 June 2013","externalUrl":null,"permalink":"/tags/brithday/","section":"Tags","summary":"","title":"Brithday","type":"tags"},{"content":"","date":"5 June 2013","externalUrl":null,"permalink":"/tags/gin/","section":"Tags","summary":"","title":"Gin","type":"tags"},{"content":"\u0026hellip;.so today I\u0026rsquo;m 39\n*ouch*\nNo really sure how that happened, just seemed to creep on my, celebrating it in the usual way by working. Have received a couple of amazing things, one of which is a voucher to the Ginstitute which I\u0026rsquo;m really excited about doing, will have to find a couple of other people who are interested in going along at the same time, shouldn\u0026rsquo;t be too hard!\nThe other is a bottle of \u0026ldquo;Bathtub Gin\u0026rdquo; (there is clearly a theme here) which is a gin I haven\u0026rsquo;t had so that\u0026rsquo;s pretty exciting.\nSo there is a realisation that I\u0026rsquo;m probably the least fit I\u0026rsquo;ve ever been, maybe time for some introspection and some kind of change, I certainly don\u0026rsquo;t want to write a similar post to this next year (with the title OMG I\u0026rsquo;m 40 and fat(ter))\nBut first there is gin to be drunk\u0026hellip;. (and then a midlife crisis to be planned)\n","date":"5 June 2013","externalUrl":null,"permalink":"/posts/2013/06/05/","section":"Posts","summary":"","title":"Next stop 40....","type":"posts"},{"content":"","date":"1 June 2013","externalUrl":null,"permalink":"/fitness/2013/06/","section":"Fitness","summary":"","title":"June 2013","type":"fitness"},{"content":"So as expected I soon forgot, or had nothing interesting to write about and we\u0026rsquo;re now on day something or other of the endless winter with a brief glimpse of what summer could be like.\nThe prime reason for not posting in a while is the usual lame excuse of life happening (or in this case more work happening) which whilst entirely helpful in terms of trying to move house is having a less that great effect on my training as well as that small thing called \u0026ldquo;life\u0026rdquo;\nSo here we are a week to the day to Octavia\u0026rsquo;s due date for Jnr and I honestly have no idea where the first nearly 5 months of this year has gone. (If you have any answers let me know!)\n","date":"15 May 2013","externalUrl":null,"permalink":"/posts/2013/05/15/","section":"Posts","summary":"","title":"Day something or other","type":"posts"},{"content":"","date":"1 May 2013","externalUrl":null,"permalink":"/fitness/2013/05/","section":"Fitness","summary":"","title":"May 2013","type":"fitness"},{"content":"","date":"1 April 2013","externalUrl":null,"permalink":"/fitness/2013/04/","section":"Fitness","summary":"","title":"April 2013","type":"fitness"},{"content":"So in the general tradition of me and blogging we reach the point where it goes a bit quiet.\nOf course there are reasons / excuses etc. Anyway last night I went to the AWSUGUK meet up hosted at The Pregnant Man. It was the second event I had attended (and the third event overall) and again I was impressed by the venue (A private pub will always make me happy) and the clearly knowledgeable and enthusiastic crowd helped make for a great meetup.\nThe host Norman Driskell (@n0rm) introduced the evening, and set the tone of the evening with a brief presentation regarding how Razorfish had recently leveraged AWS for an ad tied into the Superbowl, the figures were certainly impressive and just show what you can do with AWS with planning, a couple of key take outs.\nPre-warm the servers if you are expecting huge traffic spikes Leverage the services that AWS offer you, rather than rolling your own in an EC2 box The sessions were:\nManaging your apps on AWS: Real life lessons with GigaSpaces Quarterbacking the AWS Estate The CentraStage experience And I have to say all of the speakers were well prepared, and rehearsed and gave a great insight into their areas of expertise, again there were good tips across all of the sessions, in particular I found the AWS Estate session very worthwhile with some dull but useful tips regarding consolidated billing, the billing API and of course an element of insight into some of the newer technology releases, especially Redshift and Opworks. Hopefully the slides will be up soon.\n","date":"20 February 2013","externalUrl":null,"permalink":"/posts/2013/02/20/","section":"Posts","summary":"","title":"AWSUGUK #3","type":"posts"},{"content":"Ok I\u0026rsquo;ll soon stop doing posts based on the working day of the year (probably) and of course there is a good chance I\u0026rsquo;ll revert to type and just stop blogging for a while again.\nHowever in the mean time, I\u0026rsquo;ve been playing with building virtual machines from the command line, and think that Vagrant with Puppet may have made me see local development and my development environment in a completely different manner, not sure this has happened since I stopped FTPing code to sites to put them live (yep deploy is the future kids!)\nSo to add to the learning so far is building a virtual machine, with the LAMP setup I want from a single command, clearly it\u0026rsquo;s the future. I need to refine the thoughts slightly that are swimming around my head and think about the workflow more, but it should be pretty amazing ;-) stay tuned and what out for a post further along the line with some stuff on Github (I won\u0026rsquo;t be the first to do it, but it will work for me, and maybe you\u0026hellip;)\n","date":"7 February 2013","externalUrl":null,"permalink":"/posts/2013/02/07/","section":"Posts","summary":"","title":"Day 26","type":"posts"},{"content":"","date":"7 February 2013","externalUrl":null,"permalink":"/tags/devops/","section":"Tags","summary":"","title":"Devops","type":"tags"},{"content":"","date":"7 February 2013","externalUrl":null,"permalink":"/tags/puppet/","section":"Tags","summary":"","title":"Puppet","type":"tags"},{"content":"","date":"7 February 2013","externalUrl":null,"permalink":"/tags/vagrant/","section":"Tags","summary":"","title":"Vagrant","type":"tags"},{"content":"","date":"31 January 2013","externalUrl":null,"permalink":"/tags/home/","section":"Tags","summary":"","title":"Home","type":"tags"},{"content":"","date":"31 January 2013","externalUrl":null,"permalink":"/tags/lessons/","section":"Tags","summary":"","title":"Lessons","type":"tags"},{"content":"So when we first moved into our current property we decided it would be a good idea to get the bathroom redone. We got 3 different companies / builders and decorators to quote for the work but feeling the first flush of escaping from London (or some other madness I still can\u0026rsquo;t really explain) I thought it would be a good idea to go with the local company. Support local I thought, the money goes back into the local economy and of course the companies reputation will be important so we\u0026rsquo;ll get better work.\nWrong.\nTotal disaster from start to finish took more than twice as long, a few leaks on the way and the stupid notion from the guy that we would want to fill the bath using the shower rather than having taps fitted. I refused to pay the final invoice and never had a response back to my detailed break down as to why I wasn\u0026rsquo;t paying. I later heard that the guy who \u0026ldquo;ran\u0026rdquo; the company left the area and trades somewhere else, clearly ran out of people to fleece.\nFirst forward to last year and we have a leak again, no problem I think I have insurance that will cover this. Well it sort of does, except it\u0026rsquo;s not the policy of Natwest home insurance to make good with a room, just sort out the areas that are damaged either by the leak, or in the repair of the leak. So if I hadn\u0026rsquo;t insisted they would\u0026rsquo;ve replaced the tiles and boxing around the shower but were under no obligation to replace any other tiles in the bathroom to match in with the repair work. Oh and within 6 months we had mould back on the walls and ceiling.\nYesterday as part of the preparation to (hopefully) sell the house we had a couple of Polish guys around to do some painting and make the place look better, and to sort out the mould in the bathroom. I dug out the paint that had been used and pretty much at the same time as the Polish guy started chatting to his mate in fast Polish I noticed the problem. The bathroom had been repainted by the Natwest approved contractor in ordinary paint, not bathroom / kitchen paint, just a bog standard tin of Dulux. Explains the mould and the streaky effect.\nSo that\u0026rsquo;s twice that British companies have let me down in the space of 5 years on a single, simple job of making a bathroom nice for a couple and their young family to use.\nNo wonder some industries are so frightened of Polish tradesman, they are cheaper, faster and so far proving to be a lot better. In half a day they have repainted the bedroom (walls and ceiling) done a first coat on the bathroom walls and ceiling, re-painted the inside of the window frame in one of the bedrooms and sanded down both sides of the front door in preparation of painting that, just two guys. No wonder my local estate agent recommended them and is also using them to redo his entire house.\nOh and they are mad ;-)\n","date":"31 January 2013","externalUrl":null,"permalink":"/posts/2013/01/31/","section":"Posts","summary":"","title":"Support Local?","type":"posts"},{"content":"Another day, another language looked at, I must be the master of Hello World by now.\nAnyway for the first time in a long time it was Java. It\u0026rsquo;s in use where I\u0026rsquo;m working at the moment (along with some technologies I\u0026rsquo;m more familiar with) but following my mantra of \u0026ldquo;learning is fun\u0026rdquo; it was time to grab a copy of Spring Tool Suite (STS) install, and then find a Spring Hello World tutorial.\nOne train journey home and the box is ticked, now to try and find some more interesting tutorials to get a fuller flavour of Spring and why people (who like Java) seem to like it and rate it. Certainly since I last tinkered with java having a more integrated tool like STS makes my life a lot easier. From nothing to Spring based Hello World in a 10 minute train is quite nice. In the past I think I\u0026rsquo;d got bored with playing with Tomcat and trying to get it working at this point ;-)\n","date":"29 January 2013","externalUrl":null,"permalink":"/posts/2013/01/29/","section":"Posts","summary":"","title":"Day 19","type":"posts"},{"content":"","date":"29 January 2013","externalUrl":null,"permalink":"/tags/java/","section":"Tags","summary":"","title":"Java","type":"tags"},{"content":"","date":"29 January 2013","externalUrl":null,"permalink":"/tags/spring/","section":"Tags","summary":"","title":"Spring","type":"tags"},{"content":"Hard day today, but none the less constructive, lots of business stuff, some learning (Python / Mongo / RoR) and a breaking of my dry January.\nOk so the last bit is a complete fail, but the person I was meeting had kindly brought me a beer and it would\u0026rsquo;ve been rude to refuse (especially at London prices)\nDaily posts are getting harder and more dull, especially when I leave them to the end of the day, still got my (mostly) happy vibe for my current work in spite of the best efforts of people sometimes. January is almost done, where did that month go?\n","date":"28 January 2013","externalUrl":null,"permalink":"/posts/2013/01/28/","section":"Posts","summary":"","title":"Day 18","type":"posts"},{"content":"And my work here is done, well almost. Client handover finished yesterday to the new perm programmer and general technical bod at the company, so 10 pages of documentation and a run through some of the code. That was it, thank you for your work and if you ever need to feel free to use us a reference.\nIt was certainly interesting work as well, VBA and SQL server with an unhealthy dose of VBScript (Who knew it still existed) in a market I\u0026rsquo;ve not worked in before, originally just involved in setting up a server and a couple of desktops the contract ended up being over a year long. (and that\u0026rsquo;s not me being slow on Windows!)\nOne happy client is now one happy ex-client. Luckily for me this being 2013 and not 2012 I\u0026rsquo;ve already got replacement work lined up to fill the time ;-)\n","date":"25 January 2013","externalUrl":null,"permalink":"/posts/2013/01/25/","section":"Posts","summary":"","title":"Day 17","type":"posts"},{"content":"","date":"23 January 2013","externalUrl":null,"permalink":"/tags/coding/","section":"Tags","summary":"","title":"Coding","type":"tags"},{"content":"All about the learning.\nIn a bid to maximise my time I can be found on the train into train brow furrowed, head down and working on my laptop (to the point that I\u0026rsquo;ve managed to completely ignore people I know sitting opposite me - yep, I can get focussed) but it\u0026rsquo;s not really all working, it\u0026rsquo;s mostly learning, it\u0026rsquo;s about keeping my skills sharp and relevant, so even if some of the work I\u0026rsquo;m doing in my day to day isn\u0026rsquo;t programming I\u0026rsquo;m still looking at code, still learning my craft. At the moment the list feels quite long and a little disjointed but in mind it almost makes sense. By looking at and playing with lots of different technologies I\u0026rsquo;m making it easier to learn them and be a better programmer, as I port learning from one technology / toolset into another. So by learning Ruby on Rails it helps me with Test Driven Development (TDD) and also the PHP framework Laravel. By working with Codecademy it helps with my JavaScript (which I\u0026rsquo;m hoping will help with D3) and Python which will help with the MongoDB course and so it goes on.\n","date":"23 January 2013","externalUrl":null,"permalink":"/posts/2013/01/23/","section":"Posts","summary":"","title":"Day 15","type":"posts"},{"content":"","date":"23 January 2013","externalUrl":null,"permalink":"/tags/testing/","section":"Tags","summary":"","title":"Testing","type":"tags"},{"content":"","date":"22 January 2013","externalUrl":null,"permalink":"/tags/3-words/","section":"Tags","summary":"","title":"3-Words","type":"tags"},{"content":"So where was everyone now getting in touch or asking questions about work and other projects in 2012?\nI\u0026rsquo;m not complaining of course, it\u0026rsquo;s a fantastic start to 2013, I\u0026rsquo;ve got some interesting projects that I\u0026rsquo;m already wrapped up in and the learning is never ending, not just technologies but also methodologies, and aside from \u0026ldquo;Fitter\u0026rdquo; I\u0026rsquo;m covering off the three words aim for 2013 well (and taking into account the discussion I had the last time I had my haircut, I\u0026rsquo;m almost being epic and maybe even awesome in 2013 as well)\n;-)\n","date":"22 January 2013","externalUrl":null,"permalink":"/posts/2013/01/22/","section":"Posts","summary":"","title":"Day 14","type":"posts"},{"content":"","date":"19 January 2013","externalUrl":null,"permalink":"/tags/sql/","section":"Tags","summary":"","title":"Sql","type":"tags"},{"content":"So I have a lovely big SQL which is returning over 2000 rows of data (going back to 2005) which is a recursive Common Table Expression (CTE). To perform certain calculations we have to compare each row with the previous days data and update the data, it\u0026rsquo;s quite expensive but as a piece of SQL will run in around 1 minute on SQL 2K8 running with 8Gb RAM under VMware. The same query as a stored procedure takes 27 minutes to run!\nYep, the exact same SQL when running as a stored procedure is over 20 times slower to produce the same result set.\nTime to hit Google and the second result on the query \u0026quot;\u0026quot; brings up this little beauty of a posting.\nSo the first check:\nSET ANSI_NULLS ON\nYep, got that one covered, the second one however of using local variables in the stored procedure query made all the difference. In this stored procedures case I added in three local variables which took the values of the passed in parameters and that was it.\n*BOOM*\n(Note: the computer didn\u0026rsquo;t actually blow up, that would be irritating.)\nThe stored procedure now executes as fast as the SQL query. Amazing, and now that I have a working and more timely query, hopefully I\u0026rsquo;ll have a happy client. Now to update all of the stored procedures in the application.\n","date":"19 January 2013","externalUrl":null,"permalink":"/posts/2013/01/19/","section":"Posts","summary":"","title":"SQL Query perfomance v Stored Procedure issues","type":"posts"},{"content":"Back in the SCRUM, well the stand up anyway, next week we\u0026rsquo;ll be grabbing a wall to post up our 100+ user stories, which we\u0026rsquo;ll then break into smaller tasks, just creating and logging the user stories makes a difference to how the project feels, although it would be nice if we didn\u0026rsquo;t keep adding 10+ stories a day (although they mainly go in the backlog)\nOh and some snow fell, 2 hours in the office, then I headed home before the public transport fell apart.\n","date":"18 January 2013","externalUrl":null,"permalink":"/posts/2013/01/18/","section":"Posts","summary":"","title":"Day 12","type":"posts"},{"content":"","date":"17 January 2013","externalUrl":null,"permalink":"/tags/ci/","section":"Tags","summary":"","title":"Ci","type":"tags"},{"content":"","date":"17 January 2013","externalUrl":null,"permalink":"/tags/d3-js/","section":"Tags","summary":"","title":"D3-Js","type":"tags"},{"content":"Yep if I don\u0026rsquo;t keep this up I\u0026rsquo;ll lose count.\nToday started off well with me playing with D3.js on the train on the way in, and also finding out that my RoR code that I have in Github had passed its tests in Travis-CI - ok so it had also passed the tests on my laptop but it had taken me a couple of steps to get the right YML file to make it work in Travis. Thanks to this article on Stack Overflow I found the magic was to do with the Rake DB Migrate task (I was on the right track which was nice)\nMy .travis.yml file is now like this:\nlanguage: ruby rvm: - 1.9.3 env: - DB=sqlite script: - RAILS_ENV=test bundle exec rake db:migrate --trace - bundle exec rake db:test:prepare - bundle exec rspec spec/ bundler_args: --binstubs=./bundler_stubs\nWhich made things work, now every time I push my code to Github it will be grabbed and tested by Travis, overkill for a sample app with a known outcome, but good practice.\nThe down part was getting into the office I was working today and losing one of the rubber earbuds from my earphones, as I type this I\u0026rsquo;m listening to music in half stereo (not mono) and being subjected to the noise of my fellow commuters.\nOnce in to the office du jour it was down to some data and SQL checking, not too much of an issue except this was SQL including some lovely CTE queries that I hadn\u0026rsquo;t looked at in over 3 months, took a while to get going with it, and there were some changes to make (of course) with the client \u0026ldquo;helping\u0026rdquo; me write my code. Still managed to validate the results from the queries and client is happy and of course a happy client is what we all want.\nSo heading back home and more D3.js awesomeness. (and writing a blog post) ;-)\n","date":"17 January 2013","externalUrl":null,"permalink":"/posts/2013/01/17/","section":"Posts","summary":"","title":"Day 11","type":"posts"},{"content":"","date":"17 January 2013","externalUrl":null,"permalink":"/tags/ror/","section":"Tags","summary":"","title":"Ror","type":"tags"},{"content":"","date":"17 January 2013","externalUrl":null,"permalink":"/tags/travis/","section":"Tags","summary":"","title":"Travis","type":"tags"},{"content":"So it\u0026rsquo;s another day, on the commute in I played around with a bit RoR as I continue to work through the Rails Tutorial and started to get back to working with JavaScript more using the helpful guys at Codecademy\nSo clearly I can tick today off as a day that isn\u0026rsquo;t wasted (my standard rule is that something learnt in a day means the day hasn\u0026rsquo;t been wasted!)\nWhich is handy as I\u0026rsquo;m working on a data visualisation piece at the moment which will make extensive use of JSON based data from REST queries with a view to being displayed using D3.js so even more learning going on.\n;-)\nThink it is safe to say that as part of my three words for 2013 I\u0026rsquo;m working well on \u0026ldquo;better\u0026rdquo; sad to report that \u0026ldquo;fitter\u0026rdquo; hasn\u0026rsquo;t even started, although I\u0026rsquo;m back doing my daily physio exercises - it\u0026rsquo;s a start!\n","date":"16 January 2013","externalUrl":null,"permalink":"/posts/2013/01/16/","section":"Posts","summary":"","title":"Day 10","type":"posts"},{"content":"","date":"16 January 2013","externalUrl":null,"permalink":"/tags/rails/","section":"Tags","summary":"","title":"Rails","type":"tags"},{"content":"Ok so I think it\u0026rsquo;s day 9, have lost track already what with the daily commute and working like I have a real job again. Its been a crazy start to the year with people asking me about work from days gone by and just little bits and pieces coming in on an almost daily basis. I\u0026rsquo;m not complaining, still massively fired up for 2013 and with the life changes expected to happen in H1 I need to be!\nWeekends are no less relaxing with the joy of house hunting, we\u0026rsquo;re moving area, so first off we need to find an area of the country we like, the criteria is pretty stringent and important to us, personally I\u0026rsquo;m hoping that this will be our final area move for some time, and wherever we end up (Kent?) we are there for a while and can try and put down some real roots in the local community and make the house a real home.\n","date":"15 January 2013","externalUrl":null,"permalink":"/posts/2013/01/15/","section":"Posts","summary":"","title":"Day 9","type":"posts"},{"content":"\u0026ldquo;A stand up of 1 doesn\u0026rsquo;t work\u0026rdquo;\n","date":"11 January 2013","externalUrl":null,"permalink":"/posts/2013/01/11/","section":"Posts","summary":"","title":"A stand up of 1 doesn't work","type":"posts"},{"content":"","date":"11 January 2013","externalUrl":null,"permalink":"/tags/agile/","section":"Tags","summary":"","title":"Agile","type":"tags"},{"content":"","date":"11 January 2013","externalUrl":null,"permalink":"/tags/scrum/","section":"Tags","summary":"","title":"Scrum","type":"tags"},{"content":"So a week back in the work mindset, well a week commuting on the trains so far this year anyway, and it is probably some kind of record, but I\u0026rsquo;m still enjoying it all, enjoying work, enjoying creating and crafting solutions, learning every day and I *know* I\u0026rsquo;m doing good work. Using a lot of skills as well\u0026hellip;.\nSo far this year:\nCisco (sort of) L3 Switch config work HP Switch config VBA for Excel MS SQL Server 2k8 JavaScript for Google Apps Node.js PHP (Expression Engine) Ruby on Rails Agile development using SCRUM Early days of course, but I\u0026rsquo;m mainly doing it with a smile, so the mental side is going well, now to work on the physical side and get fit.\n","date":"10 January 2013","externalUrl":null,"permalink":"/posts/2013/01/10/","section":"Posts","summary":"","title":"Day 7","type":"posts"},{"content":"","date":"10 January 2013","externalUrl":null,"permalink":"/tags/tools/","section":"Tags","summary":"","title":"Tools","type":"tags"},{"content":"Productive day today, early meeting with Tom Burr to discuss a possible Expression Engine site, followed by working as the Scrum Master to get a project back on track and hit the release deadlines, then finally a meeting to discuss some site amendments that a client wants for a site that was \u0026ldquo;almost\u0026rdquo; finished. (again this site uses Expression Engine)\nThe downside being that for the third day in a row the girls were in bed when I got home :-( still that\u0026rsquo;s \u0026ldquo;hump\u0026rdquo; day done and dusted.\nAlmost feels like I have a proper job at the moment!\n","date":"9 January 2013","externalUrl":null,"permalink":"/posts/2013/01/09/","section":"Posts","summary":"","title":"Day 6","type":"posts"},{"content":"","date":"8 January 2013","externalUrl":null,"permalink":"/tags/cisco/","section":"Tags","summary":"","title":"Cisco","type":"tags"},{"content":"\u0026ldquo;Buy cheap, buy twice\u0026rdquo;\nA good lesson today in when buying the cheaper item is not always a saving. Today was a \u0026ldquo;Cisco\u0026rdquo; switch that was actually a re-branded Linksys, so a consumer Cisco, or Cisco \u0026ldquo;lite\u0026rdquo; perhaps.\nNeeded the L3 capabilities of the switch as we needed to have three VLAN\u0026rsquo;s running with limited routing (by protocol) between the VLAN\u0026rsquo;s and it was painful. A number of hours later and it\u0026rsquo;s still not sorted. Highlights include the edit ACL interface complaining the rule you are editing already exists on save and then deleting it, handy.\nSo saving \u0026ldquo;some\u0026rdquo; money on getting the cheaper switch has cost a lot of time and effort to almost get things working with a very tight deadline, 12 hour day, mostly spent with the switch :-(\n","date":"8 January 2013","externalUrl":null,"permalink":"/posts/2013/01/08/","section":"Posts","summary":"","title":"Day 5","type":"posts"},{"content":"","date":"8 January 2013","externalUrl":null,"permalink":"/tags/linksys/","section":"Tags","summary":"","title":"Linksys","type":"tags"},{"content":"","date":"8 January 2013","externalUrl":null,"permalink":"/tags/network/","section":"Tags","summary":"","title":"Network","type":"tags"},{"content":"So first full work week of the year, 5 days work in 5 days (maybe) as opposed to last weeks 5 days work in 2 ish days.\nGood start to the day bumping into Andy on the Donkey into town this morning, took us both a while to work out each other was there mainly as we were both fully engaged with working on our respective laptops, oddly in two years of travelling into town by train, it\u0026rsquo;s only the second time I\u0026rsquo;ve bumped into someone I know and that happened in the last 3 weeks. Odd.\nOf course it did mean that my aim of continuing to work through the RoR Tutorial went out the window but it was good to have a catch up after we originally met at Full Frontal and found out after several drinks that we live about three miles away, another instance of small world.\n","date":"7 January 2013","externalUrl":null,"permalink":"/posts/2013/01/07/","section":"Posts","summary":"","title":"Day 4","type":"posts"},{"content":"\u0026ldquo;You never have quite enough money for the house you want to buy\u0026rdquo;\n","date":"6 January 2013","externalUrl":null,"permalink":"/posts/2013/01/06/","section":"Posts","summary":"","title":"You never have quite enough money for the house you want to buy","type":"posts"},{"content":"","date":"5 January 2013","externalUrl":null,"permalink":"/tags/icloud/","section":"Tags","summary":"","title":"Icloud","type":"tags"},{"content":"","date":"5 January 2013","externalUrl":null,"permalink":"/tags/mountain-lion/","section":"Tags","summary":"","title":"Mountain-Lion","type":"tags"},{"content":"So a while ago I wrote about changing the tools I was using in a bid to be more organised, has it worked, not really, but this is more down to me than the tools.\nA bad workman blames his tools but in this case the fault lies squarely with the workman. I\u0026rsquo;ve got out of the habit of making notes, setting reminders and generally (and to the amusement of those who know me) taken to relying on my memory (stop laughing at the back) and in a lot of ways that has worked, not relying on technology to feed me everything I need has helped, maybe not with my organisational skills, but it has helped in part with my memory, or maybe that\u0026rsquo;s been the recent work I\u0026rsquo;ve been doing and those I\u0026rsquo;ve been doing it with.\nAmusingly as I write this I\u0026rsquo;m about to start a role which see\u0026rsquo;s me as \u0026ldquo;scrum master\u0026rdquo; for a project, surely a test of my skills, in both organisation and getting stuff done.\n","date":"5 January 2013","externalUrl":null,"permalink":"/posts/2013/01/05/","section":"Posts","summary":"","title":"Tools (an update)","type":"posts"},{"content":"I can\u0026rsquo;t imagine I\u0026rsquo;ll get this into double figures but you never know.\nAnyway as one of the things I claim to be is a programmer I need to start doing it better, in the past I\u0026rsquo;ve picked up languages as I\u0026rsquo;ve needed to based on the work that is sold by the company I\u0026rsquo;m working for, notable examples of this include\nLotus Notes Java Server Pages VBA VBScript However now that I\u0026rsquo;m doing my own thing as Wirewool along with working with others such as TodayIShould it becomes easy to sell the technology and the solutions you know and so your learning changes, you don\u0026rsquo;t learn new things, but you do learn how to do things better, which is fine, but not great. So to be great I\u0026rsquo;m going to learn some new things\u0026hellip;.\nRuby on Rails (using http://ruby.railstutorial.org/) MongoDB (using https://education.10gen.com) And I\u0026rsquo;m going to improve on the PHP stuff I know and by using PHPUnit ensure the code I wrote is testable and tested. I\u0026rsquo;ve also got an Expression Engine module written that with a bit of a tidy up and some documentation is ready to be released, so I\u0026rsquo;ll get that cracked as well.\n","date":"4 January 2013","externalUrl":null,"permalink":"/posts/2013/01/04/","section":"Posts","summary":"","title":"Day 3","type":"posts"},{"content":"","date":"4 January 2013","externalUrl":null,"permalink":"/categories/projects/","section":"Categories","summary":"","title":"Projects","type":"categories"},{"content":"Well day 2 of the working year, according to WolframAlpha and time to reflect on 2012 and maybe update the oft neglected blog.\nSo 2012 was a year that went quickly and had some good highs and painful lows, achieving my goal at Alcatraz and getting (some of) the weight off to get around the course, surviving the swim etc, massive high, and in part responsible for the rest of the low:\nWork wise 2012 wasn\u0026rsquo;t the best year, almost 50% quieter / less work than 2011 and some hard months, also in terms of some things I wanted to achieve I completely missed out, no new company website (maybe related to the run rate) no, or almost no, posts here or meaning, I did start learning JavaScript and worked with Google Apps and Node.js so not a total waste in terms of upskilling and in conjunction with TodayIShould managed to build and launch a number of websites using Expression Engine, CodeIgniter or Perch\nOh and to wrap it all off I ended up back at the same weight as I started the year :-(\nStill writing this has made me feel more positive, 2013 is going to be amazing, all things being equal I\u0026rsquo;m going to be a dad again ;-) so we\u0026rsquo;ll also be moving house, buying a new car and all the other stuff that comes with a growing family.\nSo three words for 2013\nFitter, Better, Organised\n;-)\nLets see how it goes, but I\u0026rsquo;m feeling very positive about the year at the moment, so that\u0026rsquo;s a better start than this time last year!\n","date":"3 January 2013","externalUrl":null,"permalink":"/posts/2013/01/03/","section":"Posts","summary":"","title":"Day 2","type":"posts"},{"content":"","date":"1 January 2013","externalUrl":null,"permalink":"/fitness/2013/","section":"Fitness","summary":"","title":"2013","type":"fitness"},{"content":"I\u0026rsquo;m in a strange place work wise at the moment, I\u0026rsquo;m starting to wrap up on a long term project that has been running for 12+ months at a steady work load, today I met the new permanent programmer the organisation has hired and started down the process of hand over, justifying technology choices and the way things have been built. It\u0026rsquo;s an odd process and one that never comes that easy, time to check the ego at the door, any problems in the code, I created, any bugs are mine, any performance issues and lack of documentation etc are also mine. There are always \u0026ldquo;justifcations\u0026rdquo; for why things are the way they are, and it would\u0026rsquo;ve been nice to have had a bit more time to do a good handover. Still on the flip side I\u0026rsquo;ve managed to get the client ready for the next stage of their business and I\u0026rsquo;m happy I\u0026rsquo;ve done what I can and the prototype and proof of concept work I\u0026rsquo;ve completed has been interesting.\nThen there is a project which is just getting bigger and bigger, and is very exciting, We\u0026rsquo;ve stared out with some user stories and we\u0026rsquo;re constantly adding more and I\u0026rsquo;m going to be working with some cool technologies and hoping to prove that we can rapidly evolve the code and create something worth while and usable in double quick time (technical term)\n","date":"18 December 2012","externalUrl":null,"permalink":"/posts/2012/12/18/","section":"Posts","summary":"","title":"Handing over","type":"posts"},{"content":"","date":"1 October 2012","externalUrl":null,"permalink":"/fitness/2012/10/","section":"Fitness","summary":"","title":"October 2012","type":"fitness"},{"content":"So after a few recent frustrations with some of the software I used and a twitter conversation last night with @jamesketchell and @andyrixon I\u0026rsquo;ve spent a bit of time during the course of the day changing some of the tools I use.\nSo out with Google Chrome and back in with Apple\u0026rsquo;s Safari, this is in part due to frustrations with crashing but also I had been using Chrome on my iPhone and iPad but the default actions within iOS is to open in Safari so I had two different browser history\u0026rsquo;s and couldn\u0026rsquo;t see the tabs I had open via Chrome across all of my devices unless I copied and pasted the link from an email / tweet into Chrome. However of course I still can\u0026rsquo;t not until the update to iOS to add iCloud tabs (but there is reader for sharing sites of interest.)\nSo change of browser, and good bye instapaper as a side effect, which I tended to forget I had anyway.\nNext up, Getting Things Done (GTD)\nSo over the last few years I\u0026rsquo;ve tried a number of apps and ways of keeping / logging tasks and reminders.\nOmnifocus Remember the Milk Wunderlist / Wunderkit Evernote Things (1 and 2) and a couple of others which have come and gone. (in the case of some apps deleted in less time than they took to download)\nMy requirements in my mind were simple, a note / task / reminder should be quick and simple to add, be on all of my devices and be able to be added into folders / projects / related lists.\nNice to haves were things like recurring tasks when completed (useful for Physio which I should be doing daily for example!) but none of the above have really worked, so along the same lines of my browser change over I\u0026rsquo;m trying Notes and Reminders like Safari the power comes from using the iCloud account to sync everything up, so now in theory with some of the other iCloud services I now have my bookmarks, reading list, open browser tabs (once iOS 6 comes out), notes, photos (using photostream) emails, diary, and reminders all synced up across all of my devices\u0026hellip;. it almost feels like the future is here.\nI just wish that iCloud still synced up the Keychain and could be used by developers such as Panic so that Transmit bookmarks were synced !\nYep, never happy ;-)\n","date":"6 September 2012","externalUrl":null,"permalink":"/posts/2012/09/06/","section":"Posts","summary":"","title":"All change (Tools that is) ?","type":"posts"},{"content":"","date":"6 September 2012","externalUrl":null,"permalink":"/tags/osx/","section":"Tags","summary":"","title":"Osx","type":"tags"},{"content":"","date":"1 September 2012","externalUrl":null,"permalink":"/fitness/2012/09/","section":"Fitness","summary":"","title":"September 2012","type":"fitness"},{"content":"","date":"1 August 2012","externalUrl":null,"permalink":"/fitness/2012/08/","section":"Fitness","summary":"","title":"August 2012","type":"fitness"},{"content":"","date":"17 July 2012","externalUrl":null,"permalink":"/categories/bucket-list/","section":"Categories","summary":"","title":"Bucket-List","type":"categories"},{"content":"So at the start of 2011 after a less than a great year of training (again) I was looking for a new challenge to help motivate me and knowing / thinking it should probably be a triathlon I started looking around for something slightly different\u0026hellip;. \u0026hellip;. I came across the Escape from Alcatraz and whats more in 2011 it was on the 5th June (my birthday) clearly it was a sign or something. Sadly all of the places had gone but for some reason I made a note of when the lottery would open for the 2012 place.\nOn the 1st September 2011 I duly filled in the lottery place form made up an estimate time to complete the race and hit submit, experience in the London Marathon ballott told me I wouldn\u0026rsquo;t get a place and so I thought nothing more of it.\nSo on the 5th October I was very surprised to receive an email with the subject \u0026ldquo;Get ready to ESCAPE from ALCATRAZ!\u0026rdquo; this wasn\u0026rsquo;t part of the plan, I was meant to try and get a place for a number of years and always complain about my luck in not getting in over a pint of beer or some such, not succeed on the first attempt (although later conversations on the boat out to Alcatraz would suggest that the ballot is weighted in favour of overseas athletes). On the 7th October I duly clicked on the link to accept my place and paid my registration fee, I contacted Virgin Atlantic and managed to get a flight sorted using my air miles and a quick hit on Expedia and everything was booked, easy bit done, now to the training.\nDuring the course of 2011 it would be fair to say I didn\u0026rsquo;t do much, in fact as of this point I\u0026rsquo;ve already trained over 50% more in 2012 (excluding gym time) than I did in 2011 so my work (and that of my trainer Pete Frost) was cut out, still always a bit more time for some procrastination, June 2012 is a long time away\u0026hellip;..\n\u0026hellip;..On Sunday 10th June at 07:30 (ish) just off shore of Alcatraz with a shout of \u0026ldquo;shit!\u0026rdquo; I took a big leap for Dave-kind and jumped into the cold water of San Francisco bay to begin my escape, I wasn\u0026rsquo;t alone, I had 1999 other athletes for company as well as 100 boats or so in the water to help guide this unusual flock to the shore. My ESCAPE from ALCATRAZ was on!\nThe swim leg went on for about as long as I expected but passed pretty quickly, I noticed all sorts of details as my body came alive with racing again, each time my hand entered the water I noticed the temperature of the water and that it was different to the previous stroke, I didn\u0026rsquo;t feel the cold and managed to avoid most of the other swimmers, the bay is a big place after all. I didn\u0026rsquo;t really notice the current, but then I was mostly swimming with it hitting my side. I did notice that my sighting markers took a long time to change, the Aquatic Centre, Fort Mason, The Yacht Club, the yellow buoy that I needed to keep on my left as I got to the beach. Ah yes the yellow buoy, except was that a hat, or something else, and why were there three of them?\nThe three yellow buoy\u0026rsquo;s marked the far right of the swim exit so I had overshot slightly. Not massively, but enough that when I reflect back on it I\u0026rsquo;m slightly irritated, it certainly wasn\u0026rsquo;t going to really have an impact on my overall time, and certainly not any difference in placing, but something I will avoid when I race Alcatraz again (there I\u0026rsquo;ve said it) Out of the water, up the beach, there is a huge cheering crowd which you could actually hear a few hundred metres offshore which was amazing, into the mini transition to hunt down my bag, I\u0026rsquo;ve already got my wetsuit half way off at this point having ensured I started escaping from it as I came up the beach whilst it still had water in to help make it easier. One of the support crew managed to find my bag with my hand towel from the hotel, bottle of water and a pair of trainers for the run to transition. She then helped pull my wetsuit off my legs. I quickly (not really but I like to think it was) stuffed all my swim things back in the bag, tied a knot in it and idely wondered if I would see it again as I headed to transition proper.\nThe towel and the bottle of water in the transition bag was a top tip, ok so Andy Potts doesn\u0026rsquo;t bother with this mini transition, and I did see some people who either didn\u0026rsquo;t find there bag or opted to limp the half mile run to transition proper, ask them if the time saving was worth it? I bet it wasn\u0026rsquo;t, especially when they came off the bike and had to do the 8 mile run.\nI had remembered roughly where my bike was, in between a Canadian and UK flag, and also counted down the numbers on the racking. Helmet on, then socks, bike shoes, scoff some jelly beans, then out with the bike, oh and a quick chat with the guy next to me whilst I was doing this. Amusingly as I had run into transition the PA was announcing that the lead bikes were at mile 11, I had some catching up to do!!\nThe bike leg was \u0026ldquo;Up, Down, Left, Right all the time\u0026rdquo; according to the race organiser who had done the briefings that I attended, I took the opportunity on the flat first mile to take on fuel and water and wondered just how much Up, Down there would be (quite a lot it would seem)\nThe bike course is described as \u0026ldquo;challenging\u0026rdquo; and it also suggested that tri bars and TT bikes aren\u0026rsquo;t really suitable, not that stopped a lot of people zipping around on some very cool bikes. The Felt and I cracked, and whilst perhaps not \u0026ldquo;riding it like I stole it\u0026rdquo; I tried to ensure I pushed myself whilst ensuring I didn\u0026rsquo;t leave nothing in the tank for the run, using my new gel bottle made fuelling on the ride much easier and I ensured I kept taking on liquid as well. The doesn\u0026rsquo;t disappoint, hilly, technical with amazing scenery, the drop down to the beach before heading into Golden Gate park was amazing, but tempered with the knowledge I would have to do the same \u0026ldquo;drop\u0026rdquo; in reverse in several miles time as apart from the loop in Golden Gate park the bike leg is essentially an out and back course. The return from the park seemed to go quicker than the cycle out, probably all in the mind and as I hit the flat again on the way into transition the crowds grew and I increased my cadence to prepare for the run, hitting the dismount line and \u0026ldquo;running\u0026rdquo; into T2 I\u0026rsquo;d had enough of the bike and was ready (in my mind) for the 8 mile run.\nI easily found my space in the rack, swapped shoes, ditched my crash helment, scoffed some sports beans and headed out on to the run course, the first part of which is flat, easy and nice, at this point the race was already won by Andy Potts so clearly I was racing to finish and not for the win ;-) As you head out alongside the bike course, you can see the Golden Gate bridge, and as you run underneath it you can see the climb you are about to run, not withstanding that on the return from the beach on the other side of the bridge there is the infamous \u0026ldquo;sand ladder\u0026rdquo; up from Baker Beach.\nThe run was amazing with well staffed aid stations at every mile with Americans doing what Americans do best who whooping, hollering and hi-5\u0026rsquo;s all round and I loved it, I took water or gatorade at most of the stops yet in spite of what felt like a near constant intake of liquid it was more than 4 hours post race before I needed to use the \u0026ldquo;bathroom\u0026rdquo;. Having passed under the Golden Gate Bridge I\u0026rsquo;d reached the highest point on the run leg, the path was narrow and with athletes coming the other way it was single file in parts, any feeling fatigue or negativity to what I was trying to do instantly evaporated as I passed a fellow escapee who was completing the race on cheetah blades, I certainly had nothing to complain about. The run down to Baker beach was a nice wide trail, followed by the run along the beach to the turnaround point. At this point on the way out you are supposed to run on the soft sand at the top of the beach, returning along the waterline, following those before me and running on the damp sand made life a lot easier, hitting the turnaround I knew the challenge of the sand ladder was ahead along with the climb up to the bridge before the downhill into the finish chute. Running along the waterline was nice, my pace felt fine and I knew I was on course to complete the race, although not having looked at my watch didn\u0026rsquo;t really know how long I\u0026rsquo;d been going.\nRunning up from the waterline to the start of the sand ladder I stayed with my new best friend the whole way up, he was counting the steps out loud as he hit them, thankfully when he hit 200 he either lost count or started to count in his head, I used the cable handrail and posts to help me up, and ensured I hit every wooden step that wasn\u0026rsquo;t buried in sand, it was hard, but then nothing in the race until that point had been especially easy. A smile to the camera guy at the top of the ladder and a final push to the top of the climb and it was all known ground and almost all downhill to the finish.\nAs I ran on the flat I started seeing people running that didn\u0026rsquo;t have EFA numbers on them and were dressed in more sensible running gear, the locals were out in force for their Sunday runs, one of the guys who ran past me telling me \u0026ldquo;You look awesome\u0026rdquo; and we did a Hi-5, he passed me again on the final run into the finish area and it was great for the morale boost. The guys at the final drinks station were shouting / screaming and generally being over the top, it was great, and I was going to finish. Not only was I going to finish, but I was going to complete the race in under 4 hours.\nRunning down the finishing chute was amazing as each person was announced over the line\u0026hellip;.\n\u0026ldquo;\u0026hellip;.this is 989, David Smith from Bourne End wherever the hell that is\u0026hellip;.\u0026rdquo;\nI had done it, I had escaped from Alcatraz and I had loved every minute of it.\n","date":"17 July 2012","externalUrl":null,"permalink":"/posts/2012/07/17/","section":"Posts","summary":"","title":"Escape from Alcatraz","type":"posts"},{"content":"","date":"1 July 2012","externalUrl":null,"permalink":"/fitness/2012/07/","section":"Fitness","summary":"","title":"July 2012","type":"fitness"},{"content":"","date":"1 June 2012","externalUrl":null,"permalink":"/fitness/2012/06/","section":"Fitness","summary":"","title":"June 2012","type":"fitness"},{"content":"","date":"31 May 2012","externalUrl":null,"permalink":"/tags/fedora/","section":"Tags","summary":"","title":"Fedora","type":"tags"},{"content":"Is this the linux desktop that has long been promised and never delivered ?\nOk so ignoring the fact that the linux desktop will probably never be that main stream this is the first I\u0026rsquo;ve used the new Gnome interface. As someone who has used Quicksilver and now Alfred on OSX I can\u0026rsquo;t see what all of the fuss is about to be perfectly honest. I\u0026rsquo;ve never liked navigating into a folder (and sub folder, and sub sub folder) of applications trying to find the right shortcut, hit Apple+Space type in a couple of letters, start the application. Simples.\nSo the new Gnome is nice, I like the way it works, I like especially the way it works out of the box installed on VMware Fusion with no tinkering. The same updates completed as for F16 and that\u0026rsquo;s the VMware tools installed so my mouse is free to move in and out of the window, copy and paste between guest and host works, and well to be honest it just works.\nI\u0026rsquo;ve also installed Cinnamon on the recommendation of Richard Morrell, and again it just works, and it works great. I certainly know what I\u0026rsquo;d be loading on to a machine as my default OS if I ever went back to PC hardware, and I wouldn\u0026rsquo;t be too upset to do so (probably).\nClearly I\u0026rsquo;ve not really used in anger yet, that comes later, but initial signs are certainly promising\u0026hellip;..\n","date":"31 May 2012","externalUrl":null,"permalink":"/posts/2012/05/31/","section":"Posts","summary":"","title":"OSX, Fedora 17","type":"posts"},{"content":"","date":"31 May 2012","externalUrl":null,"permalink":"/tags/vmware/","section":"Tags","summary":"","title":"Vmware","type":"tags"},{"content":"","date":"5 May 2012","externalUrl":null,"permalink":"/tags/openshift-origin/","section":"Tags","summary":"","title":"Openshift-Origin","type":"tags"},{"content":"So with the news that Redhat have released OpenShift (PaaS) to opensource under the name of OpenShift Origin I thought I\u0026rsquo;d take a look having played with the service over the last six months (along with Heroku for some Ruby tinkering) I grabbed a copy of the ISO and had a look using the Live CD, thought it looked interesting, went to install and it decided it didn\u0026rsquo;t want to work with the drive set up on VMWare Fusion on OSX.\nBack to square none.\nDownload Fedora Project 16 64bit and run it up in VMWare (On MacBook Air I gave it 2Gb RAM / Single Processor and 20Gb HDD space)\nSide Note to get VMWare Tools working:\nFrom the terminal\nsudo yum update Reboot to ensure you are using the latest installed kernel\nsudo yum install gcc make kernel-devel perl You should now have everything in place to install the VMWare Tools (Happy Days)\nInstalling cinnamon to make it look pretty (although I\u0026rsquo;m yet to get gnome working in anything other than fallback mode on VMWare) - I mainly do this as one day I will get it working or VMWare will get updated\nsudo curl http://repos.fedorapeople.org/repos/leigh123linux/cinnamon/fedora-cinnamon.repo -o /etc/yum.repos.d/fedora-cinnamon.repo sudo yum install cinnamon And then on to the real work\u0026hellip;\nInstalling OpenShift Origin from the official doco ;-) Will update with progress once I\u0026rsquo;ve worked through it\u0026hellip;.\nOf course I\u0026rsquo;m not sure what I\u0026rsquo;ll use it for, but it\u0026rsquo;s good to play.\n","date":"5 May 2012","externalUrl":null,"permalink":"/posts/2012/05/05/","section":"Posts","summary":"","title":"OSX, Fedora 16, a bit of spice and OpenShift Origin","type":"posts"},{"content":"","date":"3 May 2012","externalUrl":null,"permalink":"/tags/cloud/","section":"Tags","summary":"","title":"Cloud","type":"tags"},{"content":"So a new blog this way comes, written by Richard Morrell who is the Cloud Evangelist, only four posts in and the articles / posts are already well worth the time investment. Definitely a blog to keep an eye and with the promise of podcasts coming soon with movers, shakers and those that just use The Cloud as well as stunning insight from someone who lives and breathes Open Source I can heartily recommend it.\nOf course it helps that Richard is also a good egg as well ;-)\n","date":"3 May 2012","externalUrl":null,"permalink":"/posts/2012/05/03/","section":"Posts","summary":"","title":"Need to know about The Cloud ?","type":"posts"},{"content":"","date":"3 May 2012","externalUrl":null,"permalink":"/tags/red-hat/","section":"Tags","summary":"","title":"Red-Hat","type":"tags"},{"content":"","date":"1 May 2012","externalUrl":null,"permalink":"/fitness/2012/05/","section":"Fitness","summary":"","title":"May 2012","type":"fitness"},{"content":"","date":"11 April 2012","externalUrl":null,"permalink":"/tags/cms/","section":"Tags","summary":"","title":"Cms","type":"tags"},{"content":"","date":"11 April 2012","externalUrl":null,"permalink":"/tags/pyrocms/","section":"Tags","summary":"","title":"Pyrocms","type":"tags"},{"content":"So in trying to get PyroCMS up and running on Rackspace Cloud Sites I came across an issue with removing index.php from the URL\nAfter much time wasted in tinkering and playing I found the solution, adding in a / before the index.php in line 42 of the .htaccess file solved the issue and my sanity.\nRewriteRule ^(.*)$ /index.php?/$1 [L]\n","date":"11 April 2012","externalUrl":null,"permalink":"/posts/2012/04/11/","section":"Posts","summary":"","title":"PyroCMS on Rackspace Cloud Sites","type":"posts"},{"content":"","date":"11 April 2012","externalUrl":null,"permalink":"/tags/rackspace/","section":"Tags","summary":"","title":"Rackspace","type":"tags"},{"content":"So I\u0026rsquo;m not a person who for whatever reason has really used an IDE (Integrated Development Environment) when coding. When I first started out, more than a few years ago, I crafted my HTML by hand, and when it came to writing my first PERL code using the Camel book to guide me I used Textpad. Moving on from there, the languages I coded changed (PHP, CFML, LotusScript, ASP, JavaScript, JSP), the environment I worked on changed as well (Windows 95, 98, XP, Fedora, OSX) but the power of the editor remained unchanged, multiple tabs, save collections of files as projects, a bit if syntax highlighting and I was happy. (Easily pleased almost)\nAnd that continued until very recently, yes I migrated to using TextMate or Coda depending on how the mood took me, but it was still very \u0026ldquo;simple\u0026rdquo; work, I never really challenged the editor or pushed it that hard (and probably still don\u0026rsquo;t)\nThe main change now is that I use Sublime Text 2 and for once I\u0026rsquo;ve gone a bit further than just using the default settings, I\u0026rsquo;ve done the obvious thing and skinned it ;-) but then I\u0026rsquo;ve also added in the Sublime Package Manager and have installed the following packages (for reference) :\nAdditional PHP Snippets Alignment CodeIgniter Snippets Docblockr LESS PHPcs PHPDocumentor RubyTest SublimeCodeIntel Sublimelint Soda - Theme ZenCoding I used the following two sites (here and here) to get me going and without them would probably be still using TextMate or Coda and not working so nearly as effectively.\n","date":"6 April 2012","externalUrl":null,"permalink":"/posts/2012/04/06/","section":"Posts","summary":"","title":"Changing the way I work","type":"posts"},{"content":"","date":"6 April 2012","externalUrl":null,"permalink":"/tags/ide/","section":"Tags","summary":"","title":"Ide","type":"tags"},{"content":"","date":"6 April 2012","externalUrl":null,"permalink":"/tags/text-editor/","section":"Tags","summary":"","title":"Text-Editor","type":"tags"},{"content":"","date":"1 April 2012","externalUrl":null,"permalink":"/fitness/2012/04/","section":"Fitness","summary":"","title":"April 2012","type":"fitness"},{"content":"So all things being equal this would\u0026rsquo;ve been post number 2500, but I\u0026rsquo;ve ditched the old blog, the posts, the comments, the design, the history, for a fresh new start and so this post is not only 2500 but also post 1.\nNothing ever goes away on the Internet Of course as the current generation of students and social types posting those \u0026ldquo;oh so funny\u0026rdquo; photos to Facebook will find out, this being the internet, nothing really disappears. There are a couple of posts (ok 8) from the old version of the site that I have carried across for to this version of the site, they serve a purpose as a reminder to me and my notoriously bad memory, and also there is a chance other people (like you maybe?) will find them useful.\n","date":"28 March 2012","externalUrl":null,"permalink":"/posts/2012/03/28/","section":"Posts","summary":"","title":"2500 and 1","type":"posts"},{"content":"","date":"1 March 2012","externalUrl":null,"permalink":"/fitness/2012/03/","section":"Fitness","summary":"","title":"March 2012","type":"fitness"},{"content":"","date":"1 February 2012","externalUrl":null,"permalink":"/fitness/2012/02/","section":"Fitness","summary":"","title":"February 2012","type":"fitness"},{"content":"","date":"8 January 2012","externalUrl":null,"permalink":"/tags/lion/","section":"Tags","summary":"","title":"Lion","type":"tags"},{"content":"So having recently rebuilt a couple of machines recently I was missing a few of the tweaks that I\u0026rsquo;d used in the past, so here for my future reference are the commands required to disable the Dashboard and also make the Dock appear to be flat.\nUsing Terminal (which can be found under applications-\u0026gt;utilities):\n$ defaults write com.apple.dock no-glass -boolean YES $ defaults write com.apple.dashboard mcx-disabled -boolean YES $ killall Dock\nAnd to re-enable\n$ defaults write com.apple.dock no-glass -boolean NO $ defaults write com.apple.dashboard mcx-disabled -boolean NO $ killall Dock\n","date":"8 January 2012","externalUrl":null,"permalink":"/posts/2012/01/08/","section":"Posts","summary":"","title":"OSX Lion Dashboard and Dock","type":"posts"},{"content":"","date":"1 January 2012","externalUrl":null,"permalink":"/fitness/2012/","section":"Fitness","summary":"","title":"2012","type":"fitness"},{"content":"","date":"1 January 2012","externalUrl":null,"permalink":"/fitness/2012/01/","section":"Fitness","summary":"","title":"January 2012","type":"fitness"},{"content":"","date":"1 December 2011","externalUrl":null,"permalink":"/fitness/2011/12/","section":"Fitness","summary":"","title":"December 2011","type":"fitness"},{"content":"","date":"9 November 2011","externalUrl":null,"permalink":"/tags/ruby/","section":"Tags","summary":"","title":"Ruby","type":"tags"},{"content":"Maybe the dullest subject line ever but it took me a while to get Ruby 1.9.3 installed on my laptop and so here to help me in the future is the secret sauce.\nThis is all on a Lion based machine (clean build, not an upgraded machine)\nDownload and install XCode from the AppStore (Which is easier these days now that the latest version actually installs itself, rather than just downloads. Install RVM: $ bash \u0026lt;\u0026lt; (curl -s https://rvm.beginrescueend.com/install/rvm)\nUpdate your .bash_profile $ echo '[[ -s \u0026quot;$HOME/.rvm/scripts/rvm\u0026quot; ]] \u0026amp;\u0026amp; . \u0026quot;$HOME/.rvm/scripts/rvm\u0026quot; ' \u0026gt;\u0026gt; ~/.bash_profile\nReload .bash_profile (or close and re-open terminal) $ source .bash_profile\nInstall Ruby 1.9.3 $ rvm install 1.9.3 --with-gcc=clang\nSet Ruby 1.9.3 to be your default $ rvm --default 1.9.3\nAnd check using $ ruby -v\nAnd then install Rails $ rvm install rails\nUpdate: Since originally writing this post I\u0026rsquo;ve switched to using JewelryBox instead, a nice GUI that makes the whole process a lot easier. (Especially if you need to develop off different versions of Ruby for whatever reason)\n","date":"9 November 2011","externalUrl":null,"permalink":"/posts/2011/11/09/","section":"Posts","summary":"","title":"RVM, Lion and XCode 4.2","type":"posts"},{"content":"","date":"9 November 2011","externalUrl":null,"permalink":"/tags/xcode/","section":"Tags","summary":"","title":"Xcode","type":"tags"},{"content":"","date":"1 November 2011","externalUrl":null,"permalink":"/fitness/2011/11/","section":"Fitness","summary":"","title":"November 2011","type":"fitness"},{"content":"","date":"1 October 2011","externalUrl":null,"permalink":"/fitness/2011/10/","section":"Fitness","summary":"","title":"October 2011","type":"fitness"},{"content":"","date":"1 September 2011","externalUrl":null,"permalink":"/fitness/2011/09/","section":"Fitness","summary":"","title":"September 2011","type":"fitness"},{"content":"So recently I needed to add SSL capability to an Amazon Elastic Load Balancer (ELB) which actually meant :\n- Get the certificate, having created a new CSR and Private key on the machine of your choice - Uploading the Private key, CSR and Certificate into Amazon using Amazon Web Services (AWS) Identity and Access Management service (IAM)\nSo the first challenge was getting the command line tools and creating the relevant identity files.\nDownload the AWS command line tools and put them somewhere you want to use them from, I put them in /use/local/IAMCLI which I then added to my .bash_profile using the settings below (this bit is optional, but makes your life easier):\n# Added for AWS CLI export AWS_IAM_HOME=/usr/local/IAMCli export PATH=${AWS_IAM_HOME}/bin:$PATH export AWS_CREDENTIAL_FILE=${HOME}/path_to_credential_file/credential_file\nThe AWS_CREDENTIAL_FILE is as below and the information to put in the file you get from the \u0026ldquo;Security Credentials\u0026rdquo; tab under your account settings, add in the ID of the access key you want to use, and click on \u0026ldquo;show\u0026rdquo; to reveal the key to use, create the file and ensure you put it in the location you added into your .bash_profile. Observant people will notice this doesn\u0026rsquo;t work if you deal with multiple AWS accounts, you can always use the optional -aws-credential-file when using the command line tools to point to the credential file you want to use.\nAWSAccessKeyId=STUPID_LONG_ID AWSSecretKey=Stupid_long_key\nTo upload the certificate:\n$ iam-servercertupload -b public-key.pem -c .cert-chain-file.pem -k private-key.pem -s domain.name\nTo check the certificate is in place:\n$ iam-servercertgetattributes -s domain.name\nAnd should you need to delete the certificate:\n$ iam-servercertdel -s domain.name\nNow when you create the ELB, select \u0026ldquo;Secure HTTP Server\u0026rdquo; from the common applications list and save, then when you continue to the next page you should be given the option to \u0026ldquo;Choose from your existing SSL Certificates\u0026rdquo;\n","date":"16 August 2011","externalUrl":null,"permalink":"/posts/2011/08/16/","section":"Posts","summary":"","title":"Adding an SSL cert to an Amazon ELB","type":"posts"},{"content":"","date":"16 August 2011","externalUrl":null,"permalink":"/tags/ssl/","section":"Tags","summary":"","title":"Ssl","type":"tags"},{"content":"","date":"1 August 2011","externalUrl":null,"permalink":"/tags/adobe/","section":"Tags","summary":"","title":"Adobe","type":"tags"},{"content":"So for a while I\u0026rsquo;d had issues with Adobe Air applications sometimes working other times not, and due to the infrequency with which I used Air based applications I had largely ignored the problem, however today I need to use Mockups and this I meant I had to fix the issue.\nThe solution turned out to be pretty simple, uninstall Air (for good measure) and then install Mockups, simples. So open a terminal session and use the following:\nsudo /Applications/Utilities/Adobe\\ AIR\\Uninstaller.app/Contents/MacOS/Adobe\\ AIR\\ Installer -uninstall\nEnter your password when prompted and a few seconds later you get:\nUninstalling Adobe AIR (all versions) done\nRe-install Air, install Mockups, get creative ;-)\nWhy the dull post on something so simple, well I\u0026rsquo;ve had to do this several times now and always have to Google for the best way to uninstall Air on OSX so this time I\u0026rsquo;ve posted here to help me out.\n","date":"1 August 2011","externalUrl":null,"permalink":"/posts/2011/08/01/","section":"Posts","summary":"","title":"Adobe Air","type":"posts"},{"content":"","date":"1 August 2011","externalUrl":null,"permalink":"/fitness/2011/08/","section":"Fitness","summary":"","title":"August 2011","type":"fitness"},{"content":"","date":"1 August 2011","externalUrl":null,"permalink":"/tags/mockups/","section":"Tags","summary":"","title":"Mockups","type":"tags"},{"content":"","date":"1 July 2011","externalUrl":null,"permalink":"/fitness/2011/07/","section":"Fitness","summary":"","title":"July 2011","type":"fitness"},{"content":"","date":"1 June 2011","externalUrl":null,"permalink":"/fitness/2011/06/","section":"Fitness","summary":"","title":"June 2011","type":"fitness"},{"content":"","date":"1 May 2011","externalUrl":null,"permalink":"/fitness/2011/05/","section":"Fitness","summary":"","title":"May 2011","type":"fitness"},{"content":"","date":"1 April 2011","externalUrl":null,"permalink":"/fitness/2011/04/","section":"Fitness","summary":"","title":"April 2011","type":"fitness"},{"content":"","date":"1 March 2011","externalUrl":null,"permalink":"/fitness/2011/03/","section":"Fitness","summary":"","title":"March 2011","type":"fitness"},{"content":"","date":"1 February 2011","externalUrl":null,"permalink":"/fitness/2011/02/","section":"Fitness","summary":"","title":"February 2011","type":"fitness"},{"content":"","date":"1 January 2011","externalUrl":null,"permalink":"/fitness/2011/","section":"Fitness","summary":"","title":"2011","type":"fitness"},{"content":"","date":"1 January 2011","externalUrl":null,"permalink":"/fitness/2011/01/","section":"Fitness","summary":"","title":"January 2011","type":"fitness"},{"content":"","date":"1 December 2010","externalUrl":null,"permalink":"/fitness/2010/12/","section":"Fitness","summary":"","title":"December 2010","type":"fitness"},{"content":"","date":"1 November 2010","externalUrl":null,"permalink":"/fitness/2010/11/","section":"Fitness","summary":"","title":"November 2010","type":"fitness"},{"content":"","date":"1 September 2010","externalUrl":null,"permalink":"/fitness/2010/09/","section":"Fitness","summary":"","title":"September 2010","type":"fitness"},{"content":"","date":"1 August 2010","externalUrl":null,"permalink":"/fitness/2010/08/","section":"Fitness","summary":"","title":"August 2010","type":"fitness"},{"content":"","date":"1 July 2010","externalUrl":null,"permalink":"/fitness/2010/07/","section":"Fitness","summary":"","title":"July 2010","type":"fitness"},{"content":"","date":"1 June 2010","externalUrl":null,"permalink":"/fitness/2010/06/","section":"Fitness","summary":"","title":"June 2010","type":"fitness"},{"content":"","date":"1 May 2010","externalUrl":null,"permalink":"/fitness/2010/05/","section":"Fitness","summary":"","title":"May 2010","type":"fitness"},{"content":"","date":"1 April 2010","externalUrl":null,"permalink":"/fitness/2010/04/","section":"Fitness","summary":"","title":"April 2010","type":"fitness"},{"content":"","date":"1 March 2010","externalUrl":null,"permalink":"/fitness/2010/03/","section":"Fitness","summary":"","title":"March 2010","type":"fitness"},{"content":"","date":"14 February 2010","externalUrl":null,"permalink":"/tags/zimbra/","section":"Tags","summary":"","title":"Zimbra","type":"tags"},{"content":"Ok going from 6.0.2 -\u0026gt; 6.0.5 NE on RHEL 4.x (Yes I know that the next major version won\u0026rsquo;t support 4.x) and I was hoping for a nice smooth upgrade, the previous SSL Comercial cert problems now showing as fixed in the bugtracker, however at the end of the process and I\u0026rsquo;m getting the same \u0026ldquo;Expired Cert\u0026rdquo; warning messages from email clients and the like\u0026hellip;.\nSo as root\ncd /opt/zimbra/ssl/zimbra /opt/zimbra/bin/zmcertmgr deploycrt comm commercial.6.0.2/commercial/commercial.crt commercial.6.0.2/commercial/commercial_ca.crt\nRestart the services using ZMProv and all is good.\n","date":"14 February 2010","externalUrl":null,"permalink":"/posts/2010/02/14/","section":"Posts","summary":"","title":"Zimbra Upgrade (Take Two)","type":"posts"},{"content":"","date":"1 February 2010","externalUrl":null,"permalink":"/fitness/2010/02/","section":"Fitness","summary":"","title":"February 2010","type":"fitness"},{"content":"Well with the snow came the abuse of the company VPN (will post more about that later) and some sofa / server time.\nThe least shocking element was the amount of work I could get down with a 3 year old and 6 week old in the house, easier to work from the sofa (no office yet) and less distractions than being the office\u0026hellip;\nSo it was time to build some servers, I\u0026rsquo;ve got SonicWalls Global Management System and ManageSoft all requiring servers, also as we change things around the way we build and use servers will be changing, so I had three servers to build, (well four when we take into account the new development server for the in house digital team)\nWindows 2K3 (64Bit) and SQL 2K5 Server for ManageSoft and SGMS usage 2) 2 x Windows 2K3 (32Bit) for ManageSoft ECM and SGMS 3) RHEL 5.4 Server for dev. The windows servers were pretty simple. Build a new server, fully patch, then clone to a template, then join the server to AD with it\u0026rsquo;s new name and carry on with the specific requirements for the server.\nNext server. Use the fully patched template you\u0026rsquo;ve just created for your shiny new server, join to AD and you\u0026rsquo;re done, new server in under 10 minutes, sit back and rejoice at your new power\u0026hellip;. repeat.\nThree servers created in the time it would take you to create one new server.\nDid the same with RHEL, so now I have my four new servers and three templates to enable me to deploy a new instance in under 10 minutes.\nNice having uninterrupted time to get stuff done - also printed out the manuals for the NSA2400 / SGMS / SSL-VPN, time to get reading\u0026hellip;. and shortly re-configuring the NSA to make the most of the new power (before deploying to the other new NSA units via SGMS\u0026hellip;)\n\u0026ldquo;I have a cunning plan m\u0026rsquo;lord\u0026hellip;\u0026rdquo;\n","date":"10 January 2010","externalUrl":null,"permalink":"/posts/2010/01/10/","section":"Posts","summary":"","title":"VMWare Server Build","type":"posts"},{"content":"","date":"1 January 2010","externalUrl":null,"permalink":"/fitness/2010/","section":"Fitness","summary":"","title":"2010","type":"fitness"},{"content":"","date":"1 January 2010","externalUrl":null,"permalink":"/fitness/2010/01/","section":"Fitness","summary":"","title":"January 2010","type":"fitness"},{"content":"","date":"5 December 2009","externalUrl":null,"permalink":"/tags/iscsi/","section":"Tags","summary":"","title":"Iscsi","type":"tags"},{"content":"So it was time to replace the home Mac Mini, it had done sterling work as the main home machine serving as a home for all of our photos, music and used for general surfing, but it was certainly slowing down, the upgrade to Snow Leopard had gone well and helped prolong its life but the signs were there, time for something new and shiny.\nThe Mini was sitting on top of 2 x 1Tb Iomega Minimax drives which gave a useful number of extra USB boots and made for a neat tower / shrine. One drive was data the other was the time machine backup, but things had moved on, I now had a QNAP TS-439 with 4 x 2Tb (1863Gb Actual) drives installed and configured as RAID 6 (3664Gb usable) so there was plenty of storage to be had and the potential ability to recover from two drives failing.\nI configured a number of iSCSI targets and using the Studio Solutions GlobalSAN iSCSI initiator connected up. This was a very simple, one minutes process and having done the same under Windows using the MicroSoft iSCSI initiator I know which I\u0026rsquo;d prefer to use in future.\nI copied the data across into the relevant targets, music, photos and then setup backup using time machine to do the applications, user account and everything else other than the music and pics. To ensure everything worked I quickly re-opened iTunes and iPhoto and changed the library to the iSCSI targets, all was working lovely. Time taken to setup, 10 minutes, time to copy the data about 4 hours in total.\nNow the migration, shut down the mac mini, spend an hour moving all the kit around and tidying up the wires and then for the moment of truth. Fire up the new mac, register and ignore the migration assistant for now. Once the mac is running I downloaded the initiator and installed, setup the connections to the iSCSI targets, open iPhoto and iTunes and point the applications to the iSCSI data and all was good. Just the application migration to go.\nI opened up the ever so handy OSX Migration Assistant, pointed it at the time machine backup and recovered the old account data and applications on to the machine as a new account, logged out, logged in as the recovered account and the migration was done.\nWork done, about 10 minutes, time taken 5 hours of data transfer backwards and forwards.\nJob done, no problems and no fuss, technology as it should be.\n","date":"5 December 2009","externalUrl":null,"permalink":"/posts/2009/12/05/","section":"Posts","summary":"","title":"OSX Migration","type":"posts"},{"content":"","date":"1 December 2009","externalUrl":null,"permalink":"/fitness/2009/12/","section":"Fitness","summary":"","title":"December 2009","type":"fitness"},{"content":"Note: I originally posted this on a different website, but have since re-purposed that site, and having had this post help me out twice I figure it was worth keeping ;-)\nUpdate: Bug 41683 is now showing as fixed in 6.0.4\nSo last night was the chosen time to upgrade the Zimbra install at work, all offices were shut, most people shouldn\u0026rsquo;t be working and if they were then an hour without email shouldn\u0026rsquo;t be too much to have to cope with.\nWith offices in San Francsico and also Dubai the time when server changes that impact everyone can be made is from midnight Friday through to 05:00 on Sunday morning (Dubai has Friday and Saturday as its weekend)\nAll seemed to go fine with the upgrade until I checked the installed certificate, this had reverted to an earlier, now expired cert. Using the admin interface to attempt a reinstall with newer server certificate failed with:\nInvalid Request Message: invalid request: missing required attribute: server Error code: service.INVALID_REQUEST Method: GetCertRequest Details:soap:Sender\nSo a quick hunt around the support forums, a bit of googling later and with no obvious answer found (and an impending deadline) it was time to log a support ticket.\nShortly the landline rang and it was time to give over access of the mail server to Zimbra support to have a look and fix the problem. 10 Minutes later and all was sorted. It was a known bug (42216 / 41683) which is due to be fixed in 6.0.4\nHowever the interim solution is to redeploy the commercial cert. cd /opt/zimbra/ssl/zimbra/commercial /opt/zimbra/bin/zmcertmgr verifycrt comm ./commercial.key ./commercial.crt ./commercial_ca.crt Then if all looks good: /opt/zimbra/bin/zmcertmgr deploycrt comm ./commercial.crt ./commercial_ca.crt\nAnd you\u0026rsquo;re back up and running with the correctly installed commercial certificate.\nHopefully this is useful to someone, will probably need this again for the 6.0.3 upgrade\n","date":"22 November 2009","externalUrl":null,"permalink":"/posts/2009/11/22/","section":"Posts","summary":"","title":"Zimbra upgrade","type":"posts"},{"content":"","date":"1 November 2009","externalUrl":null,"permalink":"/fitness/2009/11/","section":"Fitness","summary":"","title":"November 2009","type":"fitness"},{"content":"","date":"1 October 2009","externalUrl":null,"permalink":"/fitness/2009/10/","section":"Fitness","summary":"","title":"October 2009","type":"fitness"},{"content":"So I finally managed to spend some time over the last few days on sorting out the 7 VMWare servers we have in the London (Main) office and more specifically get a free server available so that I could retire a VMWare server that couldn\u0026rsquo;t be upgraded to the latest version of VSPhere.\nCourse of action was simple.\n- Install a new management server as a physical machine - Move all existing VMWare servers under the control of the new management server - Profit.\nNot quite that simple, until I had upgraded a server to VSPhere it couldn\u0026rsquo;t be managed by the new VCenter Server as it didn\u0026rsquo;t have the old 3.5x license server running.\nSo it took a bit of moving instances around the various servers and gradually upgrading all servers to VSPhere.\nOnce I\u0026rsquo;d worked out the correct order to move all of the servers around without killing anything it was time to get started, I moved all of the already upgraded servers under the control of the new VCenter Server, and then migrated the BDC and PDC from VMWare servers that needed upgrading, this meant I was left with two 3.5x boxes to upgrade one of which was running the old VCenter Server with the 3.5 license manager.\nI shut down the old VCenter Server and migrated into on to an already upgraded VMWare Server then set to work upgrading the last two servers.\nAll very simple, just required a bit of planning to ensure I didn\u0026rsquo;t end up with a 3.5x server that I couldn\u0026rsquo;t do anything with as the license server wasn\u0026rsquo;t available (I\u0026rsquo;ve got around this issue before using an emergency local license but it is a problem best avoided.)\nSo I now have 7 VMWare servers all running the latest version of VSPhere (well 3 of them will be auto updating using the update manager over the weekend) and a physical install of the Virtual Center Server.\nI\u0026rsquo;m happier that the main management machine is a physical box as it makes life easier doing updates.\nNow to set about getting in the extra kit to go HA ;-)\n","date":"25 September 2009","externalUrl":null,"permalink":"/posts/2009/09/25/","section":"Posts","summary":"","title":"VMWare-tastic","type":"posts"},{"content":"","date":"1 September 2009","externalUrl":null,"permalink":"/fitness/2009/09/","section":"Fitness","summary":"","title":"September 2009","type":"fitness"},{"content":"","date":"1 August 2009","externalUrl":null,"permalink":"/fitness/2009/08/","section":"Fitness","summary":"","title":"August 2009","type":"fitness"},{"content":"","date":"1 July 2009","externalUrl":null,"permalink":"/fitness/2009/07/","section":"Fitness","summary":"","title":"July 2009","type":"fitness"},{"content":"","date":"1 June 2009","externalUrl":null,"permalink":"/fitness/2009/06/","section":"Fitness","summary":"","title":"June 2009","type":"fitness"},{"content":"","date":"1 April 2009","externalUrl":null,"permalink":"/fitness/2009/04/","section":"Fitness","summary":"","title":"April 2009","type":"fitness"},{"content":"","date":"1 March 2009","externalUrl":null,"permalink":"/fitness/2009/03/","section":"Fitness","summary":"","title":"March 2009","type":"fitness"},{"content":"","date":"1 February 2009","externalUrl":null,"permalink":"/fitness/2009/02/","section":"Fitness","summary":"","title":"February 2009","type":"fitness"},{"content":"","date":"1 January 2009","externalUrl":null,"permalink":"/fitness/2009/","section":"Fitness","summary":"","title":"2009","type":"fitness"},{"content":"","date":"1 January 2009","externalUrl":null,"permalink":"/fitness/2009/01/","section":"Fitness","summary":"","title":"January 2009","type":"fitness"},{"content":"","date":"1 November 2008","externalUrl":null,"permalink":"/fitness/2008/11/","section":"Fitness","summary":"","title":"November 2008","type":"fitness"},{"content":"","date":"1 October 2008","externalUrl":null,"permalink":"/fitness/2008/10/","section":"Fitness","summary":"","title":"October 2008","type":"fitness"},{"content":"","date":"1 September 2008","externalUrl":null,"permalink":"/fitness/2008/09/","section":"Fitness","summary":"","title":"September 2008","type":"fitness"},{"content":"","date":"1 July 2008","externalUrl":null,"permalink":"/fitness/2008/07/","section":"Fitness","summary":"","title":"July 2008","type":"fitness"},{"content":"","date":"1 May 2008","externalUrl":null,"permalink":"/fitness/2008/05/","section":"Fitness","summary":"","title":"May 2008","type":"fitness"},{"content":"","date":"1 January 2008","externalUrl":null,"permalink":"/fitness/2008/","section":"Fitness","summary":"","title":"2008","type":"fitness"},{"content":"","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","externalUrl":null,"permalink":"/fitness/charts/","section":"Fitness","summary":"","title":"Fitness Charts","type":"fitness"},{"content":"","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"}]