Web Directions Code Melbourne 2012 – Day 1

I spent today (23rd May 2012) at Web Directions Code first time attendee of the Web Directions conferences, and this is the first Web Directions Code (at least in Australia or Melbourne).

web-directions-code-logo

It was a great day, a combination of great speakers, face chocolates (see below) and a single track taking out the stress of selecting which presentation to go and see. It’s a 2 day event so I’m quite excited to be going back tomorrow. (Here’s my Day 2 wrap up).

Face Chocolates & Eat Play Code

Faruk Ates
The Web’s 3rd Decade

Key take-away is this slide, with the important message being better tools are clearly what’s missing right now that’s making web development not productive as it should be, we should be further along in terms of getting more of the basics done. This comes about from achieving the other 2 items – more involvement along with making it clearer how to use and integrate existing frameworks and or tool sets.

Dave Johnson
Device APIs: closing the gap between native and web

Dave spoke about technical challenges in building PhoneGap. The most challenging being those around; security, sand-boxing, privacy permissions, and performance. Basically its hard work, many devices many lacking features, in particular around new HTML based video and audio.

Damon Oehlman
HTML5 Messaging

Damon covered off a lot of technical details around messaging in HTML 5, listing two main types: ‘Post Messaging’ and ‘Channel Messaging’ stating that post messaging is simpler to get going with. He went further to discuss web-sockets and some example frameworks like Socket.IO and Sock.js. He demonstrated posting messages via his presentation and created a web socket connection to twitter to receive messages as soon as they arrived at twitter. Then briefly touching on Web Intents.

Andrew Fisher
Getting all touch feeling with the mobile web

Walked us through the basics of touch, with some nice demonstrations and a walk-through of how common touch mechanics we’re all familiar with work.

Silvia Pfeiffer
Implementing video conferencing in HTML5

Had a very impressive setup of some node.js server logic coordinating 2 browsers connecting to each other to perform a video conferencing call on stage between her and the audience.

Anson Parker
The HTML5 History API: PushState or bust

Gave us a neat little round up of the History API and how it works, Anson took the opportunity to remind us that companies like twitter with their hash-bang urls are breaking the expected behaviour of the web. He gave an example of how much data is delivered regardless if you’re requesting to view a single 140k tweet versus their tweet stream (typically paged at 10-20 tweets). He wrapped up with a cool demonstration of a site he’s in the process of building, that looks very promising kahzu.com

excessive twitter download

Tammy Butow
Fantastic forms for mobile web

Tammy walked us through the basics of building suitable input forms for mobile devices, taking advantages of types such as ‘tel’ to bring up only the numeric keypad for input, all the tips are up on slide share.

Max Wheeler
Drag and drop and give me twenty
Walked the audience through drag and drop concepts.

John Allsop
Getting off(line)

John overwhelmed with a flood of information about the complexities and pitfalls of working with appcache. He walked us through sessionStorage and localStorage and the tradeoffs of what you can store, how much space is available, and security concerns (in particular when browsers crash). He covered a great deal so here’s a link to an older version of his presentation from a previous web direction conference (I’ll update with a new one when I find it).

Developing with AppCache

Divya Manain
Designing in the browser

Divya made a very clear and strong case for having a process that involves designers writing code, and building prototypes sooner rather than later (or not at all). Advocating moving from very initial rough paper sketches straight to prototyping using a fair few useful tools (note this is still rough notes, I’ll follow each up and link directly).

Tools / resources for prototyping

designing in the browser

To top off a great day we got a gift each from Blackberry a PlayBook.

blackberry playbook

One last thing the graphic of the day to get the most reaction (excluding courage wolf ones).

eating clag

Error message 800704a6 as part of creating an instance of the COM component

This will be a very short post, and comes from rage against Windows Server and the Windows update system. Because there were outstanding Windows Updates requiring a reboot, a particular build script of ours was falling over without suitable information as to why exactly.

The cryptic error was:

Creating an instance of the COM component with CLSID {0002DF01-0000-0000-C000-000000000046} from the IClassFactory failed due to the following error: 800704a6.

The answer (at least for us):

Reboot!

There are windows updates getting in the way of instantiating new COM objects.

