About kthoms

I am working as Software Architect for itemis AG, the leading company for model driven software development. This is also my passion in software engineering, and I am active working on open source projects such as openArchitectureWare. In private, I am married with Beate, and we have a small house in Dortmund, Germany. We have a lovely small daughter.

Heading for new shores

It is still a bit unreal to me, but I have decided to leave itemis after almost 17 years. When itemis was founded back in 2003 as a spin-off from a different consulting company, I was one the first who followed the founders to itemis. I remember that at our first company christmas party with all colleagues including their partners we all fitted at one table in a tapas restaurant. Now itemis has around 200 employees and several dependencies across Germany, France, Switzerland and Tunesia. itemis was always a bit special in the landscape of consulting companies, with focus more on the people than profit. Over the time I have become a team lead of some very skilled and smart colleagues and had in the recent years the privilege to drive open source to a large degree of my regular work time. My daily ride to itemis HQ is less than 20 minutes. It was not unlikely that I would stay at itemis for my whole career. But now these days came to an end. You might wonder what’s the next step for me and why.

Bild von Youssef Jheir auf Pixabay

I always liked to work as a consultant for different customers of different branches and with different technologies. This way work is always challenging, there are many things to learn and you get to know many highly skilled and smart people, both at itemis and at our customers. And why should look for companies at other locations when I feel comfortable in my home town, where my family belongs?

But when looking at consulting companies, most of them seem to me far less attractive than what I’m used from itemis. I don’t like to think about optimizing salery, I love to think about technology and using them to build solutions first. I like to work with smart people, and itemis used to be a melting pot for people searching for the freedom to become experts in their field.

Quo vadis?

I have decided to join Karakun. You may not know them yet. Even here at itemis they were not known, although they work in a similar area, with an office nearby and with partially the same customers. Karakun was founded 2 years ago as a spin-off from Canoo, a swiss consulting company that some more people may know. Canoo was a successful company with smart and experienced people, and the core team decided to create a new company. With the new company there is now a high density of excellent and experienced software engineers. The head quarter is based in Basel / Switzerland, but there is an office in Dortmund. And just 5 km away from my home. OK, distance to home was not a main driver for my decision for them. However, I’m planning to drive with the bike to the office and come along with just one car for our family now. At itemis I had a company car, this was really great comfort which I now have to give up. Let’s see how long I can live without my own car.

What made me think about this change?

Bild von Alexas_Fotos auf Pixabay

When I applied at Karakun for the new job (I actively approached them, I dislike recruiters!) and also when I announced my quitting at itemis the first question was of course: Why are you doing this? I used then this metaphor: It is like I married my girl friend from school, got children with her, raised them and they are mature now. Of course I love her, but maybe you recognize that each others lifes are heading slightly to different directions. In the past you had the same interests and accepted everything your partner did. Over the years both feel certain aspects more disturbing and sometimes you have argues. You may live with that and come along mostly fine with each other. And maybe you start thinking if a different partner would now better fit to you.

I’m now 46 and work for 20 years as a consultant. Until the end of my career there are also 20 years to go. So I’m now half-way. As said I always enjoyed to craft software, and would like to code further. Now I still feel fresh enough to learn to use new technologies and produce code each day. This may change later, but now it feels the right time to be open for complete new things.

I expect to learn lots of new things from my new colleagues, and I hope that my colleagues can also learn from me. I think all can benefit from each other and I have a company small enough that it feels like a large family. This is what I was used from itemis, but over the years due to the growing company size and portfolio it became harder to have a focus. In the past itemis was the company known for model based software engineering and the drivers of technologies in this area, and still is. However, there are so many different areas where itemis is involved that it feels a bit unfocused. itemis is changing, and not always in synch with my ideals. This aggregated enough in the last year to think about my future and if I could imagine to work here the next decade.

How about my Open Source activities?

I was always a strong believer of open source development, and got involved into projects as much as I could. In the recent years I had the luck to work quite some time on Xtext. Additionally I was working on the Eclipse Platform project and tried to help the great Eclipse community with my contributions.

As a true open source developer work does not end with what you can do during the regular work. Most work on the Eclipse platform and also quite some on Xtext were done in my spare time. I was working on them as much as I could. Sometimes more, sometimes less. I love to see the software improving, and am happy when people actually use and like that. Xtext is a great framework, and was crafted by many smart colleagues. And from my work on the Eclipse platform I’m benefiting each day, as I still use Eclipse IDE for my daily work. The Eclipse platform is a huge project with many people involved from whom I learn each day. By reading their code and communicating with them through issue reports and on conferences. If someone wants to understand how a large scale true open source project works I recommend to get involved into Eclipse platform development!

