I was at the Norwegian Developer Conference (NDC) 2012 in Oslo. It is one of the best conferences I know in Europe. One reason is, that a lot of alpha-geeks are speaking there.
There were during three days 8 parallels tracks, so you have to manage your program. My program looked like this:
One highlight was the speaker Gojko Adzic. I knew him already, because I read his blog. But I didn’t know how entertaining he could be without loose a bit of useful information. I liked also his sarcasm. Another highlight was the rant of Hadi Hariri about not getting things done. But one of the biggest highlights was the keynote by Aral Balkan. It was a fresh clear and motivating keynote, just great.
Conclusion
There were a lot of talks about software quality, which was nice to see. This is a topic which is also very important for myself. But there weren’t that much new fresh talks about the topic itself. The only exception here was the second talk of Gojko.
One of the biggest problems of software engineering companies in Switzerland is currently to get new software developers. To get new employees there are several points as for example salary, environment, career possibilities and technologies. The last point looks easy but in reality it isn’t that easy. Why are essential technology decisions (like languages, frameworks, application servers or big libraries) not only made by developers? Why does the management mostly make those decisions?
In this blog post I try to see the technology aspect for creating software from different perspectives. Those views based on experiences and talks I had during the last ten years.
Customer
As expected the technology used for the software is for the customer irrelevant. But for him counts the working functionality and some non-functional requirements as usability or performance.
Product owner or product manager
The product owner neither is interested in the used technology directly. He’s mainly interested to get the functionality in time and in budget. But he’s also interested to get a good quality of the product, else he’ll receive complaints from the users (of the customer).
IT department
The IT department who has to operate the system is somehow interested in technology. They usually don’t like new technology. One reason is for sure "never change a running system". Another reason is the needed knowhow for every technology. They have to concern the cost of maintaining that knowhow.
Software Architect
The software architect (and I am currently one) is special. When he’s interested in technology, he should take responsibility in the project. If not, you have an architect who lives in the "ivory tower". Mainly the architect should concern more about structure, integration of components or other systems, maintainability and quality.
Human resource management
In most of the companies this part get lost. Today it is hard (specially in Switzerland) to get new developers. So, new and fancy technologies make a job or company more attractive. This means, that the human resource management is interested to use up-to-date technologies.
Developer
Well, most developers care about technology. Specially younger developers more because they had the possibility to try those at the university or in little projects with their colleagues. For those developers technology is essential for the daily job and to be motivated. If they have not the possibility to use new technology they will leave the company after one or two years. And that isn’t cheap for the company.
Management
Today most companies use some self-made frameworks. One reason they spent money to create one is the fear of creative developers who want "to fulfil themself". This means for the management that those developers are out of control and create overcomplicated things with a lot of different technologies. I think this fear is unjustified today, but in the days when everybody could call himself a developer it was not only rightless. But the management has the difficult task to concern all the roles I described before and make a reasonably decision.
Conclusion
It seams there is a fight between the developers and the management who should make decisions about technologies. It is important that the management has all the information it needs and can concern all the risks of an introduction of a new technology. But the management has to be open to all the facts and arguments and should not presume to make a decision based on old experiences, assumptions or prejudices. If the decisions are too offensive, then you have at the end quite everything in the IT department (for example all java application server products). On the other hand, if the decisions are too defensive, then you will have a stagnation. This will be very expensive to solve because you have to spend a lot of many to get up-to-date again.
This week I visited the first JUG’s event in Bern. The topic was Jenkins (fork of Hudson). The presentation of Dr. Simon Wiest was very entertaining. He explained continuous integration and showed how easy it is to install, configure and run Jenkins.
.Net integration in Jenkins
Jenkins is from the Java ecosystem, so it isn’t obvious to use it in a .Net environment. But one of best thing of Jenkins is that there exists a lot of plugins. So, there are also plugins for .Net:
MSBuild support
NAnt support
MSTest support
NUnit support
NCover support
TFS support
Installation
First you have to download Jenkins from http://jenkins-ci.org. Then you type on the console:
java -jar jenkins.war
And that was the whole installation. Well, you could now install Jenkins as a windows service, but that isn’t hard too. There exists a command to do that in the “Manage Jenkins” menu.
To use Jenkins in a .Net environment you have to install the needed plugins first. I installed the following plugins through the UI:
MSBuild
NUnit
After you installed the plugins you have to restart Jenkins and don’t forget to check if you have to configure the installed plugins.
Simple project setup
To show the configuration, I show you the same project “DokuDB” on Jenkins and on CruiseControl.NET.
The project “DokuDB” is a .Net 4.0 project with a NUnit Test project. So, the steps of the build servers has to be the following:
Get sources out of the SVN repository
Build the application
Run the unit tests
Examine the results of the unit tests
Sample with Jenkins
You can configure your build of your project through XML or UI. If you haven’t much experiences with Jenkins I recommend the UI way. The resulting XML is the following:
Jenkins doesn’t have by default an application for the system tray on the developer machines, so that the developer can observe the build state. But there are two available tray-apps:
To configure your build in CruiseControl.NET you have to edit the ccnet.config file. CruiseControl.Net hasn’t an UI to edit the configuration, but there is an application to validate the config file: CCValidator. The resulting config file for the sample project looks like that:
CruiseControl.Net has an own System Tray application, the CCTray.
Conclusion
Jenkins is really easy and fast to install and configure. In comparison to CruiseControl.NET the Look&Feel is much nicer. All downloaded plugins for .Net worked well except the TFS-plugin, but there was maybe a problem with the Team Foundation server.
For the next (ALT.NET)-project I consider to use Jenkins instead of CruiseControl.NET.
As you perhaps know, there exists a very interesting project on Google code, with which you can visualize the activities on your repository: Gource.
Getting started
It supports Git, Mercurial, Bazaar and SVN. There is also a way to visualize the changes in a repository of a Microsoft Team Foundation server: GourceTFS. Luckily, in one of my current projects I use Subversion as repository. So it is very easy to visualize the log. Just go in the command line to the root directory of your local subversion-project and type:
gource
Now, a new window pops up and the “movie” begins. When you just want to have it as a loop in full screen mode, then type:
gource -f --loop
This tool is just amazing and also very geeky . Now you can see what a big bang integration means.
Recording
I tried two ways. The first was with the tool Fraps, which is easy to use, but it isn’t for free. So I tried the second way with the ffmpeg tool. This worked well for me. First you have to create a ppm-file from gource. This file is the input for the ffmpeg tool. To create a ppm file I used this command:
gource -1280x720 --seconds-per-day 0.5 -o ppm.out
Then I used the following command to create the video:
I currently started on codeplex.com an open source project. It was inspired by my last project. In this project I was a lead developer and software architect and the domain was about a social assurance. I was responsible about several developers and also for a product of the assurance-suite. This product was about retirements benefits in case the insurant died, retired or become invalid. The project was an success (finished in time, all requested features were implemented) and it is now since two years in production.
One problem came us multiple time across: Building a timeline based on several sources which deliver time points or time periods. The timeline was needed to calculate the retirements benefits or to validate the users input.
During the last months I asked myself, if the problem of building a timeline in the business layer isn’t more or less a common problem. So I asked my boss if it is a problem if I start an open source project about this problem. He gave the OK, so I started my first open source project:
First I tried to migrate the ideas from the project into the new open source project, but after a few days I recognized, that the problem could be solved in a much more cleaner and sophisticated way. The current code base is now optimized to build timelines and I tried to follow the SOLID principles. Feel free to help me to improve the code base by using NTimeline or even by contributing.
Short overview over NTimeline
Building the timeline slices by yourself by implementing an specialized builder for time periods
Provide time sources which provide time points or time periods for the timeline
Walk through the timeline with your own implementations
My name is Patrick Weibel and I'm a software architect. I am passionate about software engineering and software architecture. It is very important for me to do continuous learning and to improve myself.