Archive

Archive for the ‘New technology’ Category

NDC 2014

June 16th, 2014 1 comment

ndclogo2014I attended this year’s NDC (Norwegian developer conference) in Oslo. It was a very interesting conference, but as a short summary, it saw something like a consolidation. JavaScript – as some people say in its fourth generation (Simple Scripts, AJAX, MVC-Framworks, SPA) – is finally accepted as a language like C# or Java. Also in the agile world there is no hype anymore about Scrum or Kanban. It was more how and when to use it.
One major topic, which I saw in several sessions was maintainable code. Code has to be readable, clear and simple. This is something, what I try to teach my team-members also since a few years (yes, I was also once a geek who tried more or less any new fancy framework).
The highlights were for me the sessions “Seven ineffective coding habits of many programmers” with Kevlin Henney, “Code that fits your brain” with Adam Tornhill and “Beautiful builds” with Roy Osherove.

Here the sessions I attended:

4.6.2014:

5.6.2014:

6.6.2014:

Beside the fun presentation of Scott Hanselman about JavaScript, there was another last funny presentation: “History of programming, Part 1″. You can watch all recorded sessions on vimeo.
After the conference I stayed for the weekend in Oslo. And yes, it is a really nice place to be and the people are really friendly.


Share

My personal wrap-up of the NDC 2012

June 21st, 2012 No comments

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:

Wednesday, 6.6.2012

Keynote, Aral Balkan

Decisions, Decisions, Dan North

Professional Software Development, Robert C. Martin (Uncle Bob)

Agile Estimating, Mike Cohn

Modeling Distributed Systems with NServiceBus Studio, Udi Dahan

Fakes, Isolation Unit Tests, Jonathan “Peli” de Halleux

Social Clairvoyance, Gary Short

Thursday, 7.6.2012

The process, technology and practice of Continuous Delivery, Dave Farley

Busting the BDD myths, Gojko Adzic

Reinventing Softare Quality, Gojko Adzic

Moving from Scrum to Kanban, Rachel Davies

The surprising science behind agile leadership, Jonathan Rasmusson

Dealing with Dynamically-Typed Legacy Code, Micheal Feathers

Deep Design Lessons, Micheal Feathers

Friday, 8.6.2012

Developers: The Prima Donnas of the 21st Century, Hadi Hariri

RabbitMQ Hands On, Alvaro Videla

NDC Cage Match: NodeJS vs. ASP.NET, Rob Conery, Damian Edwards, Jon Galloway

Clojure for the Web, Bodil Stokke

Responsive Web Design, Bruce Lawson

Caring about Code Quality, Venkat Subramaniam

Highlights

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.

Share

Who should make decisions about technologies?

February 13th, 2012 No comments

Stay on courseOne 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.

Share

Jenkins and .Net

February 24th, 2011 4 comments

butler 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.

image

image

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:

  1. Get sources out of the SVN repository
  2. Build the application
  3. Run the unit tests
  4. 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:

<?xml version='1.0' encoding='UTF-8'?>
<project>
  <actions/>
  <description></description>
  <keepDependencies>false</keepDependencies>
  <properties/>
  <scm class="hudson.scm.SubversionSCM">
    <locations>
      <hudson.scm.SubversionSCM_-ModuleLocation>
        <remote>svn://<svn-server>/<svn-repo>/trunk</remote>
        <local>.</local>
      </hudson.scm.SubversionSCM_-ModuleLocation>
    </locations>
    <browser class="hudson.scm.browsers.WebSVN">
      <url>http://<WebSVN-server>/listing.php/?repname=<svn-repo></url>
    </browser>
    <excludedRegions></excludedRegions>
    <includedRegions></includedRegions>
    <excludedUsers></excludedUsers>
    <excludedRevprop></excludedRevprop>
    <excludedCommitMessages></excludedCommitMessages>
    <workspaceUpdater class="hudson.scm.subversion.UpdateUpdater"/>
  </scm>
  <canRoam>true</canRoam>
  <disabled>false</disabled>
  <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
  <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
  <triggers class="vector">
    <hudson.triggers.SCMTrigger>
      <spec>* * * * *</spec>
    </hudson.triggers.SCMTrigger>
  </triggers>
  <concurrentBuild>false</concurrentBuild>
  <builders>
    <hudson.plugins.msbuild.MsBuildBuilder>
      <msBuildName>MSBuild 4.0</msBuildName>
      <msBuildFile>src/Doad/Doad.sln</msBuildFile>
      <cmdLineArgs>/t:Clean;Rebuild</cmdLineArgs>
    </hudson.plugins.msbuild.MsBuildBuilder>
    <hudson.tasks.BatchFile>
      <command>"c:\Program Files (x86)\NUnit 2.5.8\bin\net-2.0\nunit-console.exe" src/Doad/Doad.Test/bin/debug/Doad.Test.dll</command>
    </hudson.tasks.BatchFile>
  </builders>
  <publishers>
    <hudson.plugins.nunit.NUnitPublisher>
      <testResultsPattern>*.xml</testResultsPattern>
      <debug>false</debug>
      <keepJUnitReports>false</keepJUnitReports>
      <skipJUnitArchiver>false</skipJUnitArchiver>
    </hudson.plugins.nunit.NUnitPublisher>
  </publishers>
  <buildWrappers/>
</project>

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:

Sample with CruiseControl.NET

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 xmlns:cb="urn:ccnet.config.builder">
	<project>
		<name>DokuDB</name>
		<sourcecontrol type="svn">
			<executable>C:\Program Files (x86)\Subversion\bin\svn.exe</executable>
			<trunkUrl>svn://<svn-server>/<svn-repo>/trunk</trunkUrl>
			<workingDirectory>c:\Integration\DokuDB</workingDirectory>
			<webUrlBuilder type="websvn">
				<url>http://<WebSVN-server>/diff.php?repname=<svn-repo>&amp;path={0}&amp;rev={1}&amp;ignorews=1</url>
			</webUrlBuilder>
		</sourcecontrol>
		<tasks>
			<msbuild>
				<executable>C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe</executable>
				<workingDirectory>C:\Integration\Doad\src\Doad</workingDirectory>
				<projectFile>Doad.sln</projectFile>
				<targets>Clean;Rebuild</targets>
				<logger>C:\Program Files (x86)\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
			</msbuild>
			<exec executable="C:\Integration\Doad\src\Doad\packages\NUnit.2.5.7.10213\Tools\nunit-console.exe" buildArgs="C:\Integration\Doad\src\Doad\Doad.Test\bin\Debug\Doad.Test.dll /xml:doad-results.xml /nologo"/>
		</tasks>
		<publishers>
			<merge>
				<files>
					<file>doad-results.xml</file>
				</files>
			</merge>
			<xmllogger />
		</publishers>
		<triggers>
			<intervalTrigger name="Continuous integration" seconds="30" initialSeconds="30" />
		</triggers>
	</project>
</cruisecontrol>

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.

Dr. Simon Wiest wrote also a book about Hudson:


Share
Categories: .NET, First experiencies, New technology Tags:

Visualize changes in your repository

February 17th, 2011 1 comment

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:

"C:\\Program Files\\ffmpeg\\bin\\ffmpeg" -y -b 3000K -r 60 -f image2pipe -vcodec ppm -i ppm.out -vcodec libx264 -fpre "C:\Program Files\ffmpeg\share\ffmpeg\\libx264-slow.ffpreset" -threads 0 dokudb.x264.avi
Share
Categories: New technology, Private Tags: