Tuesday, 14 October 2014

Ear candy

I've been listening to a few good albums lately:

Zola Jesus - "Taiga"  (UK) (US)

First heard Zola Jesus support Fever Ray at Brixton Academy a few years ago. Couldn't make my mind up at the time, but I heard the track "Go (Blank Sea)" a couple of weeks ago and figured I'd take the album for a spin. It can be a little overpowering at times, but there are a few tracks which make my hair stand on end.

Integral - "Sercosa" (UK) (US)

I think I discovered Integral on one of the smaller labels I was looking at getting some Dirty Fire Project tracks published via quite a few years ago. Intelligently put together minimalistic IDM. Very atmospheric and really good headphone material.

Imogen Heap - "Sparks" (UK) (US)

Cannot express just how awesome this album is :) Imogen's album is a beautiful collection of sounds, vocals and lyrics. There's a bit in Xizi She Knows which catches me every, single, damn, time.

Currently reading: Jeff Noon - "Pollen" (UK) (US)

Bookmarks for 20141014

Some really useful advice for Azure website developers, especially if you happen to deploy from an external repository (e.g. Bitbucket, etc). This covers how to get web.config transforms working when you aren't in a situation of publishing direct to Azure from Visual Studio. Also, it covers how to tell Azure which project to deploy as your website, instead of it picking the first website in the assembly.


Awesome looking build-your-own-killer-death-robot game "Rise Of The Walkers".


Sony SmartEyeglass SDK. I had a go of a hardware preview for this at the XDA DevCon event in Manchester (both the hardware and the conference were awesome).


Currently reading: Jeff Noon - "Pollen" (UK) (US)

Friday, 26 September 2014

Food last night

Cooked for a dinner party last night at Cari's...

Steve had this to say:
Lanroth:  very middle class and domesticated of you ;-)

Smug mode: true

Bookmarks for 20140926

Afternoon all, here's the stuff.

Black Desert #CB2 Character Creation video. Sheer, utter MMORPG graphics porn:

Pain in the ass stuff about upgrading Apache that just bit me while I was upgrading Ubuntu on a hosted box of mine:


Currently reading: Jeff Noon - "Pollen" (UK) (US)

Friday, 19 September 2014

Leaving the hive

Looks like I'll be casting around for a new development gig that starts in November. I've had an interesting six months working at Spacehive and it's been nice to work in Canary Wharf without feeling responsible for the global economic collapse and recessions, you worldfuckers.

I really want to build applications in Conclave. Next gig just doing that, yeah? Please?

Reading: "Vurt" by Jeff Noon (UK) (US)

Sunday, 14 September 2014

Another day, another bit falling off ...

I would heartily recommend not buying an Acer Aspire 5943G or any laptop which has a similar case. Whomever designed this was a fucking retard. I'll be very surprised if I get through the next twelve months without tracking them down and burning their car.

The DC power cable socket you can see on the side there has some plastic mounts inside which just plain broke off shortly after purchase. This recently got so bad that I had to use epoxy putty to fix the connector in place. The power button itself has always been dodgy and today was the day it decided to just fall into the casing due to the shit plastic faring being massively shit. I guess I should have seen that coming. I've removed the plastic faring, the plastic on/off button and now I have a bare push-to-make micro-switch to use which, frankly, feels more reliable already. Insulating tape to follow.

My laptop is the Psion of some cyperpunk dystopia. Hear me roar.

Friday, 12 September 2014

Bookmarks for 20140912

Some bookmarks as I haven't done this for ages and I need to test some automation.

My friend @PullMyDaisy 's new KickStarter, "Glass Senses"

Great Sci-Fi short story by Tobias Buckell - "System Reset"

The art of Nick Gentry, which I am a particular fan of, especially the more abstract floppy disk pieces

A piece I found on using database tables as queues which is just useful to read

That Manchester Evening News donation drive for Manchester Dogs Home just hit £857,000. Stunning.

Manchester Dogs Home

I got upset this morning. I read back through Twitter and realised that there was a news story about an arson attack last night on Manchester Dogs Home. The place was ablaze, at least 53 dogs had died and there were 150 to evacuate. It felt like a punch in the gut that someone could do that. Then I read further and heard about the huge amount of people who had poured into the surrounding area, bringing food and blankets for the dogs, some risking their lives by going into burning low sheds to try and rescue any more of them. Then I read that there was a donation drive going on via JustGiving, having been set up by Manchester Evening News.

