Developer Podcasts


RSS Icon Wearing HeadphonesI’ve loved listening to podcasts for a while now – so much so that when I listen to the radio I really miss being able to fast-forward past a Celine Dion classic. It’s the same for TV – I listen almost exclusively to My Sky and if ever I listen to live programmes I’m always trying to fast-forward the ads. All part of the fast paced life we live I guess where the seconds wasted during the main events are simply seen as missed opportunities for doing something else.

So anyway, I’ve been sorting through Google Reader feeds and have made my Podcasts Folder public – the shows are listed down the screen on the right or you can go here to subscribe to them yourself.

author: Tokes | posted @ Sunday, January 31, 2010 10:21 AM | Feedback (2)

IT Services vs. Product Companies


Having worked in the IT service industry for a number of years I am loving the change of now working at Xero, a product based company. Lots of the differences are obvious but the more I get to understand the rhythm of a product company the more I see the similarities too. Just to get us on the same page, here’s my definition of each type of company.

Service companies (SC) build software at the request of their clients - typically at an hourly rate or on a fixed price contract. The client drives the requirements and time constraints and ultimately owns the output of the engagement.

Product companies (PC), on the other hand, build software too but sell the software itself, rather than their time, to their clients. While clients do influence the features that are delivered and the definition of the requirements the ultimate decisions lie with the software company.

Some of the differences include,

  • Freedom to change - a PC has a lot more freedom to change the scope and timeframe of software features. Ultimately they run the show and decide what to implement and when to deliver it. Interestingly a lot of what has been written about agile software processes originated from PCs where the freedom to redefine and delay scope are critical. Success with agile practices in SCs is limited.
  • Solution Longevity – a successful PC invests in a product and reaps the rewards, through sales, over the life of the product. The product will evolve to meet new demands and include new features but the longer it stays around the better. SCs often build solutions to solve specific business problems at a given point in time. There is rarely enough scope to design the solution to last. It’s almost expected that in a few rears it will be cheaper to build it again – from scratch – to meet the inevitable difference business requirements and processes. How many solutions built by a SC have lasted 30 years like Microsoft Word!
  • Incremental Improvement – a SC typically has one chance to get it right. They sign a contract to say they’ll deliver a working solution in 6 months, they deliver it and and may never get to see it again other than supporting bug fixes and small enhancements. A PC's product will go through multiple production releases, each time there is an opportunity to incrementally improve the solution - its architecture and implementation.
  • SC Earning Potential - the earnings of a SC is limited to the number of productive staff they have – it is not possible to earn more than when all productive staff are charging all their time to a client.
  • PC Earning Potential - the earnings of a PC is limited to the number of clients that buy their software – this can range from nothing, if your product sucks, to heaps, if it doesn’t.
  • Great Ideas – implementing great ideas (that attract/impress clients) in your software could dramatically increase a PC’s potential revenue – for a SC it will simply mean the client pays you or at best asks you to do some more work for them.

Some of the similarities are also interesting though.

  • Pressure to Deliver – both types of companies are under pressure to deliver. Whether it’s because a client is freaking out it’s taking too long or your sales team are screaming at you for the next killer feature to sell – building software has its tough side.
  • Compromise – pressure to deliver, limited resources, staff skill levels… all these things conspire to ensure you will always have to compromise, take shortcuts, repeat code, etc. that’s just software. There is no perfect solution and you could always of done it better.
  • People are Important – it’s true that for any company people are a crucial part of their success. Motivated, valued and supported staff will be way more likely to be productive, responsible and happy.
  • Supporting Your Code - PCs and (most) SCs both have to support the code they write. This means that code quality is an important factor.
  • Specialisation – as any company increases in size there is a tendency towards specialisation. At Intergen it happened across the different Microsoft products – we had specialists in ASP.NET, SharePoint, CRM and NAV and once you became associated with a particular product it was hard to move on. This is symptom of the increasing complexity in software – no one person can know everything and as any company gets bigger the only way to scale is for people to become experts in a given area.

Some things that might be differences or could just be from my experience only.

  • Testing - PCs take testing more seriously. At Xero, testers are involved from very early on in the process and throughout the process. If a tester says it’s not ready to go live it doesn’t go. At SCs I’ve worked at testing is either pushed on to the client or internal testers are asked to stand at the software train station and check everything’s OK as the express races past (but it’s OK since the developers have already tested their code! Yeah, right.).
  • Work Units - since the earning potential of a SC is directly related to the number of staff they have (unlike PCs) it is tempting for SCs to depersonalise their staff and treat them as “work units” – ordering in more when they have the work and getting rid of some when the work dries up. I’m not saying this doesn’t happen at PCs but there is more chance (especially in the early stages of a PC’s growth) that employees, regardless of their position within the company will feel a sense of common purpose.

