Setting up an Ubuntu development VM: Scripted

Having seen this blog post about setting up a development Linux VM in a recent Morning Brew, I had to have a shot at doing it all in a script instead, since it looked like an awful lot of hard work to do it manually.

The post I read covers downloading and installing VirtualBox (which could be scripted also, using the amazing Chocolatey) and then installing Ubuntu, logging in to the VM, downloading and installing Chrome, SublimeText2, MonogDB, Robomongo, NodeJs, NPM, nodemon, and mocha.

Since all of this can be handled via apt-get and a few other cunning configs, here’s my attempt using Vagrant. Firstly, vagrant init a directory, then paste the following into the Vagrantfile:

Vagrantfile

[bash]
Vagrant.configure(2) do |config|

config.vm.box = "precise32"
config.vm.box_url = "http://files.vagrantup.com/precise32.box"

end
[/bash]

Setup script

Now create new file in the same dir as the Vagrantfile (since this directory is automatically configured as a shared folder, saving you ONE ENTIRE LINE OF CONFIGURATION), calling it something like set_me_up.sh. I apologise for the constant abuse of > /dev/null – I just liked having a clear screen sometimes..:

[bash]#!/bin/sh

clear
echo "******************************************************************************"
echo "Don’t go anywhere – I’m going to need your input shortly.."
read -p "[Enter to continue]"

### Set up dependencies
# Configure sources & repos
echo "** Updating apt-get"
sudo apt-get update -y > /dev/null

echo "** Installing prerequisites"
sudo apt-get install libexpat1-dev libicu-dev git build-essential curl software-properties-common python-software-properties -y > /dev/null

### deal with intereactive stuff first
## needs someone to hit "enter"
echo "** Adding a new repo ref – hit Enter"
sudo add-apt-repository ppa:webupd8team/sublime-text-2

echo "** Creating a new user; enter some details"
## needs someone to enter user details
sudo adduser developer

echo "******************************************************************************"
echo "OK! All done, now it’s the unattended stuff. Go make coffee. Bring me one too."
read -p "[Enter to continue]"

### Now the unattended stuff can kick off
# For mongo db – http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/
echo "** More prerequisites for mongo and chrome"
sudo apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –recv 7F0CEB10 > /dev/null
sudo sh -c ‘echo "deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen" | sudo tee /etc/apt/sources.list.d/mongodb.list’ > /dev/null
# For chrome – http://ubuntuforums.org/showthread.php?t=1351541
wget -q -O – https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add –

echo "** Updating apt-get again"
sudo apt-get update -y > /dev/null

## Go, go, gadget installations!
# chrome
echo "** Installing Chrome"
sudo apt-get install google-chrome-stable -y > /dev/null

# sublime-text
echo "** Installing sublimetext"
sudo apt-get install sublime-text -y > /dev/null

# mongo-db
echo "** Installing mongodb"
sudo apt-get install mongodb-10gen -y > /dev/null

# desktop!
echo "** Installing ubuntu-desktop"
sudo apt-get install ubuntu-desktop -y > /dev/null

# node – the right(?) way!
# http://www.joyent.com/blog/installing-node-and-npm
# https://gist.github.com/isaacs/579814

echo "** Installing node"
echo ‘export "PATH=$HOME/local/bin:$PATH"’ >> ~/.bashrc
. ~/.bashrc
mkdir ~/local
mkdir ~/node-latest-install
cd ~/node-latest-install
curl http://nodejs.org/dist/node-latest.tar.gz | tar xz –strip-components=1
./configure –prefix=~/local
make install

# other node goodies
sudo npm install nodemon > /dev/null
sudo npm install mocha > /dev/null

## shutdown message (need to start from VBox now we have a desktop env)
echo "******************************************************************************"
echo "**** All good – now quitting. Run *vagrant halt* then restart from VBox to go to desktop ****"
read -p "[Enter to shutdown]"
sudo shutdown 0
[/bash]

The gist is here, should you want to fork and edit it.

You can now open a prompt in that directory and run
[bash]
vagrant up && vagrant ssh
[/bash]
which will provision your VM and ssh into it. Once connected, just execute the script by running:
[bash]
. /vagrant/set_me_up.sh
[/bash]

(/vagrant is the shared directory created for you by default)

Nitty Gritty

Let’s break this up a bit. First up, I decided to group together all of the apt-get configuration so I didn’t need to keep calling apt-get update after each reconfiguration:

