Wednesday, December 31, 2014

Gulp is the Wild West

TL;DR This post described how I implemented asset processing with Gulp in a .NET project.

enter image description here

I am working on a .NET web application using Nancy in the backend and AngularJS in the frontend.
I decided to use a frontend-build based on Gulp. Frontend builds based on Grunt or Gulp have a lot of momentum right now, and this seems a better option for me than some .NET based tools like Cassette or SquishIt

By the way: if you have a node based frontend build you can run it on each Azure deployment like described here.

My requirements were the following:

  • For development the project should be runnable from VisualStudio without having to trigger a frontend build. That means that all the frontend assets have to be present at development time and referenced from my .cshtml files.
  • For release the frontend assets should be processed (concatenated, minified, revisioned …) by a frontend build. This build also needed to manipulate the .cshtml files, since they must reference the processed assets.

I started with gulp-usemin:

gulp.task("usemin", function() {
    return gulp.src("./Views/*.cshtml")
            js: [ngAnnotate(), uglify(), rev()]


This was nice and easy and worked well … until I had some more requirements …

The problem:
With gulp-usemin you have not access to the stream in a pipeline. So you are limited to list some tasks that should be performed. If you want to do something more fancy, you are out of luck. In my case I wanted to add the output of angular template cache to my main js file after it has been concatenated and minified…
In my case I wanted to append another JavaScript file that contains my angular templates (generated with gulp-angular-templatecache)

So I started looking for another solution… thats where I discovered that I am in the Wild Wild West: gulp-usemin2, gulp-spa, gulp-asset-transform, gulp-inject, gulp-rev-replace, gulp-useref, gulp-rev-all, gulp-rev-collector … all seem somehow to do something similar, documentation is minimalistic and you can waste a big amount of time to find the right plugin combination that works for you.

I ended up with the following combination of plugins:

var gulp = require("gulp");
var ngAnnotate = require("gulp-ng-annotate");
var templateCache = require("gulp-angular-templatecache");
var uglify = require("gulp-uglify");
var addsrc = require("gulp-add-src");
var concat = require("gulp-concat");
var rev = require("gulp-rev");
var minifyCSS = require("gulp-minify-css");
var useref = require("gulp-useref");
var filter = require("gulp-filter");
var revReplace = require("gulp-rev-replace");
var order = require("gulp-order");

gulp.task("angular-templates", function(){
    return gulp.src(TEMPLATES_SOURCES)
        .pipe(templateCache(TEMPLATES_JS, {module: "moonwalk", root: TEMPLATES_ROOT}))

gulp.task("release-assets", ["angular-templates"], function() {
    var assets = useref.assets();
    var jsFilter = filter("**/*.js");
    var moonwalkFilter = filter("**/" + MOONWALK_JS);
    var cssFilter = filter("**/*.css");

    return gulp.src("./Content/**/*.cshtml")
        .pipe(assets)               // Concatenate with gulp-useref
        .pipe(ngAnnotate())         // Process javascript sources to add dependency injection annotations
        .pipe(uglify())             // Minify javascript sources
        .pipe(minifyCSS())          // Minify CSS sources
        .pipe(moonwalkFilter)       // Filter the moonwalk.js source file, which is generated above by useref
        .pipe(addsrc("Temp/" + TEMPLATES_JS))// Add the templates.js to the stream, which is generated by a seperate task
        .pipe(order(["**/" + MOONWALK_JS, "*.js"]))// Order stream, so that templates.js is appended to moonwalk.js (needed, since templates depend on the angular module)
        .pipe(concat(MOONWALK_JS))// Concat the existing moonwalk.js and the templates.js into moonwalk.js
        .pipe(rev())                // Rename the concatenated files
        .pipe(useref())             // Replace the original references in the cshtml with the concatenated and processed resources by usemin
        .pipe(revReplace({replaceInExtensions:[".cshtml"]}))         // Replace the usemin generated resources with the reved resources

And by the way: This thread about running tasks synchronously is representative for Gulp (final verdict: “This will be fixed in gulp 4”) … welcome in the wild wild west!

Sunday, December 21, 2014

Weekend Reader, Week 51

IMG 0221

Rob Ashton speaks at the .NET user group

I never met Rob, but I think he is a very interesting character in the programming space.

His episode as a “journeyman programmer” is mind blowing and I suggest to every enterprise programmer to have a look at it: "The software journeyman's guide to being homeless and jobless.” (or if you have a plural sight subscription you can watch the production: Change it Up where Rob Conery does an extensive interview with Rob).

Rob will be speaking on January 7th in Bern and on January 8th in Luzern about "Frameworkless development with NPM and React” - a very interesting topic in my opinion. And of course not at all related to .NET programming :-). So I hope to see some non .NET programmers at the event...

While we are at it, here are some further interesting posts of Rob Ashton:


Software engineering in practice

Very nice presentation by Marc Hofer about Agile software development.


Which Silicon Valley company has the best intern perks?

So the myths are true, there are companies that do a lot for their employees ...


From Open (Unlimited) to Minimum Vacation Policy

… perks are not without problems:

Netflix has it, Virgin has it: Unlimited vacation policy … but not everything that shines is gold:

The cause was intended to be noble, as we didn't want to get into the way of people taking time off as much time as they need to recharge.[…] Two years later, this idea turned out to be a failure, and we're changing our vacation policy.


Letter To A Young Programmer Considering A Startup

Startups are not that sexy any more according to:

A startup job is the new office job. Startup culture is the new corporate culture.

Here is also a recent production of Swiss radio SRF about the “disillusion of startups” (in German): Start-up-Firmen: Der Traum vom nächsten Facebook


The State of JavaScript in 2015

The JavaScript world seems to be entering a crisis of churn rate. Frameworks and technologies are being pushed out and burned through at an unsustainable speed.


More developer tidbits:


Friday, December 19, 2014

Presentation: Java & JavaScript - Best Friends?


Last week I was invited again to give a talk at the annual developer day of Swiss Railways (SBB).

As every year the conference was a great event with many great sessions and interesting discussions during the breaks.

My talk was about how JavaScript can fit into a Java ecosystem.

Tuesday, December 2, 2014

There is something about JavaScript - My Slides from the Choose Forum 2014

I was very honored that I was invited to speak at the Choose Forum 2014 along with Michael FeathersErik Doernenburg and Adam Tornhill.
These were the slides for my talk “There is something about JavaScript”:

Wednesday, November 26, 2014

Speaking at the Choose Forum 2014


This Friday the annual Choose Forum will take place in Bern.

The Choose Forum is a small and lesser known conference that features highly interesting speakers each year.

I am very honored that I was invited to speak at the Forum this year along with Michael FeathersErik Doernenburg and Adam Tornhill.

My talk is titled “There is something about JavaScript”: 

This is the tale of an enterprise developer taking the adventurous journey into the realm of JavaScript. We will learn about all the dangerous pitfalls that lured on the way, but also about all the amazing encounters and beautiful discoveries that were waiting in on our protagonist.

I am looking forward to the event on Friday.

Monday, November 17, 2014

Weekend Reader, Week 46

.NET is Open Source

The big news of this week is of course Microsoft open-sourcing .NET:

Image 3379f52c 2764 4a61 8b29 7bff2dc68dde

Microsoft commits to making .NET cross-platform and to build a stronger ecosystem by adopting open source development. They will develop completely in the open and accept commits from the community.

The source for the next .NET is hosted on GitHub.
There will also a free full-featured edition of VisualStudio: Visual Studio Community 

What does change? Some predict the death of Java… but I don't think that much will change after a short hype: Enterprises that bet on the Microsoft Stack will still use Windows, I don’t think that .NET on Linux/Mac will be a relevant scenario in the enterprise any time soon. Since VisualStudio still only runs on Windows, mainstream .NET development will still happen on Windows.

.NET for Mac Desktop, iOS or Android development will remain a niche, as it its now with Xamarin.

I guess the one place where this move makes .NET a more attractive development platform are cloud scenarios: .NET becomes a more attractive platform, when there is no vendor lock-in to Azure.


LeSS: Scrum for the Enterprise


While there is a general disillusion about Scrum, the topic of scaling Scrum to the enterprise is still thriving… there must be money in that!

LeSS: Large Scale Scrum is the latest manifestation of "Enterprise Scrum” I have come across.

Welcome to the family of methodologies promising Agility to the enterprise:

Personally I still don’t believe in scaling Agile to the Enterprise.


Trust can scale

 if you replace trust with process, you’ll rip the heart right out of your company

Maybe instead of focusing on how to scale Agile to the Enterprise by introducing processes and ceremonies, we should remember what Agile is all about: Its about trust!

Hierarchical coordination fails when manager decisions depend on specialist knowledge:

21164 strip


Sacrifical Architecture

Often the best code you can write now is code you'll discard in a couple of years time.

Martin Fowler writes about the idea that maybe code is not meant to last. Throwing away code and rewrite applications might often be a good option. If we embrace this idea, then we should focus everything around the software delivery process to enable such rewrites efficiently. This is a radical change to the traditional approach of software creation.


How Google Works 

The only way for businesses to consistently succeed today is to attract smart creative employees. 


I see a lot of parallels with the book "The New Kingmakers"



Deliberate Advice from an Accidental Career

Screenshot 2014 11 17 01 44 34Great story telling by Dan North, definitely worth the time.

Saturday, November 8, 2014

Weekend Reader 45 - JavaScript

This weekend reader is purely focused on JavaScript.

It is long know that the JavaScript ecosystem is far from settled:


The last weeks were proving above trend in an impressive manner: The two major JavaScript frameworks AngularJS and EmberJS have announced their next versions.


Angular 2.0

AngularJS Shield large

At ng-europe the Angular team presented a first impression of the next version of Angular:

Almost nothing remains the same:

  • No more controllers
  • No more directive definition objects
  • No more $scope
  • No more angular modules
  • AtScript: A new language on top of JavaScript
Here are some relevant links to get an overview of Angular 2.0:

The changes are so striking that one could get the idea that the only thing remaining is actually the name of the framework.

The Angular 2.0 release is planned for end 2015/early 2016.

The reaction not only been positive:


And in the blogosphere: 


Ember 2.0

Ember js Logo and Mascot

Also EmberJS, the “other” big JavaScript framework, announced its next version last week. However they chose quite another approach than the Angular team. Instead of surprising (shocking) the community with tons of changes, they establish a "RFC" (request for comments) process:


In contrast to AngularJS where the upgrade from 1.x to 2.0 will be a breaking change without a smooth transition, Ember aims for a smooth transition through a “steady flow of improvement”.

I am currently giving JavaScript and Angular Workshops to several companies here in Switzerland. Many big companies here are still trying to figure out how to integrate modern JavaScript frameworks in their development stack. Most of them are currently betting on AngularJS. Only very few of those companies are actually using AngularJS in production yet. I am curious what effect those recent announcements will have on the long term strategy of those companies.



Logo og

Maybe there will be some traction to React/Flux. Here are some links to this “newcomer” in the space of frontend frameworks:



And if you don’t like big frameworks you can always use VanillaJS :-)



Java and JavaScript: A new romance

Java 8 contains Nashorn, a new JavaScript engine running on top of the JVM.

AdamBien held an interesting presentation at JavaOne showing the possibilities that open up with Nashorn:


Avatar 2.0

Oracle also presented Avatar 2.0 at JavaOne. Avatar.js is an attempt to bring the Node programming model and ecosystem to the Java platform. Project Avatar so far was an attempt to bcreate a JavaScript based platform (server and client side) on top of Java EE.
However the goal and purpose and the future of Project Avatar was unclear  during the last year.

Avatar 2.0 changes now quite a lot according to the blog post and presentation by Niko Köbler. The most significant change is certainly that it will run directly on the JVM without the need for a Java EE server.

Unfortunately there is no code or distribution available for Avatar 2.0 yet. I hope this will change soon ...


The Better Parts

The author of JavaScript: The Good Parts has revised a lot of his opinions since he wrote the book… talks by Douglas Crockford are always worth watching:

Sunday, October 12, 2014

Weekend Reader, Week 41


Wow, already week 41 … I missed some weeks since last time. Time to catch up!


The controversy around SAFe goes on:

Erwin van der Koogh on When is SAFe appropriate to use?

SAFe is great for companies trying to delay the inevitable.


 And there seemed to be some fun at the Agile Business Conference:



Trouble in Paradise: Disillusion about GitHub

GitHub was always my poster-child as a modern software company. Their approach to a no-managers culture is fascinating:

And the presentations of Zach Holman of GitHub are famous. They give the impression of being a paradise for software developers...

… but at the beginning of the year there seemed to leak some concerning stories from that paradise:

I don’t know what to think about it, but for me it’s a a modern case of “Paradise Lost”.


More about the No Managers Culture

How Medium Is Building a New Kind of Company with No Managers:

In Holacratic systems, individuals operate without managers because many of them have decision-making power in a particular area. And since everything is made as explicitly as possible, everyone in the organization knows who has authority over what.

Harvard Business Review: First, Let’s Fire All The Managers

Management is the least efficient activity in your organization.

What I find particularly interesting in the above HBR article is, that the No Managers Culture is not rooted in nor confined to the software industry.



More about Plans and Estimations

My Customers Need Estimates, What Do I do? 

If you choose to serve customers who need an estimate/price, then do estimates/prices. If you choose to serve customers who are willing to let requirements emerge, then get good at the Agile way. It’s your choice.

Two Reasons Why Estimates Aren’t Worth It

Creating estimates is pretty frustrating because everyone who sits in an estimation meeting knows that these estimates have got nothing to do with reality.

Why are software development estimates regularly off by a factor of 2-3 times? 
This brilliant analogy is showing the impossibility to plan a hike from San Francisco to Los Angeles. 


The challenge of planning incremental product development (from Incremental development at Spotify):

Incremental Development Spotify

Quote about plans from Friedrich Dürrenmatt:

Zufall Dürrenmatt

(The more humans proceed according to plan, the more effectively coincidence is able to meet them.) 



JavaScript continues to conquer the world:

But not everybody seems to be delighted:

Monday, September 29, 2014

Another JavaScript Bootcamp for Java Developers


At the beginning of this year I held my JavaScript bootcamp for Java Developers for Puzzle ITC, and it was fully booked.

Since then I had the pleasure to repeat the course several times for Glue, IMS, BIT and UBS and also at this year’s ch/open workshoptage.

Due to popular demand Puzzle is now repeating the course on October 6th in Bern. The course is public, this might be a perfect opportunity to get bootstrapped in professional JavaScript development!

Tuesday, September 9, 2014

Our App "Myco" reached 100’000 downloads! Here are some statistics.

Myco is a project of Stefan and me. We published the Windows Phone App in December 2012, followed by the iOS version in May 2013 and the Android version in April 2014.

The app is available in a free edition and two paid editions (standard and pro) on each platform.

The app proved to be much more successful than I would have expected. Last month we reached 100’000 accumulated downloads of the App.

In the following I present some statistics about the downloads of Myco:


Note that the Windows Phone edition is available since 21 months, the iOS edition is available since 16 months and the Android is only available since 5 months.

For me it is interesting that Myco seems to break with some common myths of app development (at least when we look at the last 4 months):

  • Android is the most successful platform regarding total downloads and paid downloads, followed by Windows Phone. iOS is trailing behind, even though our main markets are Switzerland, Germany, Italy and France where the iPhone has quite a strong position.
  • Windows Phone is our most successful platform regarding conversion rate. Apparently the willingness to pay is even bigger with Windows Phone users than with iOS users.
  • The conversion rate of Android is not lagging far behind Windows Phone or iOS. The alleged “unwillingness to pay” of Android users does not prove to be that significant in our case.

Of course the above numbers and conclusions are still quite premature. Our app is highly seasonal. We had a high peak last autumn where iOS was dominating over Windows Phone (Android was not yet released). Therefore we are looking forward to the current mushroom season, which has just started.

Some explanations of the above observations might be:

  • The Windows Phone edition regularly gets recommended by Microsoft in their store (Myco for Windows Phone has won the “Microsoft Switzerland App Award 2013”).
  • The iOS edition has probably the bardes competition, since there are many good Mushroom Apps in the iTunes Store.

If you are now interested in Myco, you can download the app by following the links below:



En generic rgb wo 45

Thursday, July 24, 2014

The Software Grief Cycle

People pile layers on top of layers, abstractions on top of abstractions, complications on top of complications, crap on top of patches, and patches on top of crap until everything collapses onto itself and the singularity appears.
- Source lost on the Internets

After reflecting upon my last Weekend Reader, I came up with some more thoughts about the fact that software is eating the world and the  long-run problems that result from the fact that we create new systems at an ever increasing rate.

Tudor plays with the idea of “Software Environmentalism". This implies that there was a clean environment that gets polluted by software systems. The assumption is, that, as in nature, the environment can only deal with a certain amount of pollution, therefore we must start taking care and according to Tudor's idea:
No system should get away without dedicated tools that help us take it apart and recycle it effectively.

Let’s see what Steve Jobs once claimed about software: Eventually it collapses under it’s own weight!

Let’s repeat:
"It doesn't matter what you do, eventually it will collapse”.

It's like with humans and death ... it's inevitable. We can prolong our lives by living healthy and modern medicine sometimes allows to keep us alive even when it does not make much sense any more ... but we all are getting old and finally we will die.

So there you have another analogy, actually a full bag of analogies.

Any software will age and finally it will die. 

Some software will age more gracefully than other software, but they all will die. We have to accept that. This is not an easy insight, there are the five stages of grief (denial, anger, bargaining, depression and finally acceptance). Letting the software die might become painful for everybody involved… especially if you try to deny the fact. Often developers are way ahead of management on the stages of grief:

I would argue that we are still dealing with a very high mortality rate in the software industry today. But we are not dealing with the tragedy of stillborn children or sudden child death. No, in the software industry we mostly deal with monstrous frankensteinian abominations that will not be able to breathe on their own. Still we keep trying to somehow create the perfect monsters ...

Often we are helpless in dealing with dying software. There is also a lot of software that should have died a long time ago, but it was not allowed to. Nowadays there are armies of maintenance developers defibrillating, heart-massaging and mouth-to-mouth breathing thousands of zombie systems all over the world.
Undead code

How can we deal with dead and dying software?

Maybe we just have to be more cruel (and more honest) and accept their death. Maybe this enables the rest of the software population to live healthier, maybe even to thrive and prosper… the other important thing here is to get rid of the dead. Make a clean break, don’t keep the dead (or  almost dead) software lying around. Dead or dying software has the tendency to keep you incredibly busy. If you are not cruel, you won’t get rid of it:

Different cultures dealt differently with ageing and dying individuals. A well known example is the senilicide in ancient Eskimo culture: Old people that could no longer contribute to the well-beeing of the group were cast out to die in the snow. This certainly was a very cruel way, but it ensured the survival of the group in times of scarcity.

It is a well known fact, that enterprises have big problems finding developers to maintain their legacy systems. Developers often are not motivated to deal with legacy software. The lack of good developers that deal with legacy software, makes maintaining dying systems even more difficult and can accelerate the rotting of that software.

So maybe this is the cruel way in the software development ecosystem: In times of scarcity, developers choose which systems should die by refusing to work on them ...

Saturday, July 19, 2014

Weekend Reader, Week 29

IMG 0210

On the News:

Translation of the Apple-IBM romance

You heard it, Apple and IBM are best friends now. But what does it mean? This funny post translates the press release into something that we can understand:

 Enterprises love hand holding more than fat kids love candy. Apple is going to offer them hand holding through IBM.


Reflecting on Software Engineering:

Software Environmentalism

My colleague Tudor is musing about how we can deal with the fact that software systems get larger and larger, and they are being created at an ever increasing rate.

We cannot continue to let systems loose in the wild without any concern for how we will deal with them at a later time.

He proposes:

No system should get away without dedicated tools that help us take it apart and recycle it effectively.

For the profession he concludes:

Software engineering is more about dealing with existing systems as it is about building systems.


The Maintenance Developer Myth and The Noble Art of Maintenance Programming

So, software maintenance and dealing with legacy code is only going to increase as software is eating the world. But introducing a chasm between “real” developers and “maintenance” developers is probably not going to help.


What are good developers anyway?

Why are we interviewing developers by asking architect questions? Is it really what we need? When we deal with legacy, architecture gets less and less important. Problem solving skills are what really matters ...


But software eventually collapses under it’s own weight

(the obligate wisdom from Steve Jobs, which seems fitting at that point)


On JavaScript:

Breach: A browser written in JavaScript

Atwood’s law exemplified: "Any application that can be written in JavaScript, will eventually be written in JavaScript." is on sale!

If you want to learn JavaScript seriously, this screencast is a good starting point.


A JavaScript survival guide

If you are afraid of the pain of learning JavaScript, this post gives you some valuable survival tips.


Tech learning  recommendations:

Modern Structured Logging With Serilog and Seq

This is a interesting course on pluralsight. I am wondering what the alternative would be for the Java ecosystem? I guess I will attend the ELK workshop at ch/open Workshoptage in this regard.


Java Script Jabber Episode 106: Protractor with Julie Ralph

A good introduction to end-to-end testing in general and to the Protractor test framework. The episode also contains good discussions about software testing in general and gives insight about testing at Google.


Getting Started With Protractor and An Introduction to AngularJS End to End Testing with Protractor

If you are interested in Protractor, then this is a short tutorial and a longer introductory presentations


Some facts about Stateless EJB beans

It’s always good to repeat that stuff ...

Saturday, July 12, 2014

Weekend Reader, Week 28

IMG 0207

Developers are taking over the world!


Everyone involved in software development projects should read the book The New Kingmakers.

The book gives the background why traditional tayloristic approaches are not effective in the knowledge work environments of software projects: Plans and roadmaps are not going to work as long as you don’t get developers intrinsically motivated.

For some reason the book is free on the Kindle.


On the same topic:


Planning, planning and more planning!

Speaking of motivating developers. In my experience, one of the most demotivating construct in enterprise development is planning. 


The Agile Manifesto speaks about "Responding to change over following a plan”.

While Scrum is facilitating many Agile principles, the concept of the backlog is often used to re-establish a waterfall-like long-term plan. With the long-term plan comes the justification for controlling and micro-management. Newer methodologies that promise to “scale agile to the enterprise” (like SAFe) even reinforce this tendency for establishing and following a plan (note how the arrows in SAFe all point in one direction?). SAFe is an approach by classical management to re-apply tayloristic approaches that have been questioned by the Agile movement. 

That’s why Water-Scrum-fall is the reality of Agile today.
And that’s why I don’t believe in scaling Agile to the enterprise
That is why we have the Manifesto for Half-Arsed Agile Software Development.

 Ken Schwaber (the inventor of Scrum) puts it like this:

A core premise of agile is that the people doing the work are the people who can best figure out how to do it. The job of management is to do anything to help them do so, not suffocate them with SAFe.


Do we really need strict control (which is basically the reason for all that detailed planning)?

Tom De Marco (a pioneer and author in the area of software project management) has an interesting thesis about this in his paper: Software Engineering: An Idea Whose Time Has Come and Gone?

strict control is something that matters a lot on relatively useless projects and much less on useful projects


What can developers do: They should choose their work!

So for us developers this boils down to making a choice: What kind of projects do we choose to work on?

Mike Monteiro repeats that in his brilliant presentations: How Designers Destroyed the World

The work we choose to take on defines us!

Webstock '13: Mike Monteiro - How Designers Destroyed the World from Webstock on Vimeo.



I want to point to two special upcoming local conferences:

SwissJeese - An indie JavaScript conference in my beautiful hometown of Bern (July 26th 2014). I have never been to that conference and unfortunately my talk-submission was not accepted (probably the topic of Nashorn is too enterprisy for the conference :-)). But the program looks very promising and there are still tickets left.

ch/open Workshop Tage - An excellent event with a marvellous collection of interesting topics (September 9-11, 2014). I am attending and also holding workshops at the Workshop Tage for the last 7 years, and each year I am looking forward to the event again.


Battle Cry

Speaking of conferences: Philip is calling for an epic battle: Web vs Native on mobile devices - let the strongest prevail!
(actually, according to the rules of Philip it would be the quickest, not the strongest ... maybe Philip should look again at what happened to Oberyn Martell?)


On JavaScript

The obligate Gartner prediction:

Through 2014, improved JavaScript performance will begin to push HTML5 and the browser as a mainstream enterprise application development environment.

ThoughtWorks Technology Radar chimes in

The ecosystem around JavaScript as a serious application platform continues to evolve. 

Prezi writes about their experience from migrating from Flash to JavaScript … and why it took so long:

Large JavaScript codebases are hard.

Stackoverflow explains the difference between JavaScript and Java

Java and Javascript are similar like Car and Carpet are similar.

One is essentially a toy, designed for writing small pieces of code, and traditionally used and abused by inexperienced programmers. The other is a scripting language for web browsers.


ch/open Workshop Days: Great Program as Always!

Ch open logo

The program of this year's ch/open Workshop Days has been published.

As every year, it is a great program with many interesting sessions. This year even with 5 parallel tracks. It’s going to be a hard for me to decide which sessions to attend...

On Wednesday I will hold my “JavaScript Survival-Bootcamp”. The session was a big success last year (fully booked twice), and I intend to repeat that.

Unfortunately Marc will not be able to hold the workshop with me this year.

Wednesday, July 9, 2014

AngularJS: Illustrating Model-View-Whatever

There are already many attempts at explaining and illustrating the concepts for structuring an Application in Angular.

Actually Angular was declared a MVW (Model-View-Whatever) Framework to avoid further philosophical discussions.

Still, for my current Angular workshops I created my own visual interpretation:

NG MVC 001

What do you think?


PS: If you are interested in an AngularJS workshop for your team, please contact me at

Sunday, July 6, 2014

Weekend Reader, Week 27


Lets start with some Java bashing:

Java Web development is broken!

Rather focusing on provocation than facts, but still worth watching:

Conquering the wicked kingdom of Java with a NodeJS Trojan horse - Espen Dalløkken from Booster conference on Vimeo.

But Reg Braithwaite chimes in:

JSJ Community Dynamics with Reginald Braithwaite

Java is playing defense while JavaScript is still playing offense. [...] Java 8 is all about protecting the existing user base. Not about gaining new users.

And not only the JavaScript community is attacking Java:

But let's turn our attention to more relevant topics than petty language wars:  

The largest cost in business is unnecessary complexity.

... and automation only hides complexity. We should remember this when we indulge in continuous integration, continuous delivery and devops.


There is not only technical complexity, so it's always good to revisit some articles:

Bug statistics are a waste of time:

Defect tracking tools are placebo, giving people a warm and cosy feeling that they have done something by throwing a digital coin into a fountain of wishes, while hoping for better software.

Beyond Story Cards: Agile Requirements Collaboration

Story card hell is when you have 300 story cards and you have to keep track of them all. [...] Every customer I've ever worked with wanted to put story cards in a database. That misses the point of story cards. If you're worried about losing story cards, you're doing too much with them.

Speaking about Agile:

Agile is not Dead (But Some Organizations Might Be Soon)

Changing the use of one word is not going to address a fundamental problem in organizations.

How convenient that Agile is no dead, it would be cumbersome to scale something that is dead:

This actually does make a sensible impressions, why all the critics?

So its time for another round of certifications? SPC sounds great... SAFe Program Consultant (SPC) Certification - Zurich Aug 11-14, 2014

... but I think I had enough of Agile certifications. Back to language bashing:

... even better let's start bashing the programming community in general:

A lot of what is going on today in software methodology and practices is pseudoscience!

If you are not interested in DHH's childhood, then skip to minute 11. But there it starts: He is amazing, comparing Computer Science with Diet Schemes.
Most information system development has very little to do with the science part of computer science.

Is this just a case of The DHH Problem?

Wednesday, May 14, 2014

I am teaching JavaScript, are you interested?


Last month I was teaching my workshop “Professional JavaScript for Java Developers” at Puzzle ITC and at Glue Software Engineering AG in Bern and both workshops were received very well.

At the same time I am currently teaching a block of 8 days at the University of Applied Science in Bern in the new CAS “Multiplatform Development with HTML5” about the topics JavaScript, JavaScript Frameworks and HTML5.

JavaScript has a lot of momentum right now. Especially corporate environments are currently embracing JavaScript (together with HTML5) as a serious option for developing and delivering enterprise applications.

Traditionally professional development teams in corporate environments were not exposed to JavaScript, even when they were creating web applications. Therefore in many teams there is a reluctance to accept JavaScript as a viable platform.

My workshop shows the current state of the JavaScript ecosystem (Frameworks, Libraries, Tools) and touches all the aspects of professional development in the JavaScript ecosystem. The workshop is especially addressing traditional OO programmers with an enterprise background. Attendees learn how to realise the concepts and best practices they know and love from their traditional platforms (Java, .NET …) on the JavaScript platform. This ranges from constructs for encapsulation and modularisation over debugging and unit testing to build automation and dependency management. 

The main modules of the workshop are the following:

  • Introduction to JavaScript and the JavaScript Ecosystem
  • JavaScript: The Language
  • Introduction to jQuery
  • The JavaScript Development Toolchain
  • Client-Side MVC with AngularJS
  • Communication with the Backend

The workshop consists of many demos and hands-on exercises. The minimal duration is one full day. For a deeper dive into certain modules the workshop can be extended to two or three days.

Please contact me at if you are interested in a JavaScript workshop for your development team. I am teaching the workshop in German or English.

Puzzle1 P1040685


Sunday, May 11, 2014

Weekend Reader, Week 19

IMG 0167

TDD is dead. Long live testing.

David Heinemeier Hansson is provoking the whole programming community again.

In his trail followed a storm of posts and #IsTDDdead tweets:

The debate about TDD and Unit-Tesing is interesting but hardly new, there was a similar discussion already recorded some years ago between Jim Coplin and Uncle Bob. Also Ayende (creator of a popular .NET mocking framework) led a similar discussion some time ago in his post: The State of Rhino Mocks.

But many things have been proclaimed dead: Java has been called dead, .NET has been called dead … so I am not that concerned about the death of TDD ...

Angular.js has ruined JavaScript

The great/awesome/amazing thing about JS is that nobody wanted to go near it in enterprise organisations [] That was great for people who wanted to get paid enterprise rates but didn't want to have to put up with layers of awful "best practises" and performance problems.

Funny view on recent trends in the JavaScript ecosystem and the ongoing adoption of JavaScript in the enterprise. But it has some truth in it ...

On receiving the dahl-nygaard junior award and other twists of fate

My colleague Tudor wins the dahl-nygaard junior award, one of the prestigious awards in computer science. What a honor to work with "one of the new generation of European computer scientists". 

In his post he describes the gap between research and engineering in computer science an how his attempts to bridge that gap.

Antifragile Software Development

Roman writes about applying principles from “Antifragile” to software development.

I should read the book … 

What happens to software engineers who don't climb the corporate ladder and stay as engineers?

Cliché question with cliché answers on Quora ...

No Managers? No Hierarchy? No Way!

Github, Valve and co. are just a fad: organizations need hierarchy:

There is a need for hierarchy to achieve accountability and performance in organisations.

Only 30 percent of U.S. workers are engaged in their jobs

I guess it is the same in Europe.



Edward Snowden: Here's how we take back the Internet

Impressive: Edward Snowden holds a TED Talk, and in the end he even has a conversation with Tim Berners-Lee (inventor of the World-Wide-Web):


Inside Github

According to the article linked above, it’s just a fad. But I find the ideas behind founding a company without managers fascinating.


"Zu nachtschlafender Zyt" | Bern Hyperlapsed

Some beautiful pictures from my hometown: 


Epic Rap Battle: Nerd vs. Geek

Funny, funny, funny ...

Friday, April 25, 2014

Myco - Mushroom Guide for Android

Last week we* released Myco for Android.


Myco is the perfect app for people who collect mushrooms. It contains information about more than 250 types of mushrooms. You can store mushroom locations with GPS position and identify mushroom with a classification scheme. Additionally you can learn to identify mushrooms with a quiz:

The app is available in three editions: Free, Standard and Pro and supports the languages English, German, French and Italian.

For more information please visit the Myco product page.

The app is also available for the iPhone and for Windows Phone.

*Actually the work on Android was almost exclusively done by Stefan... I was too busy otherwise.

Sunday, April 20, 2014

Weekend Reader, Week 16

IMG 0163

About the Software Architect:

"Software Architect" places in the top ten of most annual surveys of best jobs, yet no clear path exists from Developer to Architect.

Do we really need that path? Is anybody expecting a clear path from plumber to architect in the construction analogy?

Are architects just a concept to offer developers a career path?

I have been in the industry for a long time now, and I did not see two companies/projects where “Architect” had the same interpretation. But do we really need architects? I am sceptical … I would argue that we need people that care about stuff. And not everybody can care about everything, so the “Architect” should care more about the high-level, holistic perspective while others care more about low-level perspectives. But I doubt there should be a clear path that leads from the one to the other. It’s just an agreement that somebody should care about this and somebody else should care about that.

And the role of an architect in Agile is another interesting topic:

Putting an architect in a scrum team is like putting mayonaise in cake - Christin Gorman from Roots conference on Vimeo.


About the Foreman

Uncle Bob (Robert Martin, one of the authors of the Agile Manifesto) has some come up with an interesting interesting idea: Software projects needs a foreman. In the initial proposal of Uncle Bob, the foreman is the only person that commits code to the project, other developers send him pull requests. In a follow-up post 'Oh Foreman, Where art Thou?’ Uncle Bob relaxes his initial proposal a bit: The foreman has the ultimate responsibility over every commit, but others might commit directly.

For me this is a drastic departure away from the notion of an empowered, self-organizing team that is the foundation of Agile software development. In my opinion, if we introduce the notion of the foreman, then we build a big obstacle in fostering an intrinsically motivated, self-organising and responsbility-embracing team and take a big step back towards tayloristic understanding to work and responsibilities. I don’t believe the tayloristic approach fits an industry relying on knowledge workers.


The obligatory quote of Steve Jobs: 

Great companies have to be run by ideas not by hierarchy. Otherwise good people won’t stay.


However it seems a bit contradictory to the general myth of the management style of Steve Jobs vs. Bill Gates, i.e. voiced in episode 963 of .NET Rocks:

Steve Jobs ruled by dictatorship while Bill Gates ruled by committee, which allowed Apple do do things that Microsoft could never do.


The demise of "The Enterprise" 

In Consumerization of Computing (german) Philip asks how long the enterprise will still be relevant for vendors like Apple and Samsung.

'The Enterprise’ has lost its grace big time in the last decade. When I started my career over a decade ago, the big challenges for a programmer seemed to be in big enterprise systems. Nowadays the big challenges and innovation seems mostly to be in consumer facing applications on the web and in mobile.

The most tragic manifestation of the descent of the enterprise is the “Enterprise Mode” in Internet Explorer 11, which basically allows enterprises to remain in the stone-age of Internet Explorer 8.

The notion  of "the Enterprise" already became a running gag in the industry:

Jeff Attwood on Stackoverflow Podcast 41.

In corporate environments the product don't have to be good. Sometimes they don't even have to exist ... if you are a thoughtful developer, you are in the wrong place!


The Story of Ashton by Joel Spolsky:

On the morning of his two year anniversary at the cubicle company, Ashton was driving to work when he realized something.
Not one line of code that he had written had ever run.
Not one thing he had done in two years of work made any impact on the world.


It Takes 6 Days to Change 1 Line of Code

It's the first Enhancement in the Developer Queue, after 14 Bug Reports.


Herding Code 102:

Scott: What is the penetration of Node.js into the "enterprise"? 
Tim: It depends on what you mean by "enterprise"?
Scott: Large, slow moving corporations.


Martin Fowler defining Enterprise Systems:

Business rules are given to you as they stand, and if you want to change them you need sixty-seven meetings and three vice-presidents retiring.


Final Gem: Mr. Hanselman is just a great presenter:

Related Posts Plugin for WordPress, Blogger...