So there you have it – a brain dump of what’s been going through my mind over the last few weeks.

author: Tokes | posted @ Monday, January 25, 2010 8:59 PM | Feedback (4)

Silverlight 4 – Accessing HTML Bridge While Out of Browser (Sort of)


Note this post refers to the first Silverlight 4.0 Beta (release November 2009) – future releases may cause readers to be confused and misled – you get that.

Silverlight 4.0 offers a number of new features that I am really keen to try out for ButtercupReader. In particular,

  • Using the WebBrowser control to render the book contents rather than having to convert HTML into XAML.
  • Using ComAutomationFactory to create the SAPI objects for self voicing text-to-speech (rather than relying on doing this in JavaScript)
  • Using MyDocuments storage instead of IsolatedStorage to store loaded books locally.

I’ll cover some of these features in future posts.

Now all the features require Silverlight to be running Out-Of-Browser (OOB) with elevated privileges. So my first task (after upgrading the source code from Silverlight 3.0 to 4.0 – harder than it should have been, but I’ll leave that to another post) was to see if ButtercupReader would run OOB. It won’t. The main reasons is that ButtercupReader relies on the HTML Bridge to make JavaScript calls.

By design, OOB applications can not access the HTML Bridge like HtmlPage.Window.Invoke(). Bugger.

Now I am probably going to be able to do away with my dependency on JavaScript but I did discover a way to allow OOB applications to use (some) JavaScript.