You’ll see a lot of people having a similar problem, not sure if reboot is the answer for them all, but make it your first step, and memorise the error code 800704a6. Unable to verify this but it looks to relate to the text code of ERROR_SHUTDOWN_IS_SCHEDULED.

The ServerFault post that helped most:
serverfault.com/q/ie8-script-error-800704a6

Stackoverflow Questions

stackoverflow.com/watin-nunit-and-cruisecontrol-net-error-message-800704a6
stackoverflow.com/tests-fail-sporadically-using-cruisecontrol-net-with-nunit-error-800704a6
stackoverflow.com/setup-method-failed-while-running-tests-from-teamcity
stackoverflow.com/tests-fail-sporadically-using-cruisecontrol-net-with-nunit-error-800704a6
stackoverflow.com/failed-due-to-the-following-error-800704a6-while-trying-to-read-data-from-a-text-file

Generic Personality Tests For Software Engineers

I rarely rant on my blog, but when a friend of mine brought up that he had to take a personality test as part of the interview process (a step prior to being given an offer), it just frustrated me so much. So at this point dear reader you may move along if this isn’t of interest as this is all my opinion on personality tests for software engineers.

Summary and Disclaimer
Unless your organisation has thought long and hard about designing a personality test specific to software engineers, don’t subject candidates to a generic personality tests. It reflects poorly on your understanding of software engineers.

If you use a generic personality test…

Q: Do you care about hiring and retaining the best software engineers?
A: test A resounding – No.

Q: Do you understand what it takes to be a good software engineers?
A: A clear – No.

Q: Does your organisation care about the previous two questions?
A: If no, then fair enough. Continue using the test, and move along.

Otherwise:

You have to be kidding me. When a professional organisation subjects any reasonably qualified software engineer to the same type of tests they subject potential employees in their specific field to then they are not concerned about hiring and retaining the best, or they have been ill-informed on how to recruit top software engineers. What got me fired up about this information was that the type of questions he described. They were so broad and irrelevant to what it would take to do his job. This frustration was further compounded when it was apparent that this test carried some significant weight in the recruitment process. They didn’t even bother to undertake more suitable programming/problem solving exercises that an Engineer would actually do in day to day activities in this job role.

At this point you may counter my argument with, a general statement such as “why not just use any and all tools available to help make a decision“. To this I answer: such questions are not relevant enough to accurately judge a good software engineer, and do more harm than good.

Here are some categories we derived from the discussion after he sat the test, and we analysed the questions that invoked the anger that’s feeding this post.

  1. Questioning the norm.
  2. Long standing ideas.
  3. Repetitive routines.
  4. Breaking rules.
  5. Data analysis.
  6. Being creative.

Here we are both speculating a bit, but the type of questions that represented the first 4 categories seemed to attempt to discover candidates that would be deemed as rebellious. As a software developer answering these questions you have to completely put aside what makes you a good software developer. I would give credit if the organisation was actively seeking ‘rebellious’ software developers ready to challenge the norm and bring improvements. But based on their sector, and other information this seems highly unlikely. The questions that matched the last 2 categories seemed reasonable.

A very brief search uncovered this reasearch paper; very SDLC and waterfall focused analysis of personalities (pdf), there didn’t seem to be any concept of applying Computer Science knowledge/research into this personality test. In fact several questions were difficult even to interpret for your typical software engineer.

If I was subjected to such a test as part of an application where the test wasn’t clearly justified as relevant to engineers, it would be safe to say right there an then to avoid stress I would decline and withdraw my candidacy.

Take away: treat your engineers with a bit more respect.

Perfect Password Paragraphs

Over the last few months at least in the streams of information I typically consume, direct issues: Security Now topic of Password Haystacks, xkcs’s comic, Coding Horror, and indirect: Scott Hanselman one and two. Have all commented on the issue around passwords and strength and the need for better passwords.

In this post I am putting forward a novel approach: which as an homage to GRC’s Perfect Paper Passwords and accordingly have titled my approach:

When high entropy 16, 32, 64 or even 128 character passwords are just not secure enough!

Let’s jump right in with a sample, here I’ve mocked up the very familiar facebook interface with a nice large textbox to put in your Perfect Password Paragraphs™.

