Saturday, 31 January 2009

Open Space Coding Day (31st Jan 2009) – Wrap Up

Wow, what a day! Really, really think the early wake up time and travel were worth it! This is a wrap-up of my first ever “Open Space Coding Day” (OSCD).

WARNING: This is a long read! I wanted to get all of my experience out on to this blog for possible discussion! I have tried to separate the basics of the day to my “diary-like” narrative, but that can be a bit of a grey line.

Getting Started

Having proceeded to run off in an orderly fashion out of London Waterloo in the wrong direction and correcting myself, I ended up at the Conchango offices. For me, this was real nice to see what I would consider to be a “modern developers office”. Put simply, my working environment sucks, and it was nice to see others have much nicer surroundings. I only hope I can one day get myself into such an office. The Conchango team as well as the other guests were very welcoming.

Once we had arrived, Alan Dean opened with a brief run down of the Open Spaces Principles/Philosophy, and we got straight in to coming up with the sessions that we would like to take place. For me, I didn’t suggest anything – I think I had a brain freeze, and it was difficult to not think “oh, that would be cool” when other people were coming up with suggestions, this really kinda threw me off.

It was later unanimously agreed that the voting/suggestions may be better performed before the event to allow plenty of discussion and help gear the day so everyone can get the most out of it. This is an excellent demonstration of what I would consider to be an “agile process”, do something, see what is wrong, fix it. Equally it was good to see Alan totally open and responsive to feedback rather than seeing it as an insult (I know many hosts might).

Session Structure

This was real odd for me, I am quite used to “corporate style” sessions where session hosts had a plan, and you are really just along for the ride. With OSCD we were completely in control. You basically join a session, and then all participants are masters of their own destiny. It was good to see how quickly the process naturally evolved. Within our own group it soon became abundantly clear that some members were a lot more familiar with the technologies being discussed. They ended up becoming the driver, writing the code to express what the rest of the group were discussing. Groups then proceeded to naturally pick the equipment that made sense. I think it was obvious that projectors were the common favourite. Discussion and coding then continued until the session is completed.

My Experience

This is my experience of the day. Just to reiterate, the sessions discussed were not the only sessions running, these are just the ones I participated in. Other sessions included:

  • Creating reusable build scripts.
  • “Hands on Secure Development” with Barry Dorrans.
  • F#
  • OpenRasta + Static Analysis.
  • (I’m sure there were a couple more but they escape my memory! Please let me know and I will add them!)

Session One (Testability of MVC Frameworks)

I had to go along to this one. To be honest I have never used an MVC framework (such as ASP.NET MVC or MonoRail) but it is definitely one of the things on my “ToDo” list for this year. Just because I am an ASP.NET developer, it does NOT mean I like WebForms! So, I joined the session as a complete n00b, pretty clueless as to what the frameworks are and how they work.

As discussion began, I let people know I was bringing down the group but they were kind enough to give me a brief synopsis of how MVC frameworks work and what they do for web applications. Jeremy Skinner kindly took the drivers seat for the session. His laptop then ended up hooked up to the projector, we began discussing from there, and code was produced. About half way through we had written enough supporting code for the basics of what we were discussing, and then really started getting to the crux of the issue - how the hell do you test visual look and feel to business specifications, with a reasonable ROI? We began weighing up various options such as:

  • testing against hard-coded expectations of the HTML that is rendered to the page.
  • Pushing the tests to the object model and making assertions about the object that is passed back, in relation to styling/formatting (e.g. add a CSS property to the objects and assert that the correct CSS is applied to the object under certain conditions).

These were the main two things that I think really emerged as possible approaches, but both had a lot of pro’s and con’s. Hard –coding the HTML expectations is very brittle, but doesn’t impact the object model. Enhancing the object model with “view-like” concerns seems a little odd, but does offer the opportunity to actually make assertions with code that is a bit more malleable.