[bash]
# Configure sources & repos
echo "** Updating apt-get"
sudo apt-get update -y > /dev/null

echo "** Installing prerequisites"
sudo apt-get install libexpat1-dev libicu-dev git build-essential curl software-properties-common python-software-properties -y > /dev/null

### deal with intereactive stuff first
## needs someone to hit "enter"
echo "** Adding a new repo ref – hit Enter"
sudo add-apt-repository ppa:webupd8team/sublime-text-2
[/bash]

Then I decided to set up a new user, since you will be left with either the vagrant user or a guest user once this script has completed; and the vagrant one doesn’t have a desktop/home nicely configured for it. So let’s create our own one right now:

[bash]
echo "** Creating a new user; enter some details"
## needs someone to enter user details
sudo adduser developer

echo "******************************************************************************"
echo "OK! All done, now it’s the unattended stuff. Go make coffee. Bring me one too."
read -p "[Enter to continue]"
[/bash]

Ok, now the interactive stuff is done, let’s get down to the installation guts:

[bash]
### Now the unattended stuff can kick off
# For mongo db – http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/
echo "** More prerequisites for mongo and chrome"
sudo apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –recv 7F0CEB10 > /dev/null
sudo sh -c ‘echo "deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen" | sudo tee /etc/apt/sources.list.d/mongodb.list’ > /dev/null
# For chrome – http://ubuntuforums.org/showthread.php?t=1351541
wget -q -O – https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add –

echo "** Updating apt-get again"
sudo apt-get update -y > /dev/null
[/bash]

Notice the URLs in there referencing where I found out the details for each section.

The only reason these config sections are not at the top with the others is that they can take a WHILE and I don’t want the user to have to wait too long before creating a user and being told they can go away. Now we’re all configured, let’s get installing!

[bash]
## Go, go, gadget installations!
# chrome
echo "** Installing Chrome"
sudo apt-get install google-chrome-stable -y > /dev/null

# sublime-text
echo "** Installing sublimetext"
sudo apt-get install sublime-text -y > /dev/null

# mongo-db
echo "** Installing mongodb"
sudo apt-get install mongodb-10gen -y > /dev/null

# desktop!
echo "** Installing ubuntu-desktop"
sudo apt-get install ubuntu-desktop -y > /dev/null
[/bash]

Pretty easy so far, right? ‘Course it is. Now let’s install nodejs on linux the – apparently – correct way. Well it works better than compiling from source or apt-getting it.

[bash]
# node – the right(?) way!
# http://www.joyent.com/blog/installing-node-and-npm
# https://gist.github.com/isaacs/579814

echo "** Installing node"
echo ‘export "PATH=$HOME/local/bin:$PATH"’ >> ~/.bashrc
. ~/.bashrc
mkdir ~/local
mkdir ~/node-latest-install
cd ~/node-latest-install
curl http://nodejs.org/dist/node-latest.tar.gz | tar xz –strip-components=1
./configure –prefix=~/local
make install
[/bash]

Now let’s finish up with a couple of nodey lovelies:
[bash]
# other node goodies
sudo npm install nodemon > /dev/null
sudo npm install mocha > /dev/null
[/bash]

All done! Then it’s just a case of vagrant halting the VM and restarting from Virtualbox (or edit the Vagrantfile to include a line about booting to GUI); you’ll be booted into an Ubuntu desktop login. Use the newly created user to log in and BEHOLD THE AWE.

Enough EPICNESS, now the FAIL…

Robomongo Fail 🙁

The original post also installs Robomongo for mongodb administration, but I just couldn’t get that running from a script. Booo! Here’s the script that should have worked; please have a crack and try to sort it out! qt5 fails to install for me which then causes everything else to bomb out.

[bash]
# robomongo
INSTALL_DIR=$HOME/opt
TEMP_DIR=$HOME/tmp

# doesn’t work
sudo apt-get install -y git qt5-default qt5-qmake scons cmake

# Get the source code from Git. Perform a shallow clone to reduce download time.
mkdir -p $TEMP_DIR
cd $TEMP_DIR
sudo git clone –depth 1 https://github.com/paralect/robomongo.git

# Compile the source.
sudo mkdir -p robomongo/target
cd robomongo/target
sudo cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR
make
make install

