Thursday, 16 February 2012

Snowcode 2012

Snowcode is an awesome combination of skiing holiday, unconference and hack camp. Snowcode was started in 2010 as an experiment, organized by Alan Hemmings whom you may know from the Cambridge .NET User Group. We did it again in 2011, and in the spirit of continuous improvement, we're making a couple of changes to the format this year. We have a new venue - Chalet Joseph in Morzine - and we're going to try a more focused approach to the "code" part of Snowcode. Previously, we've used an "anything goes" unconference format, which has led to workshops on OpenRasta and REST frameworks, WaTIR, ASP.NET MVC, MongoDB, automated acceptance testing, and lots of good code and great ideas.

This year, it's JavaScript all the way - from deep-diving into the obscure corners of pure JavaScript to the latest JS frameworks and tools such as node.js, CoffeeScript, Backbone, Knockout - and, of course, jQuery. We'll discuss them, we'll play with them, and we'll work out fun ways to glue them together to build apps, websites, services and games.

One of the things we've struggled with on previous Snowcode events is sustaining the unconference format over an entire week, and so I'm really excited to announce that Alan has invited Pete Mounce and I to coordinate the "code" part of Snowcode 2012. Pete and I are preparing a programme that will provide a little more structure to the week, but still be modular enough that people can dip in and out, participating in the bits that interest them. If you're exhausted from a day on the snow and want to skip a session, that's fine - and if we find ourselves going off on interesting tangents - no problem. We're here to have fun and to learn. (And to ski, of course.)

Untitled-1

Every Snowcode is different, but a typical day will go a little something like this:

  • Wake up (a mild hangover is optional but not unlikely)
  • Breakfast - coffee, fresh bread, croissants, fresh juice... and a dozen or so people sat around laptops doing a quick bit of coding or catching up on Facebook or giggling at the pictures from dinner last night.
  • Hit the slopes - if that's your thing. Morzine is in the Portes du Soleil ski area, with access to over 600km of stunning runs and spectacular scenery. The sun is shining, there's fresh powder on the ground, and your hangover's gone by the time you hit the bottom of the first run.
  • Break for lunch - normally an opportunity to rendezvous with other Snowcoders and swap notes on the mornings' ski runs
  • Ski some more - or snowboard, or head back to the chalet for a lazy afternoon's coding, reading or napping...
  • Coding & "geeking out" - get back to the chalet, have a shower, open a beer and a laptop, and spend a couple of hours hacking, learning, coding, talking and generally working out cool ways to build cool stuff.
  • Dinner - three courses, wine, stories, the inevitable jokes at Alan's expense, that kind of thing...
  • ...and then whatever you like! Wander into town and go clubbing; watch movies, play X-box, more hacking, or just crash out early and get ready to do it all over again. A jaunt into Morzine is well worth it - it's a fantastic town with some really good bars, and the Mutzig beer is practically a Snowcode rite of passage.

You should come. No, really, you should. It'll be a fantastic week, and we'd love to see you there. If you ski or snowboard, you'll love it. If you code, you'll love it. And if you're not a skier or a coder, you're still more than welcome - it's a great opportunity to learn to do either (or both!)

