Few interesting links


Repository of presentations – http://www.slideshare.net/ on variety of topics.

Specialize code-only search engine: http://www.krugle.com/

New Google product on vertical searchGoogle Co-op.

New great podcast


Running out of Security Now! and TWIT episodes, I have subscribed and started listening to few newly discovered podcasts.

I have started to listen to the .NET specific one from Scott Hanselman named Hanselminutes. There are couple of factors that makes it better that other geeky blogs out there. First reason is the content quality. There is very high signal-to-noise ratio, pretty much all content counts and both guys in addition to being smart are quite good at achieving right balance between keeping on topic and spontaneity.

Second reason – it is not technology-religious and quite pragmatic. Scott obviously likes .NET and is passionate about Microsoft technologies – but there is no sucking-up, Scott is very open minded – just listen to the Dynamic languages where they talk about Ruby on Rails. He even owns a Mac and tests multiplatform software on multiple platforms 🙂

Third reason: there is PDF transcript available with lots of good links which would be otherwise lost (unless you listen with pen in your hand and in front of computer, and not driving or walking as myself.)

And last but not least – very good audio quality, professionally recorded and processed. After listening to this episode about professional audio processing, it was clear why. Episodes are reasonably short – 20 to 40 minutes

I have learned quite a lot from the about variety of interesting things – e.g that WPF/E (recently named Silverlight) may be actually something I really want to look at :-). It almost sounded too good to be true.

So if .NET is part of your world – or you want it to become part of your world – go for HanselMinutes.

Accessing SQL Server 2005 from Ruby


The natural gravity of our environment keeps pulling me out of scripting and Ruby world back to .Net zone :-). Out of curiosity, I looked into how easy or hard is it to access other database from Ruby, than the default MySQL which dominates all books, samples and tutorials.

I have found three ways (at least), one likely platform independent and two Windows only. The platform independent requires module ADO.rb and works with the DBI interface. This sounds very similar to the way how Perl used to access databases, so I put this at the end of the list (some details are here). First Windows only methods used ODBC – no, thanks. Configuring machine specific data sources is not the way I wanted.

The best way was described in the Dave Mullet’s blog and worked perfectly. I took the liberty to make the class better configurable – the result is published at code snippets.

If you do not know DZone Snippets, give it a look – it is best way how to share chunks of code that are too big to fit into blog (like one-liners or small functions) but not really a projects, which could be uploaded to SourceForge or CodePlex or similar open source repository. Snippets have coloring filter and tagging system – and the site is YACLRRW2C – yet another cool looking Ruby on Rails Web 2.0-ish creation …


In praise of the polyglot


If you’ve ever envied the ability of multilingual friends to bridge language gaps wherever they travel or gained new appreciation for your native language by learning a new one, then you can probably see the advantage of being a programming language polyglot. Developer polyglots travel the IT world more freely than do monolinguists (sure that they can apply their skills in any environment), and they also tend to better appreciate the programming language called home, because among other things they know the roots from which that home is sprung. Isn’t it time you became a polyglot?

From http://www-128.ibm.com/developerworks/library/j-ruby/?ca=dgr-jw22RubyOffRails

I certainly feel like it which explains the recent ruby-esque and rail-ish diversions :-). To compensate the high level coding in Ruby, Objective C as next will bring me back down to the metal, I mean Core 🙂

One more reason to like TWIT


As it happens, both my most favorite podcasters – Leo Laporte as well as Steve Gibson are passionate e-book readers. They have both purchased and are (mostly) happy users of the Sony PRS-500 aka Sony Reader in addition to several other platforms – (Palm, Pocket PC). In the latest podcasts – both in TWIT as well as Security Now!, the eBooks and eReader got quite some publicity :-).

Both had similar experience with PDF format on PRS-500 as myself – but Steve mentioned the PDF re-flowing the document to make it better suites for small screen – something I have looked into but did not get it working quite right. The preferred approach to using Reader is RTF format – which again, matches my impressions.

Nice discovery was that some independent sources – other than Sony store – are offering ebooks in LRF format. As an example see McCollum’s books – a hardcore, scientific sci-fi (no dwarves, elves, spells and dragons here :-)). Thanks for tips, gentlemen – I have added McCollum to my reading list.

Four quadrants of uncertainty


(a followup to discussion last week)

In every outsourced software project you have four large areas: your customer, the business vertical you are writing software for, your implementation team and the technology foundation or platform you are using.

Two of these areas are on “internal” side of your organization (team and technology), two of them are on external – your customer side (business domain and customer organization). Two are more micro level in the sense that they have strong human interaction aspect (customer and team) and two are more macrolevel and less personal (business domain and technology). For that reason, you can represent these areas as quadrants using two axis micro/macro and internal/external: micro+internal = team, micro+external = customer, macro+internal = platform, macro+external = business domain.The degree of risk in the project is proportional to how many of these quadrants are actually unknown or new. Why is that ?

Having a new customer, you do not have established the communication channels, the degree of trust based on past successes is not there. You do not know the customer’s corporate culture, internal structure, relations, influencers and inner politics that in theory should be completely irrelevant, but in reality may be one of the most disruptive discoveries. As one wise man said “It is usually politics that gets you into troubles, very seldom technology”.

Starting project with new, untested team, the team lead does not know what would be the best work division between the developers. Eventually, it can be discovered over time, but reshuffling the position has disruptive effect and usually requires some rework or refactoring. It is also very hard to make estimates as the team members productivity is unknown and does depend on the task.