# As of the time of this writing, the Robomongo makefile doesn’t actually
# install into the specified install prefix, so we have to install it manually.
mkdir -p $INSTALL_DIR
mv install $INSTALL_DIR/robomongo
mkdir -p $HOME/bin
ln -s $INSTALL_DIR/robomongo/bin/robomongo.sh $HOME/bin/robomongo

# Clean up.
rm -rf $TEMP_DIR/robomongo
[/bash]

Not only is there the gist, but the whole shebang is over on github too.

ENJOOOYYYYY!

Strings, Bows, (A)Quiver

Framework Training

This past week I’ve been lucky enough to try my hand at something new to me. Throughout my career my work has consisted almost entirely of writing code, designing solutions, and managing teams (or teams of teams).

Last week I took a small group of techies through a 4 day long Introduction To C# course, covering some basics – such as types and members – through some pretty advanced stuff (in my opinon) – such as multicast delegates and anonymous & lamba methods (consider that the class had not coded in C# before the Monday, and by Tuesday afternoon we were covering pointers to multiple, potentially anonymous, functions).

I also had an extra one on one session on the Friday to help one of the guys from the 4 day course get a bit of an ASP.Net knowledge upgrade in order to get through a SiteCore course and exam.

Do what now?

I’d not done anything similar to this previously, so was a little nervous – not much though, and not even slightly after the first day was over. Public speaking is something that you can easily overcome; I used to be terrified but now you can’t shut me up, even in front of a hundred techies…

Challenge Accepted

The weekend prior to the course starting I found myself painstakingly researching things that have, for almost a decade, been things I “just knew”. I picked up .Net by joining a company that was using it (VB.Net at the time) and staying there for over 5 years. I didn’t take any “Intro” courses as I didn’t think I needed to; I understood the existing code just fine and could develop stuff that seemed to suit the current paradigm, so I must be fine.. right?

The weekend of research tested my exam cram ability (being able to absorb a huge amount of info and process it in a short amount of time!) as I finally learned things that I’ve been just doing for over 8 years. Turns out a lot of stuff I could have done a lot better if I had the grounding that the course attendees, and now I, have.

It. Never. Ends.

Each evening I’d get home, mentally exhausted from trying to pull together the extremely comprehensive information on the slides with both my experiences and my research, trying to end up with cohesive information which the class would understand and be able to use. That was one of the hard parts.

Every evening I’d have to work through what I had planned to cover the next day and if there was anything I was even slightly unsure of I’d hit the googles and stackoverflows until I had enough information to fully comprehend that point in such a way I could explain it to others – potentially from several perspectives, and with pertinent examples, including coming up with a few quick “watch me code” lines.

Never. Ends.

Once I’d got all of the technical info settled in my noggin, then came the real challenge; trying to make this expansive course relevant to each attendee. A couple of them were learning C# in order to learn ASP.Net so that they can move into .Net web development, whilst one was mainly learning to support and develop winforms apps. Also each one was absorbing and processing the information at a different speed, and one even had to leave for one day as he needed to support a production issue, then returned a day later! How do you deal with that gap in someone’s knowledge and make it all relevant without duplicating sections for the others?

Not. Ever.

I’m booked in to lead an Advanced C# course next month and an ASP.Net one the month after, plus I’m looking at the MVC course at some point. All whilst working for a startup at the same time (more on that soon)! 2014 is going to be EPIC. It already is, actually..

Summary

I’m sure others could, and (since I’ve heard about people who do this) would, blag it if there was something they didn’t know, since – hey, these attendees aren’t going to be able to correct me are they?! This is an Intro course!

That’s obviously lame, but for a reason in addition to the one you would imagine; you’re cheating yourself if you do that. I have learned SO MUCH more information to surround my existing experience that I can frame all coding decisions that much better. Forget committing Design Patterns to memory if you don’t know what an event actually is. Sure, it’s basic, but it’s also fundamental.

Teaching is hard.

I like it.

You might too.

Programming-MuddyFunster!

I recently saw the website programming-m*therf*cker.com (not linking to it as people’s nsfw alerts might go mental with this post) and replied with the comment below. Have a look at the site and the values it extols, then let me know if I’m being fair!

Man, that site annoys me. So long as he’s talking about programming as a hobby, then that’s fine. But all of those things he’s against are nothing to do with managers but to do with devs making high quality software and being professional.

The site also makes me happy, in that if there are people with that same attitude out there putting software into production systems then I’ll always be able to find gainful employment fixing their stuff…

Belated Year in Review: 2013 (and the start of 2014!)