Also Karakun is actively involved into open source development. My colleagues are driving forces behind OpenWebStart and are involved in a couple of open source projects. However, in different areas than me. What this means to me is as of today unclear. I’m not sure if I can continue to work on Xtext and Eclipse platform to a meaningful degree further. At least for the beginning I have to concentrate my work on my new tasks and degrade my activities to a hobby level. When I have more capacity to participate in open source development I will do this, but it may be on different technologies.

Of course this was a hard decision for me to potentially abandon “my babies”, but I had to. The Eclipse platform project is large enough. I’m just a small part of the great team there. For Xtext this is harder. In the recent years it was only itemis and Sebastian Zarnekow (independent, but until mid of last year he worked for itemis) that drove Xtext. My former colleagues from TypeFox have now other work areas and did not contribute to a meaningful degree anymore. With me dropping off there I see a risk that development of this great framework further slows down. I hope that companies using this framework finally see the importance to assure its maintenance by making maintenance contracts. itemis has invested a lot into this wonderful piece of technology, but when there is no money to earn with it, why should they continue to pay the maintenance cost on their own? I’d like to continue working on Xtext and help customers using it to build useful tools, but it will depend at Karakun if there is a business case for that. If not, I’ll have to move to different areas. It would be hard for me when I would be forced here at itemis to discontinue the work on these great projects, but with my move I have decided to be completely open for what is expecting me. I have made my peace with it.

What’s next?

This friday will be my last working day at itemis. I already gave a farewell party here last friday and made a BBQ for all colleagues at itemis HQ. Next week I’ll have a week off. At the end of the week itemis is giving again a BBQ. I’ll use that opportunity to finally say goodbye and return all belongings.

The first week in February I’ll drive to the Karakun HQ in Basel. There I’ll get to know many of my new colleagues and receive my new MacBookPro. I’ll use the opportunity to visit an old school friend who moved to that area.

In the second week I’ll start in the Karakun office Dortmund. I already know all colleagues there (we are only 4 then). One of them, Joel, already said that he likely won’t be there then. They are awaiting their first child. At the moment it is planned that I’ll work together with Simon there.

I’m ready to start the adventure now. Stay tuned!

Eclipse m2e: How to use a WORKSPACE Maven installation

Today a colleague of me asked me about the Maven Installations preference page in Eclipse. There is an entry WORKSPACE there, which is disabled and shows NOT AVAILABLE. He wanted to know how to enable a workspace installation of Maven.

Since we both did not find the documentation of the feature I digged into the m2e sources and found class MavenWorkspaceRuntime. The relevant snippets are the method getMavenDistribution() and the MAVEN_DISTRIBUTION constant:

private static final ArtifactKey MAVEN_DISTRIBUTION = new ArtifactKey(
      "org.apache.maven", "apache-maven", "[3.0,)", null); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$