They were trying to raise £5000 to help and had a simple description of their wishes to help on the page as it had been set up in a hurry. I clicked a few times and donated 20 quid. Then I went and looked for a link to the page to share on Twitter and noticed the total amount pledged by people as of 9AM this morning. £280,000... and rising. Completely shell-shocking and very emotional... there were actual blubs.

And now... Jesus. Well. As of ten minutes ago, they just hit £730,000 and have raised the target to a million pounds and I have every confidence that they will hit that easily. People can be so good.

Monday, 8 September 2014

Anywhere but here

Every day on this project is the same. I want to work on a feature, but the complete hash a few archaeological layers of developers have made to a Microsoft MVC website bite you, and if they don't get you then the disastrous Entity Framework repository implementation will probably take you down, and if that doesn't, then it might be the home-spun data attributes / view-model objects / AutoMapper combination that finally shits in your eye. Or the weird cache. Don't forget the weird cache.

But every time I do work with Conclave, a weight is lifted from me.

Lacing an ailing, legacy application with another technology isn't a choice to make lightly; At worst, you've just added another degree of dependency, complexity and a migraine for the next developer to pick up the mess. At best, you can distil what the application is doing and capture that in a way that will make it easier to re-write the whole thing from scratch, with, in this case, new Conclave models, stores and behaviours.

Christ, I can't wait. I'm so tired of wading through the muck.

Reading: "Glow" by Ned Beauman

Wednesday, 3 September 2014

Lady Invisible

She has vanished, alas!

Invisible - with a swish of her cloak, she turns to glass; stealth technology of the highest order that US Generals, fearing rival borders, to own would surely sell loyalties both homeland and extramuros.

A hazy, busy camouflage is all I see, but I recall dark and gold spun curls alongside me; before invisibility.

While communication, fading nightly, causes motes to tumble crazily, describing arcs in air and drowning brightly where she has passed.

Is this Winter? Will this last?

And, I wonder still and ask the air aloud of she - Lady Invisible, will you soon appear to me?

(By me, circa 2012.)

Thursday, 10 July 2014

My letter to Angie Bray MP concerning the Data Retention and Investigatory Powers Bill

Dear Ms Bray,

The Government announcement about this legislation is immensely concerning on many levels. Firstly, that this is being rushed through with very little time for MPs such as yourself to read and scrutinise the law before voting upon it. Secondly, that the content it concerns - the blanket retention of data - was found to be unlawful and an infringement of the right to privacy by the Court of Justice of the EU, and this Bill appears, on the surface, to simply be an attempt at not allowing the UK Government or ISPs to be sued for such infringement. And thirdly, that under the surface, the Bill paves the way for further regulation on data retention to happen without due legal process.

This is bad legislation and an extremely underhanded way of extending already over-reaching powers of mass-surveillance in a fashion that stops democratic process from occurring.

Unless you and other MPs act, the British public will have to rely upon the House of Lords to correct this colossal mistake that has far-reaching implications for personal privacy. I have no doubt that you, as a duly elected representative should be very, very concerned as to how this legislation is being rail-roaded through Parliament, with "cross-party" support being gained before the Bill was even published. This is a gross abuse of the political process and should be viewed as an embarrassment to the UK as a whole.

Please help turn this around, to offer fair scrutiny of this legislation, and to respect the higher Court of Human Justice of the EU.

Yours faithfully,

Adam Christie.

Friday, 14 March 2014

The Stream

The flow of people from the station I see every day is unknowable and chaotic; I call it the stream. It ebbs and flows and pulses with time, and at some point in its strength you can only attack the problem with statistics. The mathematics can represent the total of the crowd, the vector of its travel and intent, but that becomes zero-sum as the stream moves on, disseminating into Westminster, and later - back. Unless, of course,  you see something that you recognise; maybe the cut of a coat, a specific pair of boots or a primary display of hair. Then, the eye is caught and greater analysis can be performed.

The stream changes morning to morning, day to day before reversing later in the day like the tidal Thames, and I think about how it could be used to tell a fortune. Fluomancy; seeing the future in the whorls, eddies and tides of moving water as the particles flow out from the station and into the city, passing around obstacles both structural and human, with those that fight the stream doomed to drown unless they are the strongest of swimmers.

