I’ve always had an interest in making stuff which interfaces with the world, but in the days before microcontrollers, and without a solid electronics background, making stuff was hard. Much too hard. Flashing an LED with a 555 timer is reasonably straightforward- but anything more and you need a LOT of breadboard space, and a lot more time than I could spare.

Then along came the microcontroller. I can’t remember whether I discovered PIC or AVR first, but whenever a new development board was being given away for free or nearly free, I’d be on it. Writing little test programs wasn’t overly difficult. Setting up the development environment however, was. Often, between long droughts of development, my PC would have been rebuilt, and I’d lost all that setup time and effort. As far as the programming went, I have always enjoyed low level coding (starting with hand written Z80 machine code on a Sinclair ZX81). But enjoyment wasn’t the only goal – a finished project matters. And hour upon hour could be spent at too a low a level to feel like progress was being made.

I heard about Arduino, discovered it was AVR based and had a bootloader – which didn’t seems a compelling reason to go with it, since AVRISP programming worked fine. The boards were also far too big, and too expensive compared to the $1 (£1 to me) chips I was used to buying. I was perhaps also swayed by a slight preference towards PICs over AVRs. The Arduino marketing didn’t help me either. I read it as “Helping whimsical arty types create pointless trinkets with overpriced, overspecified boards so they don’t have to learn the hard way”. I liked the hard way. So I wrote Arduino off as a toy.

How wrong I was.

I recently resurrected my childhood love of slot car racing (Scalextric) by building up a reasonable collection of Scalextric Digital track and cars. I explored the PC based Race management Systems which add a whole new dimension. My ‘maker’ mentality was reawakened at the thought of interfacing with all this digital information flying round the track and doing useful things with it, like a leader board or F1 style start lights (my current project combines these into an ‘onmi gantry’ – more later). Each of the three PC based Race Management applications supported Arduino in one way or the other. So I put aside old prejudices and ordered a couple of cheap, Chinese clones of the Arduino Pro Mini and FTDI programmer. No bigger than a DIL chip, the Pro Mini appealed to my barebones mentality. After a couple of days reading around the subject, waiting for the slow boat from China to arrive, I bought an Uno. The price was more reasonable than I’d remembered – and all the tutorials referred to them, so I decided, for once, to make things as easy as humanly possible so I could concentrate on getting my project finished. The fact that the Uno can be used to burn the bootloader onto bare Atmel chip was another compelling reason to have an Uno.

I’m now a week into Arduino programming, and I can say I’ve done more in a week than I would have done in months with a bare AVR/PIC. Having the bootloader does make a big difference. When you can’t get a line of code to work… change – upload – test – repeat. Valuable seconds saved dozens of times in a programming session add up to a more pleasurable experience. The fact that I can go to a brand new PC, download the IDE, load up my files from Dropbox and carry on coding from where I left off is also useful. But the real appeal of Arduino is the libraries and other support material. The various hardware shields don’t interest me too much, but the libraries developed to support them are amazing. To think, I used to to have to read chip datasheets to write code. Now I download the library and I’m good to go. LCD screens, LED matrices, NeoPixels, Serial communication, I2C sensors – all have superb libraries which mean that getting a project finished is now a real possibility.

Finally, if anyone thinks, as I did, that cheap ARM cored boards spell the death of the 8 bit microcontroller – they are wrong. There are many projects where even an 8MHz processor is technically overkill. My next project is adding realistic looking running lights to an RC Helicopter. It seems ridiculous that such processing power is being used for such a trivial task. But doing it from discreet components would be a huge undertaking without an Electrical Engineering background. The finished project would be so big and heavy that the heli wouldn’t be able to lift off! Being able to adjust the timing of the flashing lights with a line of code is awesome compared to swapping out resistors and capacitors. An Arduino Pro Mini does the job nicely for a couple of bucks, and grams. You wouldn’t want to use the size and expense of a Raspberry Pi or BeagleBone for those kind of tasks!

So, in case you haven’t figured it out, I’m a bit pleased with the Arduino. Rather than feeling like I may have missed the boat, I believe it’s a good time to start out. The platform is mature, the community solid, the glitches ironed out and libraries already written. So if there are any hardware tinkerers out there who, like me, are stubbornly refusing to take a look at Arduino – Jump on the bandwagon, the ride is surprisingly smooth.


I always preferred VirtualBox’s simplicity over the Enterprise class complexity of Windows 8 Hyper-V.
However, in order to get a working Windows Phone 8 Emulator working, you need to use Hyper-V.
Unfortunately when trying to do this, I got an error saying that the virtual switch could not be created. I tried some fixes from StackOverflow and ServerFault, but they didn’t work. I couldn’t create nay kind of virtual switch in Hyper-V. A common theme from my searching was that VirtualBox was involved.

Uninstalling VirtualBox manually didn’t help.
Looking in the registry, I noticed hundreds of network adapters with a VirtualBox driver (just search the registry for ‘vbox’)
I couldn’t delete these keys even with Admin privileges
Apparently I needed to run Regedit as ‘System’
THe easiest way to do this was using SysInternals Psexec

C:\Windows\System32\> psexec /i /s regedit

/i means ‘interactive’, or allow the program to display a UI
/s means run the program as the ‘system’ user

Because there were so many to delete, it was easier to export the parent key, edit in Notepad, then save as a .reg file and re-import.

After doing this, removing all references to ‘vbox’ and ‘virtualbox’ from the registry, deleting other invisible network adapters from the registry, running cccleaner, rebooting, removing Hyper-V from Windows, rebooting again, Adding Hyper-V to windows… I finally got my emulator to work.

