<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts on Yesterday I was wrong</title>
    <link>/posts/</link>
    <description>Recent content in Posts on Yesterday I was wrong</description>
    <generator>Hugo</generator>
    <language>en-gb</language>
    <lastBuildDate>Thu, 19 Feb 2026 12:00:00 +0000</lastBuildDate>
    <atom:link href="/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Capsper: I turned CapsLock into a ghost writer</title>
      <link>/2026/02/19/capsper-push-to-talk-voice-dictation-for-linux/</link>
      <pubDate>Thu, 19 Feb 2026 12:00:00 +0000</pubDate>
      <guid>/2026/02/19/capsper-push-to-talk-voice-dictation-for-linux/</guid>
      <description>&lt;p&gt;Does CapsLock annoy you? Ever wished it actually did something useful instead of SHOUTING AT PEOPLE BY ACCIDENT?&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/danielbodart/capsper&#34; target=&#34;_blank&#34;&gt;Capsper&lt;/a&gt; is push-to-talk voice dictation for Linux. Hold CapsLock, speak, release. Text appears wherever your cursor is. No cloud, no subscription, no Electron app phoning home. Just your GPU doing what GPUs were meant to do.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-pitch&#34;&gt;The pitch&lt;/h2&gt;&#xA;&lt;p&gt;~2 second latency between speaking and words appearing on screen. Runs entirely on your machine. Works on both X11 and Wayland. Single binary, no dependencies to manage, no Python runtime, no Docker container. You download it, run the installer, and CapsLock becomes useful for the first time in its miserable existence.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Chrome WebGL not working with NVIDIA RTX 5070 Ti on Linux</title>
      <link>/2025/02/04/chrome-webgl-nvidia-rtx-5070-ti-linux/</link>
      <pubDate>Tue, 04 Feb 2025 14:30:00 +0000</pubDate>
      <guid>/2025/02/04/chrome-webgl-nvidia-rtx-5070-ti-linux/</guid>
      <description>&lt;p&gt;After upgrading to an NVIDIA RTX 5070 Ti (Blackwell architecture, released January 2025), WebGL stopped working in Chrome. Sites like &lt;a href=&#34;https://webglreport.com&#34; target=&#34;_blank&#34;&gt;webglreport.com&lt;/a&gt; showed &amp;ldquo;This browser supports WebGL 2, but it is disabled or unavailable.&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;The system-level OpenGL worked fine (&lt;code&gt;glxinfo&lt;/code&gt; showed full OpenGL 4.6 support), so the issue was Chrome-specific.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-problem&#34;&gt;The Problem&lt;/h2&gt;&#xA;&lt;p&gt;Chrome was running with &lt;code&gt;--use-gl=disabled&lt;/code&gt;. You can check this with:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ps aux | grep chrome | grep -oE &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;\-\-use-gl=[^ ]*&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The RTX 5070 Ti and driver 580.x are so new that Chrome&amp;rsquo;s GPU blocklist doesn&amp;rsquo;t recognise them, so it defaults to disabling GL entirely.&lt;/p&gt;</description>
    </item>
    <item>
      <title>BlackMagic ATEM Mini Linux Software</title>
      <link>/2022/07/12/blackmagic-atem-mini-linux-software/</link>
      <pubDate>Tue, 12 Jul 2022 14:56:42 +0000</pubDate>
      <guid>/2022/07/12/blackmagic-atem-mini-linux-software/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://openswitcher.org/&#34; target=&#34;_blank&#34;&gt;https://openswitcher.org/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubunutu Background Noise Cancellation</title>
      <link>/2022/06/14/ubunutu-background-noise-cancellation/</link>
      <pubDate>Tue, 14 Jun 2022 19:35:09 +0000</pubDate>
      <guid>/2022/06/14/ubunutu-background-noise-cancellation/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/josh-richardson/cadmus&#34; target=&#34;_blank&#34;&gt;https://github.com/josh-richardson/cadmus&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>A practical introduction to NTFs</title>
      <link>/2021/11/17/a-practical-introduction-to-ntfs/</link>
      <pubDate>Wed, 17 Nov 2021 22:19:46 +0000</pubDate>
      <guid>/2021/11/17/a-practical-introduction-to-ntfs/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been doing some NFT research for myself, but though I would share in case one else finds some value.&lt;/p&gt;&#xA;&lt;p&gt;30 second intro to NFTs: https://niftygateway.com/whatisanifty&lt;/p&gt;&#xA;&lt;p&gt;In depth description of an NFT (and lots more information): https://blog.opensea.io/guides/non-fungible-tokens/#What_is_a_non-fungible_token&lt;/p&gt;&#xA;&lt;p&gt;So the next thing to understand is that in the world of cryptocurrencies there are many different ones. Bitcoin is probably the one you have heard about but there are literally thousands:&lt;br&gt;&#xA;&lt;a href=&#34;https://coinmarketcap.com/&#34; target=&#34;_blank&#34;&gt;https://coinmarketcap.com/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The second biggest cryptocurrency is called Ethereum and it is also the largest market for NFTs (via https://opensea.io/ or https://niftygateway.com/)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu &#43; OBS Studio &#43; Intel Hardware Encoding (VAAPI)</title>
      <link>/2021/02/27/ubuntu-obs-studio-intel-hardware-encoding-vaapi/</link>
      <pubDate>Sat, 27 Feb 2021 09:21:07 +0000</pubDate>
      <guid>/2021/02/27/ubuntu-obs-studio-intel-hardware-encoding-vaapi/</guid>
      <description>&lt;p&gt;So I had installed the latest version of OBS Studio (26.x) from the official channels but when I went to the output mode it only listed software encoding. In the logs it mentioned FFMPEG-VAAPI but wasn&amp;rsquo;t using it as any recording was using 30%-50% CPU on a low powered laptop.&lt;/p&gt;&#xA;&lt;p&gt;In Settings -&amp;gt; Output change Outmode to Advanced (from Simple) then on Streaming -&amp;gt; Encoder change that to FFMPEG VAAPI (Recoding should just be set to use Streaming Encoder which is the default)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sortable UUIDs -&gt; ULID and KSUID</title>
      <link>/2020/10/07/sortable-uuids-ulid-and-ksuid/</link>
      <pubDate>Wed, 07 Oct 2020 07:40:34 +0000</pubDate>
      <guid>/2020/10/07/sortable-uuids-ulid-and-ksuid/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/ulid/spec&#34; target=&#34;_blank&#34;&gt;https://github.com/ulid/spec&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/segmentio/ksuid&#34; target=&#34;_blank&#34;&gt;https://github.com/segmentio/ksuid&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fast ML model building</title>
      <link>/2020/06/11/fast-ml-model-building/</link>
      <pubDate>Thu, 11 Jun 2020 17:01:57 +0000</pubDate>
      <guid>/2020/06/11/fast-ml-model-building/</guid>
      <description>&lt;p&gt;PyCaret -&amp;gt; &lt;a href=&#34;https://pycaret.org/&#34; target=&#34;_blank&#34;&gt;https://pycaret.org/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Remote Working Links</title>
      <link>/2020/03/20/remote-working-links/</link>
      <pubDate>Fri, 20 Mar 2020 20:13:03 +0000</pubDate>
      <guid>/2020/03/20/remote-working-links/</guid>
      <description>&lt;p&gt;Special thanks to &lt;a href=&#34;https://scottmuc.com/&#34; target=&#34;_blank&#34;&gt;Scott Muc&lt;/a&gt; and S+C. Please post more links in the comments and I&amp;rsquo;ll add them in&lt;/p&gt;&#xA;&lt;h2 id=&#34;guides--playbooks&#34;&gt;&lt;strong&gt;Guides / Playbooks&lt;/strong&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Leading in crisis: Setting up for remote success&lt;br&gt;&#xA;&lt;a href=&#34;https://www.thoughtworks.com/remote-work-playbook&#34; target=&#34;_blank&#34;&gt;https://www.thoughtworks.com/remote-work-playbook&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Remote First in Tes Technology&lt;br&gt;&#xA;&lt;a href=&#34;https://engineering.tes.com/how-we-work/remote/&#34; target=&#34;_blank&#34;&gt;https://engineering.tes.com/how-we-work/remote/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;How to Work Remotely and Still Be the Best&lt;br&gt;&#xA;&lt;a href=&#34;http://www.toptal.com/freelance/how-to-work-remotely-and-still-be-the-best&#34; target=&#34;_blank&#34;&gt;http://www.toptal.com/freelance/how-to-work-remotely-and-still-be-the-best&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Smart Home: 10 Tips for Working Remotely - Postlight - Digital Product Studio&lt;br&gt;&#xA;&lt;a href=&#34;https://postlight.com/trackchanges/podcast/smart-home-10-tips-for-working-remotely&#34; target=&#34;_blank&#34;&gt;https://postlight.com/trackchanges/podcast/smart-home-10-tips-for-working-remotely&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;A guide to distributed work&lt;br&gt;&#xA;&lt;a href=&#34;https://jakemccrary.com/blog/2017/10/31/a-guide-to-distributed-work/&#34; target=&#34;_blank&#34;&gt;https://jakemccrary.com/blog/2017/10/31/a-guide-to-distributed-work/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;remote - Digital Digressions by Stuart Sierra&lt;br&gt;&#xA;&lt;a href=&#34;https://stuartsierra.com/tag/remote&#34; target=&#34;_blank&#34;&gt;https://stuartsierra.com/tag/remote&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;47 Insanely Practical Work From Home Tips from Our 100% Remote Team&lt;br&gt;&#xA;&lt;a href=&#34;https://www.groovehq.com/blog/work-from-home&#34; target=&#34;_blank&#34;&gt;https://www.groovehq.com/blog/work-from-home&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fix screen tearing on Razor Stealth (Late 2019) with Ubuntu 19.10</title>
      <link>/2020/02/10/fix-screen-tearing-on-razor-stealth-late-2019-with-ubuntu-19-10/</link>
      <pubDate>Mon, 10 Feb 2020 21:09:37 +0000</pubDate>
      <guid>/2020/02/10/fix-screen-tearing-on-razor-stealth-late-2019-with-ubuntu-19-10/</guid>
      <description>&lt;p&gt;So I had my usual problem with screen tearing on Ubuntu 19.10 but instead of my usual switching to Metacity + Compton I wanted to try using Gnome Shell. However Gnome shell doesn&amp;rsquo;t support replacing the compositor.&lt;/p&gt;&#xA;&lt;p&gt;First step is to allow the NVidia driver to support kernel mode setting:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo nano /etc/modprobe.d/zz-nvidia-modeset.conf&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Adding&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;options nvidia-drm modeset=1&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And then&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo update-initramfs -u&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Check with&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo cat /sys/module/nvidia_drm/parameters/modeset&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then add a startup application&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;xrandr --output eDP-1-1 --set &amp;#39;PRIME Synchronization&amp;#39; &amp;#39;1&amp;#39;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Finally switch from gdm3 to lightdm.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Webcam on Razer Stealth Late 2019 with Ubuntu 19.10</title>
      <link>/2020/01/01/webcam-on-razer-stealth-late-2019-with-ubuntu-19-10/</link>
      <pubDate>Wed, 01 Jan 2020 17:37:47 +0000</pubDate>
      <guid>/2020/01/01/webcam-on-razer-stealth-late-2019-with-ubuntu-19-10/</guid>
      <description>&lt;p&gt;Probably the weakest element on the laptop is the Webcam which can output 720p@30fps. By default the low light performance is not that great but you can improve it considerably by trading frame rate for low light performance.&lt;/p&gt;&#xA;&lt;p&gt;First install the Video 4 Linux utils:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo apt install v4l-utils&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now run the following command (the default is 0)&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;v4l2-ctl --set-ctrl=exposure_auto_priority=1&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now we have reduced the noise level considerably you can play with the sharpness levels 0-7 (the default is 3)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Suspend Loop Fix for Razor Stealth Late 2019 with Ubuntu 19.10</title>
      <link>/2020/01/01/suspend-loop-fix-for-razor-stealth-late-2019-with-ubuntu-19-10/</link>
      <pubDate>Wed, 01 Jan 2020 08:11:11 +0000</pubDate>
      <guid>/2020/01/01/suspend-loop-fix-for-razor-stealth-late-2019-with-ubuntu-19-10/</guid>
      <description>&lt;p&gt;I was experiencing a loop where after suspending and resuming the laptop it would go back into suspend over and over again. To fix this just update &lt;code&gt;/etc/default/grub&lt;/code&gt; and add &lt;code&gt;button.lid_init_state=open&lt;/code&gt; to &lt;code&gt;GRUB_CMDLINE_LINUX_DEFAULT&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;GRUB_CMDLINE_LINUX_DEFAULT=&amp;#34;quiet splash button.lid_init_state=open&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I also had to add the following to stop errors during the update&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;GRUB_DISABLE_OS_PROBER=true&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then update GRUB&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo update-grub&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Update:&lt;/p&gt;&#xA;&lt;p&gt;I found that I actually needed to replace gdm3 with lightdm to fix a different issue and this also resolved the suspend problems&lt;/p&gt;</description>
    </item>
    <item>
      <title>Power Management for Razor Stealth Late 2019 (GTX 1650) with Ubuntu 19.10</title>
      <link>/2020/01/01/power-management-for-razor-stealth-late-2019-gtx-1650-with-ubuntu-19-10/</link>
      <pubDate>Wed, 01 Jan 2020 07:55:45 +0000</pubDate>
      <guid>/2020/01/01/power-management-for-razor-stealth-late-2019-gtx-1650-with-ubuntu-19-10/</guid>
      <description>&lt;p&gt;First install &lt;a href=&#34;https://01.org/powertop&#34; target=&#34;_blank&#34;&gt;powertop&lt;/a&gt; and &lt;a href=&#34;https://linrunner.de/en/tlp/docs/tlp-linux-advanced-power-management.html&#34; target=&#34;_blank&#34;&gt;TLP&lt;/a&gt; . We use powertop to estimate power usage when unplugged and TLP to run as a service&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo apt install powertop tlp&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I then did a little tweaking in my &lt;a href=&#34;https://www.linuxbabe.com/linux-server/how-to-enable-etcrc-local-with-systemd&#34; target=&#34;_blank&#34;&gt;/etc/rc.local&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/bin/sh -e&#xA;&#xA;# Temp disable bluetooth&#xA;modprobe -r btusb&#xA;&#xA;# Autosuspend USB Razer Keyboard after 5 minutes &#xA;echo &amp;#39;300000&amp;#39; &amp;gt; &amp;#39;/sys/bus/usb/devices/3-8/power/autosuspend_delay_ms&amp;#39;&#xA;echo &amp;#39;auto&amp;#39; &amp;gt; &amp;#39;/sys/bus/usb/devices/3-8/power/control&amp;#39;&#xA;&#xA;# VM writeback timeout&#xA;echo &amp;#39;1500&amp;#39; &amp;gt; &amp;#39;/proc/sys/vm/dirty_writeback_centisecs&amp;#39;;&#xA;&#xA;exit 0&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Lastly switch from NVidia GTX 1650 to the Intel Iris Pro&lt;/p&gt;</description>
    </item>
    <item>
      <title>Microbit via WebUSB on Ubuntu 18.04</title>
      <link>/2019/12/30/microbit-via-webusb-on-ubuntu-18-04/</link>
      <pubDate>Mon, 30 Dec 2019 21:09:41 +0000</pubDate>
      <guid>/2019/12/30/microbit-via-webusb-on-ubuntu-18-04/</guid>
      <description>&lt;p&gt;Make sure you are running the &lt;a href=&#34;https://makecode.microbit.org/device/usb/webusb/troubleshoot&#34; target=&#34;_blank&#34;&gt;latest firmware&lt;/a&gt; on the microbit&lt;/p&gt;&#xA;&lt;p&gt;Create a new udev rule&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo nano /etc/udev/rules.d/80-microbit.rules&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;With the following content&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;SUBSYSTEM==&amp;quot;usb&amp;quot;, ATTR{idVendor}==&amp;quot;0d28&amp;quot;, ATTR{idProduct}==&amp;quot;0204&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Then if you want non-admin users to be able to use it (like your kids) run&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo usermod -a -G plugdev non-admin-user&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you are admin you just need to unplug and replug the microbit (the udev rules run on hot-plug), if you are non-admin you will need to logout and back in to get the updated user groups&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu file limits 18.04</title>
      <link>/2019/07/17/ubuntu-file-limits-18-04/</link>
      <pubDate>Wed, 17 Jul 2019 08:04:37 +0000</pubDate>
      <guid>/2019/07/17/ubuntu-file-limits-18-04/</guid>
      <description>&lt;p&gt;sudo nano /etc/systemd/user.conf&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;DefaultLimitNOFILE=65535&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;sudo nano /etc/systemd/system.conf&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;DefaultLimitNOFILE=65535&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;sudo nano /etc/security/limits.conf&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;* hard nofile 65535&#xA;* soft nofile 65535&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;https://superuser.com/questions/1200539/cannot-increase-open-file-limit-past-4096-ubuntu/1200818#1200818&#34; target=&#34;_blank&#34;&gt;Source&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>My side project to try and scale myself: Software Mastery School</title>
      <link>/2019/04/29/my-side-project-to-try-and-scale-myself-software-mastery-school/</link>
      <pubDate>Mon, 29 Apr 2019 18:10:48 +0000</pubDate>
      <guid>/2019/04/29/my-side-project-to-try-and-scale-myself-software-mastery-school/</guid>
      <description>&lt;p&gt;So I&amp;rsquo;ve been working on a little side project for the last couple of weeks to try and create a video based training school to allow myself to scale and maybe not have to repeat myself as much when ever I join a new client.&lt;/p&gt;&#xA;&lt;p&gt;So I decided to take my post on the &lt;a href=&#34;http://dan.bodar.com/2019/02/09/uncommon-sense/&#34; target=&#34;_blank&#34;&gt;Uncommon Sense&lt;/a&gt; and turn that into a &lt;a href=&#34;https://software-mastery.teachable.com/p/uncommon-sense/&#34; target=&#34;_blank&#34;&gt;mini course&lt;/a&gt; to try things out.&lt;/p&gt;&#xA;&lt;p&gt;This was in some ways just an excuse to learn about DSLR filming (read buy some toys), non-linear editing, colour grading etc. Now it&amp;rsquo;s not perfect (the audio isn&amp;rsquo;t great as my shotgun mic wasn&amp;rsquo;t working) but it feels good enough to share.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uncommon Sense</title>
      <link>/2019/02/09/uncommon-sense/</link>
      <pubDate>Sat, 09 Feb 2019 20:27:36 +0000</pubDate>
      <guid>/2019/02/09/uncommon-sense/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Just because something is compelling doesn&amp;rsquo;t mean it&amp;rsquo;s right&lt;/strong&gt;&lt;br&gt;&#xA;i.e. transitive dependencies or the easiest location to add feature X in your codebase&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Plugins are a sign of bad composeability or lack of craftsmanship or both&lt;/strong&gt;&lt;br&gt;&#xA;i.e Ridiculous NPM modules that plugin your test tool into your transpiler into your bundler into your web server or equally insane Spring plugins. Maybe look at the unix way&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Libraries are overused and under understood&lt;/strong&gt;&lt;br&gt;&#xA;i.e most day to day problems are easier to solve from first principles than deciphering the README of some library. &lt;/p&gt;</description>
    </item>
    <item>
      <title>Metacity enable thumbnail preview</title>
      <link>/2018/05/09/metacity-enable-thumbnail-preview/</link>
      <pubDate>Wed, 09 May 2018 10:43:40 +0000</pubDate>
      <guid>/2018/05/09/metacity-enable-thumbnail-preview/</guid>
      <description>&lt;p&gt;gsettings set org.gnome.metacity alt-tab-thumbnails true&lt;/p&gt;</description>
    </item>
    <item>
      <title>Stop screen tearing on Ubuntu by changing compositor</title>
      <link>/2018/02/26/stop-screen-tearing-on-ubuntu-by-changing-compositor/</link>
      <pubDate>Mon, 26 Feb 2018 14:55:37 +0000</pubDate>
      <guid>/2018/02/26/stop-screen-tearing-on-ubuntu-by-changing-compositor/</guid>
      <description>&lt;p&gt;Install Compton (&lt;a href=&#34;https://github.com/chjj/compton/&#34; target=&#34;_blank&#34;&gt;https://github.com/chjj/compton/&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo apt-get install compton &#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Disable existing compositor (I used Metacity with Gnome Flashback)&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;gsettings set org.gnome.metacity compositing-manager false&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Add Compton to &amp;ldquo;Startup Applications&amp;rdquo;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;compton --backend glx --paint-on-overlay --vsync opengl-swc&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>GitHub Get Public Keys for a User</title>
      <link>/2018/02/08/github-get-public-keys-for-a-user/</link>
      <pubDate>Thu, 08 Feb 2018 10:58:49 +0000</pubDate>
      <guid>/2018/02/08/github-get-public-keys-for-a-user/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;https://api.github.com/users/danielbodart/keys&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Will return&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[&#xA;  {&#xA;    &amp;#34;id&amp;#34;: 11647754,&#xA;    &amp;#34;key&amp;#34;: &amp;#34;ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDhoeoQelGjp0Oz3m64SV8AszPTyxlK1jJ8lYlW28WaSK5hu79BemIibekO06P2aA47vhI8hc4R90aqE0Ja1qG6A+jkezn2jeSzZZq7/dvoYFC0i96ljlJTKoOY5E0P4/259giTL1wtMbJrYfFutmVMBidHiOzA1dnLTrZthOuYGlanZL7oazfrz4Ht+ZdvoMoIFqU8yRnW/E903dn2DjH6Wk2dhsdP1QssbOtu3BNguhpcuVksrKw7hqrxCpiJW7Eo7z8yg6qP+KbzGF6G4UmA1/VDn5RFwNC7bvSShirYasEyAOrMHcUiCyvvvtT0a+SlsVfYbyH8wm5Ci38D9HK1&amp;#34;&#xA;  },&#xA;  {&#xA;    &amp;#34;id&amp;#34;: 26992755,&#xA;    &amp;#34;key&amp;#34;: &amp;#34;ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDJDZbFgT04IDx5SECPFnHlJfwq/aHkhGr2sgSl0gqo3fOy48du/DPy4VH5cAk0qiLbT8dfzgMmkQm8EourUidZHORlbfbzzptMhWnbwEQbfXBuVyVa1Us5MV6Y0IV0TDOjNIALi6z3QTqJPtoOOfuRnDoumGCnl7bqxaKNrreoVm2vc7ep6yKuBR9HqDBJ6cN6KZ08IYFWjora1CscwsKC2EP6LWcnLsLVh2x4ZgJI0mDtnQ8hHedWmvQGhcyctKg1WdtcrrsVQESwlwDCiEVK9MypThYdZfVhh8d0JTApw37+QVkDW/oQeSMkKEyfss3wuOCCoGiJmurwM18Q/6V7&amp;#34;&#xA;  }&#xA;]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Should return them in the same order as &lt;a href=&#34;https://github.com/settings/keys&#34; target=&#34;_blank&#34;&gt;https://github.com/settings/keys&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu Theme - Arc or Materia</title>
      <link>/2018/02/06/ark-theme/</link>
      <pubDate>Tue, 06 Feb 2018 14:59:20 +0000</pubDate>
      <guid>/2018/02/06/ark-theme/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# Install Arc soft fork&#xA;sudo add-apt-repository ppa:fossfreedom/arc-gtk-theme-daily&#xA;sudo apt-get install arc-theme&#xA;gsettings set org.gnome.desktop.interface gtk-theme &amp;#39;Arc-Dark&amp;#39;&#xA;&#xA;# Materia&#xA;sudo apt install materia-gtk-theme&#xA;gsettings set org.gnome.desktop.interface gtk-theme &amp;#39;Materia-dark-compact&amp;#39;&#xA;&#xA;# https://github.com/daniruiz/flat-remix&#xA;sudo add-apt-repository ppa:daniruiz/flat-remix&#xA;sudo apt-get install flat-remix&#xA;gsettings set org.gnome.desktop.interface icon-theme &amp;#39;Flat-Remix-Blue-Dark&amp;#39;&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Ubuntu Bash Git Branch Prompt!</title>
      <link>/2018/01/31/ubuntu-bash-git-branch-prompt/</link>
      <pubDate>Wed, 31 Jan 2018 09:04:22 +0000</pubDate>
      <guid>/2018/01/31/ubuntu-bash-git-branch-prompt/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# Git branch in prompt.&#xA;parse_git_branch() {&#xA;    git branch 2&amp;gt; /dev/null | sed -e &amp;#39;/^[^*]/d&amp;#39; -e &amp;#39;s/* \(.*\)/\1/&amp;#39;&#xA;}&#xA;&#xA;export PS1=&amp;#34;${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]:\[\033[32m\]\$(parse_git_branch)\[\033[00m\]\$ &amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This is compatible with the default colour prompt in Ubuntu 16.04, put this in you ~/.bashrc.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://martinfitzpatrick.name/article/add-git-branch-name-to-terminal-prompt-mac/&#34; target=&#34;_blank&#34;&gt;Original version&lt;/a&gt; (non Ubuntu specific)&lt;/p&gt;</description>
    </item>
    <item>
      <title>5 digit remote code for Sony BDP-S370</title>
      <link>/2017/08/08/5-digit-remote-code-for-sony-bdp-s370/</link>
      <pubDate>Tue, 08 Aug 2017 10:57:18 +0000</pubDate>
      <guid>/2017/08/08/5-digit-remote-code-for-sony-bdp-s370/</guid>
      <description>&lt;p&gt;This worked with a cheap Phillips universal remote: 51029&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bitmain&#39;s new payment system is broken for LTC/L3&#43; miner. Support just say wait</title>
      <link>/2017/06/23/bitmains-new-payment-system-is-broken-for-ltcl3-miner-support-just-say-wait/</link>
      <pubDate>Fri, 23 Jun 2017 06:02:59 +0000</pubDate>
      <guid>/2017/06/23/bitmains-new-payment-system-is-broken-for-ltcl3-miner-support-just-say-wait/</guid>
      <description>&lt;p&gt;UPDATE: Bitmain did eventually respond and fix mine and others orders but it took 8 days without any response in between.&lt;/p&gt;&#xA;&lt;p&gt;Quite a few people have recently purchased L3+ miners using LTC. (Previous orders using BTC have worked fine). Bitmain are taking the money but not updating the order status.&lt;/p&gt;&#xA;&lt;p&gt;Their support is not responding to tickets apart from just saying please wait longer (it&amp;rsquo;s been 4 days for me)&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to disable click on a Label with just CSS</title>
      <link>/2017/03/08/how-to-disable-click-on-a-label-with-just-css/</link>
      <pubDate>Wed, 08 Mar 2017 11:34:17 +0000</pubDate>
      <guid>/2017/03/08/how-to-disable-click-on-a-label-with-just-css/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;pointer-events:none;&#xA;display:block;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Display block is required if the label contains other block level elements.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Send data via UPD or TCP without Netcat on Linux/Mac</title>
      <link>/2016/06/09/send-data-via-upd-or-tcp-without-netcat-on-linuxmac/</link>
      <pubDate>Thu, 09 Jun 2016 14:29:39 +0000</pubDate>
      <guid>/2016/06/09/send-data-via-upd-or-tcp-without-netcat-on-linuxmac/</guid>
      <description>&lt;p&gt;I only just found out about this&amp;hellip;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# Send data via TCP to host 127.0.0.1 port 12201&#xA;echo &amp;#34;hello&amp;#34; &amp;gt;/dev/tcp/127.0.0.1/12201&#xA;&#xA;# Send data via UDP to host 127.0.0.1 port 12201&#xA;echo &amp;#34;hello&amp;#34; &amp;gt;/dev/udp/127.0.0.1/12201&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now is there a way to listen via the same /dev/tcp|udp end point?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rebuilding FFmpeg with NVENC and AAC on Ubuntu</title>
      <link>/2016/06/07/rebuilding-ffmpeg-with-nvenc-and-aac-on-ubuntu/</link>
      <pubDate>Tue, 07 Jun 2016 21:11:42 +0000</pubDate>
      <guid>/2016/06/07/rebuilding-ffmpeg-with-nvenc-and-aac-on-ubuntu/</guid>
      <description>&lt;p&gt;This mini guide will show you how to rebuild the exact version of FFmpeg that comes with your version of Ubuntu and just add support for NVidia GPU encoding via the NVENC API and ACC via libfdk_aac.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&#xA;# Download and unzip the NVIDIA Video Codec SDK from https://developer.nvidia.com/nvidia-video-codec-sdk&#xA;wget https://developer.nvidia.com/video-sdk-601&#xA;unzip nvidia_video_sdk_6.0.1.zip&#xA;&#xA;# Copy the headers files from the SDK so FFmpeg can find them&#xA;sudo cp nvidia_video_sdk_6.0.1/Samples/common/inc/*.h /usr/local/include/&#xA;&#xA;# Make sure &amp;#34;Source code&amp;#34; is enabled in System Settings... -&amp;gt; Software &amp;amp; Updates&#xA;# Download the build dependencies for FFmpeg&#xA;sudo apt-get build-dep ffmpeg&#xA;&#xA;# Install libfdk_aac&#xA;sudo apt-get install libfdk-aac-dev&#xA;&#xA;# Download the source for the exact version of FFmpeg you already have installed (not as root)&#xA;apt-get source ffmpeg&#xA;&#xA;# Go into the ffmpeg source you just downloaded&#xA;cd ffmpeg-2.8.6&#xA;&#xA;# Find out the exact command the ffmpeg was originally built with&#xA;ffmpeg -buildconf&#xA;&#xA;# Copy the single line &amp;#34;configuration:&amp;#34; and pass it to &amp;#34;.configure&amp;#34; but add &amp;#34;--enable-nonfree --enable-nvenc --enable-libfdk-aac&amp;#34; on the end&#xA;# Mine looks like this:&#xA;./configure --prefix=/usr --extra-version=1ubuntu2 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv --enable-nonfree --enable-nvenc --enable-libfdk-aac&#xA;&#xA;# Now build it&#xA;make&#xA;&#xA;# And finally install it over the original&#xA;sudo make install&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Detect Packet loss between you and a destination</title>
      <link>/2016/03/21/detect-packet-loss-between-you-and-a-destination/</link>
      <pubDate>Mon, 21 Mar 2016 11:58:35 +0000</pubDate>
      <guid>/2016/03/21/detect-packet-loss-between-you-and-a-destination/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;mtr bodar.com&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Docker Hub Automated Build Link (GitHub / BitBucket)</title>
      <link>/2016/03/13/docker-hub-automated-build-link-github-bitbucket/</link>
      <pubDate>Sun, 13 Mar 2016 14:00:12 +0000</pubDate>
      <guid>/2016/03/13/docker-hub-automated-build-link-github-bitbucket/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://hub.docker.com/add/automated-build/github/&#34; target=&#34;_blank&#34;&gt;https://hub.docker.com/add/automated-build/github/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Just because it&amp;rsquo;s hard to find and seem to break all the time in their docs!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Current Bash script directory</title>
      <link>/2016/03/07/current-bash-script-directory/</link>
      <pubDate>Mon, 07 Mar 2016 15:52:46 +0000</pubDate>
      <guid>/2016/03/07/current-bash-script-directory/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;DIR=`dirname $(readlink -f $0)`&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Linking Nvidia GPU temperature with a motherboard PWM fan in Linux</title>
      <link>/2016/03/03/linking-nvidia-gpu-temperature-with-a-motherboard-pwm-fan-in-linux/</link>
      <pubDate>Thu, 03 Mar 2016 06:57:48 +0000</pubDate>
      <guid>/2016/03/03/linking-nvidia-gpu-temperature-with-a-motherboard-pwm-fan-in-linux/</guid>
      <description>&lt;p&gt;So I have a closed loop water cooler on my GPU and I replaced the stock single speed fan with two Noctua PWM fans (doing push/pull) connected to my motherboard. Even though the fans can be seen by &lt;code&gt;lm_sensors&lt;/code&gt; and &lt;code&gt;fancontrol&lt;/code&gt; the Nvidia GPU does not appear as it&amp;rsquo;s proprietary driver.&lt;/p&gt;&#xA;&lt;p&gt;I knew &lt;code&gt;nvidia-settings&lt;/code&gt; could be used to query the temperature (and the pump speed if you care) so I wrote a script to tie it all together:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gnome Flashback - Title Bar not changing Theme</title>
      <link>/2016/02/08/gnome-flashback-title-bar-not-changing-theme/</link>
      <pubDate>Mon, 08 Feb 2016 21:37:37 +0000</pubDate>
      <guid>/2016/02/08/gnome-flashback-title-bar-not-changing-theme/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;gsettings set org.gnome.metacity theme &amp;#34;Arc-Dark&amp;#34;&#xA;# For good measure...&#xA;gsettings set org.gnome.desktop.interface gtk-theme &amp;#39;Arc-Dark&amp;#39;&#xA;gsettings set org.gnome.desktop.wm.preferences theme &amp;#39;Arc-Dark&amp;#39;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;https://askubuntu.com/questions/691261/window-decorations-on-gnome-flashback-not-changing-and-emerald/691609#691609&#34; target=&#34;_blank&#34;&gt;Window Decorations on Gnome Flashback not changing&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>No ERB/Ruby? Just use built in envsubst for templates</title>
      <link>/2016/02/03/no-erbruby-just-use-built-in-envsubst-for-templates/</link>
      <pubDate>Wed, 03 Feb 2016 11:31:52 +0000</pubDate>
      <guid>/2016/02/03/no-erbruby-just-use-built-in-envsubst-for-templates/</guid>
      <description>&lt;p&gt;template.txt contains:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Hello ${NAME}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then you could run:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;export NAME=Dan&#xA;envsubst &amp;lt; template.txt&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And the result would be &amp;ldquo;Hello Dan&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>GitFlow hmmmm</title>
      <link>/2016/01/08/gitflow-hmmmm/</link>
      <pubDate>Fri, 08 Jan 2016 15:39:57 +0000</pubDate>
      <guid>/2016/01/08/gitflow-hmmmm/</guid>
      <description>&lt;p&gt;After reading &lt;a href=&#34;https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow&#34; target=&#34;_blank&#34;&gt;Atlassian&lt;/a&gt; worflow comparison and Vincent Driessen &lt;a href=&#34;http://nvie.com/posts/a-successful-git-branching-model/&#34; target=&#34;_blank&#34;&gt;original post&lt;/a&gt; about GitFlow I have come to realise a couple of worrying things:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;I incorrectly assumed GitFlow was the same thing as &lt;a href=&#34;https://guides.github.com/introduction/flow/index.html&#34; target=&#34;_blank&#34;&gt;GitHub flow&lt;/a&gt; (fork project, do work then pull request)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;This model appears to be popular but it seems totally archaic to me&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Requires lots of merging especially if you refactor at lot.&lt;/li&gt;&#xA;&lt;li&gt;Doesn&amp;rsquo;t do CD&lt;/li&gt;&#xA;&lt;li&gt;Requires lots of manual work&lt;/li&gt;&#xA;&lt;li&gt;Master and develop seem the wrong way around to me&lt;/li&gt;&#xA;&lt;li&gt;How many branches?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;I use pull requests but don&amp;rsquo;t use feature branches which the Atlassian article implies requires feature branches&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pretty Print clipboard JSON</title>
      <link>/2016/01/06/pretty-print-clipboard-json/</link>
      <pubDate>Wed, 06 Jan 2016 13:47:04 +0000</pubDate>
      <guid>/2016/01/06/pretty-print-clipboard-json/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;alias json=&amp;#39;xclip -o | jq -C &amp;#34;.&amp;#34; | less -r&amp;#39;&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Ubuntu &#43; Evolution &#43; Exchange</title>
      <link>/2015/11/10/ubuntu-evolution-exchange/</link>
      <pubDate>Tue, 10 Nov 2015 10:53:21 +0000</pubDate>
      <guid>/2015/11/10/ubuntu-evolution-exchange/</guid>
      <description>&lt;p&gt;By default Ubuntu does not install the EWS (Exchange Web Service) plugin for Evolution&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo apt-get install evolution-ews&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then go into Evolution and choose the following settings:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Server Type:&lt;/strong&gt; Exchange Web Service&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Username:&lt;/strong&gt; WINDOWS-DOMAIN\username&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Host URL:&lt;/strong&gt; &lt;a href=&#34;https://webmail.company.com/owa/&#34; target=&#34;_blank&#34;&gt;https://webmail.company.com/owa/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Now click &amp;ldquo;Fetch URL&amp;rdquo; and it should ask you for a password and populate the Host and OAB Url correctly.&lt;/p&gt;&#xA;&lt;p&gt;It will then try and launch Evolution but for me I had to restart for it to correctly work and then it asked me a couple of times for my windows password.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Launching 10second.build</title>
      <link>/2015/10/27/launching-10second-build/</link>
      <pubDate>Tue, 27 Oct 2015 12:45:32 +0000</pubDate>
      <guid>/2015/10/27/launching-10second-build/</guid>
      <description>&lt;p&gt;Related to my &lt;a href=&#34;http://www.infoq.com/presentations/Crazy-Fast-Build-Times-or-When-10-Seconds-Starts-to-Make-You-Nervous&#34; target=&#34;_blank&#34;&gt;QCon talk&lt;/a&gt; and original &lt;a href=&#34;http://dan.bodar.com/2012/02/28/crazy-fast-build-times-or-when-10-seconds-starts-to-make-you-nervous/&#34; target=&#34;_blank&#34;&gt;blog post&lt;/a&gt;, I&amp;rsquo;m soft launching my &lt;a href=&#34;https://10second.build/&#34; target=&#34;_blank&#34;&gt;10second.build&lt;/a&gt; project.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AMD ATI Graphics tearing in Chrome on Ubuntu 15.04</title>
      <link>/2015/10/14/amd-ati-graphics-tearing-in-chrome-on-ubuntu-15-04/</link>
      <pubDate>Wed, 14 Oct 2015 13:09:39 +0000</pubDate>
      <guid>/2015/10/14/amd-ati-graphics-tearing-in-chrome-on-ubuntu-15-04/</guid>
      <description>&lt;p&gt;I had to switch to using proprietor AMD drivers as the open source ones don&amp;rsquo;t support audio via display port, but after switching, Chrome was tearing and just going completely black.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;chrome://gpu/&#34;&gt;chrome GPU&lt;/a&gt; page reported no hardware acceleration enabled.&lt;/p&gt;&#xA;&lt;p&gt;So I went to &lt;a href=&#34;chrome://flags/&#34;&gt;Chrome Flags&lt;/a&gt; page and forced GPU acceleration and rasterisation&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Override software rendering list&lt;/strong&gt; -&amp;gt; Disabled&lt;br&gt;&#xA;&lt;strong&gt;Enable GPU rasterization&lt;/strong&gt; -&amp;gt; Force enabled on all layers&lt;br&gt;&#xA;&lt;strong&gt;Smooth Scrolling Linux&lt;/strong&gt; -&amp;gt; Enable&lt;/p&gt;</description>
    </item>
    <item>
      <title>Previous Talks from WisdomStockholm speakers</title>
      <link>/2015/10/09/previous-talks-from-wisdomstockholm-speakers/</link>
      <pubDate>Fri, 09 Oct 2015 14:03:15 +0000</pubDate>
      <guid>/2015/10/09/previous-talks-from-wisdomstockholm-speakers/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=08n6fIaGIAY&#34; target=&#34;_blank&#34;&gt;Failures are opportunities in disguise - Johan Ernst Nilson&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=dWfSvtK-upo&#34; target=&#34;_blank&#34;&gt;The Art of being Kind - Stefan Einhorn&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=kpyc84kamhw&#34; target=&#34;_blank&#34;&gt;Designing For Generosity - Nipun Mehta&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=_uBU9Vc_crg&#34; target=&#34;_blank&#34;&gt;What is Happiness? The Story of Bhutan - Dr Julia Kim&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=vEC2z4MhmTg&#34; target=&#34;_blank&#34;&gt;GDProblem - Lorenzo Fioramonti&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Random Links from Wisdom Stockholm Part 2</title>
      <link>/2015/10/09/random-links-from-wisdom-stockholm-part-2/</link>
      <pubDate>Fri, 09 Oct 2015 13:16:21 +0000</pubDate>
      <guid>/2015/10/09/random-links-from-wisdom-stockholm-part-2/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/The_Limits_to_Growth&#34; target=&#34;_blank&#34;&gt;The Limits to Growth&lt;/a&gt;&lt;br&gt;&#xA;The Limits to Growth is a 1972 book about the computer simulation of exponential economic and population growth with finite resource supplies.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.edx.org/&#34; target=&#34;_blank&#34;&gt;EdX&lt;/a&gt;&lt;br&gt;&#xA;EdX offers free online courses and classes. Find the latest MOOC from the world&amp;rsquo;s best universities including MIT, Harvard, Berkeley, UT and others.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.impacthub.net/&#34; target=&#34;_blank&#34;&gt;Impact Hub&lt;/a&gt;&lt;br&gt;&#xA;Part innovation lab, part business incubator, and part community center, It offers a unique ecosystem of resources, inspiration, and collaboration opportunities to grow impact.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Random Links from WisdomStockholm Part 1</title>
      <link>/2015/10/09/random-links-from-wisdomstockholm-part-1/</link>
      <pubDate>Fri, 09 Oct 2015 11:01:36 +0000</pubDate>
      <guid>/2015/10/09/random-links-from-wisdomstockholm-part-1/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.amazon.co.uk/The-Spirit-Level-Equality-Everyone/dp/0241954290&#34; target=&#34;_blank&#34;&gt;The Spirit Level (Book)&lt;/a&gt;&lt;br&gt;&#xA;Why do we mistrust people more in the UK than in Japan? Why do Americans have higher rates of teenage pregnancy than the French? What makes the Swedish thinner than the Australians? The answer: inequality.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=77IdKFqXbUY&#34; target=&#34;_blank&#34;&gt;Kennedy on GDP&lt;/a&gt;&lt;br&gt;&#xA;Great speech by Kennedy on what&amp;rsquo;s wrong with GDP as a measurement&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://vimeo.com/22688819&#34; target=&#34;_blank&#34;&gt;The Lost Generation&lt;/a&gt;&lt;br&gt;&#xA;Another moving video&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.oecd.org/els/soc/growingunequalincomedistributionandpovertyinoecdcountries.htm&#34; target=&#34;_blank&#34;&gt;Growing unequal - OECD report&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.oecd.org/els/soc/dividedwestandwhyinequalitykeepsrising.htm&#34; target=&#34;_blank&#34;&gt;Divided we stand - OECD report&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Random links from Operability.IO conference Part 2</title>
      <link>/2015/09/30/random-links-from-operability-io-conference-part-2/</link>
      <pubDate>Wed, 30 Sep 2015 12:32:22 +0000</pubDate>
      <guid>/2015/09/30/random-links-from-operability-io-conference-part-2/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://hardthings.bhorowitz.com/&#34; target=&#34;_blank&#34;&gt;The Hard Thing About Hard Things&lt;/a&gt;&lt;br&gt;&#xA;Have bought the book, looks very applicable to me at the moment.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.google.co.uk/search?q=war%20games%20simulation%20worse%20case%20scenario&#34; target=&#34;_blank&#34;&gt;War Games - Simulate worse case scenario&lt;/a&gt;&lt;br&gt;&#xA;Haven&amp;rsquo;t found a good link for this with regards to IT&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Service_recovery_paradox&#34; target=&#34;_blank&#34;&gt;Service recovery paradox&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Logging Stuff&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.fluentd.org/&#34; target=&#34;_blank&#34;&gt;FluentD&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://www.loggly.com/&#34; target=&#34;_blank&#34;&gt;Loggly&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://logentries.com/&#34; target=&#34;_blank&#34;&gt;LogEntries&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://papertrailapp.com/&#34; target=&#34;_blank&#34;&gt;PaperTrail&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Monitoring&lt;/strong&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://www.datadoghq.com/&#34; target=&#34;_blank&#34;&gt;DataDog&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://ruxit.com&#34; target=&#34;_blank&#34;&gt;Ruxit&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://blog.current.sh/structured-logging-part-1-whats-the-big-deal/&#34; target=&#34;_blank&#34;&gt;Evans Phoenix - Structured Logging&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://blog.softwareoperability.com/2013/04/08/lets-talk-about-operational-features-not-non-functional-requirements/&#34; target=&#34;_blank&#34;&gt;Operational Features&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;More Unikernel&lt;/strong&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/GaloisInc/HaLVM&#34; target=&#34;_blank&#34;&gt;Haskell Unikernel&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;http://wiki.xenproject.org/wiki/Rump_kernel&#34; target=&#34;_blank&#34;&gt;Rump Kernel&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Security&lt;/strong&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://bugcrowd.com/&#34; target=&#34;_blank&#34;&gt;Bug Crowd&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://hackerone.com/&#34; target=&#34;_blank&#34;&gt;Hacker One&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;&#34;&gt;Notary&lt;/a&gt;&lt;br&gt;&#xA;Sign those curl | sh installs&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://grsecurity.net/&#34; target=&#34;_blank&#34;&gt;GRSecurity patches to Linux&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Random links from Operability.IO conference Part 1</title>
      <link>/2015/09/29/random-links-from-operability-io-conference-part-1/</link>
      <pubDate>Tue, 29 Sep 2015 14:38:55 +0000</pubDate>
      <guid>/2015/09/29/random-links-from-operability-io-conference-part-1/</guid>
      <description>&lt;p&gt;These are my random links from the excellent 2 day conference &lt;a href=&#34;http://operability.io/&#34; target=&#34;_blank&#34;&gt;Operability.IO&lt;/a&gt;. These are all links mentioned in different talks.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.jwz.org/doc/worse-is-better.html&#34; target=&#34;_blank&#34;&gt;Worse is Better&lt;/a&gt;&lt;br&gt;&#xA;Much to the shock of my collages I had not read about this before. Now I have!&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://osv.io/&#34; target=&#34;_blank&#34;&gt;OSV&lt;/a&gt; / &lt;a href=&#34;https://github.com/cloudius-systems/capstan&#34; target=&#34;_blank&#34;&gt;Capstan&lt;/a&gt;&lt;br&gt;&#xA;I&amp;rsquo;ve been using &lt;a href=&#34;https://hyper.sh/&#34; target=&#34;_blank&#34;&gt;hyper.sh&lt;/a&gt; which is very similar except it uses Docker images inside the hypervisor. OSV looks very interesting especially the REST API for &lt;a href=&#34;http://osv.io/api/swagger-ui/dist/index.html&#34; target=&#34;_blank&#34;&gt;inspecting a running image&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://mirage.io/&#34; target=&#34;_blank&#34;&gt;MirageOS&lt;/a&gt;&lt;br&gt;&#xA;This is a unikernel for compiling OCaml to Xen hypervisor&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bash Environment Variable Regex Replace</title>
      <link>/2015/09/15/bash-environment-variable-regex-replace/</link>
      <pubDate>Tue, 15 Sep 2015 14:19:14 +0000</pubDate>
      <guid>/2015/09/15/bash-environment-variable-regex-replace/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&#xA;HOST=tcp://server:443/&#xA;echo ${HOST//tcp/https} # prints https://server:443/&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>How to connect to CloudFoundry&#39;s Loggregator directly via WebSockets</title>
      <link>/2015/04/22/how-to-connect-to-cloudfoundrys-loggregator-directly-via-websockets/</link>
      <pubDate>Wed, 22 Apr 2015 10:50:19 +0000</pubDate>
      <guid>/2015/04/22/how-to-connect-to-cloudfoundrys-loggregator-directly-via-websockets/</guid>
      <description>&lt;p&gt;Firstly make sure you can run the standard CloudFoundry cli:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;cf logs [APP_NAME]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then turn on tracing:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;export CF_TRACE=true&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You will see a HTTP request and then it will switch to a secure WebSocket:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;WEBSOCKET REQUEST: [2015-04-22T11:27:22+01:00]&#xA;GET /tail/?app=[APP_GUID] HTTP/1.1&#xA;Host: wss://loggregator.[YOUR_CF_DOMAIN]:443&#xA;Upgrade: websocket&#xA;Connection: Upgrade&#xA;Sec-WebSocket-Version: 13&#xA;Sec-WebSocket-Key: [HIDDEN]&#xA;Origin: http://localhost&#xA;Authorization: [PRIVATE DATA HIDDEN]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;As you can see the Authorisation header is hidden, but fear not if look in &lt;code&gt;~/.cf/config.json&lt;/code&gt; under &amp;ldquo;AccessToken&amp;rdquo; thats all you need (&lt;code&gt;&amp;quot;jq .AccessToken ~/.cf/config.json&amp;quot;&lt;/code&gt;). Combine this with &lt;a href=&#34;https://www.npmjs.com/package/wscat&#34; target=&#34;_blank&#34;&gt;wscat&lt;/a&gt; and you are good to go:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Yesterday&#39;s code...</title>
      <link>/2015/02/02/yesterdays-code/</link>
      <pubDate>Mon, 02 Feb 2015 10:35:10 +0000</pubDate>
      <guid>/2015/02/02/yesterdays-code/</guid>
      <description>&lt;p&gt;Absolutely love &lt;a href=&#34;http://thecodelesscode.com/case/13&#34; target=&#34;_blank&#34;&gt;this&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Intel Graphics Installer on Ubuntu 14.10</title>
      <link>/2015/01/13/intel-graphics-installer-on-ubuntu-14-10/</link>
      <pubDate>Tue, 13 Jan 2015 09:52:26 +0000</pubDate>
      <guid>/2015/01/13/intel-graphics-installer-on-ubuntu-14-10/</guid>
      <description>&lt;p&gt;So if you just downloaded the latest &lt;a href=&#34;https://01.org/linuxgraphics/&#34; target=&#34;_blank&#34;&gt;Intel Graphics Installer&lt;/a&gt; and just found that it doesn&amp;rsquo;t support Ubuntu 14.10.&lt;/p&gt;&#xA;&lt;p&gt;Fear not you can trick it into installing by doing the following:&lt;/p&gt;&#xA;&lt;p&gt;First backup&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo cp /etc/lsb-release /etc/lsb-release.backup&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then edit the file&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo nano /etc/lsb-release&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And put the following in there&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;DISTRIB_RELEASE=14.04&#xA;DISTRIB_CODENAME=trusty&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This will allow the installer to proceed but you will also want to add the public key so updates work correctly:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;wget --no-check-certificate https://download.01.org/gfx/RPM-GPG-KEY-ilg -O - | sudo apt-key add -&#xA;wget --no-check-certificate https://download.01.org/gfx/RPM-GPG-KEY-ilg-2 -O - | sudo apt-key add - &#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Original articles:&lt;br&gt;&#xA;&lt;a href=&#34;http://askubuntu.com/questions/553581/distribution-not-supported-when-trying-to-install-intel-graphics-installer-in&#34; target=&#34;_blank&#34;&gt;“Distribution not supported” when trying to install Intel Graphics Installer in 14.10&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;http://askubuntu.com/questions/339476/intel-linux-graphic-drivers&#34; target=&#34;_blank&#34;&gt;Intel Linux Graphic Drivers&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updated power savings settings for Samsung Series 9 (NP900X3C-A05UK) and Ubuntu 14.10 </title>
      <link>/2014/12/21/updated-power-savings-settings-for-samsung-series-9-np900x3c-a05uk-and-ubuntu-14-10/</link>
      <pubDate>Sun, 21 Dec 2014 10:58:02 +0000</pubDate>
      <guid>/2014/12/21/updated-power-savings-settings-for-samsung-series-9-np900x3c-a05uk-and-ubuntu-14-10/</guid>
      <description>&lt;p&gt;Here is my updated &lt;code&gt;/etc/rc.local&lt;/code&gt;for Ubuntu 14.10&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/bin/sh -e&#xA;&#xA;# Sleep so all services have started before we change settings&#xA;sleep 5&#xA;&#xA;# Set Intel Audio to power save &#xA;echo &amp;#39;1&amp;#39; &amp;gt; &amp;#39;/sys/module/snd_hda_intel/parameters/power_save&amp;#39;;&#xA;&#xA;# Temp disable ethernet port&#xA;modprobe -r r8169&#xA;&#xA;# Wireless Power Saving for interface wlan0&#xA;iw dev wlan0 set power_save on&#xA;&#xA;# VM writeback timeout&#xA;echo &amp;#39;1500&amp;#39; &amp;gt; &amp;#39;/proc/sys/vm/dirty_writeback_centisecs&amp;#39;;&#xA;&#xA;# Temp disable bluetooth&#xA;modprobe -r btusb&#xA;&#xA;# Adjust backlight to start much lower&#xA;echo 800 &amp;gt; &amp;#39;/sys/class/backlight/intel_backlight/brightness&amp;#39;&#xA;&#xA;# - NMI Watchdog (turned off)&#xA;echo 0 &amp;gt; &amp;#39;/proc/sys/kernel/nmi_watchdog&amp;#39;;&#xA;&#xA;# - SATA Active Link Power management&#xA;for i in `find /sys/class/scsi_host/*/link_power_management_policy`; do echo &amp;#39;min_power&amp;#39; &amp;gt; $i; done;&#xA;&#xA;# - USB Autosuspend (after 2 secs of inactivity)&#xA;for i in `find /sys/bus/usb/devices/*/power/control`; do echo auto &amp;gt; $i; done;&#xA;for i in `find /sys/bus/usb/devices/*/power/autosuspend`; do echo 2 &amp;gt; $i; done;&#xA;&#xA;# - Device Power Management&#xA;echo &amp;#39;auto&amp;#39; | tee /sys/bus/i2c/devices/*/power/control &amp;gt; /dev/null;&#xA;echo &amp;#39;auto&amp;#39; | tee /sys/bus/pci/devices/*/power/control &amp;gt; /dev/null;&#xA;&#xA;# - CPU Scaling (power saving scaling governor for all CPU&amp;#39;s&#xA;for i in `find /sys/devices/system/cpu/*/cpufreq/scaling_governor`; do echo &amp;#39;powersave&amp;#39; &amp;gt; $i; done;&#xA;&#xA;exit 0&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Getting the generic signature of a Java 8 lambda</title>
      <link>/2014/09/01/getting-the-generic-signature-of-a-java-8-lambda/</link>
      <pubDate>Mon, 01 Sep 2014 21:02:03 +0000</pubDate>
      <guid>/2014/09/01/getting-the-generic-signature-of-a-java-8-lambda/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://stackoverflow.com/a/25612775/1000974&#34; target=&#34;_blank&#34;&gt;Posted to StackOverflow&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is currently possible to solve but only in a pretty hackie way, but let me first explain a few things:&lt;/p&gt;&#xA;&lt;p&gt;When you write a lambda, the compiler inserts a dynamic invoke instruction pointing to the &lt;a href=&#34;http://docs.oracle.com/javase/8/docs/api/java/lang/invoke/LambdaMetafactory.html&#34; target=&#34;_blank&#34;&gt;LambdaMetafactory&lt;/a&gt; and a private static synthetic method with the body of the lambda. The synthetic method and the method handle in the constant pool both contain the generic type (if the lambda uses the type or is explicit as in your examples).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Where did I download that file from?</title>
      <link>/2014/07/21/where-did-i-download-that-file-from/</link>
      <pubDate>Mon, 21 Jul 2014 15:05:26 +0000</pubDate>
      <guid>/2014/07/21/where-did-i-download-that-file-from/</guid>
      <description>&lt;p&gt;Assuming you used Chrome and a modern Linux file system&amp;hellip;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ attr -g xdg.origin.url Downloads/google-chrome-stable_current_x86_64.rpm &#xA;Attribute &amp;#34;xdg.origin.url&amp;#34; had a 74 byte value for /home/dan/Downloads/google-chrome-stable_current_x86_64.rpm:&#xA;https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Compiling RunIt on Fedora 20</title>
      <link>/2014/04/30/compiling-runit-on-fedora-20/</link>
      <pubDate>Wed, 30 Apr 2014 10:40:53 +0000</pubDate>
      <guid>/2014/04/30/compiling-runit-on-fedora-20/</guid>
      <description>&lt;p&gt;I had dowloaded &lt;a href=&#34;http://smarden.org/runit/runit-2.1.1.tar.gz&#34; target=&#34;_blank&#34;&gt;RunIt&lt;/a&gt;. Then ran&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package/compile&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;It errored with:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;./compile runit.c&#xA;./load runit unix.a byte.a -static&#xA;/usr/bin/ld: cannot find -lc&#xA;collect2: error: ld returned 1 exit status&#xA;make: *** [runit] Error 1&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To fix I needed to run&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo yum install glibc-static&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Bash function to switch Java versions</title>
      <link>/2014/03/27/bash-function-to-switch-java-versions/</link>
      <pubDate>Thu, 27 Mar 2014 10:39:13 +0000</pubDate>
      <guid>/2014/03/27/bash-function-to-switch-java-versions/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;setjava() {&#xA;&#x9;if [ &amp;#34;$1&amp;#34; = &amp;#34;-q&amp;#34; ]; then&#xA;                local quiet=true&#xA;                shift&#xA;        fi&#xA;&#xA;&#x9;local jdk=~/Applications/Java/jdk1.$1&#xA;        if [ ! -d &amp;#34;${jdk}&amp;#34; ]; then&#xA;                echo Jdk not found: ${jdk}&#xA;                return 1&#xA;        fi&#xA;&#x9;export JAVA_HOME=${jdk}&#xA;        export PATH=${JAVA_HOME}/bin:${PATH}&#xA;        if [ -z &amp;#34;${quiet}&amp;#34; ]; then&#xA;                java -version&#xA;        fi&#xA;}&#xA;&#xA;export -f setjava&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I have symlinks for all major versions of Java so that in IntelliJ and the command line I can upgrade minor Java versions just by changing the symlink:&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to &#34;login to windows for first time&#34; or change password from Linux</title>
      <link>/2014/03/26/how-to-login-to-windows-for-first-time-or-change-password-from-linux/</link>
      <pubDate>Wed, 26 Mar 2014 09:51:33 +0000</pubDate>
      <guid>/2014/03/26/how-to-login-to-windows-for-first-time-or-change-password-from-linux/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;smbpasswd -r YOUR.DOMAIN.COM -U YOUR_USERNAME&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This will mean you don&amp;rsquo;t need to find a windows box every time your password expires if you only use say Outlook webmail in a windows environment.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to list Active Directory controllers from Linux command line</title>
      <link>/2014/03/25/how-to-list-active-directory-controllers-from-linux-command-line/</link>
      <pubDate>Tue, 25 Mar 2014 12:26:39 +0000</pubDate>
      <guid>/2014/03/25/how-to-list-active-directory-controllers-from-linux-command-line/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;nslookup -type=srv _ldap._tcp.dc._msdcs.YOUR.DOMAIN.COM&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Error: Invalid or corrupt jarfile</title>
      <link>/2014/02/17/error-invalid-or-corrupt-jarfile/</link>
      <pubDate>Mon, 17 Feb 2014 16:18:18 +0000</pubDate>
      <guid>/2014/02/17/error-invalid-or-corrupt-jarfile/</guid>
      <description>&lt;p&gt;I was creating a Jar via the Java API&amp;rsquo;s and I couldn&amp;rsquo;t get it to run my main class:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt; $ java -jar foo.jar&#xA;Error: Invalid or corrupt jarfile foo.jar&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Running it via the class path worked fine:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt; $ java -cp foo.jar Bar&#xA;Hello world!&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;So now I knew it was something to do with the manifest file but it wasn&amp;rsquo;t being caused by&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The 65535 file limit (&lt;a href=&#34;https://blogs.oracle.com/xuemingshen/entry/zip64_support_for_4g_zipfile&#34; target=&#34;_blank&#34;&gt;See Zip64 and Java 7&lt;/a&gt; ).&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://docs.oracle.com/javase/7/docs/technotes/guides/jar/jar.html#Notes_on_Manifest_and_Signature_Files&#34; target=&#34;_blank&#34;&gt;The 72 bytes limit per line&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Missing newline at the end of the Main-Class (Displays &amp;ldquo;no main manifest attribute, in foo.jar&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;A blank line before Main-Class (Displays &amp;ldquo;Error: An unexpected error occurred while trying to open file foo.jar&amp;rdquo;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So after scratching my head for a while I tried comparing a working jar with the failing jar:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Shortcuts to position screens on ultra wide screens</title>
      <link>/2014/02/08/shortcuts-to-position-screens-on-ultra-wide-screens/</link>
      <pubDate>Sat, 08 Feb 2014 11:49:10 +0000</pubDate>
      <guid>/2014/02/08/shortcuts-to-position-screens-on-ultra-wide-screens/</guid>
      <description>&lt;p&gt;&lt;strong&gt;left&lt;/strong&gt; (Ctrl+Super+Left):&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;wmctrl -r :ACTIVE: -e 0,0,0,1280,1032&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;right&lt;/strong&gt; (Ctrl+Super+Right):&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;wmctrl -r :ACTIVE: -e 0,1280,0,1280,1032&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Git Config</title>
      <link>/2014/01/30/git-config/</link>
      <pubDate>Thu, 30 Jan 2014 09:03:09 +0000</pubDate>
      <guid>/2014/01/30/git-config/</guid>
      <description>&lt;p&gt;My .gitconfig contains&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[user]&#xA;        email = dan@bodar.com&#xA;        name = Daniel Worthington-Bodart&#xA;[color]&#xA;        ui = true&#xA;[alias]&#xA;        ci = commit&#xA;        co = checkout&#xA;        st = status -sb&#xA;        nuke = !git checkout -f &amp;amp;&amp;amp; git clean -f -d&#xA;[push]&#xA;        default = current&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Wat? Scala (Infix Operator Precedence and Associativity)</title>
      <link>/2013/12/05/wat-scala-infix-operator-precedence-and-associativity/</link>
      <pubDate>Thu, 05 Dec 2013 14:36:20 +0000</pubDate>
      <guid>/2013/12/05/wat-scala-infix-operator-precedence-and-associativity/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.natpryce.com/&#34; target=&#34;_blank&#34;&gt;Nat Pryce&lt;/a&gt; pointed out these gems:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.scala-lang.org/docu/files/ScalaReference.pdf&#34; target=&#34;_blank&#34;&gt;Scala Reference 6.12.3&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Precedence&lt;/strong&gt;:&lt;br&gt;&#xA;&amp;ldquo;The precedence of an inﬁx operator is determined by the operator’s ﬁrst character.&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Associativity&lt;/strong&gt;&lt;br&gt;&#xA;&amp;ldquo;The associativity of an operator is determined by the operator’s last character&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;This actually made me cry.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wat? Scala</title>
      <link>/2013/12/04/wat-scala/</link>
      <pubDate>Wed, 04 Dec 2013 22:13:47 +0000</pubDate>
      <guid>/2013/12/04/wat-scala/</guid>
      <description>&lt;p&gt;As I got quoted recently in &lt;a href=&#34;http://overwatering.org/blog/2013/12/scala-1-star-would-not-program-again/&#34; target=&#34;_blank&#34;&gt;&amp;ldquo;Scala — 1★ Would Not Program Again&amp;rdquo;&lt;/a&gt; I though I finally should write up a little &lt;a href=&#34;https://www.destroyallsoftware.com/talks/wat&#34; target=&#34;_blank&#34;&gt;Wat&lt;/a&gt; moment we had recently:&lt;/p&gt;&#xA;&lt;p&gt;So does anyone know &amp;ldquo;wat&amp;rdquo; the following Scala code returns? (Value and Type)&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;List(1,2,3).toSet()&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A Set&amp;lt;Int&amp;gt; containing 1,2,3?&lt;/p&gt;&#xA;&lt;p&gt;Nope how about I give you a clue, there are 2 bugs in this one line:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A type inferencing bug where it chooses Set&amp;lt;Any&amp;gt;&lt;/li&gt;&#xA;&lt;li&gt;A bug where the brackets are used for both calling the Set.apply method and constructing Unit, notice there no space between the &amp;ldquo;toSet&amp;rdquo; and &amp;ldquo;()&amp;rdquo;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Yup you guessed it, it returns:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu 13.10 - Reset Gnome Panels</title>
      <link>/2013/11/16/ubuntu-13-10-reset-gnome-panels/</link>
      <pubDate>Sat, 16 Nov 2013 09:57:39 +0000</pubDate>
      <guid>/2013/11/16/ubuntu-13-10-reset-gnome-panels/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;dconf reset -f /org/gnome/gnome-panel/&#xA;killall gnome-panel&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Excel Integration the old school way: Web Queries (IQY) and Data Queries (DQY)</title>
      <link>/2013/02/18/excel-integration-the-old-school-way-web-queries-iqy-and-data-queries-dqy/</link>
      <pubDate>Mon, 18 Feb 2013 15:08:06 +0000</pubDate>
      <guid>/2013/02/18/excel-integration-the-old-school-way-web-queries-iqy-and-data-queries-dqy/</guid>
      <description>&lt;p&gt;An alternative approach to just doing CSV export (which is fast and more cross platform/app) is to use web queries (.iqy files that point to fairly HTML) or data queries (.dqy extension but point to the DB)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Pro&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Supports refreshing data / live data model&lt;/li&gt;&#xA;&lt;li&gt;Web based integration&lt;/li&gt;&#xA;&lt;li&gt;Very easy to do&lt;/li&gt;&#xA;&lt;li&gt;Works with all versions since excel 97&lt;/li&gt;&#xA;&lt;li&gt;They support linking back into you app via urls (IQY only) so we had cells that said edit that took you back to the web app.&lt;/li&gt;&#xA;&lt;li&gt;Auto sorting, pivoting is a doddle&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu - Disable System Program Problem Detected</title>
      <link>/2013/01/26/ubuntu-12-10-disable-system-program-problem-detected/</link>
      <pubDate>Sat, 26 Jan 2013 20:09:09 +0000</pubDate>
      <guid>/2013/01/26/ubuntu-12-10-disable-system-program-problem-detected/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;echo &amp;#39;enabled=0&amp;#39; | sudo tee /etc/default/apport&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Mercurial settings</title>
      <link>/2013/01/25/mercurial-settings/</link>
      <pubDate>Fri, 25 Jan 2013 12:50:56 +0000</pubDate>
      <guid>/2013/01/25/mercurial-settings/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[extensions]&#xA;hgext.bookmarks =&#xA;rebase =&#xA;hgext.purge =&#xA;color = &#xA;&#xA;[ui]&#xA;username = Daniel Worthington-Bodart &amp;lt;***@*****.com&amp;gt;&#xA;&#xA;[merge-tools]&#xA;meld.executable = meld&#xA;meld.args = $local $base $other -o $output&#xA;&#xA;[auth]&#xA;google.prefix = code.google.com&#xA;google.username = **********&#xA;google.password = **********&#xA;google.schemes = http https&#xA;&#xA;[alias]&#xA;pull = pull --rebase&#xA;nuke = !$HG revert --all --no-backup ; $HG purge&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Setting the Default Schema with Oracle JDBC Driver</title>
      <link>/2013/01/24/setting-the-default-schema-with-oracle-jdbc-driver/</link>
      <pubDate>Thu, 24 Jan 2013 11:19:24 +0000</pubDate>
      <guid>/2013/01/24/setting-the-default-schema-with-oracle-jdbc-driver/</guid>
      <description>&lt;p&gt;If you use C3PO you can make it do it when it checks the connection out.&lt;/p&gt;&#xA;&lt;p&gt;As properties:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;c3p0.preferredTestQuery=alter session set current_schema=animals&#xA;c3p0.testConnectionOnCheckout=true&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;As Java code:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ComboPooledDataSource dataSource = new ComboPooledDataSource();&#xA;dataSource.setPreferredTestQuery(&amp;#34;alter session set current_schema=animals&amp;#34;);&#xA;dataSource.setTestConnectionOnCheckout(true);&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Downside is this will happen every time the connection is taken out of the pool&lt;/p&gt;&#xA;&lt;p&gt;If you are using a JDBC connection yourself you could just do:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Class.forName(&amp;#34;oracle.jdbc.driver.OracleDriver&amp;#34;);&#xA;Connection connection = getConnection(&amp;#34;jdbc:oracle:thin:@//server:1521/instance&amp;#34;, &amp;#34;username&amp;#34;, &amp;#34;password&amp;#34;);&#xA;connection.createStatement().execute(&amp;#34;alter session set current_schema=animals&amp;#34;));&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I also posted it to &lt;a href=&#34;http://stackoverflow.com/questions/2353594/default-schema-in-oracle-connection-url&#34; target=&#34;_blank&#34;&gt;StackOverflow&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why Functional Programming in Java is NOT Dangerous</title>
      <link>/2013/01/23/why-functional-programming-in-java-is-not-dangerous/</link>
      <pubDate>Wed, 23 Jan 2013 22:13:24 +0000</pubDate>
      <guid>/2013/01/23/why-functional-programming-in-java-is-not-dangerous/</guid>
      <description>&lt;p&gt;This is a quick post in response to Elliotte Rusty Harold article titled &lt;a href=&#34;http://cafe.elharo.com/programming/java-programming/why-functional-programming-in-java-is-dangerous/&#34; target=&#34;_blank&#34;&gt;Why Functional Programming in Java is Dangerous&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Lets look at the some of the points made:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Lazy evaluation&lt;/li&gt;&#xA;&lt;li&gt;JIT / JavaC can&amp;rsquo;t optimise&lt;/li&gt;&#xA;&lt;li&gt;Recursion&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The example that Elliotte uses comes from &lt;a href=&#34;http://pragprog.com/magazines/2013-01/functional-programming-basics&#34; target=&#34;_blank&#34;&gt;Bob Martins article&lt;/a&gt; done in &lt;a href=&#34;http://clojure.org/&#34; target=&#34;_blank&#34;&gt;clojure&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;(take 25 (squares-of (integers)))&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Lets show the same things written in Java with &lt;a href=&#34;http://code.google.com/p/totallylazy/&#34; target=&#34;_blank&#34;&gt;TotallyLazy&lt;/a&gt; (Disclaimer: I wrote it) :&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;range(1).map(squared).take(25);&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You could write the same thing with most functional libraries for Java, as pretty much all of them have lazy Lists or lazy Sequences. In fact the clojure example is doing exactly the same thing: integers returns Seq. If you tried to make it return a PersistentList you would have exactly the same OutOfMemoryError exception.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Samsung Series 9 (NP900X3C-A05UK) Ubuntu/Linux: Wake up when I open the lid</title>
      <link>/2013/01/13/samsung-series-9-np900x3c-a05uk-ubuntulinux-wake-up-when-i-open-the-lid/</link>
      <pubDate>Sun, 13 Jan 2013 17:59:38 +0000</pubDate>
      <guid>/2013/01/13/samsung-series-9-np900x3c-a05uk-ubuntulinux-wake-up-when-i-open-the-lid/</guid>
      <description>&lt;p&gt;So one of the last things that wasn&amp;rsquo;t perfectly working was coming out of suspend when I opened the lid. First thing you need to so is find the name of the LID switch:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ls /proc/acpi/button/lid/&#xA;LID0&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Mine seems to be LID0 or LID1. You can then check it&amp;rsquo;s current state by doing:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;cat /proc/acpi/button/lid/LID0/state&#xA;state:      open&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now all you need to do is add this to the wake up list&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo -s&#xA;echo LID0 &amp;gt; /proc/acpi/wakeup&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;That&amp;rsquo;s it,&lt;/p&gt;</description>
    </item>
    <item>
      <title>Samsung Series 9 (NP900X3C-A05UK) Ubuntu/Linux setup for power management and keybindings</title>
      <link>/2012/12/07/samsung-series-9-np900x3c-a05uk-ubuntulinux-setup-for-power-management-and-keybindings/</link>
      <pubDate>Fri, 07 Dec 2012 08:35:32 +0000</pubDate>
      <guid>/2012/12/07/samsung-series-9-np900x3c-a05uk-ubuntulinux-setup-for-power-management-and-keybindings/</guid>
      <description>&lt;p&gt;UPDATE: &lt;a href=&#34;http://dan.bodar.com/2014/12/21/updated-power-savings-settings-for-samsung-series-9-np900x3c-a05uk-and-ubuntu-14-10/&#34; target=&#34;_blank&#34;&gt;Ubuntu 14.10 settings&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Ubuntu 12.10 works pretty well out of the box (for me it was just power management and keybindings that needed work), see &lt;a href=&#34;https://help.ubuntu.com/community/SamsungSeries9&#34; target=&#34;_blank&#34;&gt;Ubuntu wiki&lt;/a&gt; if you have any other issues . Using &lt;a href=&#34;https://01.org/powertop/&#34; target=&#34;_blank&#34;&gt;powertop&lt;/a&gt; I was able to understand what needed doing. What follows are my settings:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;/etc/rc.local&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/bin/sh -e&#xA;&#xA;# Temp disable ethernet port&#xA;modprobe -r r8169&#xA;&#xA;# Disable wake up on lan if I do use ethernet port&#xA;ethtool -s eth2 wol d;&#xA;&#xA;# Temp disable bluetooth&#xA;modprobe -r btusb&#xA;&#xA;# Adjust backlight to start much lower&#xA;echo 11 &amp;gt; /sys/class/backlight/acpi_video0/brightness&#xA;&#xA;# - NMI Watchdog (turned off)&#xA;echo 0 &amp;gt; &amp;#39;/proc/sys/kernel/nmi_watchdog&amp;#39;;&#xA;&#xA;# - SATA Active Link Powermanagement&#xA;echo &amp;#39;min_power&amp;#39; &amp;gt; &amp;#39;/sys/class/scsi_host/host0/link_power_management_policy&amp;#39;;&#xA;&#xA;# - USB Autosuspend (after 2 secs of inactivity)&#xA;for i in `find /sys/bus/usb/devices/*/power/control`; do echo auto &amp;gt; $i; done;&#xA;for i in `find /sys/bus/usb/devices/*/power/autosuspend`; do echo 2 &amp;gt; $i; done;&#xA;&#xA;# - Device Power Management&#xA;echo auto | tee /sys/bus/i2c/devices/*/power/control &amp;gt; /dev/null;&#xA;echo auto | tee /sys/bus/pci/devices/*/power/control &amp;gt; /dev/null;&#xA;&#xA;# - CPU Scaling (on demand scaling governor for all CPU&amp;#39;s&#xA;for i in `find /sys/devices/system/cpu/*/cpufreq/scaling_governor`; do echo ondemand &amp;gt; $i; done;&#xA;&#xA;exit 0&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On the keybingings the only keys that didn&amp;rsquo;t work were some of the Fn Keys&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gnome 3 / GSettings Sucks: Export/Importing your Keyboard shortcuts</title>
      <link>/2012/10/23/gnome-3-gsettings-sucks-exportimporting-your-keyboard-shortcuts/</link>
      <pubDate>Tue, 23 Oct 2012 10:11:03 +0000</pubDate>
      <guid>/2012/10/23/gnome-3-gsettings-sucks-exportimporting-your-keyboard-shortcuts/</guid>
      <description>&lt;p&gt;Previous to Gnome 3 I had a nice simple flat file for my keyboard settings, that I just unzipped into .gconf and all was good. Now Gnome is copying the very bad idea of a registry from Windows, you have go through the gsettings API or tool.&lt;/p&gt;&#xA;&lt;p&gt;Locate the keyboard shortcut schema &amp;ldquo;org.gnome.desktop.wm.keybindings&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;Now lets &amp;ldquo;export&amp;rdquo; them&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;gsettings list-recursively org.gnome.desktop.wm.keybindings &amp;gt; keybindings&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now unfortunately there does not appear to be a way to import that file, so I just hacked the file. Adding &amp;ldquo;gsettings set&amp;rdquo; to the front and quoting the values.&lt;br&gt;&#xA;So&lt;/p&gt;</description>
    </item>
    <item>
      <title>Blog Memory: Accessing Vigor 120 Modem when bridged with Buffalo WZR-HP-AG300H (DD-WRT) </title>
      <link>/2012/10/06/blog-memory-accessing-vigor-120-modem-when-bridged-with-buffalo-wzr-hp-ag300h-dd-wrt/</link>
      <pubDate>Sat, 06 Oct 2012 19:26:49 +0000</pubDate>
      <guid>/2012/10/06/blog-memory-accessing-vigor-120-modem-when-bridged-with-buffalo-wzr-hp-ag300h-dd-wrt/</guid>
      <description>&lt;p&gt;I found this article &lt;a href=&#34;http://ip6.com/projects/?p=363&#34; target=&#34;_blank&#34;&gt;http://ip6.com/projects/?p=363&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;So I just changed the IP address to match the default that the Vigor modem uses:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ifconfig eth1:1 192.168.2.9 netmask 255.0.0.0&#xA;iptables -I POSTROUTING -t nat -o eth1 -d 192.0.0.0/8 -j MASQUERADE&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;It&amp;rsquo;s not perfect but it&amp;rsquo;s a start.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My Speakerconf 2012 slides</title>
      <link>/2012/08/26/my-speakerconf-2012-slides/</link>
      <pubDate>Sun, 26 Aug 2012 21:55:14 +0000</pubDate>
      <guid>/2012/08/26/my-speakerconf-2012-slides/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://presumptions.bodar.com/&#34; target=&#34;_blank&#34;&gt;http://presumptions.bodar.com/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>My QCon Video is available here</title>
      <link>/2012/07/19/my-qcon-video-is-available-here/</link>
      <pubDate>Thu, 19 Jul 2012 08:38:02 +0000</pubDate>
      <guid>/2012/07/19/my-qcon-video-is-available-here/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.infoq.com/presentations/Crazy-Fast-Build-Times-or-When-10-Seconds-Starts-to-Make-You-Nervous&#34; target=&#34;_blank&#34;&gt;http://www.infoq.com/presentations/Crazy-Fast-Build-Times-or-When-10-Seconds-Starts-to-Make-You-Nervous&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Meld and Mercurial 3 way Merge is Mental</title>
      <link>/2012/07/19/meld-and-mercurial-3-way-merge-is-mental/</link>
      <pubDate>Thu, 19 Jul 2012 08:29:55 +0000</pubDate>
      <guid>/2012/07/19/meld-and-mercurial-3-way-merge-is-mental/</guid>
      <description>&lt;p&gt;By default &lt;a href=&#34;http://meldmerge.org/&#34; target=&#34;_blank&#34;&gt;Meld&amp;rsquo;s&lt;/a&gt; 3 way merge combined with &lt;a href=&#34;http://mercurial.selenic.com/&#34; target=&#34;_blank&#34;&gt;Mercurial&lt;/a&gt; merges into the left panel. To make it merge into the middle panel add the following to .hgrc file&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[merge-tools]&#xA;meld.executable = meld&#xA;meld.args = $local $base $other -o $output&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>My QCon talk...</title>
      <link>/2012/03/09/my-qcon-talk/</link>
      <pubDate>Fri, 09 Mar 2012 00:16:40 +0000</pubDate>
      <guid>/2012/03/09/my-qcon-talk/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://prezi.com/urkus7bs4gqw/crazy-fast-build-times/&#34; target=&#34;_blank&#34;&gt;Prezi&lt;/a&gt;&lt;br&gt;&#xA;The &lt;a href=&#34;http://dan.bodar.com/2012/02/28/crazy-fast-build-times-or-when-10-seconds-starts-to-make-you-nervous/&#34; target=&#34;_blank&#34;&gt;original blog post / rant&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>TotallyLazy mentioned in &#34;Functional Programming for Java Developers&#34; book</title>
      <link>/2012/02/28/totallylazy-mentioned-in-functional-programming-for-java-developers-book/</link>
      <pubDate>Tue, 28 Feb 2012 14:24:48 +0000</pubDate>
      <guid>/2012/02/28/totallylazy-mentioned-in-functional-programming-for-java-developers-book/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.amazon.co.uk/gp/product/1449311032/ref=as_li_tf_il?ie=UTF8&amp;amp;tag=danbodarcom-21&amp;amp;linkCode=as2&amp;amp;camp=1634&amp;amp;creative=6738&amp;amp;creativeASIN=1449311032&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;http://ws.assoc-amazon.co.uk/widgets/q?_encoding=UTF8&amp;amp;Format=_SL160_&amp;amp;ASIN=1449311032&amp;amp;MarketPlace=GB&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;tag=danbodarcom-21&amp;amp;ServiceVersion=20070822&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;img src=&#34;http://www.assoc-amazon.co.uk/e/ir?t=danbodarcom-21&amp;amp;l=as2&amp;amp;o=2&amp;amp;a=1449311032&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;In &lt;a href=&#34;http://books.google.co.uk/books?id=b-x0-D7Gvx4C&amp;amp;pg=PA58&amp;amp;dq=%22Functional%20Programming%20for%20Java%20Developers%22%20totallylazy&amp;amp;hl=en&amp;amp;sa=X&amp;amp;ei=Bt9MT5ONDs2r8QOssODcAg&amp;amp;ved=0CD4Q6AEwAA#v=onepage&amp;amp;q=%22Functional%20Programming%20for%20Java%20Developers%22%20totallylazy&amp;amp;f=false&#34; target=&#34;_blank&#34;&gt;Chapter 6 &amp;ldquo;Where to go from here&amp;rdquo; on page 58&lt;/a&gt; Dean references &lt;a href=&#34;http://code.google.com/p/totallylazy/&#34; target=&#34;_blank&#34;&gt;TotallyLazy&lt;/a&gt; for those not wanting to take the scala / clojure route.&lt;/p&gt;</description>
    </item>
    <item>
      <title>java.lang.ClassNotFoundException: org.apache.log4j.FileAppender</title>
      <link>/2012/02/28/java-lang-classnotfoundexception-org-apache-log4j-fileappender/</link>
      <pubDate>Tue, 28 Feb 2012 11:34:16 +0000</pubDate>
      <guid>/2012/02/28/java-lang-classnotfoundexception-org-apache-log4j-fileappender/</guid>
      <description>&lt;p&gt;Hopefully this will stop someone from wasting a day of their life&amp;hellip;&lt;br&gt;&#xA;If you pass in the following when you start your Java application:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;java -Dlog4j.configuration=file:///some/path/log4j.properties&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And that file contains a class that is not on the class path&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;log4j.appender.myAppender=biz.minaret.log4j.DatedFileAppender&#xA;log4j.rootLogger=error, myAppender&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then due to the log4j static initialisers you will not see an error for the class in question but instead:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Caused by: java.lang.ClassNotFoundException: org.apache.log4j.FileAppender&#xA;at java.net.URLClassLoader$1.run(URLClassLoader.java:202)&#xA;at java.security.AccessController.doPrivileged(Native Method)&#xA;at java.net.URLClassLoader.findClass(URLClassLoader.java:190)&#xA;at java.lang.ClassLoader.loadClass(ClassLoader.java:307)&#xA;at java.lang.ClassLoader.loadClass(ClassLoader.java:248)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Unfortunately for me this was caused by a transitive dependency changing in Maven. Damn you Maven/Log4J&lt;/p&gt;</description>
    </item>
    <item>
      <title>Crazy fast build times (Or when 10 seconds starts to make you nervous)</title>
      <link>/2012/02/28/crazy-fast-build-times-or-when-10-seconds-starts-to-make-you-nervous/</link>
      <pubDate>Tue, 28 Feb 2012 11:12:34 +0000</pubDate>
      <guid>/2012/02/28/crazy-fast-build-times-or-when-10-seconds-starts-to-make-you-nervous/</guid>
      <description>&lt;p&gt;Firstly this is not just my effort but my team and organisation.&lt;br&gt;&#xA;Secondly the usual rules apply, this is expert advise and what works for me will very probably cause your whole production stack to blow up and kill people.&lt;br&gt;&#xA;Lastly this is long so skip to the bit you care about or come along and chat at &lt;a href=&#34;http://qconlondon.com/london-2012/presentation/Crazy%20Talk:%20When%2010%20second%20builds%20start%20to%20make%20you%20nervous&#34; title=&#34;QCon London 2012&#34; target=&#34;_blank&#34;&gt;QCon London 2012&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Well lets answer the obvious questions:&lt;br&gt;&#xA;&lt;strong&gt;&amp;ldquo;Can this work for real apps or just fun stuff?&amp;rdquo;&lt;/strong&gt; Yes real apps old and new.&lt;br&gt;&#xA;&lt;strong&gt;&amp;ldquo;Does it need to be greenfield?&amp;rdquo;&lt;/strong&gt; No but it takes a long time (months) to get builds down on old codebases.&lt;/p&gt;</description>
    </item>
    <item>
      <title>99 Bottles of Beer in Totallylazy</title>
      <link>/2012/01/13/99-bottles-of-beer-in-totallylazy/</link>
      <pubDate>Fri, 13 Jan 2012 09:18:02 +0000</pubDate>
      <guid>/2012/01/13/99-bottles-of-beer-in-totallylazy/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import static&lt;/span&gt; com.googlecode.totallylazy.Runnables.printLine;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import static&lt;/span&gt; com.googlecode.totallylazy.lambda.Lambdas.n;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import static&lt;/span&gt; com.googlecode.totallylazy.lambda.Lambdas.λ;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import static&lt;/span&gt; com.googlecode.totallylazy.numbers.Numbers.decrement;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import static&lt;/span&gt; com.googlecode.totallylazy.numbers.Numbers.range;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;BottlesOfBeer&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// Run with -javaagent:enumerable-java-0.4.0.jar -cp:totallylazy-598.jar:enumerable-java-0.4.0.jar&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;(String&lt;span style=&#34;color:#f92672&#34;&gt;[]&lt;/span&gt; args) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        range(99, 0).&lt;span style=&#34;color:#a6e22e&#34;&gt;map&lt;/span&gt;(λ(n, verse(n))).&lt;span style=&#34;color:#a6e22e&#34;&gt;each&lt;/span&gt;(printLine(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%s of beer on the wall.\n&amp;#34;&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; String &lt;span style=&#34;color:#a6e22e&#34;&gt;verse&lt;/span&gt;(Number number) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (number.&lt;span style=&#34;color:#a6e22e&#34;&gt;equals&lt;/span&gt;(0))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;No more bottles of beer on the wall, no more bottles of beer.\n&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                   &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Go to the store and buy some more, 99 bottles&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; String.&lt;span style=&#34;color:#a6e22e&#34;&gt;format&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%s of beer on the wall, %1$s of beer.\n&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Take one down and pass it around, %s&amp;#34;&lt;/span&gt;, bottles(number), bottles(decrement(number)));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; String &lt;span style=&#34;color:#a6e22e&#34;&gt;bottles&lt;/span&gt;(Number number) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (number.&lt;span style=&#34;color:#a6e22e&#34;&gt;equals&lt;/span&gt;(0)) &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;no more bottles&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (number.&lt;span style=&#34;color:#a6e22e&#34;&gt;equals&lt;/span&gt;(1)) &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1 bottle&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; number &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; bottles&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Slow TrackPoint on Dell Precision M6500 under Ubuntu 10.10</title>
      <link>/2011/03/03/slow-trackpoint-on-dell-precision-m6500-under-ubuntu-10-10/</link>
      <pubDate>Thu, 03 Mar 2011 00:12:32 +0000</pubDate>
      <guid>/2011/03/03/slow-trackpoint-on-dell-precision-m6500-under-ubuntu-10-10/</guid>
      <description>&lt;p&gt;If you have a Dell Precision M6500 with a Synaptic TouchPad + TrackPoint) (rather than an ALPS version) and you are running Ubuntu 10.10 you may find the TrackPoint / TrackStick / Nipple is being detected as a standard PS/2 Generic Mouse and this is causing the movement to be very slow.&lt;/p&gt;&#xA;&lt;p&gt;You can check this by typing:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;xinput list&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you see something like this:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Virtual core pointer                    &#x9;id=2&#x9;[master pointer  (3)]&#xA;↳ Virtual core XTEST pointer              &#x9;id=4&#x9;[slave  pointer  (2)]&#xA;↳ SynPS/2 Synaptics TouchPad              &#x9;id=11&#x9;[slave  pointer  (2)]&#xA;↳ PS/2 Generic Mouse                      &#x9;id=12&#x9;[slave  pointer  (2)]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;As you can see the TrackPoint is not listed and as such you wont see it in any of the configuration screens.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Off topic - a very addictive little game for Windows, Mac and Linux...</title>
      <link>/2010/06/29/off-topic-a-very-addictive-little-game-for-windows-mac-and-linux/</link>
      <pubDate>Tue, 29 Jun 2010 00:38:50 +0000</pubDate>
      <guid>/2010/06/29/off-topic-a-very-addictive-little-game-for-windows-mac-and-linux/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.hemispheregames.com/osmos/&#34; target=&#34;_blank&#34;&gt;http://www.hemispheregames.com/osmos/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Very chilled out&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Crazy Talk - Holistic Web Testing - Some forces...</title>
      <link>/2010/06/29/crazy-talk-holistic-web-testing-some-forces/</link>
      <pubDate>Tue, 29 Jun 2010 00:36:30 +0000</pubDate>
      <guid>/2010/06/29/crazy-talk-holistic-web-testing-some-forces/</guid>
      <description>&lt;p&gt;So given the above, the forces I am trying to balance are&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Make it easy for people to do the right thing, hard to do the wrong thing.&lt;/li&gt;&#xA;&lt;li&gt;Make it valuable (Finds more bugs than false alarms)&lt;/li&gt;&#xA;&lt;li&gt;Make it resilient (Allows me to refactor like the true crazy person I am)&lt;/li&gt;&#xA;&lt;li&gt;Make it fast (Magnify it&amp;rsquo;s value rather deminishing it)&lt;/li&gt;&#xA;&lt;li&gt;Make it good enough (Give me enough confidence to do more crazy stuff but don&amp;rsquo;t become dogmatic)&lt;/li&gt;&#xA;&lt;li&gt;Allow people to do what they are good at&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Next I&amp;rsquo;ll talk about how the default setup I use to do, in-memory, out of container testing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Crazy Talk - Holistic Web Testing - Whys and Values...</title>
      <link>/2010/06/22/crazy-talk-holistic-web-testing-whys-and-values/</link>
      <pubDate>Tue, 22 Jun 2010 00:22:35 +0000</pubDate>
      <guid>/2010/06/22/crazy-talk-holistic-web-testing-whys-and-values/</guid>
      <description>&lt;p&gt;Now for some web specific whys/values I do the in-memory acceptance testing&amp;hellip;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Semantic Html is my golden hammer&lt;/li&gt;&#xA;&lt;li&gt;Progressive enhancement is my swiss army knife&lt;/li&gt;&#xA;&lt;li&gt;I love JavaScript but try to never write any but if i must I make sure it&amp;rsquo;s generic. I try very hard to make sure no else writes any either and if they do I just refactor it till it deletes itself.&lt;/li&gt;&#xA;&lt;li&gt;I love AHAH and barely tolerate AJAX / JSON&lt;/li&gt;&#xA;&lt;li&gt;REST is my natural state not something I read about&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;All of these forces / values / beliefs drive me to solve the problem of web testing in a very different approach from most people. It is about an alternative holistic approach to web architecture, testing and productivity.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Crazy Talk - Holistic Web Testing - Some values...</title>
      <link>/2010/06/01/crazy-talk-holistic-web-testing-some-values/</link>
      <pubDate>Tue, 01 Jun 2010 12:20:59 +0000</pubDate>
      <guid>/2010/06/01/crazy-talk-holistic-web-testing-some-values/</guid>
      <description>&lt;p&gt;(Previously on TWSDEV)&lt;/p&gt;&#xA;&lt;p&gt;As the &amp;ldquo;crazy&amp;rdquo; guy behind the in-memory / out-of-container acceptance testing on a number of java/.net projects, I think it&amp;rsquo;s important I explain to people the &amp;ldquo;Why&amp;rdquo; and the forces / constraints I am trying to balance. But first I want to quickly lay down my beliefs and values:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I believe in testing as much as possible (UI included)&lt;/li&gt;&#xA;&lt;li&gt;I believe tests must add more value than they cost (Measure it!)&lt;/li&gt;&#xA;&lt;li&gt;I value tests that are fast and are resilient to change more than tests that take a long time to run and are brittle.&lt;/li&gt;&#xA;&lt;li&gt;When refactoring a feature I value acceptances tests and integration test over unit tests.&lt;/li&gt;&#xA;&lt;li&gt;When designing/exploring a new interface / object interaction I value unit tests over acceptance tests to help guide me.&lt;/li&gt;&#xA;&lt;li&gt;I believe that QA&amp;rsquo;s are so much better at finding bugs than DEVs but worse at writing code / abstractions&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>A fan with no blades?</title>
      <link>/2009/10/31/a-fan-with-no-blades/</link>
      <pubDate>Sat, 31 Oct 2009 01:20:31 +0000</pubDate>
      <guid>/2009/10/31/a-fan-with-no-blades/</guid>
      <description>&lt;p&gt;Wow Dyson have done it again: &lt;a href=&#34;http://www.dyson.co.uk/technology/airmultiplier.asp&#34; target=&#34;_blank&#34;&gt;http://www.dyson.co.uk/technology/airmultiplier.asp&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Interestingly they talk about the fact they had to do &amp;ldquo;Hundreds of iterative tests&amp;rdquo; to get the design right:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.dyson.co.uk/insidedyson/default.asp#Air_Mult_Tech_Dev&#34; target=&#34;_blank&#34;&gt;http://www.dyson.co.uk/insidedyson/default.asp#Air_Mult_Tech_Dev&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Crazy Talk Series - An introduction to an alternative web architecture and construction method</title>
      <link>/2009/10/25/the-crazy-talk-series-an-introduction-to-an-alternative-web-architecture-and-construction-method/</link>
      <pubDate>Sun, 25 Oct 2009 09:22:19 +0000</pubDate>
      <guid>/2009/10/25/the-crazy-talk-series-an-introduction-to-an-alternative-web-architecture-and-construction-method/</guid>
      <description>&lt;p&gt;If you have met me or worked with me in the last 15 years or so, you will know that I am pretty mad about the web as a platform, HTTP as a protocol and HTML as a state engine. Add to this the last 6 years or so practising agile techniques while building highly scalable websites and you tend to find that I have fairly unusual views in the field about how to build and architect web applications.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Google Chromium Team rocks!</title>
      <link>/2009/09/05/google-chromium-team-rocks/</link>
      <pubDate>Sat, 05 Sep 2009 03:49:08 +0000</pubDate>
      <guid>/2009/09/05/google-chromium-team-rocks/</guid>
      <description>&lt;p&gt;So I noticed an issue with Google Chromium and it not updating the cached entry with new headers on a HTTP 304 response. So I logged the &lt;a href=&#34;http://code.google.com/p/chromium/issues/detail?id=20594&#34; target=&#34;_blank&#34;&gt;issue&lt;/a&gt; last weekend and bang! 6 days later the issue is resolved and I have a new version of the browser on my desktop.&lt;/p&gt;&#xA;&lt;p&gt;Not only was the process super fast but I watched the fix being discussed then applied. I looked at the code change and the unit tests being updated all as it happened. Needless to same I am very impressed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using a fullscreen editor to update my blog</title>
      <link>/2009/08/31/using-a-fullscreen-editor-to-update-my-blog/</link>
      <pubDate>Mon, 31 Aug 2009 03:36:25 +0000</pubDate>
      <guid>/2009/08/31/using-a-fullscreen-editor-to-update-my-blog/</guid>
      <description>&lt;p&gt;So after rediscovering the distraction free editors to write reports, it seemed mad not to use the same environment to update my blog. I really like the fact that the editor only supports plain text and didn&amp;rsquo;t want to reduce the readability of the plain text by having lots of unneeded markup all over the place.&lt;/p&gt;&#xA;&lt;p&gt;What I needed was a simple tool to convert my semi structured text into html and then I could just upload that to my blog. Ideally the tool would be a command line tool so I could easily automate the two steps.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fullscreen Editors</title>
      <link>/2009/08/29/fullscreen-editors/</link>
      <pubDate>Sat, 29 Aug 2009 12:27:04 +0000</pubDate>
      <guid>/2009/08/29/fullscreen-editors/</guid>
      <description>&lt;p&gt;So many moons ago I was reading about a fullscreen editor for Mac called WriteRoom. The basic premise is that it is a very limited editor that actively aims to block out all distractions from writing. It achieves this by:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Running fullscreen (so no desktop distractions)&lt;/li&gt;&#xA;&lt;li&gt;Supporting plain text only (so no styling distractions)&lt;/li&gt;&#xA;&lt;li&gt;No toolbar&lt;/li&gt;&#xA;&lt;li&gt;No menubar&lt;/li&gt;&#xA;&lt;li&gt;No statusbar&lt;/li&gt;&#xA;&lt;li&gt;A few simple shortcuts to do what you need&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Anyway I have been running Ubuntu for a number of years, and had often ran Nano fullscreen in a Gnome Terminal but was curious what might now be available. So a few moments googling and this was the list:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Html Contracts - How semantic html can help your cross functional team</title>
      <link>/2009/07/22/html-contracts-how-semantic-html-can-help-your-cross-functional-team/</link>
      <pubDate>Wed, 22 Jul 2009 10:48:45 +0000</pubDate>
      <guid>/2009/07/22/html-contracts-how-semantic-html-can-help-your-cross-functional-team/</guid>
      <description>&lt;p&gt;One of the pain points we see on web projects is the divide between client side and back end development. This pain might show itself in a number of ways:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Small changes in the HTML cause lots of tests to fail&lt;/li&gt;&#xA;&lt;li&gt;Small changes to visual layout require large changes to the HTML which then causes the above&lt;/li&gt;&#xA;&lt;li&gt;Developers say the work is done but it can&amp;rsquo;t be signed off as it looks terrible or doesn&amp;rsquo;t work in certain browsers&lt;/li&gt;&#xA;&lt;li&gt;CSS or QAs want developer to add ID attributes to lots of elements so they can target them more easily&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Now ideally all your developers should be poly skilled and understand javascript / CSS / HTML just as well as they understand java / C# / ruby but often the reality is not quite so rosy.&lt;br&gt;&#xA;So if we are working in a world where we don&amp;rsquo;t have the ideal but still need to get the job done what can we do to reduce the pain?&lt;/p&gt;</description>
    </item>
    <item>
      <title>So how about truly private fields in C#?</title>
      <link>/2009/05/21/so-how-about-truly-private-fields-in-c/</link>
      <pubDate>Thu, 21 May 2009 02:58:55 +0000</pubDate>
      <guid>/2009/05/21/so-how-about-truly-private-fields-in-c/</guid>
      <description>&lt;p&gt;UPDATE: Jim pointed out that you can access the field via reflecting over the delegate.  (See comment) Damn this is a bit like how java does anonymous access to private fields of the parent class. I wonder if you could use this for some nasty security violations as people tend to think local variables are safe from reflection.&lt;/p&gt;&#xA;&lt;p&gt;After the crazy !@$%  with JavaScript yesterday I said to Christian, I bet we can do this with C# lambda. So the challenge was set&amp;hellip;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Truly private fields in JavaScript</title>
      <link>/2009/05/21/truly-private-fields-in-javascript/</link>
      <pubDate>Thu, 21 May 2009 02:50:55 +0000</pubDate>
      <guid>/2009/05/21/truly-private-fields-in-javascript/</guid>
      <description>&lt;p&gt;So I was chatting with Christian Blunden about JavaScript, and he asked if it was possible to have private fields in JavaScript.&lt;/p&gt;&#xA;&lt;p&gt;Now the language doesn&amp;rsquo;t have a key word but I knew that you could use function scoping to achieve the same affect as I had seen the same thing done using the &lt;a href=&#34;http://www.erights.org/#2levels&#34; target=&#34;_blank&#34;&gt;E programming language&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;So after 5 minutes here is what we came up with:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Purse&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;money&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;getMoney&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;money&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;setMoney&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;newMoney&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;money&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;newMoney&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will create a truely private field that can only be accessed via the methods.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pairing with Resharper (Switching Keyboard Layouts in Visual Studio)</title>
      <link>/2008/12/02/pairing-with-resharper-switching-keyboard-layouts-in-visual-studio/</link>
      <pubDate>Tue, 02 Dec 2008 05:01:53 +0000</pubDate>
      <guid>/2008/12/02/pairing-with-resharper-switching-keyboard-layouts-in-visual-studio/</guid>
      <description>&lt;p&gt;So at my current client we have a bunch of Devs that are fairly recent converts to Resharper and a bunch of old hats who know IntelliJ or have used Resharper since Version 1. We are pairing but we know different keyboard layouts and don&amp;rsquo;t want to decrease productivity by making one lot relearn the other layout. So with some searching around I found out how to create new layouts and using a simple macro switch between them. &lt;/p&gt;</description>
    </item>
    <item>
      <title>Lean and the fishing industry</title>
      <link>/2008/11/07/lean-and-the-fishing-industry/</link>
      <pubDate>Fri, 07 Nov 2008 04:06:54 +0000</pubDate>
      <guid>/2008/11/07/lean-and-the-fishing-industry/</guid>
      <description>&lt;p&gt;This could be just verbal diarrhea, but I was watching &lt;a href=&#34;http://www.bbc.co.uk/autumnwatch/&#34; target=&#34;_blank&#34;&gt;Autum Watch&lt;/a&gt; last night and it struck me that the issues with over fishing and the fishing industry as a whole have a lot to do with all the waste inherent with manufacturing processes that use economies of scale to maximise profits. There is waste all over the industry:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The wrong fish get caught and killed then thrown overboard&lt;/li&gt;&#xA;&lt;li&gt;Same again for fish the wrong size&lt;/li&gt;&#xA;&lt;li&gt;Then fish go off or get damaged as they try and increase efficiency by doing bigger catches&lt;/li&gt;&#xA;&lt;li&gt;Then fish don&amp;rsquo;t get sold because of changes / floods in the market (another trawler comes in at the same time)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I&amp;rsquo;m sure there are a lot more and I&amp;rsquo;d love to know the ratio of fish that make it to one&amp;rsquo;s plate with number caught.  Anyway people tend to think that the only alternative is some tree hugging world where you actually catch the fish yourself.  Toyota have shown that there are alternatives that are highly profitable, consumer driven and extremely effective. So the question is could Lean be applied to the fishing industry?  Could we have a pull system? And what size buffers or queues would we need for it to work?&lt;/p&gt;</description>
    </item>
    <item>
      <title>The implicit back link</title>
      <link>/2008/04/14/the-implicit-back-link/</link>
      <pubDate>Mon, 14 Apr 2008 03:52:54 +0000</pubDate>
      <guid>/2008/04/14/the-implicit-back-link/</guid>
      <description>&lt;p&gt;A little while back I was chatting to someone about SEO and the power of outgoing links. In the bad old days your client would ask you to build a web site that had no links leaving the site or put some horrible confirmation page asking you that you are leaving!&lt;/p&gt;&#xA;&lt;p&gt;Whats interesting here is that by not having any external links you are reducing your interconnections with other sites, and so reducing your ranking in search engines. Not only do most search engines allow you to search for linked pages but each additional connection in either direction will increase the weighting that matching symbols (words) in those documents have the same implied semantics. This is just like a neural network where each additional connection re-enforces the bond further increasing the chance of a pattern match.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Plaxo revisited</title>
      <link>/2008/04/13/plaxo-revisited/</link>
      <pubDate>Sun, 13 Apr 2008 03:32:03 +0000</pubDate>
      <guid>/2008/04/13/plaxo-revisited/</guid>
      <description>&lt;p&gt;So I got some &lt;a href=&#34;http://dan.bodar.com/2008/04/09/early-morning-rant/#comments&#34; target=&#34;_blank&#34;&gt;helpful feedback&lt;/a&gt; on my last post from John McCrea who is VP of Marketing for Plaxo. So I logged back into Plaxo and had a little hunt around and after about 5-10 minutes found my addresses.&lt;/p&gt;&#xA;&lt;p&gt;My initial reaction was Doh! what an idiot I was, but then after a few minutes reflection I started to think about user interface design and intuitive learning. When I showcase new functionality to my users, they will often give feedback about how easy a feature is to use or find. Often as developers or familiar users of a system we don&amp;rsquo;t see that something might not be named or located in the most natural place.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Early morning rant...</title>
      <link>/2008/04/09/early-morning-rant/</link>
      <pubDate>Wed, 09 Apr 2008 23:36:20 +0000</pubDate>
      <guid>/2008/04/09/early-morning-rant/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been an occasional user of Plaxo (just the address book) for the last 3 years, using it to keep a few important addresses up to date. Anyway today was the first time I had used it since they launched Pulse, and guess what all my contacts have gone!&lt;/p&gt;&#xA;&lt;p&gt;Now that&amp;rsquo;s not very clever for a social networking site and reminds me what &lt;a href=&#34;http://duncan-cragg.org/blog/&#34; target=&#34;_blank&#34;&gt;Duncan Cragg&lt;/a&gt; would say about Web 2.0 and making sure all you data is public, readable in some open format and ideally distributed over the interweb. If fact this really goes back to why &amp;ldquo;data bases&amp;rdquo; were created in the first place: data lives longer than applications: well not in Plaxo&amp;rsquo;s case.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gave my first public presentation...</title>
      <link>/2008/04/04/gave-my-first-public-presentation/</link>
      <pubDate>Fri, 04 Apr 2008 12:17:53 +0000</pubDate>
      <guid>/2008/04/04/gave-my-first-public-presentation/</guid>
      <description>&lt;p&gt;Well &lt;a href=&#34;http://blog.bellubbi.com/&#34; target=&#34;_blank&#34;&gt;Kiran&lt;/a&gt; and I both gave our first public presentations at the &lt;a href=&#34;http://overtheair.org/&#34; target=&#34;_blank&#34;&gt;OverTheAir&lt;/a&gt; mobile conference at the Imperial College.&lt;/p&gt;&#xA;&lt;p&gt;Kiran talked about Agile &amp;amp; Mobile development and I talked about &lt;a href=&#34;http://pe.bodar.com/&#34; target=&#34;_blank&#34;&gt;Progressive Enhancement&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>More Ubuntu 7.10 notes for Dell D630</title>
      <link>/2007/12/29/more-ubuntu-710-notes-for-dell-d630/</link>
      <pubDate>Sat, 29 Dec 2007 12:03:06 +0000</pubDate>
      <guid>/2007/12/29/more-ubuntu-710-notes-for-dell-d630/</guid>
      <description>&lt;p&gt;So the wifi seemed to work pretty well out of the box but I noticed after prolonged use it would just suddenly freeze and the only way to make it come back was to reboot. (You couldn&amp;rsquo;t even reload the module or restart networking stack).&lt;/p&gt;&#xA;&lt;p&gt;You can tell if this will be a problem for you by running iwconfig: if you have lots of Invalid misc errors and the signal and noise levels are fixed at -60dBm then you will want to switch from the ipw3945 module to the iwl3945.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Notes on installing Ubuntu Gutsy Gibbon 64bit edition on a Dell D630</title>
      <link>/2007/11/08/notes-on-installing-ubuntu-gutsy-gibbon-64bit-edition-on-a-dell-d630/</link>
      <pubDate>Thu, 08 Nov 2007 16:35:48 +0000</pubDate>
      <guid>/2007/11/08/notes-on-installing-ubuntu-gutsy-gibbon-64bit-edition-on-a-dell-d630/</guid>
      <description>&lt;p&gt;I had to start the install CD in safe VGA mode and have not got the slash to display yet.&lt;/p&gt;&#xA;&lt;p&gt;To get sound to work you don&amp;rsquo;t need to recompile your kernel or go back to an earlier version just follow method G one this page:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://wiki.ubuntu.com/Gutsy_Intel_HD_Audio_Controller#head-0e5a1c0b384a3886c7776913e401a039809c84c9&#34; target=&#34;_blank&#34;&gt;Gutsy Intel HD Audio Controller&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo aptitude install linux-backports-modules-generic&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo gedit /etc/modprobe.d/alsa-base&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the editor, add the following line at the end of the file:&lt;/p&gt;</description>
    </item>
    <item>
      <title>What I would love to do</title>
      <link>/2007/10/06/what-we-would-love-to-do/</link>
      <pubDate>Sat, 06 Oct 2007 06:34:11 +0000</pubDate>
      <guid>/2007/10/06/what-we-would-love-to-do/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Smart Contracts&lt;/strong&gt;&lt;br&gt;&#xA;&lt;a href=&#34;http://www.erights.org/smart-contracts/index.html&#34; target=&#34;_blank&#34;&gt;http://www.erights.org/smart-contracts/index.html&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;http://www.waterken.com/dev/IOU/Design/&#34; target=&#34;_blank&#34;&gt;http://www.waterken.com/dev/IOU/Design/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;We may end up getting RESTful smart contracts for free due to all the goodness in the current design. This could lead (my client).com to an unheard of level of security and possible make it the most high profile public implementation of smart contracts to date. Watch this space&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Auto Save Enhancement&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;We currently auto save on page transition but for JavaScript clients we could do this on any change. Imagine a world were your browser behaves like IntelliJ and you never loose any data you type in.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What we will be doing in the future</title>
      <link>/2007/10/06/what-we-will-be-doing-in-the-future/</link>
      <pubDate>Sat, 06 Oct 2007 06:33:42 +0000</pubDate>
      <guid>/2007/10/06/what-we-will-be-doing-in-the-future/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Decoupling Resource selection from Representation selection in our Urls&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This will allow resources (domain objects/documents) to be selected (think SQL WHERE clauses) and presenters re-used by the client editors without specific coding by developers. So a url like &amp;ldquo;/video/skins/latest&amp;rdquo; could return all videos tagged with skins or possibly any resource tagged with video and skins. What we are aiming for is totally dynamic / fluid urls with uses we never imagined.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What I have been doing for the last few months</title>
      <link>/2007/10/06/3/</link>
      <pubDate>Sat, 06 Oct 2007 06:20:32 +0000</pubDate>
      <guid>/2007/10/06/3/</guid>
      <description>&lt;p&gt;So I thought I would start my first post with what I have been working on for the last couple of months. Naturally I have removed all references to my current client.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;What we have built already:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;RESTful Web Site and Web Components&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;So just like REST exposed your web service api/end points on to url and embraced simple message / state transfer we are going a step further and making all our web components (think html widgets) be exposed by an addressable url. Composition of components can then be done done either server side or client side. And is therefore not language specific so one could compose a widget that comprised of other widgets written in ruby, python and C# etc. In fact the widgets don&amp;rsquo;t even need to be on our server or written by us - think mashups on steroids.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Finally setup my technical blog</title>
      <link>/2007/10/06/finally-setup-my-personal-blog/</link>
      <pubDate>Sat, 06 Oct 2007 06:14:11 +0000</pubDate>
      <guid>/2007/10/06/finally-setup-my-personal-blog/</guid>
      <description>&lt;p&gt;Okay, after 4 years of people asking me, I finally setup a technical blog.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