This has been something I’ve wanted to write for a while, but as per usual haven’t really found the time to get stuck in.

As such, here goes – a review of the highlights from my own 2013. I think it was an amazing year; so much happened, and given I’m a optimist I feel it was all incredible.

The Year of 101

“Year of 101s”

I ended 2012 and started 2013 with a promise that I’d learn and blog about one new thing a month, calling it the Year of 101s. I didn’t call it a new year’s resolution, but it might as well have been called that since it lasted about as long as a resolution tends to!

I don’t want to call this a failure – although many would, no doubt – since it not only fired me up for writing blog posts again, but I did learn a bunch of new things over a few months.

My highlights included:

In January …

node-js-logo

… getting really stuck into the basics of node.js with 6 articles and one summary covering

January also finally got me into using Github more, and learning how to write repos to accompany blog posts

In February …

smart-tv-icon

… I had a crack at monkeying around with making an app for my Smart TV, with posts covering

In March …

element14_farnell_rpi
worksnug

… I went off-piste. Having planned to cover the Raspberry Pi throughout March, I instead created a load of “Asides” along such subjects as

There were also a few actual posts on the raspberry pi, but only getting so far as setting up, a bit more setting up, and XBMC on the pi, and they were spread across three months!

After that …

basic vagrant up

… I gave up on the whole new thing each month idea, and just tried to get on with learning stuff. Thanks to attending DevOpsDays in March (I think), and after deciding to create and consult a “Life Advisory Board” from a group of friends and previous colleagues I ended up setting myself up as a consultant.

My consulting plan was inspired by DevOpsDays and from reading The Phoenix Project – I wanted to learn enough about some core values to developing a devops mentality within a company that I could become an advisor; helping them with value stream mapping, impact mapping, 5 whys, and other retrospective processes as well as environment automation tooling.

As such, I got stuck into Vagrant and Chef with a short series of Chef for developers posts.

Then came the cloudiness …

azure-settings-1

… By August I was working on a contract (not related to devops at all, but ya gotta pay the bills, amirite?!) doing some fascinating Azure proofs of concept which I started sharing; the only concept I finished writing up was automated image resizing, but I’ve got two or three more stonking ones in the pipeline!

But, in November …

rposbo_m

… I had the extreme honour of being invited to speak at Velocity Conf!!

This was SO exciting! I’d spent MONTHS with my cohort, Dean Hume, working on the presentation, practising it, getting what we felt was a good flow to it. The research process was fascinating to me as I love to learn, and the process of distilling this into a slide or two of easily presented information was very interesting.

We’d make sure to spend a morning a week out of our respective offices, planning the next round of changes over breakfast at Southbank, then practising and practising the whole thing over beers and burgers at Bill’s – these practise sessions always had booze and were always great fun! And also surprisingly extremely productive!

We were even lucky enough to have a practise of our session at the inaugural TECHinsight, which was a massive confidence boost; this was our first public presentation together, and my first one at all, ever! Amazing fun!

Then came the big deal – actually attending VConf. Wearing the speaker lanyard was fantastic, as I got to schmooze with the other speakers; obviously I was completely silent when faced with a table of Steve Souders, John Allspaw, Yaov Weiss, and Andy Davies.

It was all utterly incredible.

So what’s happening in 2014?

As amazing as 2013 was for me, 2014 is going to be equally exciting if not more so. Off the back of VConf, Dean and I are working through the process of getting a proposal accepted for a book we’re pitching to be published via O’Reilly, and I’ll be attending the (enable smug mode) invite only (disable smug mode) conference, edgeconf in March.

I’m in my last week at my current Solution Architect contract at Asos, after which I have a two week hardcore regime of Pluralsight courses to get back into being a developer, as well as several books such as Lean Startup, Viral Loop, and Purple Cow, so that I can join an exciting new venture at a start-up with a few passionate devs and gurus to see if we can make something amazing in a few months (or before we all run out of money)!

I’m also taking up the challenge of being a trainer for a .Net training company; I’ll be running the odd course here and there for the foreseeable future on various subjects, and hopefully even writing some of the material for new courses if possible.

In Summary

Kicking off the 101s in late 2012/ early 2013 got me back into blogging, back into learning, back into developing and sharing.

Attending and presenting at TECHinsight and VelocityConf gave me new passions: collaboratively writing, presenting, and teaching.

