Raygun deployments & Azure Dev Ops

Unfortunately, it appears that Raygun does not have a ready built deployment integration for ADO. It looks like there are a few supported tools listed here: Supported Deployment Tools, but sadly, no love for ADO. What is this, like 2013?

Anyway, not to worry, Raygun helpfully provides a simple API that we can use to submit a deployment when a release pipeline runs in ADO.

Authorising Access to Raygun

First step is to get an API key from Raygun. Click on your user in the top right and go to My Settings.

Scroll down to the External Access Token field & copy it for later.

Next select your application from the dropdown in the top left and go to Application Settings ->General and save the API key from the Application Settings box

Creating the ADO PowerShell release step.

It’s as simple as going to your project’s Releases menu item and selecting the View Stage Tasks link in your selected stage.

Next, add a PowerShell task. Click the PLUS sign next to the Agent Job.

Choose the PowerShell task from the Add Tasks pane.

Next, set up the task with the PowerShell script to perform a REST POST to the Raygun API.

I’ve chosen some ADO pipeline variables relating to our deployment process, but there are many variables to choose from in the classic release and artefact variable list if these aren’t relevant to your deployments.

It’s worthwhile testing whether the posting works by running this task as a separate PowerShell test script to make sure you’ve got the API keys set up correctly.

Posted in Uncategorized | Leave a comment

Azure lights and Brothel Mode™

A long, long time ago, I was watching a Scott Hanselman developer video and he had L.E.D lighting around his office ceiling.

I thought that looked really cool, so like a nerdy little fanboy off I went and bought two sets of GoVee RGBIC LED lighting strips and 25m of conduit to hold them.

I chose GoVee because their strips are wi-fi connected (in addition to Bluetooth), the iPhone app is great and GoVee also has a developer portal so you can issue API calls to control your lights! They also work with Alexa which is another bonus.

I spent about and hour screwing the conduit under the coving that goes around my office ceiling and stuck up the 20m roll of RBIC Led’s.

I was a bit annoyed that the conduit didn’t soften the LEDs into a more solid light bar given the conduit covers were frosted not transparent, but its an acceptable glow.

Next I added the 5m roll under the edge of my desk, for that Fast n Furious neon look!

End result :

Build success!

I also took the step of signing up to the GoVee API so I could issue HTTP requests to control my lights.

Then, I created Postman tests to change the colours.

Adding these HTTP requests to my personal Azure Dev Ops build piplines to change the colours on a build failure, results in this :

Build failed!

On showing this to one of my work colleagues – Mark Robinson – jokingly named it “Brothel Mode™”, which has stuck making me rename all the YAML tasks in the ADO pipeline to “EnableBrothelMode” when a build fails!

GoVee API use & YAML Pipelines

The GoVee developer site is great, good documentation and their API is super easy to use :

  1. Sign up, get an API key
    They’ll want to know what you’re using it for but integration with ADO seem acceptable!
  2. Add an authorisation header with a key value pair :
    key : Govee-API-Key
    Value: <Your api key guid from Govee>
  3. Create a queries to control your lights!
    Send a GET request to

    http://developer-api.govee.com/v1/devices

    to get a list of all your devices, their capabilities and the device ID’s required to issue commands.
  4. Send a PUT request to change the light state!
    Include the Authorisation header containing your API key and send a request to

    http://developer-api.govee.com/v1/devices/control

    including a JSON body with the command parameters. For example, change the lights to red :
{
   "device": "XX:XX:XX:XX:XX:XX:XX:XX",
   "model": "H6159",
   "cmd": {
      "name": "color",
      "value": {
         "r": 255,
         "g": 0,
         "b": 0
      }
   }
}

Control with Azure DevOps

Controlling the lights from an ADO pipeline is also pretty easy once you got the YAML tasks figured out – aka spending a few excruciating hours fiddling with spaces to get it all lined up correctly……stupid yaml spacing nonsense……