You need to create two Silverlight applications. One that simply contains a WebBrowser control (new to 4.0) and acts as the container for the page that hosts your main Silverlight application. The host web page for the container application will be the new entry point to your main application. You simply set the location of the WebBrowser control to your (original) main application host. Something like,

    browserControl.Navigate(new Uri(“http://buttercup/default.html”));

Where, http://buttercup/default.html, is the location of the page that hosts your main Silverlight application.

You can now run the application OOB and interact with the Silverlight application hosted within the WebBrowser control and be able to execute JavaScript via the HTML Bridge. BUT (you knew it was coming), the WebBrowser does not currently support all Javascript functionality. I haven’t seen a complete lists but this forum indicated that calls to “alert, confirm and some other window.* methods are blocked”. I couldn’t get ButtercupReader to work (didn’t try that hard though) so there are obviously some other restrictions.

So, there you have it, could be an option if your application relies on the HTML Bridge and you want to take advantage of the new features that rely on OOB.

author: Tokes | posted @ Sunday, January 10, 2010 4:40 PM | Feedback (0)

MVP!


2010 has started out with a bang… I am now a Silverlight MVP!

Thanks Microsoft – awesome way to start the new year.

I’ll be walking with very impressive company by the look of the other 2010 Silverlight MVPs

author: Tokes | posted @ Wednesday, January 06, 2010 8:58 AM | Feedback (2)

Silverlight 4.0 at the SLUG


It doesn’t seem that long ago that we were all admiring the new features of Silverlight 3.0 and now we have imageanother version to grok.

I will be presenting an overview of the latest (beta) version of Silverlight at the next Wellington SL User Group meeting on February 13th (TBC). So if you don’t have the time or energy and want to get up to speed quickly then this session is for you. I will cover as many of the new features as possible and there’ll be plenty of demos.

See you there. 

author: Tokes | posted @ Wednesday, January 06, 2010 8:23 AM | Feedback (0)

You Can’t Rely on Developers to Sell Silverlight


Wearing my developer hat I could (and at times have) wax lyrical about how awesome Silverlight is; how great it is to build RIAs using a familiar language, how great the tool support is, how easy it is to build great animations, how I’ve welcomed the return of the stateful application… but none of this will make any difference to the adoption of Silverlight.

Silverlight will only hit the mainstream when it is an incidental (yet critical) element of a must-have user experience.

Let me explain what I mean.

Flash can thank its widespread adoption to the simple fact that the demand to watch video through the web browser was such that people readily accepted the need to install a plug-in to do so. There was no alternative. No-one chose to install the Flash plug-in because it was a cool technology.

In fact, both Flash and Silverlight have yet to crack the RIA space. You simply don’t see many applications that satisfied a demand or need that can’t currently be solved using HTML/CSS/JavaScript. Sure it might take twice as long to build a really rich experience (take Google Wave for example – I shudder to think the extent of the JavaScript libraries and CSS magic that went in to it) but, for the end user, the experience is still pretty good.

Now if Microsoft ever deliver Office in Silverlight that could well be application that drives the incidental adoption of Silverlight. Certainly, Silverlight 4 has added a number of new features that would make achieving the level of functionality required for an online version of Office possible.

So come on Microsoft – give the world an application that customers have to have that just happens to be built using Silverlight. Like you need to be told ;-)

author: Tokes | posted @ Wednesday, December 09, 2009 10:10 PM | Feedback (3)

What Sort of Team Leader Are You?


I was interviewing a developer recently and we discussed his aspirations to be a better Team Leader (TL) and how he felt he needed to have more technical depth to achieve this. It got me thinking about the different sorts of TLs that operate in IT and how not all of them require you to be a technical guru.

I’ve posted before about my definition of a Development Team Leader and what the role entails but there are styles of leadership that I’ve come across that may reflect your style or potential.

  • imageTechnical Team Leader – I think a lot of developers think of this role when they think of a Team Leader. They picture the guy who is at the peak of their technical career, the guy who knows about the latest design patterns and best practices. The guy who writes code so elegantly that no-one else can read it – a true sign of greatness (OK, perhaps they don’t do this but I’m sure you all know someone like this). This type of leader’s main focus is to guide their team to make the right technical decisions; to ensure they follow the right standards and maintain the quality of the application(s) they are leading. They often take on more coding than other types of leaders – coding is still their primary passion and they want keep at the top of their game, however, they are also driven to help others improve and share their knowledge and experience. In fact, without this additional motivation they wouldn’t be a TL at all – they’d simply be a Senior Developer (SD).
  • imageSubliminal Team Leader – a Subliminal Team Leader (STL) is one that practises a very passive form of leadership - to the extent that sometimes they don’t even know they are doing it! They are not the sort of person to hide themselves in a corner and their presence and achievements are widely known. People look up to these sorts of people and want to impress them. If a STL is on your team they may not have the title of TL but you  respect them and seek their approval. The STL will often be across more than one project – they are too valuable for their influence to be limited. They are rarely the most technical people in an organisation and will often have a more holistic approach to development where they are equally motivated by delivery as they are over the technology used to achieve it. Because of their leadership aura they can afford to spend time “doing” rather than “leading” and as such can be incredibly valuable team members. As an employer, it’s obvious who these people are and it’s incredibly important that they are (financially and visibly) recognised even if they are not given an official leadership title.
  • imageEmpowering Team Leader – an Empowering Team Leader (ETL) has the same qualities of the STL but takes a more active approach to how members of their team are utilised and nurtured. They understand that their type of leadership necessarily means they can spend less time on their (development) craft and that they must leverage the skills of others. In fact, they see this as a core part of their role – to empower individuals on their team to take responsibility for their actions and decisions. This ability to see the strengths (and weaknesses) in others allows their teams to operate in the most efficient way possible.

Of course, different teams require different sorts of leaders. If you’re leading a team of graduates then you’re going to have to be able to roll up your sleeves more than leading a team of more senior developers. So if you’re looking to move into a leadership role make sure you know what you’re dealing with and whether your style of leadership will work.

author: Tokes | posted @ Saturday, November 28, 2009 1:32 PM | Feedback (1)

Grokking – You Learn Something Every Day


I’ve only really noticed the use of “grok” in IT circles in recent years (maybe I’ve been under a rock but hey) – it always made me laugh and thought it was a geek neologism that stuck.

But I’ve just started reading the 1961 classic Stranger in a Strange Land by Robert Heinlein and noticed his frequent use of the term. And he obviously loved it…

“There was so much to grok, so little to grok from.”

Turns out he made it up and it’s been picked up all over the place – and not only by us geeks.

author: Tokes | posted @ Friday, November 27, 2009 11:18 AM | Feedback (1)

Out of the Yellow Into The Blue


After seven years proudly flying the Yellow flag I’m moving on from Intergen and am now officially unemployed!

xero But not for long - next week, I’ll be taking over as Product Manager at Xero. After almost 14 years in the service industry I am really looking forward to working for a product based company that is making waves in all the right directions.

So goodbye Intergen, thanks for everything, it’s been great knowing you and hello Xero – here I come.

author: Tokes | posted @ Tuesday, November 17, 2009 10:30 PM | Feedback (1)

RIA Services – ADO.NET Data Services and WCF


I’ve had a chance to look at RIA Services over the last few months and thought it would be good to clear up some of the confusion over where RIA Services stands in relation to other related technologies like ADO.NET Data Services and WCF.

In some respects RIA Services are similar to WCF Services. You write the service code, host it on a server, create some proxy classes on your client and away you go. In fact, if you look at how you implement the same service in each technology it’s almost identical.

In WCF,

[ServiceContract]
public class SpeechService : ISpeechService
{
    [OperationContract]
    public CreateWavStreamResponse CreateWavStream(CreateWavStreamRequest request)
    {
        ...
    }
}

In RIA Services,

[EnableClientAccess()]
public class SpeechDomainService : DomainService , ISpeechService
{
    [ServiceOperation]
    public CreateWavStreamResponse CreateWavStream(CreateWavStreamRequest request)
    {
        ...
    }
}

In both cases a proxy class is created when the service is referenced. In the case of RIA Services the proxy (DomainContext) is created automatically when you compile your Silverlight solution. For WCF the proxy is created when you explicitly reference the service via, for example, the Add Service menu option in Visual Studio.

In this example the main difference between the two technologies is in the way the messages are constructed and sent between the client and service. In the case of WCF you get to choose your binding (HTTP, HTTPS, TCP) and transport (usually SOAP but REST is possible if the length of this white paper doesn’t put you off!). The current version of RIA Services (July 2009 CTP) only supports HTTP, REST-style services that use JSON to package the contents of the messages. The current implementation follows a very similar pattern to that used by ADO.Net Data Services. In fact Tim Heuer states the next version will adopt ADO.Net Data Services completely.

And even further down the track it looks like they’ll be incorporating some of the power of WCF into the transport layer. For example, Brad Abrams mentions,

“We also expect to eventually provide full access to all the power and flexibility from the underlying WCF services such as highly optimized binary serialization. “

RIA Services aligns further with ADO.Net Data Services by automatically allowing you to generate CRUD style operations against data stores. Simply point to a data store and away you go. Doing this in RIA Services results in a (server-side) service that looks something like,

[EnableClientAccess()]
public class BlogDomainService : LinqToSqlDomainService<BlogDataDataContext>
{
 
    public IQueryable<Category> GetCategories() ...    
    public void InsertCategory(Category category) ...
    public void UpdateCategory(Category currentCategory) ...
    public void DeleteCategory(Category category) ...
 
    public IQueryable<Comment> GetComments() ...
    public void InsertComment(Comment comment) ...
    public void UpdateComment(Comment currentComment) ...
    public void DeleteComment(Comment comment) ...
    ...
}

The implementation of the service is based on LinqToSQL – this is likely be extended over time.

The operations of which, can be called from the client, via an auto-generated proxy, using REST-style web requests that look very much like ADO.Net Data Service requests. For example, a request for all Postings would be constructed as a GET request to a URI like,

http://[yoursite]/ClientBin/DataService.axd/[yourRIAServicename/GetPostings

RIA Services processes this request and returns an HTTP Response where the contents of the response are serialised using JSON.

image

Note: The above screen-shot is from Nikhilk’s IE browser extension, Web Development Helper that seemed to be one of the few HTTP traffic capture tools that allows you to view JSON output in a tree-view.

Of course, RIA Services is more than another way of simplifying distributed data transfer. It contains many other features that have nothing to do with either ADO.Net Services or WCF including,

  • Integration with ASP.NET’s security model – forget about the complexity of WCF security, this is how easy securing services should be!
  • Client-side Validation – all validations defined on your server-side entities (using familiar Data Annotations) will be automatically transferred to the client.
  • Silverlight Control Support - because of the way Data Annotations are used a number of Silverlight controls will honour the validation rules also. For example, the DataGrid and DataForm will both display validation error messages without you doing a thing.
  • Offline Support – all changes to your entities are batched within ChangeSets that can be saved to IsolatedStorage when not online.

So, there you have it. Be confused no more ;-)

kick it on DotNetKicks.com

author: Tokes | posted @ Sunday, November 01, 2009 5:28 PM | Feedback (0)