Full details of the event are over on the SNOWCODE 2012 page on meetup.com - but in a nutshell:

  • It's in Morzine, France, from 18-25 March 2012.
  • Book your place via the SNOWCODE 2012 page on meetup.com - Snowcode costs £569 per person including half-board accommodation and airport transfers.
  • Get a cheap flight to Geneva with Easyjet (don't forget to book your skis as extra baggage)
  • Don't forget your laptop...

" when I ski,  I live... the rest is just waiting "


Wednesday, 26 October 2011

GiveCamp UK 2011 – A Retrospective

I spent this last weekend at UCL’s Bloomsbury campus in London, with a hundred or so charitable geeks, at the first UK GiveCamp. I came away from it amazed – at the generosity of the volunteers and sponsors alike; at the sophistication of some of the solutions that were delivered within a single weekend, and at the reactions from the charities involved when we presented our projects on Sunday afternoon. It was a wonderful experience, and one I’d happily do again, but in the spirit of agile and continuous improvement, here’s my own personal retrospective on GiveCamp UK 2011.

What went well?

  • The project. I was lucky enough to be working with a team who were helping Scene and Heard, a mentoring project based in north London that arranges for children to work with volunteer theatre professionals to write and perform plays. Simma , their Head of Development, showed up on Friday with a great pitch, obvious enthusiasm, a wealth of knowledge about the domain, and a “wish list” of projects and ideas for us to investigate. Top of the list was a ticket booking system – and I was immensely heartened when our entire team of coders – you know, people who like to build stuff – unanimously agreed that the pragmatic solution would be to hook them up with EventBrite. By 8pm on Friday, we’d drawn up a backlog of requirements, made sure EventBrite would actually deliver what they needed, and a couple of the team were already working on the integration. This left the rest of us free to start looking at some of the more blue-sky ideas on Simma’s list… and somehow by Saturday afternoon we were building a full relational database, MVC web front-end, and a set of data migration and normalisation routines to import their data from a collection of Access and Excel sheets into SQL Server. It’s not quite live yet – we’re having some problems getting the Entity Framework config code to work with AppHarbor’s SQL Server databases – but by the end of the week we hope to have it online, hosted, and handed over to them, for immediate use, or as a solid platform for future development.
  • The venue. The power worked. There was ample desk space and seating. The wi-fi was pretty solid – for most of the weekend we were actually using their wi-fi network for all our database access and development, as well as simple web browsing & e-mail, and other than an occasional IP address change, it worked.
  • The catering. The food was excellent, there were ample supplies of drinks, snacks, awesome tea thanks to Teapigs, fresh fruit and enough Haribo to keep you wired and coding well into the small hours. Result.
  • The wrap-up. Without Paul & Phil imposing a strict code cut-off, we’d have happily coded until they threw us out – but in retrospect, having a hard deadline with plenty of notice really focused our efforts towards the end of the project.
  • The platforms. We used Github for hosting, Trello for organising our backlogs and a whole lot more besides; EventBrite solved the ticketing problem, and we’re in the process of deploying to AppHarbor. All fantastic, powerful tools – and all completely free.
  • The swag. 80Gb SSDs for all the attendees? Best. Swag. EVER. Plus a hugely generous range of licenses, software, books and ebooks. Check out the list of sponsors at http://www.givecamp.org.uk/sponsors – I’m hugely grateful to every single one of them for making this amazing event a reality.
  • The people. Everyone was helpful, cooperative, collaborative and enthusiastic, and I hope everyone learned as much working with each other as I did working with them.
  • The demos. I was really, really impressed at what the teams delivered. From discovery to implementation to – in some cases – deployment onto a live website, in under 48 hours… as Ben Hall put it, it “makes you wonder what we normally do all day…” I am also not at all biased by how genuinely delighted Simma and Jasmine looked when we showed them our work. Honest.

What could have gone better?

  • I thought the Friday start was too early. Lots of people – including several of the charities and one of the organisers – were held up in transit and missed the opening pitches and kick-off. The only downside of a venue as wonderfully accessible as UCL Bloomsbury is that at 5pm on a Friday it’s smack in the middle of the worst rush hour in the country. Just an idea – but I’d suggest next time a preliminary session, maybe earlier in the week, with the team leaders and the charity reps? A solid couple of hours capturing requirements and understanding the domain. We’d have been up to speed much quicker if one or two of us had had the chance to think things over ahead of time.
  • That’s actually the only criticism I have of the event itself. The rest are memos to myself and the team for next time:
    • Bring an ergonomic keyboard! By Sunday afternoon my arms were starting to seize up… I’m not a laptop coder by choice, and having one of my trusty MS Natural 4000s would have made a *huge* difference. Plus a proper mouse. And a second monitor.
    • Stick to what you know. This is not an event for trying out new technology – unless someone on your team knows it well, don’t go near it. We spent a good half-day investigating Visual Studio Lightswitch before concluding that we just didn’t have the expertise to tailor it to our requirements… it was gone 3pm on Saturday when we finally settled on ASP.NET MVC 3 with Entity Framework, and an hour later we were absolutely flying.
    • Get a Skype chat or IRC channel set up ASAP. You’re going to be sharing lots of addresses, API keys, URLs – stuff that’s time-consuming to read out loud or write on paper.

In conclusion – wonderful event, I’m really pleased to have been part of it, and I hope the rest of our team will be at the next one because I’d love to work with them again some time. And huge thanks to Paul Stack, Rachel Hawley, Phil Winstanley, Kendal Miller and Dave Sussman, who all looked absolutely worn out by Sunday evening – it wouldn’t have happened without you!

Saturday, 17 September 2011

Moleskine + Kindle = ... Moleskindle?

Faced with the harrowing prospect of trying to fit the entire Song of Ice and Fire into hand luggage on my next holiday, I bought a Kindle. It's quite magic. It won't switch off, it doesn't light up, it looks utterly fake - like some sort of plastic prop tablet device where they've used a printed cardboard screen... and it's absolutely lovely. My paperback books tend to end up rather battered from being slung around in bags all the time, and I wanted a case to keep the Kindle safe from knocks and scratches. Rather than spend money on one of the ridiculously overpriced cases you can get for it, I wanted to try something a bit different. You remember reading spy books as a kid where people would hide stuff inside hollowed-out books?

I found an old Moleskine notebook that was just the right size for it, and started hacking away - a couple of happy hours playing with craft-knives and glue, and here it is: the Moleskindle

IMG_8804 IMG_8810 
IMG_8815 IMG_8814

It's a bit fiddly - and messy - getting the cutouts just the right shape; I found wood glue worked just fine - and once it's dried, the compacted glued paper is quite easy to carve & trim using a sharp craft knife. I cut a notch in the right-hand side so I can reach the page-turn buttons whilst it's in the case, but you need to pop it out to reach the power button or recharge it. Still, I think it looks pretty cool, it'll stop the Kindle getting knocked and scratched, and you can fool people on the Tube into thinking you're reading something incredibly intellectual that's been hand-written in a Moleskine notebook when you're secretly reading rock star autobiographies.

Sunday, 11 September 2011

Software Development - HORSE-style

There's as many ways to lose at poker as there's ways to fail at delivering software, but one variation I have yet to experience is a game called HORSE. In HORSE, each hand follows a different set of rules - you'll play a hand of Hold'Em, a hand of Omaha, a hand of Razz, a hand of Stud, and a hand of Stud Hi-Lo; then you go back to the beginning and do it all over again, until my brother has all my chips.

Inspired by this, I've devised the following brilliant software methodology for all those teams who can't quite settle on a system that works for them. It's called WALKS, and you work in two-week sprints, using a different methodology for each sprint to ensure you get the maximum efficiency from all these wonderful processes and systems:

Weeks 1-2: Waterfall
You spend the first two weeks making bold, ambitious, big-design-up-front plans, and not actually writing any code or shipping any features.

Weeks 3-4: Agile
You spend the next two weeks trying desperately to get *something* built and releasable.

Weeks 5-6: Lean
Realizing that your "big design" is probably killing your attempts to be agile, you start hacking out unnecessary features and trying to pare the design back to something you might actually be able to build.

Weeks 7-8: Kanban
You still don't know what you're doing, so you decide to write everything on Post-It notes and stick them to a board, figuring that if you start pulling jobs off the queue, you might at least get *something* done.

Weeks 9-10: Scrum
You have two weeks of daily stand-up meetings, in a desperate attempt to try and get a handle on things. Finally, you sit down on Friday afternoon, have a two-hour timeboxed retrospective, and decide that what you really need is a full set of requirements and a definitive spec.

Then you take a weekend off, come in on Monday, and start at the top again.

If that sounds familiar, it's OK - you're not hopelessly lost, confused or unproductive; you're just taking a structured approach to being multi-disciplinary...

(This is a joke post. Please don't use WALKS to build software. Ever. The world has enough problems as it is...)

Monday, 1 August 2011

SkillsMatter Progressive.NET Tutorials 2011

Some of you may have heard about - or attended - SkillsMatter's Progressive.NET Tutorials over the last couple of years. This is a three-day program of in-depth workshops covering the latest languages, frameworks and techniques in .NET development. The great thing about the workshop format is that it provides enough time to actually get some hands-on experience; instead of the rapid-fire 45-minute lectures you'll find at most conferences, you can actually try things out, ask questions, work through examples, and really get to grips with the techniques or frameworks you're exploring.

This year, Ian Cooper - whom you may know from the London .NET User Group - has put together a great programme of speakers and topics, and I'm really excited to say that, for the first time, I'll be there as a speaker instead of an attendee.

My workshop is called "Front-End Tips for Back-End Devs". I'll be looking at how many of the techniques we take for granted in back-end development - including DRY, abstractions, packaging and dependency management -  can be applied to your page layouts, stylesheets and scripts. We'll cover semantic markup, we'll take a whirlwind tour of all the wonderful new tags introduced by HTML5, we'll look at CSS sprites and media queries, and we'll see how you can keep your web UI as clean, elegant and maintainable as the rest of your codebase.

There's also Damjan Vujnovic talking about TDD in JavaScript; I went along to one of Damjan's talks earlier this year and was really impressed, so I'm looking forward to the opportunity to go over his ideas in a little more depth. Jon Skeet will be talking about async/await programming on C# 5 (no word yet on whether Tony the Pony will be there). There's workshops on continuous deployment, on web development in F# using the WebSharper framework, on packaging and dependency management, on REST, on Nancy, on SimpleData - in fact, if you've heard the .NET community buzzing about anything in the last year or so, chances are there's a workshop here that will show you what they're all so excited about.

It's at the SkillsMatter eXchange in London, from 5-7th September 2011. The cost is £425 (yes, it's not free, but you do get three days of top-notch content without giving up your evenings or weekends) - and you can use the promo code PROGNET50 to get £50 off.

Sign up online here. To keep up with event news, follow the hashtag #prognet on Twitter, and it'd be great to see you there.

Wednesday, 29 June 2011

Just Do It: Command-Query Segregation, Nike-Style

OK, CQRS is a hugely mis-applied and mis-understood architectural style. The insight I'm sharing here is based on my attending Udi Dahan's Advanced Distributed Systems Architecture course, then applying what I'd learned to a project we were building for 3-4 months, then having one of my colleagues go on the same course, and then have him come back and point out everything we'd done wrong. Let's assume you are already using CQRS. Maybe you're using it appropriately; maybe it's over-engineering; maybe it's completely misapplied. Doesn't matter, for what I have to say here; there are smarter folks than I who can tell you whether you should be doing it in the first place. No, I'm here to share a particular insight about CQRS with you.

Your commands should be like a psychotic drill sergeant screaming orders.

image

 

When you issue a command, your work is done. End of story. Maybe it happens immediately. Maybe there's a delay, and someone has to wait a few seconds. Maybe it doesn't go according to plan, and somebody else notices afterwards, and they call someone else, and it gets fixed up. Maybe it fails spectacularly. You don't care. (Hell, you're probably dead by now. Nobody would ever have won any wars if everyone threw an exception when they found the sarge face-down in a fox-hole with a bullet-hole in his head.)