- stage: SetBuildLightsToFailure        
  dependsOn: SetupYARNAndBuild
  condition: failed()
  jobs:
  - job: EnableBrothelMode
    steps:
    - task: restCallBuildTask@0
      displayName: Enable Brothel Mode.
      inputs:
        webserviceEndpoint: 'Govee Azure Lights'
        relativeUrl: 
        httpVerb: 'PUT'
        body: |
          {
              "device": "XX:XX:XX:XX:XX:XX:XX:XX",
              "model": "H6159",
              "cmd": {
                  "name": "color",
                  "value": {
                      "r": 255,
                      "g": 0,
                      "b": 0
                  }
              }
          }
        contentType: 'application/json'
        headers: '{"Govee-API-Key":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"}'
        allowInvalidSSLCertificate: false

The thing about your entire office glowing read apart from random callers thinking its a room full of cheap hookers, is its an incentive to fix the build really quickly. No one likes sitting in a flaming-hell-box-of-crushed-dreams-and-broken-code.

All in all, a great addition to brighten the office and when there’s no one in the house I turn up the amp, line up some Justin Bieber, and change the lights to disco mode.

#LIVINGMYBESTLIFE

Posted in Uncategorized | Leave a comment

Hollister – quality clothes, shit I.T.

OK, seems like another company takes the line of “change your email to use our service”.

I purchased a nice hooded top in store, and signed up to the news letter at the PoS terminal with my hills.house email address. I half expected it to reject is as invalid, but it all went through just fine.

Fast forward a few weeks. I receive an email with some heavily discounted items, so I duly ordered £60’s worth of t-shirts and hoodies.

The final page was “login and see your accumulated points” or something similar.

I thought well, I haven’t created an account other than on the PoS terminal, but that didn’t ask me for a password, so I’ll login or change my password on the web.

Bzzzzzzt. No, no I won’t. Or rather I can’t because the website’s email validation is just as broken as British Telecoms.

I thought it was getting better, I’d only had a couple of these, Yorkshire Bank (fixed) and B.T (won’t fix), and now we can add Hollister to the shit list.

I contacted customer support, and they responded with the typical canned helpdesk response of “have you tried clearing your cookies or using a different browser?”

No, because I know that won’t solve your shitty email validation problem.

So I responded politely a second time guiding them to the previous blog-post B.T.’s inability to fix email. Poor but unsurprising. has some info on what’s wrong and how to fix it.

Next I received a nice response from Linda at Hollister customer support:

“Unfortunately, like your bank, the solution is to use an email address with a common domain.”

Nope, not good enough, another case of “we can’t fix it, change your email”.

Top marks Hollister, top marks.

Posted in Uncategorized | Leave a comment

FleetWave Lite, first product release!

For full release details and a free trial, go to the Fleetwave Landing Page: https://www2.chevinfleet.com/introducing-fleetwave-lite

How did I get here?

FleetWave Lite is the product I’ve been working on for the past 18 months, converting an ASP.Net monolithic application that had grown organically over the previous 25 years into a cloud-native SaaS application. I’ll say it’s been difficult.

We had no usage metrics, no idea how many concurrent users we’d have to support, and very  little idea of data sizes because the product’s sales strategy was essentially fire and forget.

We didn’t have access to any of these parameters because the product was installed on the client’s premises in all cases.

As the application’s architect, I was concerned about these issues. To be fair, not all clients were opaque, but the specifics were murky at best.

In order to reduce risk, I over-architected some Azure services, but they are auto-scaled, so the application should be able to handle increased traffic regardless.

Database connectivity, notifications, client onboarding, caching, session state, auth*, and other features had to be modified from the monolith version. All of this just doesn’t occur to the developer when it’s just one application with everything held in memory; yes, even the session state was InProc, that’s how old-school this codebase was.

All FleetWave code changes were made by three of Chevin’s developers while I architected the code changes for the move to Azure. I did manage to complete some code for the migration in the form of a client onboarding tool written in React with a C# WebAPI for the interface with Azure, which I enjoyed but confirmed my belief that I will never, ever become a web developer!

The next issue was our outdated tooling, which also needed to be updated.