Perfect Password Paragraphs facebook log in modified

Disclaimer: if you’ve gotten this far and haven’t begun to appreciate the humour I’m so sorry, please don’t send me hate mail.

Features:

  • A big text area where with probable difficulty you have to type 100+ words to authenticate.
  • Typographical errors are ok as long as they are consistent for you.
  • A flow of sentences following a theme/style just needs to sound like the individual attempting to gain access.
  • “Sound Like” is a trademark (patent indefinitely pending) of Josevski Research Corp, is the flux capacitor grade specialty of this authentication system.

Comparison metrics:

  • Writing style
  • Choice of punctuation, frequency of commas, periods, ect.
  • Grammar choice.
  • spelling (American vs British English).
  • Consistency of spelling errors.
  • Choice of tense (present, past, and future)

Future Features based on demand:

  • International support.
  • 1337 sp34k.
  • Baby talk.
  • Obscure localised slang.
  • Pig Latin.
  • iOS, Windows Phone 7 and Android Support.

Alpha product coming online in 6-8 weeks 😉

Getting to know your machine, by building it

Back in September of 2009 after a fair few months of thinking about what to put in to a new PC, the stars aligned and along with some friends of mine decided to take on a small project of building our own PCs. At that point I had never done the activity on my own, as in assembling everything from scratch, but was well across how the hardware did connect, and what the steps were.

The systems back there were Core i7 920s @ 2.6 Ghz, with 12Gb of RAM (6x2gb), 2x 1TB drives, 2x NVidia GTX 275s 892MB. At this point it’s obvious these machines were to be gaming rigs with some nice SLI action in the GFX department. These machines are CPU overclocked to run at 3.5Ghz and have been running well for just over 2 years now.

Fast forward to August 2011. Almost 2 years on, and I’m at it again, but this time to build our primary software development machines at work.

This system consists of Core i7 980 @ 3.2Ghz, with 24Gb of RAM (6x4gb), OCZ Vertex 3 SSD, 1x NVidia GTX 560 1Gb.

The following is just a summary of my experience, and those who took part in the builds with me, your millage may vary and in no way is this a definitive guide, there may be some useful tips and insights, either way this is to be an entertainment post, full of hardware pictures.

Choice of parts
“Bang for buck” is obviously your best bet, which translates into purchase what is important in your budget. This being 2011 very much the year of the SSD, this is where your first bit of attention should be.

In 2009, an SSD was well out of our price range, in particular with 32Gb models being the most popular and still not very affordable or even reliable yet. In 2011 this is not the case, and with budgeting to ensure a great SSD we ended up with 240Gb OCZ Vertex 3 Max IOPS drives. These were of the top end of the SSD spectrum, the only thing typically more expensive was larger capacity 500+Gb which had just come out, and some other specialised SSDs.

ocz vertex box and on case tray

Ensuring part capability
This just takes research as there isn’t much that can go wrong. The main concerns typically revolve around the capabilities of the motherboard, after you clearly select the motherboard that’s appropriate for your CPU chipset. Also of concern to double check on is physical space inside the chosen system case. This did bite us when early 2010 we decided to build a similar spec’d machine as the 2009 machine, but chose a newer and physically larger GFX card which did not fit the 2009 cases.

2009 Case -> Cooler Master CMStorm Scout
2011 Case -> Corsair Graphite 600 (black)

I found just searching for reviews and combinations people are bench-marking online make a good guide to compatible choices.

motherboard Gigabyte G1.Guerrilla

Purchasing
Shop around for any discounts if buying a larger quantity, combined order. We went as far as to choose to shop at multiple locations to obtain the best prices, and to ensure all the parts we wanted could be acquired exactly when build time came around. This may be a negative as if there are issues with multiple parts then you have to deal with 2 or more business for parts exchange. Luckily in both the 2009 build and the recent build there were no issues requiring travelling back to the store.

graphics card gtx 560 1gb