The motion is framed by contra-flows and whirlpools like the jet streams of Jupiter, and this is where the commerce occurs, giving freedom for those trying to beat the flow and direction. And that commerce is life and choice and exchange and freedom.

Let the maths yield the shape of the future, as the fluid flows. Trust the numbers. Trust in the stream.

Thursday, 13 March 2014

Bookmarks for 20140313

Thursday is an exciting day. I'll tell you all why soon. Work is busy, things are progressing and I saw a cracking gig last night - Hollie McNish supported by Sabrina Mahfouz - awesome awesome awesome spoken-word poetry at Bush Hall. After the gig I popped in for a quick beer at my neighbouring bar and ended up on a call to technical support for half an hour to try and fix their card machine, which didn't get fixed but at least I got a free beer out of it. I then woke up with a headache this morning and I'm blaming the card machine.

Good article on thinking about appropriate data structures in Redis.

StreamTools by the New York Times R&D Lab.

Steve Jackson's Sorcery! A Fighting Fantasy RPG brought to Android and iOS. However, I'm biased so here's just the Android link:

I've been on a massive reading binge recently, here's a couple of highlights:

Red Phone Box: A Darkly Magical Story Cycle, by Salomé Jones, Warren Ellis, et al. This was quite a ride through London... Every London.

Gun Machine, by Warren Ellis. This is the detective novel I've been waiting for. Also some of my favourite writing I've come across for a while. An unsettling case that spreads across 20 years and all of Manhattan.

Wednesday, 12 March 2014

Bar cycle 1 of x

And there's a girl on a Mac Air, wearing some kind of jacket that seems to mostly consist of feathers, and she's studying pictures of men with immaculately clipped beards who are drinking beer and playing croquet.

She drinks tea in the middle of the bar and restaurant.  Tea, because she can't concentrate on the beards or the croquet with a head full of beer or wine. Or maybe she is so loaded on heroin and etsy-as-a-positive-career-move that anything else doesn't have that zing apart from the morning ritual of the triple espresso assfuck. Rich kids aren't what they used to be.

What led her to this, I wonder? In what channel of the screaming great Pantheon of choices in life do you wind up eschewing alcohol and looking at hipsters being ultra-gentrified; instead of a baseball bat they are hefting a mallet. You poor, sick, lost schmuck.

Wednesday, 26 February 2014

Bookmarks for 20140226

The careful arrangement of strings, bells, lenses and mirrors I employ to wake me at the appointed time definitely did not work this morning. However, it's a sunny day so here's some bookmarks.