Hello, Azure Dev Ops

We needed to migrate not only a 25-year-old monolith, but also to a development system capable of supporting our final target in order to implement modern development techniques.

Yes, our previous Jira and Bamboo tooling allowed CI and CD, but they didn’t really support our desired target state. Because we’re a Microsoft house, the decision was simple: Azure Dev Ops. So I began the migration for our entire toolchain to A.D.O. in conjunction with setting up the whole Azure subscription & everything else.

I’d say I’d bitten off more than I can chew, but everyone says I have a big mouth, so I just plouged ahead with my master plan, ignoring the nay-sayers, confident that I could achieve the end goal in the time we’d been given.

It’s amazing how much better this is than Bamboo. The features and user-friendliness are excellent. The move from the Atlassian tool chain was a breeze for us, given that we’re almost entirely Microsoft and Windows-based.

Deadline met

After just over 13 months, we’ve achieved our goal of migrating a 25 year old monolith written in ASP.Net Web forms to be a nice shiny new Azure SaaS application!

So well done Karl Gibson, Neil Robinson and Paul Muir. With front end refactoring from Daniel Joseph and Bailey Clarke helping out with the testing.

NextGen here we go!

FleetWave NextGen is the next project on the horizon. C# WebAPI 2.0, is used in conjunction with D.A.P.R. and all hosted in Azure Kubernetes Service with an attractive React Native front end, so that we can approach this product from a mobile first perspective.

I’ll post more about this as it unfolds!

Posted in Chevin | Leave a comment

B.T.’s inability to fix email. Poor but unsurprising.

So, first thing, a pet hate. The number of times I’m signing up for something and the email address validation doesn’t accept my perfectly valid address because of the .house top-level domain. And, we’re not talking small fry here. Everything from my bank (now fixed due to my persistence!), to B.T. – yes B-friggin’-T, the largest telecoms provider in the U.K.

Almost makes me want to never sign up with a proper email address and use 10 Minute Email forevermore.

It’s not like B.T. doesn’t have enough money to pay for decent developers to work on their shitty billing website. But no. Even after ringing them and complaining, the response I got was worse than their developers’ not being able to code a validation regex correctly.

“Its your problem, chage your email address.”

Helpful lady on the B.T. Broadband billing help line.

You’re kidding me, right? I pay for my personalized family domain name that I’ve had for nearly 8 years, and you want me to change it so I can use your website? There’s something wrong with this customer service picture.

The .house top-level domain has been around for ~9 years now.

Domains that don’t end in .COM, .ORG, .NET & .CO.UK have been around a long, long time, in fact, there are over 1500 top-level domains, so that’s probably 1,496 TLD’s your shitty validation won’t cope with.

And yet so many sites and mobile applications don’t accept perfectly valid domain names as part of the email address.

So let’s fix that. Here’s a simple bit of C# to download the list of TLD names from IANA – the Internet Assigned Numbers Authority – and then use a fairly well-tested regex to validate both the email address and the top-level domain. It’s literally 20 minutes of effort.

Before you go getting your knickers in a twist, the reg-ex doesn’t cover 100% of all cases but the ones it doesn’t cover really are super edge cases for odd character combinations that you probably can’t type on a real keyboard anyway.

I did come across an article by Haaked that gives a solution, but whilst it copes with most of what’s in the RFC defining how an email address should be formatted, it still doesn’t take into account valid TLDs. Even the mighty Haak can’t 100% fix this, so I feel pretty good with my attempt!

So, yes, your email may be formatted correctly, but if the TLD isn’t valid, it’s goin’ nowhere!

I did also find a javascript package called MailCheck. It does a load of clever sub-domain/TLD checking and some regex validation, but you guessed it, IT STILL DOESN’T VALIDATE THE TLD PROPERLY.

They still have a static list of ‘valid’ TLD’s. Yes, they’ve provided the methods to ‘customise’ the list, but since you can’t make this up as you go along, why not build in getting the list from the horse’s mouth? IANA regularly provides this text list of all the TLDs!