protected IMavenProjectFacade getMavenDistribution() {
  try {
    VersionRange range = VersionRange.createFromVersionSpec(getDistributionArtifactKey().getVersion());
    for(IMavenProjectFacade facade : projectManager.getProjects()) {
      ArtifactKey artifactKey = facade.getArtifactKey();
      if(getDistributionArtifactKey().getGroupId().equals(artifactKey.getGroupId()) //
          && getDistributionArtifactKey().getArtifactId().equals(artifactKey.getArtifactId())//
          && range.containsVersion(new DefaultArtifactVersion(artifactKey.getVersion()))) {
        return facade;
  } catch(InvalidVersionSpecificationException e) {
    // can't happen
  return null;

From here you can see that m2e tries to look for workspace (Maven) projects and to find one the has the coordinates org.apache.maven:apache-maven:[3.0,).

So the answer how to enable a WORKSPACE Maven installation is: Import the project apache-maven into the workspace. And here is how to do it:

  1. Clone Apache Maven from https://github.com/apache/maven.git
  2. Optionally: check out a release tag
    git checkout maven-3.6.3
  3. Perform File / Import / Existing Maven Projects
  4. As Root Directory select the apache-maven subfolder in your Maven clone location

Now you will have the project that m2e searches for in your workspace:

And the Maven Installations preference page lets you now select this distribution:

Eclipse Tycho: Disable p2 dependency resolution with tycho.mode=maven

In Eclipse Tycho based builds the first step is always computation of the target platform and depedency resolution. This takes quite some time and in certain use cases it is not necessary. Typical use cases are updating versions with the tycho-versions-plugin, or displaying the effective pom with help:effective-pom.

The p2 target platform & dependency resolution can be skipped by setting the tycho-mode system property:

mvn -Dtycho.mode=maven <goals>

This useful feature is a bit hidden in just a few posts, e.g. https://www.eclipse.org/lists/tycho-user/msg06439.html.

Get the latest artifact version from Maven Central via shell command

If you need to retrieve the latest version of an artifact on Maven Central you can use the following shell command (example for groupId=org.apache.maven.plugins and artifactId=maven-compiler-plugin):

> curl -s http://search.maven.org/solrsearch/select?q=g:"org.apache.maven.plugins"+AND+a:"maven-compiler-plugin" |grep -Po 'latestVersion.:.\K[^"]*'
> 3.8.0

This will query the search API on search.maven.org for the given groupId and artifactId coordinates. The result from search.maven.org is in JSON format. We are only interested in the value of the ‘latestVersion‘ attribute, which is extracted with grep.

The ‘-s‘ option is for ‘Silent Mode’ to suppress download stats messages from curl and really only print the result from grep. Note that this option is not available on all systems (e.g. macOS).


Touring the Eclipse Photon DemoCamps – Next stop: Eindhoven, NL, July 4th!

Eclipse DemoCamps are a wonderful format to learn the hottest new stuff from all the bandwidth of Eclipse projects: Core IDE, IoT, Smart Home, Modeling, JakartaEE, MicroProfile, Tools and so on. It is also a great way to get in touch with creators, committers, influencers and users of these technologies.

For this DemoCamp season I am promoting the Eclipse Platform Project and thus the Eclipse Photon IDE. Eclipse Photon comes with a plethora of new features and improvements which are hard to compress into a DemoCamp format. Usually presentations in DemoCamps are just 20 minutes. Attendees should get an overview of multiple projects and interesting stuff with a wide range of topics. And since DemoCamps are in the evenings, attendees want to get entertained and not bored by long talks. The focus is on real demos, live coding and networking. I love to do that.

screenshot 178.png

My talk is named “Approaching Light Speed – News from the Eclipse Photon Platform“. I have given this talk already at EclipseCon France, at the DemoCamps in Zurich and Darmstadt, and internally at our itemis headquater before our yearly company wide party called itemis SummerCon. I have prepared quite a bunch of stuff to talk about. But different then usually, I do not perform live coding, but show coding with small screencasts in my presentation. For this talk I would have to switch too many between different code and workspaces, and comparisons to the previous version Eclipse Oxygen would make this even worse. It is just too confusing if I would switch so often. And would take much longer so I could present not that much.

At EclipseCon France I had 35 minutes for the talk, and even for that I had strip down the material I already had. The new supported Java versions 9 and 10 in JDT I could just scratch at surface level, although this is one of the real major things in Eclipse Photon. But platform improvements are that much that JDT has to be put into background. For a DemoCamp talk in 20 minutes challenges become bigger. However, in Zurich and Darmstadt I had only those 20 minutes and I thing I managed to give a smooth and interesting presentation. The attendees I spoke afterwards were impressed from all the great stuff that comes with the Eclipse Photon IDE and made them hungry to finally get Photon and use it for their work. Last week on June 27th it was finally time for the great release!

My next stop is now the DemoCamp in Eindhoven this Wednesday on July 4th 2018. This DemoCamp will be held at the office from Altran and is organized by my former colleague Niko Stotz. This will be the first Eclipse DemoCamp held in Eindhoven, and maybe the first in the Netherlands (I don’t remember if one was already in the Netherlands so far). I am interested how engaged the developer community in and around Eindhoven is and hope for Niko that many interested people are making their way to the event!

My colleague and friend Holger Schill will present the new and noteworthy features of the new Xtext 2.14 release that ships with Eclipse Photon. Last week we showed this in the webinar Eclipse Photon Series: What’s New in the Eclipse Xtext 2.14?, which got recored on YouTube. If you want the information given there in 60 minutes condensed, make sure to visit the DemoCamp! Further you will see the wonderful Mélanie Bats. She will present all the new features in Eclipse Sirius 6. Besides all the news from the modeling technologies Marc Hamilton is showing how they use the Eclipse Modeling technology stack (Xtext, Sirius, EMF and others) at Altran to build solutions with them.

So, my fellow software engineers & craftsmen in the Netherlands, register for the Eindhoven DemoCamp now and see you there!

Set Jenkins build display name with Groovy

On the Xtext’s Jenkins instance we have some parametrized jobs that are used for the different projects that are built on Jenkins (Xtext, Xpand, MWE). For example, the simrel-tests job does some health checks on the resulting p2 repositories.

The problem was that it was not obvious for which job name parameter the build was executed. On first sight you only see the build number, and then you have to look in each individual build to identify which parameter was used:

screenshot 15

With the help of a Groovy script using the Jenkins Groovy Plugin we can change the display name of a build:

build name changed

Also on the Dashboard page it becomes clear for which parameter the last build was run:

screenshot 17.png

To do this, add a build step “Execute system Groovy script” and access the job’s environment variables with build.properties.environment.toString(). Then set a new display name by assigning a new value to build.displayName. That’s all.

groovy command

EclipseCon Europe 2017 – Part 2

This time I really had to split up my look back to EclipseCon Europe into multiple posts. In my previous post I wrote my rememberings on ECE 2017 before it actually began. It was about my arrival and first meetings with the community, the Unconference on Monday and the reception and networking at the Nestor bar.


On Tuesday it was finally time to open the doors for EclipseCon Europe! It is already beginning at the reception and wardrobe where you meet lots of people and welcome them. Of course there is not much time then, but I was looking forward to find more time for chatting later.

Preparing for showtime

Tuesday morning is the tutorials slot. I would have liked to join Mickael Istria’s slot on the Language Server Protocol and Eclipse’s Generic Editor. This is definetely a topic where I will bring my experience in and will contribute to. Instead, I chose to prepare for my first talks on that day.

All itemis colleagues met at our booth and we built it up together. The booth played a central role for us later and we wanted to make it an interesting place to be for attendees also. And hey – we had stickers this year again! I ordered them recently and improved my Gimp skills to make them free form cuts. The quality is good, and now we know where to order good ones.


At noon it was time to meet up again. Not sure with whom I joined that day. I think it was Tuesday where I joined Lorenzo Bettini and Francesco and Vincenso from RCP Vision. Or already Monday? I have an information overload to get this correct in a row.


After lunch it was time for the opening keynote from Mike Milinkovich. But before that, Ludwigsburg’s mayor gave an insight on Ludwigsburg’s history. You may have read it, the Eclipse Foundation and Ludwigsburg agreed to keep EclipseCon Europe further for at least two years there. Good choice. The location is just perfect for this conference.

Then it became time for Mike to welcome the audience and have an outlook on the future of Eclipse. These are exciting times, many projects are joining the Eclipse Foundation. With the move of JavaEE to EE4J at Eclipse, not less than 40 new projects are pushing in, and GlassFish alone has 130 git repos. It will be a challenging task to spark this project. I don’t want to get into the details now, but OpenJ9, Deeplearning4J are other awesome projects at the Foundation now. Eclipse Science is also getting things rolling and are successful on their own release train now. The Eclipse IDE supports now Java 9 and JUnit 5 and has been added to Eclipse Oxygen.1a and Photon. The Eclipse Public License 2.0 has been released this year, and JUnit 5 was the first project licensed under EPL-2.0.


I have to admit that I was distracted during Anna Ståhlbröst’s keynote then. I partially followed and enjoyed how she presented live in Luleå, near to the polar circle in northern Sweden. The reason for distraction was that it was immediately after the keynote time for my next talk.

itemis Booth Talks

Now it was finally time for an idea that we had for our booth. The idea was to use our technical and presentation skills and give short talks at the booth. The short break between the keynotes and the afternoon talks was used by Lothar Wendehals, and he showed in just 5 minutes how to program an embedded system with our YAKINDU Statechart Tools. And it took not more time until he programmed an Arduino to do something which he modeled as a finite state machine.

screenshot 130


In “Introduction to Expression Languages with Xtext” I showed how to build languages in Xtext that embed expressions. There is Xbase, which can be easily consumed and implements a fully-fledged base expression language. So why not just use Xbase? There are reasons sometimes not to do so. Mostly because of three reasons: Performance, the need for another typesystem (Xbase is bound to the Java typesystem), or when no dependency on JDT is required.

screenshot 21

But you can learn a lot from the Xbase grammar. When you look at this grammar, it seems complex and makes much use of some more advanced Xtext grammar concepts like Syntactic Predicates or Assign Actions. Many Xtext users are not aware of that, or don’t understand them. So I explained them and where to use them, and I showed some patterns that any expression language follows in Xtext. The patterns are not that visible on first sight, but I gave another view on them.

With a slight delay because of after-session discussion I joined Martin Lippert’s talk “Implementing Language Servers – the Good, the Bad, the Ugly“. Martin did a great presentation about lessons learned from implementing and using multiple language IMG_4666servers, and the state of the LSP. If you are interested in LSP and missed it, look for the recorded session. I gave Martin later direct feedback on his good performance (as he always does).

It was right before the first session when Dominik Mohilo from jaxenter.de showed up. He is continuously reporting interesting stuff in his online articles for years now, and helping Eclipse to get more intention in the developers’ minds in Germany. Thus I really value his work and was excited to finally meet him in person. Many thinks about Eclipse I read from him first, because they show up in my Facebook timeline and often I read those articles. He was even more excited to finally meet the drivers behind Eclipse in person. He wrote already a good wrap up about ECE 2017 for his Eclipse Weekly newsletter (german).

News on Photon, GEF and the Jigsaw

I invited Dominik to join our next ignite talks. Now it was my time to present brand new stuff. I showed some of the things that were added from Photon milestone 1 to 3, and even some of the things that are just about to come by my contributions. Besides some nice usability features and now fully working dark theme, I showed one of the most important things that users can await:

screenshot 131

I am investigating from time to time where I think Eclipse could perform better and if I have ideas on that. Some additions that I am proud of are the “Expand All” action in the Search Views’s tree. I showed both Oxygen and Photon for a search result of ~5000 elements, and the improvement is at least factor 2. Also in this demo you could see another nice feature coming for macOS: The wait-cursor was an ugly black/white circle. I found a hidden gem in macOS to get an animated system cursor. Actually it is so hidden that you just hear rumors on this blue spinning ball on the net and almost find no pictures of it with a Google search. It is not documented, but I found a hint for it in a source file of macOS. I think it looks now much nicer.

Also the improved speed of progress monitor updates I could show in difference between Oxygen and Photon, which is just amazingly faster now. You will recognize this for example if you import projects from the Git Repository view. At the moment I am analyzing the performance of the (Java) text editor and have some patches pending. On my machine it feels already snappy again. I think the conference attendees around enjoyed my performance.

screenshot 132Next it was Alexander Nyßen to talk about “How we saved GEF from the Jigsaw”. To the luck of the GEF project they were one of the very early adopters of Java 9 and tested what implications Java 9 brought for GEF. They wanted of course to assure that GEF will be compatible to Java 9 once it is out, and found some issues. And they got in direct contact with the guys from Oracle to request some changes GEF and others would need. Users of GEF can be happy now, GEF works smoothly on Java 9!

My afternoon talk schedule

IMG_4667The next session I attended was Andreas Graf’s presentation “Large Scale Model Transformations with Xtend“. As written in my previous post, model transformations are one of the main use cases for Xtend, but only known by a few people. Andreas is working in the automotive sector, where you usually have VERY large models, sometimes hundreds of megabytes in source. Transforming them is challenging, and they initially did an evaluation on different technologies (e.g. QVT-O). They finally decided to use Xtend. Some of the reasons were Xtend’s performance and debuggability. Did you ever tried to debug an interpreter on a large model? It’s horrible. With Xtend you can just debug the code and also down to its transpiled Java code. And they do not experience serious bugs with Xtend.

I skipped one slot and went to our booth, where I joined some discussions with attendees and colleagues. Then it became time to listen to Olaf Gunkel’s talk “the Future is async – or Java Concurrency in the change of time“. He explained concurrency programming from Java 1.0 to Java 9, and the different paradigms. I actually learned quite something about the newest stuff, reactive streams. Also Completable Future I do not use frequently – until yet.


Eclipse Stammtisch

That was the last talk for Tuesday and finally time to get beer at the Stammtisch, which took place in the theater’s foyer where our booth was. We made a small “flash mob”: All of us got the same T-Shirt, one with the funny bunny we had on our rollup at EclipseCon France. And suddenly it could be recognized how large the itemis crowd was. Around 20 persons from itemis, from which 8 were speakers with 12 talks.

It must have been a nightmare for the EclipseCon’s program committee to choose from so many talks. Of course they will tend to provide a diverse program and don’t let single companies a too big focus. But that we were able to give 12 talks shows that they believed in the quality of our content and presentation. And no, we had no one from itemis at the program committee.

I could not remember to whom I spoke at the reception all to, but one was different: I met Brian de Alwis, who made all the way from Canada to EclipseCon Europe. It was at EclipseConverge & DevoxxUS where I got to know him. We had the same shitty over-expensive hotel and met at breakfast. It was always refreshing to speak with him, a very nice guy. Actually it was him who partially sparked my interest to contribute to Eclipse Platform. The story behind would be worth another post.

The real conference

The party was of course not over when the last beer was served at the reception. It just begun. Of course it was again time to go over to Nestor, drink more beer and talk with all the Eclipse members that were joining there. At the bar there is happening the real conference. This is were you really have time to talk and learn to know new people. Year by year it gets more. At 1:30 AM I finally got to my room.

Oh gosh, and this was just Tuesday! Wednesday would become even more intense, read about that in my next post. Our slides are available for download now.