We all agreed on one thing: Currently no solution that is available is going to be:

  • Easy.
  • Cheap.
  • Easily understandable.
  • Maintainable.

In short, there are many variations of implementation, but they are all so hard no-one wants to do it :) (i.e. the reason too many people are still using MS Project).

Is the session a “failure” because we didn’t come up with a solution? Absolutely not. I found the session very thought provoking, I think any coder worth bothering with would at least have an interest in solving difficult problems. My brain was absolutely whirring after this session. Mission success.

A big thank you to Jeremy for driving and the excellent knowledgebase on MVC that is his head, also thanks to Alexis Kennedy, Gojko Adzic, Mike Wagg and the names of the other two gents escapes me (sorry guys, please let me know).

Lunch

So eat-o’clock came around so we all piled out in different directions. Myself, Emyr and Barry ended up grabbing an ostrich sub from the local market! Awesome!

Session Two (Managed Extensibility Framework - MEF)

This is another thing that I know little/nothing about but really wanted to find out more, so I went along.

Again, this demonstrated the really cool thing about the evolutionary style that Open Spaces promotes. This session worked a lot differently to the first session. Rather than have one driver and lots of discussion, we soon realised that the concept of MEF is very simple –we just wanted to all get coding and seeing how it works and have a play. So laptops out and on we decided to pair up.

I paired with Andy who was very helpful (thanks again Andy!) we then started talking about what we would like to do with MEF. In the interests of keeping thing simple for my peon brain, I opted for a “string transformation plug-in". The idea being that we would be able to build additional transformation routines and just plug them in to the already-built host application. We started real simple with some in-assembly uppercase/reversal transformations. The acid test was to then move these to a completely separate assembly and just be able to load/execute them at run time.

This went really well, we actually got working code pretty quickly, and it was real nice to see the code working totally dynamically (i.e. comment out a whole class, replace the DLL in the running app and see the transform mechanism disappear). Obviously we only scratched the surface of MEF, but it was a hell of an introduction for me.

Closing

Closing the day was pretty quick, final "thank you’s” to the excellent host Conchango and directions to the pub for those that were staying! (sadly I had to leave to get a train back).

In Summation

A very productive day. Great opportunity to network, plenty of scope to learn and experiment. I will definitely be wanting to attend any other sessions that take place! All those interested, Alan did also make a good point of “this style is not copyrighted – if you want to run your own, do it!”. So, if you know of any similar sessions being hosted by yourself or someone else, get the word out. Let me know, I will be happy to spread the word!

Finally, just to once again thank you to all those that I have the privilege of meeting for their time, patience, hospitality and initiative – it has really been appreciated by this geek :)

Friday, 30 January 2009

Open Space Coding Day (31st Jan 2009) : So It Begins..

I recently got a tweet from Alan Dean asking if I wanted to come along to Open Space Coding Day, I only had one answer in my mind: “hell yeah”.

One of my many targets for this year is to ante up my geek game (as I put it). This has many faucets, which I hope to blog about soon, one of them being network, shut up, listen and learn.

Now, I am under no illusions, I am totally ready to admit that I am not a great developer, I try hard for sure - but I know I have plenty of room for improvement. I’ve had the privilege of networking with some really smart people on services such as Twitter. Now as a student without a master, I need to make sure I expose myself to as many smart people as possible.

I am now sat on the train on my way to London Waterloo. I had to get up quite early to get it, so I’m looking quite a mess :)

Still, I can’t help but feel a little nervous, the guest list is containing some really smart people (that I am looking forward to meeting), but I really think I am going to be the guy bringing the GPA down! :S

Side Note: Just passed Winchester – beautiful sunrise. I would take a pic but the trees keep whizzing past in the way :)

I am a Student Without a Master

While thinking and reflecting in my Marmite Moment, I hit on a key point in my mind. I am, and pretty much always have been a student without a master.