Data modelling with MongoDB (general topic as I've been busy with re-writing bits of Xizi just recently):


Warren Ellis has a new, epic looking graphic novel out (shortly), TREES:


Some Kickstarters of note that I've backed recently:

TimeWatch - Gumshoe and Time Travel RPG thingummy that did ridiculously well:
"You've got a time machine, high-powered weapons and a whole lot of history to save. Welcome to TimeWatch!"

Project: Dark - A stealth-based tabletop RPG that sounds amazing and that also smashed its funding goal:
"Play fantastic thieves in a fantastical city in this new stealth-adventure tabletop roleplaying game."

Hello Ruby - A delightful, almost perfect children's book that teaches kids the basics of programming. I cannot recommend this highly enough.
"Hello Ruby is a children’s book that teaches programming fundamentals through stories and kid-friendly activities."

Coffee, Cake and Kisses - Fundraising for the new iteration of the Coffee, Cake and Kink space. Not totally sure about the new name but I understand why they've had to do it; their heart is in the right place and I hope they make it:
"A relationships-focused social design space. Tease your taste buds & stimulate your senses in the place that makes you go mmm."

Also: I've been listening to The Black Keys entire discography for about 5 days now. It helps.


Wednesday, 19 February 2014

TeamCity and Mercurial Feature Branches


I wanted to write this blog as I have used up a small quotient of my life attempting to get TeamCity and Mercurial to work together, and somebody somewhere should benefit from my findings.

The company I work for use Microsoft .Net with Mercurial as their de facto version control system, which I am completely fine with. Mercurial is a wonderful VCS and especially so if you've lived your arcana of SourceSafe, TFS and Subversion. I'm not here to defend our choice in not moving to Git because frankly I can't be bothered. Basically, if you use Mercurial and you want to use TeamCity as a build and deployment server with feature branches and something which is a little bit like continuous integration if you squint your eyes, here's a way I found of making them work together in something approaching harmony.

A Tale Of Two Build Chains

So, initially we had this idea of having a build chain permanently churning "default" in Debug mode, and another which would build anything with the prefix "Release-" on its branch name in Release mode. This kinda worked for a month or so but then it was starting to make it difficult to logically separate features since people started forgetting to use the prefix, then pointing out that their feature on the UAT server clearly wasn't ready to be released so there was a nomenclature problem there. Further, when we started trying to coerce the VCS roots to only consider certain feature branches using the Default Branch and Branch Specifications, things started going really awry and I realised that we were losing control of how TeamCity was responding, including not being able to tell what had just been deployed and why.

This week I've been anxious to get anything working, let alone things like this that have been driving me mad, so when I came in on Monday I ditched what I was currently doing and rolled up sleeves to work on this problem.

It turns out that our thinking on this was pretty much backwards and then things were getting more out of whack with the various hacks we were trying to try and make it work. Limiting the build chains with a Branch Specification seems to be actively fighting against how the TeamCity feature was designed, so I needed to re-think how to achieve what we needed.

After re-reading the TeamCity 8.x documentation around Mercurial, which swear blind that this should all just work, I decided to try a new topology with respect to the original two build chains we had set up. I got the feeling that the builds produced by a build chain could be used as a palette by the deployment chains, and to that end I re-tasked Trunk and Release into chains that would consider *every* branch, but would compile them with Debug or Release mode, respectively.

Setup for "All branches (debug mode)":
VCS Root:
  Name: "Trunk" (This isn't the right name for this now, I realise)
  Mercurial, etc
  Default branch: [blank]
  Branch specification: +:*
Build steps:
  1) Build Solution (Debug mode)
  2) Run Unit Tests (Debug mode)
Build triggers:
  Branch filter: +:*  (trigger one build per each VCS check-in, include several check-ins if from same committer)
Build parameters: (various things but importantly:)
  system.Configuration = Debug

Setup for "All branches (release mode)":
VCS Root:
  Name: "Release"
  Mercurial, etc
  Default branch: [blank]
  Branch specification: +:*
Build steps:
  1) Build Solution (Release mode)
  2) Run Unit Tests (Release mode)
Build triggers:
  Branch filter: +:*  (trigger one build per each VCS check-in, include several check-ins if from same committer)
Build parameters: (various things but importantly:)
  system.Configuration = Release

In all fairness, I could attach the same VCS Root to both of these build chains and I think it would work fine. I kept these as separate Roots since it was how it was originally and that gives the option of pointing it at a different source repository, although Christ knows why we'd do that.

Deployment Chains - 1 - Sorta-Kinda Continuous Integration

In a vague nod towards doing some kind of Continuous Integration, we want to have our two testing servers (Testing and UAT) continuously updated with the latest build from certain feature branches. I found I could do this by using the Build Triggers functionality. This appears to be because the Branch Specification parameter in the build chains uses a wildcard - that wildcard becomes a logical branch name which the Build Trigger's Branch filter can then pick up.

Sub-project: Continuous Integration - Automatic deployments to Testing / UAT
Setup for Deploy Testing - "Feature Branch 1"
(I started renaming the chains to what branch they were tuned to)
VCS Root: "Trunk"  (as above)
Build steps:
  1) Compile and deploy
  2) Remove output directory
Build Triggers:
  Branch filter: +:Feature Branch 1
  Trigger a build on each check-in
  Include several check-ins in a build if they are from the same committer
  Depend on: "All branches (debug mode)" (the Debug mode build chain)
  Do not run new build if there is a suitable one
  Only use successful builds from suitable ones
Build parameters: (whatever you need for your deploy job, plus:)
  system.Configuration = Testing

Setup for Deploy UAT - "Feature Branch 2"
VCS Root: "Trunk"  (as above)
Build steps:
  1) Compile and deploy
  2) Remove output directory
Build Triggers:
  Branch filter: +:Feature Branch 2
  Trigger a build on each check-in
  Include several check-ins in a build if they are from the same committer
  Depend on: "All branches (debug mode)" (the Debug mode build chain)
  Do not run new build if there is a suitable one
  Only use successful builds from suitable ones