The Build
A quick checklist of the order of configuration, in both times, even trying both combinations, I found that at least for our cases, it was easier to assemble almost everything on the motherboard with it on the build table, and not in the case. This is the order that worked well for us.

  1. Install the RAM onto the motherboard.
  2. Lock in CPU with thermal paste.
  3. Add your CPU heat sink, plus any rear of motherboard mounts.
  4. Wire up CPU fans into motherboard.
  5. Clip on RAM cooling fans (wasn’t a feature on my 2009 machine).
  6. Screw-in feet for motherboard into case.
  7. Bolt motherboard down into case.
  8. Insert GFX card.
  9. Run SATA cables for SSD/HDDs, BluRay/DVD roms
  10. Link up any case based connections (HDD lights, fans, power button, etc)
  11. Tidy up cables now and as you go.

Cable Management
I’m of the opinion you should attempt to get all the internal cables tucked away as neatly as possible to help with airflow, and general appearance, in my machines a strong touch of OCD helped get them in a near perfect state of “out of the way”. Zip ties, twisty ties and making use of the case are your best friends here.

Cooling
Fans, fans and more fans. Here I don’t believe it’s necessary to go that overboard with advanced alternate tech cooling. But to each his own.

In both the 2009 and 2011 systems, we chose to go with an aftermarket heat sink for the CPU, this was clearly the right choice in 2009, but when we saw the stock fan that came with the Core i7 980 it looked like it would do a good job. None-the-less dual fans and larger grill section on the Noctua NH-U12P is what’s cooling the overclocked 920s and 980s.

noctual cpu fan, and corsair ram fan

Testing the configuration
Double check nothing is out of place, and turn it on. Good luck! 😉

case assembly complete

Play
Start using the system. After you have your Operating System installed that is.

monitors

Greenfield Application Development (GAD)

I’ve been very busy of late, focusing on prototyping little things (along with some personal things). This is the first time I’ve had a real level of control of how a greenfield application will be built. In the past I’ve experienced too many obstacles to achieve a desirable outcome.

Dilbert Failure

But now a twist of fate along with; a bit of planning, brainstorming and prototyping is on track as a “greenfield” application.

Green Field

I can’t go into the details of the application and it’s operation, so I thought I’d share a little summary list of things we’ve considered, discussed, and even decided* upon for our application.

*Decided as far as we haven’t changed our mind yet.

Disclaimers
1. This is by no means a complete checklist – but if you’ve got the opportunity to be part of creating a new application which has some degree of flexibility in terms of deadline pressure and implementation. When I say flexibility I mean ability to make choices without intense time pressure or a lot of other external pressures. I hope we’ll discover if the time we’re taking was viable based on our final delivery time frame and delivery outcome.

2. This is biased towards patterns and technology common in the Microsoft.NET space.

Once there are some more interesting prototypes/concepts, I’ll post some lessons learnt or just cool solutions (if we do end up producing something “cool”).

So onto the list.

Consider:


How long you spend on:

  • A pure research phase.
  • Brainstorming sessions with stakeholders / domain experts.
  • General discussions amongst developers

When to:

  • Lock down some big decisions, only to change course if it’s an impedance.
  • Restrict new ideas from even more stake holders, (people with opinions).

How to conduct the:


Choice of:

  • System architecture.
  • Presentation platform; web, desktop, mobile.
  • Presentation framework; ASP.NET MVC, WPF, Silverlight.
  • Development patterns; MVC, MVP, MVVM.
  • IoC container.
  • Mocking and Unit-Testing frameworks.
  • ORM frameworks.
  • Database approach in general
  • Using a non-tradition database technology along the lines of NoSQL.

How many:

  • Initial features you need to deliver, before you have a beta.
  • Newish techniques to adopt/use. (New to developer community or just your team).
  • Beta technologies to take a bet on.

but most importantly, how you will deliver:

  • Business/customer value.
  • A pleasant end user experience.
  • Support and help.
  • Confidence in the system.

Obviously several of the above choice branches are reasonably trivial, and come down to personal preference and familiarity, clear cut example is the choice of a unit testing framework.

As a summary point for our choices, the current set of “locked down” technology choices revolve around:

  • WCF – for a distributed deployment of system services.
  • ASP.NET MVC 3 – the way to go on the web space with .NET 😉
  • NHibernate – a popular ORM in the .NET community, and due to some unpleasant experiences with other ORMs in the past.