Matching the TLD against a regex that says it has to be alphanumeric might make it syntactically valid, but it’s still wrong, because, well, D-N-S.

To be fair, B.T. probably has decent developers but for whatever reason, this bit of crap code slipped through their water-tight pull request process.

So here’s a little snippet I knocked up to see just how difficult proper TLD validation would be. Hint. Not very.

string[] tldNames;

void Main()
{
	tldNames = FetchIANARootDb();

	ValidateEmail("[email protected]").Dump("[email protected]");
	ValidateEmail("[email protected]").Dump("[email protected]");
	ValidateEmail("[email protected]").Dump("[email protected]");
	ValidateEmail("[email protected]").Dump("[email protected]");
	ValidateEmail("[email protected]").Dump("[email protected]");
	ValidateEmail("[email protected]").Dump("[email protected]");
	ValidateEmail("invalid@[email protected]").Dump("invalid@[email protected]");
	ValidateEmail(@"Fred\ [email protected]").Dump(@"Fred\ [email protected]");
	ValidateEmail(@"""Fred\ Bloggs""@example.com").Dump(@"""Fred\ Bloggs""@example.com");
	ValidateEmail(@"rob@hÔtels.com").Dump(@"rob@hÔtels.com");
	ValidateEmail(@"rob@hÔtels.cÔm").Dump(@"rob@hÔtels.cÔm");
	ValidateEmail(@"[email protected]").Dump(@"[email protected]");
	ValidateEmail(@"rob@uk").Dump(@"rob@uk");

	//Phill Haak email tests.

	"Haaked email test".Dump();
	ValidateEmail(@"Abc\@[email protected]").Dump(@"Abc\@[email protected]");
	ValidateEmail(@"Fred\ [email protected]").Dump(@"Fred\ [email protected]");
	ValidateEmail(@"Joe.\\[email protected]").Dump(@"Joe.\\[email protected]");
	ValidateEmail("\"Abc@def\"@example.com").Dump("\"Abc@def\"@example.com");
	ValidateEmail("\"Fred Bloggs\"@example.com").Dump("\"Fred Bloggs\"@example.com");
	ValidateEmail(@"customer/[email protected]").Dump(@"customer/[email protected]");
	ValidateEmail(@"[email protected]").Dump(@"[email protected]");
	ValidateEmail(@"!def!xyz%[email protected]").Dump(@"!def!xyz%[email protected]");
	ValidateEmail(@"[email protected]").Dump(@"[email protected]");


}


bool ValidateEmail(string email)
{
	string domainName = string.Empty;

	if (string.IsNullOrWhiteSpace(email))
		return false;
	try
	{
		// Normalize the domain
		email = Regex.Replace(email, @"(@)(.+)$", DomainMapper,
							  RegexOptions.None, TimeSpan.FromMilliseconds(200));

		// Examines the domain part of the email and normalizes it.
		string DomainMapper(Match match)
		{
			// IdnMapping class converts Unicode domain names see https://tools.ietf.org/html/rfc3492
			var idn = new IdnMapping();

			// Pull out and process domain name (throws ArgumentException on invalid)
			domainName = idn.GetAscii(match.Groups[2].Value);

			return match.Groups[1].Value + domainName;
		}
	}
	catch (RegexMatchTimeoutException e)
	{
		return false;
	}
	catch (ArgumentException e)
	{
		return false;
	}

	try
	{
		// valid email format regex 
		string stackOFPattern = @"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&\\'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
			@"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-0-9a-z]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$";
			
		bool validFormat = Regex.IsMatch(email,
			stackOFPattern,
			RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));

//		string haakedPattern = @"^(?!\.)(""([^""\r\\]|\\[""\r\\])*""|"
//			+ @"([-a-z0-9!#$%&'*+/=?^_`{|}~]|(?<!\.)\.)*)(?<!\.)"
//			+ @"@[a-z0-9][\w\.-]*[a-z0-9]\.[a-z][a-z\.]*[a-z]$";
//
//		bool validFormat |= Regex.IsMatch(email,
//			haakedPattern,
//			RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));

		if (!validFormat)
			return false;
		//validate the top level domain from the IANA list.
		var tld = domainName.Split(new[] { '.' }).Last();
		return tldNames.Contains(tld.ToUpper());
	}
	catch (RegexMatchTimeoutException)
	{
		return false;
	}

}