Lesson: Don’t ever install VirtualBox, stick to Hyper-V (as long as you meet Microsoft’s bizarrely restrictive processor requirements of course)


Using my VIM config in Windows (gVim)

On 2014/02/03, in Programming, SysAdmin, by Greg Woods

This continues from my last post, and is mostly a reminder to myself!

My .vimrc file, created for VIM on the RaspberryPi, is also usable on gVim in Windows. It’s the same 2 steps, fetch using Git, and make a symlink (yes you can do that on Windows too)

Open an elevated command prompt (run as administrator)

cd \users\greg
git clone https://github.com/GregWoods/.vim.git vimfiles
mklink _vimrc vimfiles\.vimrc

Job done!


Older versions of Windows (such as Windows Server 2003) so not have the mklink command.
Also needed to add an environment variable $HOME

In the case of Windows Server 2003, I set up a user environment variable in System Properties -> Advanced -> Environment Variables -> User Variables
Variable: $HOME Value: %USERPROFILE%
Requires log off / login
Then create the link (it’s a hardlink rather than the softlink which mklink creates. For explanation, see overview-to-understanding-hard-links-junction-points-and-symbolic-links-in-windows )

fsutil hardlinks create _vimrc vimfiles\.vimrc

To VIM or not to VIM. The decades old text editor inspires avid devotion or utter hatred. I fell into the latter camp.

However, now that I’m experimenting with the Raspberry Pi for some hardware projects, it’s obvious I need something with more features than the nano editor. VIM pretty universal, will run in a terminal, or a non-GUI linux, and is undeniably fast editing once the steep learning curve is overcome.

So here are some of notes on VIM – particularly,setting up syntax highlighting with a nice colour scheme – a first step in making VIM palatable to my GUI insticts.

Colour Schemes

If I’d spent half the time learning VIM as I’d spent trying to customise the colours, I’d be a VIM Jedi already.

Good Schemes


I particularly like solarized

On Windows (Putty)

If you want any chance of getting the genuine Solarized colors working in VIM through Putty, the colours in Putty must be changed.

The easiest way to do this is with this reg file which sets up some sensible defaults for Putty, including the solarized dark colours

You will need to recreate any existing sessions to get the new defaults

On The Raspberry Pi

Connect and login using Putty. Your shell session will already have the new colour scheme

sudo apt-get install vim
cd ~
mkdir .vim
cd .vim
mkdir colors
wget https://raw.github.com/altercation/vim-colors-solarized/master/colors/solarized.vim
:e $HOME/.vimrc
i     (insert mode)
syntax enable
set background=dark
colorscheme solarized
:wq!      (save and close)

Now to add my VIM config to source control, we copy it to the .vim folder and symlink it first

cd ~
mv .vimrc .vim/.vimrc
ln -s .vim/.vimrc .vimrc
cd .vim
git init
ls -la         (shows hidden files)

Configure GIT
git config --global user.name "your full name"
git config --local user.name "your full name"
git config --global user.email "your email id"
git config --local user.email "your email id"
git config -l

still in the ~/.vim folder…

git add .
git commit -m "Initial commit of my vim configuration"
git remote add origin https://github.com/GregWoods/.vim

//had to do a git pull first
git pull https://github.com/GregWoods/.vim
git push origin master


My VIMconfiguration is now on github.

To install my Vim Config onto a new server…

cd ~
git clone https://github.com/GregWoods/.vim.git .vim
ln -s .vim/.vimrc .vimrc



When Free Goes Bad

On 2013/08/31, in Customer Service, by Greg Woods

We all love free stuff. Google mail, calendar, contacts, docs(drive), music. All superb free services. Dropbox, SkyDrive, UbuntuOne all add options for free cloud storage. Various other startups offer free services such as notes and picture storage. Free is appealing. But it’s risky, and as our dependency on these services grows, and the costs associated with running them goes up, we’ll see more and more either go to the wall, or start charging.

This week I got stung rather badly by the news that Catch.com – the ultra simple online note taking app, decided to “move in another direction”, and discontinue the service with only one month’s notice. Thankfully I can get my notes out, and import into another service. My problem is that I had spent a year learning, and developing a Windows Phone app that was 100% dependent on their API. Oh dear! That is a lot of wasted man-hours of work.

This is the second time I’ve been caught out by a free online service disappearing. I was an avid user of Google Reader before the plug was pulled. For those companies who keep their products, we are seeing a shift towards a pay model.

Now, I don’t mind paying for stuff to have a degree of certainty that the product will still be around in a years time. My big problem is the cost some of these companies charge. Apple may have introduced the idea of selling apps in bulk for peanuts, but the idea doesn’t seem to have caught on with most companies who are either too greedy, or too busy subsidising the free users, to charge a sensible fee. Dropbox are a prime example. Great product, but at $100/year for 100Gb, it is undeniably expensive. Yet I am more than happy paying Microsoft £32 ($48)/year for the same 100Gb. If I paid for the Premium versions of all the online services which I occasionally use, it adds up to a reasonable sum. Endomondo, Evernote, Dropbox, Google Apps. Most of these services are worth paying something for, but the pricing models are based on users who are using their product as a core part of their life. I don’t, so I won’t pay.

I can’t help thinking all these services would be cheaper if they weren’t giving so much away for free. To attract the customers, a more sustainable model may be to offer the full premium service for free for a long trial period. No more ridiculous 14 or 30 trials which are no use to anyone. No trial should be shorter than 120 days, and for something long term like online storage, make it a year – then make it cheap to sign up a t the end.