Switching to new technology, obviously, you will have to incorporate some learning period and count on initial slowdown until everybody is as proficient in “the new great thing” as well as they were in the “old boring one” :-). This can be planned for and incoporated into project plan – or ideally, fixed before the project start on a prototype-slash-pilot project. Something you cannot really plan for is that you and your team may be confronted with unpleasant surprise late in the development cycle. The design or even the architecture may contain problems related to incomplete understanding of all aspect of used technology. As very good example is not so old DCOM and distributed applications developed using these technology. In development lab conditions, the applications work great, scale well, deployment is easy and running it is no-brainer. In real deployment scenarios where the fast LAN is replaced by VPN tunnels over internet and networking realities such as variable speed, reliability issues, latency, lots of firewalls etc, you have suddenly different picture. I still remember the fun of switching from C++ to Java back at the end of the last century – and few years later switching from Java to C#.

The new business area means that your company and development team enters an applications space in which you have not worked before: e.g. health, genetics, nanotechnology. This may create some communication issues between you and the client who is speaking the language you must first learn. The practical impact is that you do not know the existing solutions in the area, libraries, frameworks, tools available – and very easily you may find yourself reinventing the wheel.

The known/unknown is not a boolean variable, of course, more likely a number in range (let’s say) 0 to 3, where 0 is perfectly known territory (like writing seventh Order Tracking system in J2EE, using again Struts and JSP). Number 1 represents some minor unknown areas (for example switching from Struts to Spring or from ASP.NET 1.1 to 2.0). Number two is major change in otherwise known area (like switching from ASP.NET to Winforms or to WPF – but still staying in .NET and C#) and number 3 is something completely new – e.g. Java team trying out Ruby on Rails.

Now evaluate all four quadrant using this scale and add the numbers up to get the risk score. Starting project with risk score in two digits is either gamble or act of desperate measures – and chances of delivering high quality solutions addressing the requirements, on time and within budget are not great. The area between 7 and 9 is challenge zone – you have to expect bumpy ride, but once you do reach the target zone – oh boy, what a feeling. As side effect, when you succeed, usually you make huge progress in your delivery capabilities, team experience, customer trust level or both.

The 4 to 6 is healthy grow. There is very high level of confidence in the project outcome and still enough space to deal with unexpected, get the best out of the team and grow. This is where you want to be most of the time.

The 2-3 score is comfort zone – kind of routine, where you are sort of growing and evolving, but quite slowly. It can make sense under certain situations. I have seen this happening back in dot-com boom when one of our customers kept asking for more and more work on support for their large application that it saturated our delivery capability for quite some period of time. All we could do was hiring and training people as quickly as we could to keep up with the demand. But under normal circumstances, if you find yourself in this zone – wake up and make sure you do not slip into the “binary” zone, where all you to represent the uncertainty factor is single bit. Why ?

Because the levels of 0 and 1 are “death by stagnation”. You do not want to be here. No change is bad. Having always same customer, same technology, same business area and stable, unchanging delivery team means that you are not growing: not getting new customers, not discovering new business areas, not keeping up to date with new technologies and not hiring. Definitely not having fun. With that, your skills portfolio will become obsolete and not challenged developers will look for more fun elsewhere.

Unify Tour 2007 and Open Source


This week was full with attending the demos and workshops. On Tuesday, I spent half day on the Microsoft Unify Tour 2007. I planned to be there full day but an important business meeting made me change the plan. Fortunately, the sessions should be available recorded on the Web, so I will be able to check them later. The topic was bang-on – considering that we are in final phase of large project, using distributed network of SQL Server 2005 installations with replication and location was same as usual.

The format chosen for the presenation reminded reality show: introductory video and scripted/acted sequences of implementing the Web 2.0 enabled Web site. Two speakers – Christian Beauclair and Damir Bersinic were personifying the archetype of a developer (“.. sure it works. Just give me admin access to the PDC …”) and a system administrator (” .. sure we are aware that the patch XYZ is out since last month. We are evaluating it and eventually will deploy it in 2-3 months timeframe … “) and walked the audience over very real-life like scenario. It turned up to be much better than one would expect – very convincing and often quite funny. I guess neither of them needed to act much – they just became what was their profession and passion before converting to techevangelism :-). For me personally, the IT-Pro part was more informative and the SCM 2007 looks like really nice piece of software worth looking at.

And now for something completely different (as Monty Python’s used to say): the second presentation I have attended this week (today) was on the alchemy business of open source business organized by OCRI. Couple of names caught my eye – e.g. Mike Milinkovich – executive director of the Eclipse Foundation, Dwight Deugo, assistant professor at the Carleton University and also of the Java Report fame. Too bad that the fame ended in 2001, Java report was the best Java and OOP oriented journal available. I have very high admiration for everything Eclipse and both these gentlemen were involved with the local Ottawa company which designed and created the first version of the platform – so I was curious to listen what they have to say.

From other talks – it was interesting to see the Nortel Chief architect talking about open source. Large companies of the Nortel size have always had uneasy relation with open source software and it really depended on the team and local manager how much of the open technologies was allowed in. We were lucky, had great Nortel manager who understood the value and risks. As result, we were allowed to use what was right for the task and did some pretty amazing stuff with Enhydra application server, Freemarker and Jython back in 1999-2000.

Another surprise for me was Ingres. First of all, that it is still around – and according the the presenter, doing fairly well and growing. Secondarily, that Ingres was re-opensourced – started originally as opensource project back in 1980-ies, then was commercialized and closed, lost the lead against Oracle, IBM and Microsoft and found second life in re-opening the codebase. It was probably the only way – but I am not sure whether the world really badly needs another SQL database – with MySQL and Postgresql and few others already established and available, with larger mind-share and momentum …