string[] FetchIANARootDb()
{
	try
	{
		using (WebClient client = new WebClient()) // WebClient class inherits IDisposable
		{
			//client.DownloadFile("https://data.iana.org/TLD/tlds-alpha-by-domain.txt", @"C:\temp\localfile.html");
			// Or you can get the file content without saving it
			string text = client.DownloadString("https://data.iana.org/TLD/tlds-alpha-by-domain.txt");
			var lines = text.Split(new[] { '\n' }).Skip(1).ToArray();
			lines.Count().Dump("Domain name count");
			return lines;
		}
	}
	catch
	{
		return default;
	}
}

Ok, crappy formatting aside (I may get round to prettying that up) cut-n-paste this into LinqPad and run it.

In the end, it’s doubtful that it’s worth validating at all. The true validation is whether or not all of the mail servers between you and the service handle the mail correctly and whether or not you receive a response for signing up. Perhaps a test email button is a better (and more reliable) option! I wonder if BT’s developers can manage that.

Posted in Programming-W-T-F | Leave a comment

Small really is beautiful

I read a lot of stuff on Medium.com, there’s always plenty of articles to waste a full lunch-time on. Today’s lunch went on an article about building a self-contained game in c# in under 8k!

Yep, pretty impressive for a game, even though it is only a clone of the Snake game that made the Nokia phones so popular. However, it’s impressive because it’s in C# and the extent Michal Strehovský went to in removing bits of the executable, not because its 8K. I’m using C# daily and rarely pay any attention to the size of the executables I produce. So, much kudos and respect to the author for picking apart the rubbish that MS puts into those fat, lard-assed .net executables!

A long time ago when I was in the games industry doing arcade conversions to home computers, there use to be a competition for writing games and demo’s with sizes less than 4K. The game competitions were limited to ~2K and the demos were limited to ~4K, this was pre-interweb days.

Because I was working in a game company we wrote everything from scratch in 100% assembly language, no libraries or anything else to help us out. So for a bit of fun, we reduced that game size limit from 2K to 256 bytes just to see what we could come up with! Most of our games at the time were 48k (for the ZX Spectrum) to 512k for the Commodore Amiga / Atari ST, so still tiny by today’s application sizes, but cramming a game with all the rendering and logic into 256 bytes would be a Jedi master level challenge!

I wrote a Space Invaders clone and a Pacman clone. One of the other guys wrote a Scramble clone, but I no longer have the code or executable for that.

Here’s the file size on disk for Space Invaders. 3 bytes under budget!

And a screen capture of the actual game running. This is captured with DOSBox since Windows10 doesn’t run .COM files.

And here’s the file size of pacman :

Looks like its 278 Bytes 🙁 22 bytes over budget, but I’ll not lose sleep over that one.

The maze data is a bit pattern crammed into 16 bytes! These bits are then reflected horizontally and vertically to create the symmetrical maze, the code to render the maze is about 38 bytes.

The games are functional, you can clear all the invaders to win, or if the invaders reach the bottom of the screen it’s game over. With Pacman all the dots are edible, and the ghosts can catch you. The ghosts also follow the maze randomly. Neither application totals up the score, that was another 12 bytes I wasn’t willing to spend.

We were pretty pleased with ourselves, giving each other massive pats on the back thinking we were such smart asses (come on, we were young!). Until some other ultra smart ass produced a 256-byte defender clone in Mode10 Graphics (320×200 pixel mode) with parallax star fields, scores and aliens. We all wanted to drown ourselves in a pool of our own tears. Lesson learned. Pride Swallowed.

Theres always a bigger fish.

Me. Swimming in a salty pool of my own tears. Back in 1990.