Like most geeks, I got in to computing at a relatively young age (I think I wrote my first line on code at about age 10). I had relatives and friends that sparked my curiosity in computing, messing around with installs, playing games and then coding. Video games fascinated me, but the thing that I really loved is the concept of this machine can do anything you tell it to. This is why I got in to applications development rather than games programming (which is a completely different world – often not realised by non-programmers). I didn’t want to create realities, I wanted to solve problems.

So, I was always the computer geek. I was the nerd in class, I was the nerd in the family, I was the nerd in the peer group.

Hi, my name is Rob and I am a nerd.

The problem (?) is that this has always seemed to be the case, I have only worked a couple of jobs as an actual developer (rather than just doing ad-hoc geek stuff). When I as doing the ad-hoc work, I was the “best” geek available, and when actual in a contracted geek role, I have quickly got established and found myself wanting to know more about things that my peers do not know.

Now, I do have to say, in my current job, I do have the privilege of working with some smart people who have written a lot of code, and have a lot of experience in their own fields. However, the things I currently really want to get great at (i.e. “this is how I want to work”), I seem to be “top kid”. This is not anything against them, it is just a natural process (they are family men and don’t have the same kind of time to nerd-out like I do!).

The thing is, I don’t think I am alone here, I have recently heard several podcasts and read several articles by people in similar circumstances. It is often agreed that software as an engineering profession sucks. We have no real standards yet (although some are starting to emerge), and perhaps more importantly no real internship or training program. There are no “developer” courses, and computer science guys don’t really learn “how to program”, they learn the science behind it.

So, that means you end up with a shockingly high number of people like me. People that want to be great, grow and learn, but we have no one to really look up to, to train us, to teach us. I find the best thing I can do is to network and just suck as much knowledge out of everyone and everything around me. But that can often lead to misinterpretation of “practices”, taking a standard and doing it slightly differently (rendering the standard useless). Is this a good thing for the industry?

So how do we solve this? I can only hope that by posting my ramblings here can spark similar discussion, bring people together so we can all work on improving each other. By continuing to network (be it by blogging, Facebook, Live Messenger, Twitter etc.) we can share our experiences. Perhaps in doing this we can help each other to become our own masters? Is software so malleable that standards are just too hard to really define? Would many standards/practices actually stifle the innovation and progression of our industry? I’m sure I am not the only one thinking some of the “best” code I have seen has been a complete hack and should never really see the light of day, but it got the job done.. Answer me this coding Jedi’s - What good is the force if you cannot bend it to your will? (be it the dark or light side)!?

Your thoughts?

Friday, 9 January 2009

Tag Me Beautiful! :D – Microsoft Tag Beta Released

In case you haven’t heard – Microsoft Tag has been released as a public Beta.

What is Microsoft Tag?

Well, in a nutshell, is basically a barcode generation application. I know what you are thinking - “Well I get barcodes on my baked beans? BORING!” but wait. What is different about Microsoft Tag is that it uses a system designed to store much larger amounts of information.

This means that you can actually make the “barcode” much more useful. You can insert full URLs & create vCards. This doesn’t sound like much, but read the first again.. full URLs.

Full URLs? Big Whoop, Wanna Fight About It?

Easy tiger! Now think about what URLs you use every day that could become scanned while on the move and be useful..

  • Event listings for a gig.
  • Timetables/schedules for trains/planes and automobiles.
  • Contact information for people/businesses.
  • Product offers etc.

Now, apply some geek knowledge.. What else could we do?

  • Hook in to services like Amazon 1-click, scan a product and it automatically gets shipped and delivered.
  • Have browser plug-ins that detect CSS microformats and automagically render the tag on the screen so you can find the info you want, scan and go.
  • Submit URL’s of files to an auto-download service. E.g. I see an advert for a bit of software on the web/in a magazine. I scan it, the URL is then sent to a download service, which then auto-downloads it to my PC.

The list could go on!

So, How Low Can You Go?