Leaving permanent employment and going solo gave me my freedom; I just took 3 weeks off over Xmas to spend time with my oldest daughter. Going to the museums, aquarium, cinema, and just hanging out together have been worth more than any contract day rate could offer me.

Not to mention I have a hundred things I want to blog about, and a hundred more proofs of concept to dig around in. It’s going to be a very busy and very exciting year…

Aside #10 – Send To Kindle WordPress plugin

Whilst uber geeking it up (streaming a HD Wired.com video podcast to my TV via a raspberry pi with the world’s teeniest usb wifi and a USB battery pack – my next RPi post will cover this!) I learned that WordPress has a new plugin for sending posts straight to your Kindle!

Great idea, since I’m always wanting to read some long post but don’t have the time, so would love a “read it later” button to push it to another device.

Installing the plugin

Here’s all it took to install on this blog:

Search for "Send to Kindle” from the plugin page on your wordpress install/site.

Send To Kindle - finding plugin 1

Find the “Send To Kindle” plugin from “Amazon Inc” and click “install”

Send To Kindle - finding plugin 2

Once installed you have a couple of options

Send To Kindle - plugin installed

You can configure the basics, such as where to display it, what font to use, what text to display (you’re limited to “Kindle”, “Send to Kindle”, or nothing..), which colour scheme to use, what size icon and of which colour, what colour background, and whether to display a border or not.

Send To Kindle - plugin setup - basic

If you want to mess around with the display yourself then the Advanced controls allow this, as well as some default settings of where to pull the post details from.

Send To Kindle - plugin setup - advanced

Then this will appear wherever you’ve chosen.

Button in action

Here it is on a post

Send To Kindle - button appearing

Clicking that  button pops up a window to get you to log in to your Amazon account …

Send To Kindle - Log In

and choose which device you send it to…

Send To Kindle - Configure Settings

Then content will be loaded and processed for Kindle viewing:

Send To Kindle - Awaiting Content  

Which means it ends up looking like this:

Send To Kindle - Content Loaded

Clicking the “Send” button first gives you a quick thinky thinky image:

Send To Kindle - Uploading

Before shortly letting you know it’s all ok

Send To Kindle - Upload Complete 

 

Viewing the post on your Kindle

You can then see this post on your Kindle the next time you turn it on in a Wifi (or 3G if your Kindle has Whispernet and you selected that as the delivery mechanism) area:

Here I have a couple of posts sent to my Kindle displaying on the home screen:

Send To Kindle - Viewing post content on Kindle - Listing

Selecting the RaspberryPi Part #2 post (which you can’t tell from the two on the home screen at the moment – I can probably sort this by changing the selectors in the advanced settings on the plugin page) here we have some basic text content:

Send To Kindle - Viewing post content on Kindle

Some image content:

Send To Kindle - Viewing post content on Kindle - Image

And some code example content:

Send To Kindle - Viewing post content on Kindle - Code

The code example is rendered via the wonderful SyntaxHighlighter plugin, hence the weird “view sourceprint?” link at the top of each one.

Summary

Pretty cool concept, huh? No idea if my posts are worth doing this to, but I like the idea of it. And it’s easy too; once installed you can either say “put this everywhere on every post” or just use the [sendToKindle] smart code.

Asides #9 – IRC. WTF?

Whilst I’ve been attempting to learn a new thing each month this year, I’ve been finding it really tricky to keep to the pretty loose schedule. As such, I though I’d try and note down every time a shiny new thing takes my interest, so that I have some idea why I’m incapable of completing a series of blog posts.

JabbR / IRC

IRC

Internet Relay Chat (IRC) – text based shared “room” chat environment, with private messaging etc. I seriously had no idea that people still used these. I would have used them back in university (’98/’99), but haven’t touched them since.

The idea of attempting to convince a company that they should set up a private IRC server internally for team communication just doesn’t seem right to me. I’d much rather suggest that people use any other form of IM or even JabbR; this is probably due to my developer background instead of ops.

JabbR

As such, I’ve been trying to install JabbR in the cloud using AppHarbify as a proof of concept

You can use Janrain to process the authentication, and AppHarbify allow you to just install apps into your appharbor account – including JabbR!

The details for manual installation are in an AppHarbor blog but the killer info is in the comments section..

Instigator
— Discovering people still use IRC, thanks to discussions at DevOpsDays..

Aside #8 – Officeless Working; Amazeballs!