All this was at least 16 years ago ( I think that’s the time I copied the files to one of my previous PC’s, not the date they were written ), and now a simple HelloWorld app is measured in megabytes! Even though ram is infinite and CPU cycles are free, I still can’t shake the habit of thinking about the size and speed in every line of code I write, be that in C#, GO, or Elixir. Worrying about branches taken vs not taken and CPU pipeline stalls aren’t really a thing anymore but it will always be printed on my brain somewhere in indelible ink. I’m still having nightmares about parallax starfields. Thinking about these things is still useful for IoT or embedded RTOS work, but those opportunities don’t seem to pay as well as making pretty web pages using languages created by 7-year-olds.

If you’re masochistic enough to want to try writing apps that are all about speed and size, check out Steve Gibson Research. There’s still something elegant about writing entire applications in 10s of kilobytes. I think it’s a lost art, and Steve really is one of the masters.

I don’t think there’s a better intro to this alternate universe than Steves Small Is Beautiful Starter Kit.

Have a go and let me know if you produce anything truly tiny. And by tiny I mean less than 8k!

Posted in Uncategorized | Tagged , , | Leave a comment

Reboot

Turns out this thing is on.

So here we are again, another attempt at posting.

This time, no pressure.

No promises to post once a week (although I might).

No promises of interesting code (although there may be).

No promises of keeping multiple blogs for different subjects (NO there really wont be).

What I do promise however, is to attempt to make each post : mildly interesting, possibly useful, mostly using grammatically correct English,  and bring you wealth, love, hot chicks and world peace*.

So what’s new?

Well, I’ve given up contracting, maybe temporarily – who can refuse doubling your income overnight – but for now its something I must do. I’d just had enough of the same DULL projects, DULL web coding (anyone who knows me knows how much I *love* web work), DULL database work, and well just all round DULL crap. There’s only so many dull form-filling-validating-database-writing-report-generating pieces of crap you can stomach before you want to decapitate yourself in a fit of depression. I’d reached that point a few months ago.  I never thought I’d reach my fill of computers, having been a code monkey since the age of about 12….but it happened around about May ‘14. I was ready to give up tech and go and make furniture or something.

So, I took a permanent position doing quite possibly the most interesting code-work outside of the games industry. It’s re-ignited the flame that burned inside me that gave me the love of all things tech, and better still I’m in at geek-ground-zero.  I’m in the R & D Department of what can only be described at James Bond’s Q division.

It’s still a bit of a trek, an hours drive but it’s well worth it.

I *LOVE* my job.

 

 

*no, not really. Although there may be cheap hookers and coke.

Posted in General | Leave a comment

Feeling a little neglected…

Is this thing on? :/

 

Posted in General | Leave a comment

Fresh starts…

Yup, but this time it really is. Lots of personal stuff happened over the last 18 months that really slowed progression of anything to an absolute halt!

Firstly, personal health, like not being able to see properly or walk was a bit of a show stopper. But thankfully I’m completely recovered. Whew, that was close.

Secondly, I’m now (almost) divorced! Just waiting for the decree nisei and were all done. I still have the house and the kids, but since they’re not really ‘kids’ anymore, I’m on my own at home most of the time.

Thirdly, near death experience in my car. I aquaplaned on all four wheels in torrential rain, so even four wheel drive and traction control couldn’t save me! I spun at least 5 times, took out a speed sign, a large blue motorway sign a few trees and slid to a halt in the mud. Luckily I bounced around on the hard shoulder’s grass verge and didn’t end up back on the carriage way. Contrary to popular belief, I wasn’t driving fast! About the ONLY time I was trundling along to get home and it all goes pear shaped! Still, the air bags and the car were amazing, if I’d been in a lesser car I probably wouldn’t have walked away from it. Even the police officer that attended couldn’t believe I walked out! Awesome car. Unfortunately no more.

I don’t think that’s gonna buff out.

So after the insurance paid out I bought another new car, hopefully this will last longer. It’s a lot slower, but a MUCH better car!