Having got excited about the tech, I wondered how small I could get my vCard tag and get it to scan reliably. I also wanted to see if they worked in black and white (since they are technically colour) – because I don’t have a colour printer set up :D

So, I threw them in to Paint.NET and started screwing with the colour and sizes, and I came up with the images below:  

BestBnW

BestCol

Scan them! Check them out! I think this is pretty damn impressive myself! The black and white can be a bit unreliable compared to the colour, but hell, it’s still great!

Note, I have to admit, I am terrible when it comes to imaging, a pro could probably do a lot better and provide a sharper image. Results will also obviously be very dependant on the ability of your mobile camera to focus at close range.

Thoughts? :)

Friday, 2 January 2009

New Years - My Marmite (It's a Love/Hate Thing)

image OK, first off, just in case my overseas friends are not aware of what Marmite is - check out this link.

So, why is New Years my Marmite? Well, let's get the negative out of the way. I hate the way everyone goes mental and gets absolutely hammered to celebrate the new year, then wake up the next day complaining about how they did nothing in the last year, how it is all going to change this year, and nothing does. Rinse and repeat. You get the idea right? I see it all the time, every time. It annoys me :)

But I am not just being a grouch, I genuinely wish it was different. I don't like seeing people being miserable about their lives. We all only get one (even though I am hellbent on living forever) - we should try and make it count.

"Why do I love it, especially if your head is swimming with so much negativity then, nerd?" I hear you ask! I love it because it is the one time of year I really put myself through the wash. I look back over the year and see where I have failed (note the emphasis on the "I") and then come up with a battle plan for the next year.

I know what you are thinking, well we all do that! "I am going to squeeze back in to those jeans by going to the gym more", "I am going to cut back on alcohol, chocolate etc." yada yada yada. But I think there may be a difference in the way we look at things. I really, really blame myself. I am a firm believer in that we are in control of our lives, so it is down to us to change them. And I have to be honest, failure crushes me. The truth is, I actually often have a short "sad" period for a few days around new years where I do look back at where I let myself down. It is never nice admitting you suck.

Yeah, I know, we are back to negativity, but stick with me. As I go through this process of self-destruction, I find that just holding myself accountable makes me want to truly fix it 100% more. I then start to formulate ideas on how to get it done. Sometimes it will just help me with the evaluation process of getting things off my list because they may just not be worth the hassle (do not read as "quit" - there is a huge difference between walking away from a challenge and just realising something is not as important).

Now, all is not perfect. Things rarely are. If I end up with 100 things to do over the next year, I may only succeed at 60 of them. But going through the above process, I will make sure I have a damn good reason as to why not. If that reason is anything along the lines of "I was too lazy", then I will make damn sure I feel bad about it. I let myself down, my family and my friends. However, the more I do this, the more I find that the reasons end up becoming good ones.. Maybe I was just genuinely over-optimistic, unforeseen circumstances always arise to mix things up and so on. These are (or can be) good/acceptable reasons for not hitting targets.

I then come up with a big list (or normally several lists to make the organisation of it make more sense) of things I need to do next year, taking into account the beating I have given myself for items still on the list that remain from the previous list. Creating this list actually takes a fair bit of time. I find myself brainstorming ideas a lot, prioritising, seeing if I can come up with more effective timelines (for example by grouping related tasks and working out any possible relationships/dependencies) - sound familiar?

You guessed it. It's all GTD/project management-based skills! We all have these skills, regardless of competency. But ask yourself this, how often do people actually come up with action points at the new years, as opposed to a loose commit over a drink while scoffing left over turkey from Christmas? I think the results are shocking but not surprising..

So, how do you find new years? Love it? Hate it? Just want more alcohol? :)

Side note: I may end up posting some of my tasks/lists on here for discussion. I think it would also be quite therapeutic to slate myself in public ;)

And lastly, I wish you and all your family the very best for 2009. May you share success and happiness whether you love it or hate it!