You're the sarge. You are IN COMMAND. You order someone to destroy the ammo dump in North Camp, then you get on with your life. Tomorrow morning, you'll get a fresh intel report. Maybe it'll say that ammo dump in North Camp has been destroyed - maybe it won't. You'll review the fresh intelligence, decide what to next, issue a fresh batch of orders - and get on with your life. That's CQRS. Your data is stale, your word is LAW, and you have better things to do than hang around wondering if you maybe did the wrong thing. If you give a command, and it doesn't get obeyed, there's exactly two potential outcomes:

  1. Nobody notices
  2. Somebody notices

Nobody notices? Cool. No problem. Somebody notices? Well - that's where you hope it's one of your guys (i.e. alerts, logging, infrastructure, monitoring) instead of one of THEIR guys (i.e  customers/clients) That's how you do CQRS. Get your intelligence - your queries. The freshest data you can get, but don't bust a gut if it's a little out of date. Give your orders. Trust your intelligence. Get on with your life. Rinse. Repeat.

Saturday, 11 June 2011

How to install "Active Directory Users and Computers" on your Windows 7 Workstation

This one stumped me until I hit upon the magical combination that makes it work.

  1. Install Windows 7 Service Pack 1.
  2. Download the Remote Server Administration Tools for Windows® 7 with SP1
  3. Install them.
  4. Reboot
  5. Go into Start -> Control Panel -> Programs and Features, and go to "Turn Windows features on or off" - because the installer will download and install the admin tools, but won't actually switch them on. Helpful.
image

What makes it fun is that it just fails silently until you get it right. No error messages, no warnings... installer didn't even tell me I was missing SP1 - which I thought I already had.