Another advantage is petrol consumption. The Evo managed about 18mpg on average, 25 if I was lucky, and 4 if I was having fun. Cost of commuting was £70 fuel every two days or about £1,500 a month in fuel alone. The new Mercedes manages a good 45mpg taking it easy, and barely drops below 30mpg even when pressing on. So the car might be more expensive, but it will have paid for itself in 3 years. How about that for justification? 🙂

Posted in Featured, Personal | Leave a comment

A post a day…and sniffing petrol.

Ha-ha, well the Christmas run of posting almost daily didn’t last!

repeat to yourself :

I MUST NOT TAKE CONTRACTS THAT HAVE AN HOUR AND A HALF COMMUTE.

I MUST NOT TAKE CONTRACTS THAT HAVE AN HOUR AND A HALF COMMUTE.

I MUST NOT TAKE CONTRACTS THAT HAVE AN HOUR AND A HALF COMMUTE.

The drive and time spent in the car really is killing me. Another stupid mistake was rewriting the contract on extension to allow working 5-days-over-4, so at least I’d get 3 day weekends to work on my own stuff (i.e. Apple warez) and that didn’t really pan out either. The working day stretched from 9am to 7pm making me even more tired than before! Arriving home after 8.15pm, eating , then showering means that by the time I get to the ‘spare time’ its already 10pm.

Result : even less time to do anything useful and deteriorating health to boot. Not a good move.

However, you learn from your mistakes, and I’ll definitely take work closer to home next time.

One thing that did come out of all this was my need to enjoy the commute, so i bought a new car!

Ok, given its 120 mile round trip per day, i should have been looking for a diesel with a big tank. But i just couldn’t help wanting something special. I needed a reward for half killing myself. So I bought one of these.

 

It’s a brand new Lancer Evo X FQ330 SST and looks exactly like the image. Its an absolute MONSTER. A tank full only gets me 240 miles that’s on account of the tank only holding a measly 55L, and that’s taking it easy (26mpg), which translates to a visit to Shell (needs 98Ron) every 2 DAYS. I really do have to apologise to mother earth every time I get out!

However, I absolutely LOVE the car. The SST is automatic – this is the first automatic I’ve driven and I have to say its pretty amazing. The SST is    a twin clutch drive train with 2 six speed boxes so while you’re in the current gear the other box is pre selecting the next gear, so the gear changes are seamless and fast – taking about 1/10th of a second. This means that it will propel me to 62mph in fraction over 3 seconds and has a top speed 180+ limited to 155. There are so many driver aids to stop me wrapping it round a tree that the tech is more advanced than what i work with as a day job! The SST has three driving modes – Normal, Sport and Super Sport.

Normal behaves like an ordinary automatic keeping the revs as low as possible making it a civilised drive and trying to keep the MPG in double digits, Normal mode gets ~26MPG. Sport mode is where the fun starts. Throttle response is tightened, and the RPM is held in the power band so the turbo is always spooled up and ready. RPM is held in the current gear longer and clever stuff like the Active YAW control prevents the box from changing at stupid times like mid cornering. Then there’s Super Sport. This really is track mode. Throttle response is tightened up still further, and the box only changes at the red-line. I haven’t used super sport, sport mode is plenty frightening enough. The technology and engineering in this car is absolutely amazing. Another distinct advantage with this car is its a lot more subtle than my old Subaru was. It doesn’t look out of place in the Asda car park, but it still makes for a double take when you see the vents on the bonnet!

So, whilst it makes the commute a little more acceptable, I still don’t think that offsets the distance and time problems no matter how much fun i can have playing in traffic.

 

My contract is coming to an end , its been a fantastic 2 years at the the Library and although another extension is on the table I’m really not sure I can tolerate another 3 months of the commute of death. In addition, the 2 year limit of HMRC kicks in which means I’d effectively be taking a pay cut if I didn’t increase my rate to compensate amongst all the other HMRC worries that make you look like an employee rather than a contractor. I’m pretty sure it’s time to move on.

I sure my writing and photography output will increase when that old friend ‘spare time’ re-appears.

Posted in General | Leave a comment