This is the first in what I hope will become a regular feature on our blog. I want to interview members of the South African developer community (that’s you, dear reader!) who are some great work out there. We often hear about Microsoft MVPs, high-profile community members and the excellent work that they do but we have a lot of fantastic talent in our country that we don’t tend to hear about and I’d like to try and unearth the stories and individuals that are out there.
This interview series will become a more regular feature as we speak to everyone out there doing great things in software development. So stay tuned and if you have any suggestions for people to interview, please contact us.
Our very first interview is with Stephan Johnson, from Blue Marble Software:
DM: Stephan, tell us a bit about yourself and your development experience.
SJ: I started development when I was 9 years old using QBASIC guided by a little green book titled BASICA 2.0 (I know they don’t match, it just made learning more interesting!). During the next few years I started coding in Turbo Pascal and Turbo C++. Most of my time during Computer Studies at school was spent writing programs to mess with the Novell network and to drive my teachers crazy. When I left school I started working as a Delphi developer and soon discovered Microsoft.NET. I acted as an early .NET evangelist to development managers whom all rejected my claims that .NET is the future, even though the last time I checked every one of those companies are running .NET based systems.
Most of my working life has been spent in the financial industry writing all sorts of programs including some time at the Johannesburg Stock Exchange where my duties included the source control management. I learnt some Configuration Management skills and added Team Foundation Server to my tool belt. I have since consulted with various companies on their source control and software deployment strategies. I believe that good software is founded in good Configuration Management, especially if you have future maintainability in mind.
DM: You’ve built the Genesis Smart Client Framework. What is it and what do it do?
SJ: The Genesis Smart Client Framework allows us to easily develop custom Modules that are deployed online to our users. Using a combination of ASP.NET and Windows Forms we provide a rich online experience to our users with the power of a Windows Forms application. We have been running our Software as a Service application since 2006 without any offline time for our users. Because the deployment happens from the server we do not suffer version inconsistencies, updates are handled automatically without user intervention. Since we’ve gone live we have spent none of our time supporting users after an update has been published, they only notice when a particular bug disappears from their day to day operations!
DM: What made you decide to make Genesis publicly available?
SJ: In 2008 I thought that if I can make The Genesis Smart Client Framework Open Source and freely available, I can make other developers’ lives that little bit better. No longer having to worry about deployment nightmares, or at least, worry less. The framework also allows the developer to start working on functional code rather than being held up by writing the UI, security, and other basic plumbing that all new applications require. I started by writing 7 articles on The Code Project covering everything that I could remember about Genesis’s inner workings (being a few years since I wrote the framework). After that I cleaned up the code a bit for public consumption and housekeeping so that nobody saw how bad I actually code.
DM: Where can people learn more about the Genesis Smart Client Framework?
SJ: We have an online project on CodePlex (GenesisSmartClient.codeplex.com). All of the source code is available including some discussion boards. I have also written a few articles on The Code Project detailing every aspect of what the Genesis Smart Client Framework is and how to get started with your first Genesis application.
DM: What sort of feedback have you received?
SJ: I generally have a download rate of about 30 downloads every 7 days according to the CodePlex statistics. The feedback I’ve had has been mostly positive, some from the US, some from the UK, but not surprisingly the most from India. I believe this is because most US/UK developers have been accustomed to CAB & SCSF, and saw no real need for yet another smart client framework.
DM: What are your future plans for Genesis?
SJ: I realize that the framework is built on technology that is more than 5 years old, and that the current best-of-breed (a.k.a Microsoft Visual Studio 2010 and Microsoft.NET 4.0) platforms offer many more (and better) features than what Genesis is using. In order to get with the times, I decided that Genesis needed to be re-engineered from the ground up using WCF for communication, WF4 Workflows for business logic and XAML for the presentation layer. I have spent the better part of a year in researching all of the required technologies and skilling up where required; I eventually settled to use as many Standards and Patterns as I could, in order to increase the potential uptake of the project and to lighten the load of having to redesign the wheel, or at least not having to redesign the wheel at all.
For Genesis 2.0 (which I’ve codenamed Project Ruby), I decided to use the Composite Application Library (a.k.a PRISM) from the Microsoft Patterns & Practices team. CAL allows me to develop a custom Shell, and to develop separate and isolated modules that are dynamically loaded at run-time. CAL also enables multi-targeted development, where a developer develops for both Desktop (WPF) and Web (Silverlight) using a single shared code-base.
DM: You’ve done a lot of work with WPF and Silverlight. What has been your experience learning these technologies?
SJ: Coming from Windows Forms and Web Forms I was simply unprepared for how awesome declarative application development can be. Initially I could not quite figure out how the whole binding thing worked, why the button would not twinkle with sparkly stars by itself and where is the border I JUST PUT THERE? Lucky for me I came across the DNR-TV episodes 128 and 129 which explained basic XAML layout and basic binding concepts. From there it just got easier and easier every day that I did some XAML.
DM: How do you contrast this against Windows Forms and Web Forms development?
SJ: In a Windows Forms or Web Forms application, you place a button on the form, double click it and write your code. Though you could do this in a XAML application, you would soon run into development nightmares. It is recommended to use a pattern such as Model View View-Model (MVVM) in order to accomplish a separation of logic and UI behaviour. MVVM allows tighter control and more predictable behaviour of the application at run-time.
DM: Is it really possible to share a XAML codebase between WPF and Silverlight applications?
SJ: As unbelievable as it sounds, it is possible to share code, and more-so, XAML between WPF and Silverlight applications. Unlike Windows Forms and Web Forms, there is no fundamental difference between the Desktop (WPF) and Web (Silverlight) platforms. Microsoft have done a lot of good work to align the development experience/capabilities between Desktop and Web. While it is not possible to achieve 100% code-sharing between the two platforms, you can have as much as 90% shared code by understanding where the differences are between the two. This would include writing non-shared base classes that can be used by the shared code, or sticking to Asynchronous programming techniques even on the Desktop.
DM: How have you accomplished this?
SJ: To accomplish code-sharing between WPF and Silverlight in XAML it is required to write a little bit non-shared of code. Using the Project Linker tool from the PRISM team, most of the manual labour of linking files between multiple projects is done automatically. The linked files between the Desktop and Web projects ensures that both projects will build with the same functional output, one for WPF applications and one for Silverlight applications. However this will cause 100% code-sharing and needs to be supplemented with some non-shared base classes that can be used by the shared code. Other tricks are to stick to Asynchronous programming on both platforms. This prevents calls to Web Services to function differently and means that you can use the same code for both platforms. Another trick would be to use the Telerik control suite as they have 100% compatible XAML for both the WPF and Silverlight suites. This enables me to create nearly 90%+ shared XAML between WPF and Silverlight.
DM: You’re involved with the Microsoft BizSpark programme. How has this benefited your growing business?
SJ: Having access to software from Microsoft, specifically the Development tools such as Microsoft Visual Studio 2010, Microsoft Expression Studio 4, Microsoft SQL Server 2008 R2 and Microsoft Team Foundation Server 2010 I have been able to leverage best-of-breed development practices for all of my projects. Looking to the future, BizSpark has benefits for Azure developers and I am currently investigating cloud-based applications.
DM: I think you’re doing great work in the developer community. It’s great to see you supporting the developer community by making your work available on CodePlex and helping people learn through your posts. It’s been a pleasure interviewing you – thanks for your time!
SJ: I only hope that the greater development community finds some value in what I have released. If you are interested in Composite Application development, or in developing for both WPF and Silverlight, you will find value in the Genesis project on CodePlex. With the development of the new Genesis 2.0 underway I can only say “Watch-This-Space”!. If you have not started developing XAML based applications yet, the time is now. Declarative programming is really a completely different experience.