Whilst I’ve been attempting to learn a new thing each month this year, I’ve been finding it really tricky to keep to the pretty loose schedule. As such, I though I’d try and note down every time a shiny new thing takes my interest, so that I have some idea why I’m incapable of completing a series of blog posts.

Mobile working

WorkSnug

The worksnug website lists places mobile workers have tried and rated; unfortunately it’s mainly coffee shops. The app can apparently filter these out, but the app doesn’t work on the Samsung S3.

worksnug

Southbank

I’ve recently discovered that the SouthBank in London is an amazing place to be an officeless worker:

  • The Royal Festival Hall (RFH) is HUGE, has loads of different areas to sit, free wifi (a bit dodgy sometimes, but fast when it is working), no pressure to buy coffees just to be there, and a members area with panoramic views over London (for only £45 a year – awesome!)

  • The British Film Institute (BFI) venue has a Benugo coffee area, but quite a lot of seating and no pressure to actually buy any coffee

  • National Theatre is a wonderful, huge building, which between shows is exceptionally quiet. Free wifi, limited seating, but would be perfect in nicer weather due to it’s outdoor seating areas.

Instead of following WorkSnug and ending up stuck in coffee shops, I’m going to spend some time with E-Architect’s listing of awesome buildings in London and a few such others and find the ones you can happily work from.

Non-Southbank Mobile Workspaces

Other great places I’ve previously tried and tested, or would like to:

Barbican
Barbican

British Museum
British Museum

British Library
British Library

Any other suggestions?

They don’t need to have free wifi; sometimes I prefer not to join those open networks and will instead fire up a bluetooth PAN with my phone. It’s still fast enough for everything I need to use it for.

Aside #7 – Career Change

Whilst I’ve been attempting to learn a new thing each month this year, I’ve been finding it really tricky to keep to the pretty loose schedule. As such, I though I’d try and note down every time a shiny new thing takes my interest, so that I have some idea why I’m incapable of completing a series of blog posts.

Career

Having decided to leave senior management and get back into something more technical, I thought about what I enjoy doing. I had a short chat with a very smart business friend of mine and thought I’d try to go it alone and focus on devops as a service I would eventually provide.

I was in the enviable position of having the luxury of a little bit of time to work out the direction to take, and made a great move in crowd-sourcing my decision making! I sent out a verbose email explaining all of the options and what I wanted to get out of life (!) to a group of friends (some techies, some not) and asked for their thoughts. The replies covered every possible scenario and reading them helped me work out what I wanted to do myself.

As such, I’m leaving permanent employment behind for the time being, becoming a contractor and working on setting up as a freelancer/consultant for DevOps evangelism.

Initially I needed to set up a company.. which isn’t particularly complicated, but it’s certainly not quick and easy! Coming up with a company name, checking domain availability, registering a company bank account, setting myself up as a consultancy; this is all time consuming stuff.

If you’re thinking of doing the same thing I would recommend reading up on it – there is a VAST amount of info out there on the interwebs and this article from Simon Rigsby is a great one to get your head around things.

What I ended up doing, after loads of email conversations with techie mates who have gone contracting, was to join the Professional Contractors Group and also got insurance, set up a company, and chose an accountant all via the PCG.

In the end it’s all been handled very smoothly by my accountants, and I’m now able to review a contract myself for basic IR35 flags, but I can get one contract reviewed for free each year via PCG.

Instigator
— not liking my job in senior management, deciding to work out what’s important to me instead and focus on that.

Aside #6 – A Random Analogy; DevOps/Washing Up

Whilst I’ve been attempting to learn a new thing each month this year, I’ve been finding it really tricky to keep to the pretty loose schedule. As such, I though I’d try and note down every time a shiny new thing takes my interest, so that I have some idea why I’m incapable of completing a series of blog posts.

Random Analogy – DevOps For Washing Up

Random Washing Up Analogy

Waterfall

Getting all of the dishes ready to wash, clearing all of the space required to let them dry, washing everything in one go and setting it all to dry, then getting a towel and drying everything in one go, then putting everything away in one go.

Agile

Wash one sink full, put it on the drainer, stop washing and grab a towel, dry that load and put it away as you go – one iteration completed!

DevOps

My definition of the devops movement is not about a technology or a single process, but about getting everyone necessary to get something out of the door involved at the start. As such; get two people to help you out: one washes, one dries, one puts away. Continuous deployment 😉

Instigator
— Thinking about DevOps a lot in the run up to devopsdays, and my dishwasher breaking..!