Build parameters: (whatever you need for your deploy job, plus:)
  system.Configuration = UAT

With these in place, a commit to "Feature Branch 1" will spawn three builds:
  1. "Feature Branch 1" in Debug mode on "All branches (debug mode)" build chain
  2. "Feature Branch 1" in Release mode on "All branches (release mode)" build chain
  3. "Feature Branch 1" deployed in Debug mode from Deploy Testing - "Feature Branch 1" build chain
The deployment job will queue until the "All branches (debug mode)" build chain has completed successfully.

Similarly, a commit to "Feature Branch 2" will spawn the Debug, Release and deployment builds, but Deploy UAT - "Feature Branch 2" will run instead.

Deployment Chains - 2 - Manual Deployments

Along with the Testing and UAT deployment chains that do this pretence of Continuous Integration, we also wanted to ability to manually deploy particular feature branches across our Staging and dual-head Live environments.

For this, I have attached the Release mode VCS Root, so they will receive the correctly compiled build, but I have not added any Build Triggers, relying instead upon the GUI in TeamCity to request the appropriate feature branch from the provided drop-down menus.

The dependency means that it is still requires a successful build plus unit test run to deploy.

Setup for Deploy Staging
VCS Root: "Release"  (as above)
Build steps:
  1) Compile and deploy
  2) Remove output directory
  Depend on: "All branches (release mode)" (the Release mode build chain)
  Do not run new build if there is a suitable one
  Only use successful builds from suitable ones
Build parameters: (whatever you need for your deploy job, plus:)
  system.Configuration = Staging


I'm utterly relieved that I'm getting some sense out of TeamCity now. I've really fought for keeping the use of feature branches and to make sure that we continue with Mercurial, so this has felt like some kind of small victory. The automatic "continuous integration" deployments to Testing and UAT work well (when I remember to tick all the right boxes in the Build Triggers), and they have meant that I haven't had to escalate privileges for a remote-working developer. The only drawback is that you have to fiddle with the Build Triggers to be able to "tune" those deployment chains to a particular feature branch, but I think that's a decent trade-off.

Although the Staging and Live deployment chains involve a manual selection step, this is basically acceptable considering that the rest of the build server appears to be running in a sane fashion now.

Well, apart from one thing. When feature branches are added and their first commits are pushed, Team City will spawn a build per group of commits based on user, and that has meant that I've occasionally spotted 20+ builds being added to the queue including a bunch of re-deployments. In all fairness, this isn't the end of everything, but it can be a little bit irritating.

So, yeah. TeamCity and Mercurial feature branches. It does actually work as long as you think about it right.

Thursday, 2 January 2014

Carbon for Android v2 - some niggles

The new version of Carbon for Android is out which features a number of changes including some quite striking visual differences to the original. My install was automatically upgraded to the new version yesterday and I must say that the interface is even more slick than the old one, but I have a number of issues with the new design.

1. The refresh icon rotation is off-centre.
I'm not quite sure why this has been done as it frankly looks a bit scrappy. Centering this would make the feature complete and professional.

2. A lot of space taken up by the 3 dots at the top.
Seriously, you could fit an entire line of text in the space occupied by those 3 little dots. Better use of that space could be made.

3. The font has a weird aspect ratio.
It is clear that you love this font but I find it much harder to read with its oddly vertically stretched aspect. It would be so welcome to have the option of a shorter font. This is practically a deal-breaker for me and the thing I can least understand as to why it has been forced.

4. No Tweet size of "small" ?
The menu option only starts at a size of "medium"; that's pretty weird.

5. Retweet mesages.
It's hard to tell immediately whether the message saying that something has been retweeted belongs to the tweet above or below the message. A hint of a border here would really help.

6. Bug - faded tweets.
Some tweets appear faded suddenly for no reason but then are fine when restarting Carbon.

I am so glad that I can now get to my own favourites at last, and the work on the profile view is pretty epic. Carbon itself is an amazing piece of software. But there are these few things that need to be addressed before I will be happy with the update, sorry guys.

Please note that if the font thing is addressed then I will definitely donate. I don't mean to hold to ransom but I feel pretty strongly about this issue.

Update: They fixed the font issue!