Trifork Blog

Posts by Allard Buijze

I am a Software Architect at Trifork Amsterdam. In that role, I investigate different technologies and methodologies to find out how they can help us develop better code in less time. One way to test these methodologies is to apply them in real projects or proof-of-concepts. However, I strongly believe that sharing knowledge and visions is the best way to make progress. No developer is able to do anything on his own. When you share knowledge, you hand over what you have to the next generation of developers, giving you the opportunity to move on an learn more. “You can only grab something if your hands are empty.” Recently, I have been busy setting up the Domain Driven Design Netherlands User Group, together with Jettro, and with the support of Vladimir Gitlevic and Eric Evans. With this user group, we want to provide a platform to the Dutch DDD enthusiasts to increase their knowledge and insight in DDD. Although software development and research take up most of my time, I like to dedicate some of the remaining time to Squash and Tennis. It’s just a nice way to get rid of excess energy.

New features in Axon Framework 2.1

February 13th, 2014 by
(http://blog.trifork.com/2014/02/13/new-in-axon-2-1/)

Recently, Axon Framework 2.1 has been released. It comes packed with improvements and some exciting new features. In this post, I'll briefly iterate of what's new in this version.

Furthermore, we have also scheduled a few workshops and trainings.

Read the rest of this entry »

Proofer - A new way to claim your valuables using a mobile app

September 12th, 2013 by
(http://blog.trifork.com/2013/09/12/proofer-a-new-way-to-claim-your-valuables-using-a-mobile-app/)
proofer1

It's a fact, people that lose sunglasses or small gadgets whilst on holiday often don't bother with their insurance claim, as it's too much hassle. Nearly 80% of the Dutch people who have ever lost an iPad, for example have never declared their loss with their insurance company. This is what I learnt from a recent article on a news site. Nothing special I thought, until I thought about the reason why. Why would anyone not want to claim the loss of a device costing approx. 600 EUR from their insurer? Do we all earn enough money, is there not a crisis or do we simply have more than one device we can always use nowadays? I think none of the above !

I believe lost iPads and other valuables are often not claimed because it simply takes too much time and hassle to do so. We are insured and that feeling of safety is enough for us, it seems. It's apparently too much effort, time and trouble to look for those receipts again, and figure out  the policy number and as always you'd probably need to fill out a dozen forms too!

It’s not just iPads. At my place there are also all kinds of other so-called gadgets & valuables: Smart TV’s, jewellery, streaming devices, laptops, tablets, cameras, smartphones etc. We are all fans and large users of nice goods and as we know all too often and for whatever reason loss, damage & theft can all happen.

Anyone who has ever claimed something from an insurance company will probably also recognize the annoyance that arises when you get into a discussion over the amount of compensation that is applicable. Therefore I am very pleased that there is now an app now that will handle the claim process for me at least.

The insurance app, Proofer, which we've developed purely to overcome some of the thoughts and annoyances mentioned above.

Read the rest of this entry »

Twitter Bootstrap, why you should *not* use it

June 4th, 2013 by
(http://blog.trifork.com/2013/06/04/twitter-bootstrap-why-you-should-not-use-it/)

We all know Twitter Bootstrap, a great tool for quickly building "sleek and intuitive" web applications. But why are people actually choosing to use Twitter Bootstrap and why? And more importantly, why I think you should *not* use it (in most cases)!

Disclaimer: I am a frontend developer and wrote this blog entry from my point of view, so if you are a backend developer, take this with a pinch of salt and don't be offended ;-)

You hear it all the time: "You should really use Twitter Bootstrap! It's really good and easy to use". Also, I notice that bootstrap enables backend developers to quickly set up a frontend using twitter bootstrap. And suddenly they have to admit that a little frontend development can actually be a lot of fun. However, typically things turn bad once the project progresses...

So what can bootstrap do for you and what makes that people find it useful:

  • Quickly create a layout (fixed, fluid and responsive)
  • Quickly create a form
  • Everything imediatly in the same style
  • Reasonable grid system
  • Tables
  • Buttons

And there are many other useful things that bootstrap offers and allows you to add in no time. Just dive into it, it's more than worth it...

When and what for should you use bootstrap?

  • A backend system without too much commercial purpose
  • A website without fancy design
  • Show (preliminary) functionality to a product owner during a project

So what remains and why should you *not* use bootstrap?

You have to consider that most frontend developers get their thrill from translating a spiffy design to HTML/CSS using client-side scripting when needed. They are typically good at just that thing using their own preferred tools and frameworks and typically less good at modifying existing code bases that they didn't create from scratch.

So when better not?

  • When you are just interested in the grid layout, then there are better and more resource-friendly alternatives
  • If you are only using one or two features, why not build them yourself? (why not reuse?)
  • When dealing with a design of your own, you might end up removing bootstrap specifics or trying desperately to override them

To conclude, there are defintely reasons and scenarios where Twitter Bootstrap can be handy, but make sure that you don't shoot yourself in the foot, because it might cause you more work in the long run. Especially when using bootstrap in a larger project, it might save you time in the beginning, but it might start to bother you and cost you greatly a little further down the road. In those cases, setting up your project correctly yourself from the beginning, is a more recommendable approach.

Axon Framework Release Party 2.0 great succes!

March 5th, 2013 by
(http://blog.trifork.com/2013/03/05/axon-release-party-2-0/)

The Axon Framework release Party, which was organized on Thursday last week, has been a great success. The event was at the Observant in Amersfoort and with over 40 curious enthusiastic attendees we  kicked the day off with a nice lunch.

20130228_122414_small SAM_1113_small

Before we started the sessions, we had decided that we would divide the group into three categories: The ones without any experience with the Axon Framework, the ones who did some research on the framework and the ones who were already in production with the Axon Framework.

The sessions

We started the sessions with an introduction by myself, as the founder of the Axon Framework. I explained the background of CQRS and the benefits of using Axon Framework from a business perspective. I also explained how Axon 2 differs from the previous version.

The first use case was presented by Simon and Bastiaan from E.Novation: the use of Axon in Azera, an application to manage care registration and declarations for the healthcare industry. They explained how Axon reduces their time-to-market, which allows them quickly react on changes in the law. Furthermore, the use of Event Sourcing automatically provides them with the auditing capabilities they require.

SAM_1122_small

The second use case was presented by Aktive Reply, an Italian company, part of the European Reply Group, that builds and delivers solutions upon Enterprise Content Management infrastructures. Domenico flew in from Milan, Italy, to tell us how they have implemented a large distributed system in one of the top 50 banks. Axon did not only provide the building blocks to build such a system, it helped them reduce their application complexity by 50%! He also explained how Aktive Reply has bundled some of their best practices into an open source product called Aktive Cortex.

Panel Discussions

SAM_1125_small

The last part was a Panel Discussion, led by Rolf de Jong, the CIO of AFAS. Bart Vries, lead developer of AFAS joined Allard Buijze, and the case study presenters in the discussion panel. Both Rolf as well as the audience came up with very interesting questions about the panel's vision about CQRS and the Axon Framework.

The day concluded with some drinks and snacks. As always, nothing gets a discussion going like a beer does.

Download the presentations

If you've missed the event, you can request a download the presentations here.

The download includes:

  • An introduction to the Axon Framework
  • Axon case study 1: presented by E.Novation
  • Axon case study 2: presented by Aktive Reply

If you want more...

If you would like to dive into the technical details in more detail please don't forget, we also have a CQRS workshop planned on March 13th in Zurich and on March 21st in Amsterdam. More information on costs, timings and a course outline visit our website. Thanks to all those that joined us to make this day a great success.

SAM_1114_small

AFAS' CIO Rolf de Jong hosts Panel Discussions at Axon Seminar

February 12th, 2013 by
(http://blog.trifork.com/2013/02/12/afas-cio-rolf-de-jong-hosts-panel-discussions-at-axon-seminar/)

axon2_banner

On February 28th 2013, Trifork will organize the Axon 2 launch seminar. During this seminar, visitors will be introduced to CQRS and Axon Framework, of which version 2 was released just a few weeks ago. The seminar will be an afternoon packed of technical insight, case studies and panel discussions, whereby we look forward to a number of informative and interactive sessions. Rolf de Jong, CIO of AFAS ERP Software, has accepted our invitation to host the panel discussions where a team of experts will share their thoughts on CQRS, Axon Framework and software development in general.  Read the rest of this entry »

Axon Framework 2.0 Released!

January 22nd, 2013 by
(http://blog.trifork.com/2013/01/22/axon-framework-2-0-released/)

After laying the ground work for this release about a year ago, we now proudly announce the next major release of Axon Framework! The 2.0 release is a big step forward compared to the previous version, as it contains a thorough restructuring of components, making it even easier to build scalable and extensible applications.
Read the rest of this entry »

Axon Framework 2.0-rc1 released

November 30th, 2012 by
(http://blog.trifork.com/2012/11/30/axon-rc1-released/)

Axon 2 has hit an important milestone today, as we have published the first Release Candidate. This release marks a major milestone towards the final 2.0 release, expected early January. All features on the roadmap have been implemented in this release. The coming weeks, these features will be refined and fine-tuned for optimal performance and reliability to ensure Axon 2.0 helps meet the demands applications face today.

Read the rest of this entry »

Using JRebel with web fragments

November 26th, 2011 by
(http://blog.trifork.com/2011/11/26/using-jrebel-with-web-fragments/)

Our team recently added JRebel to our toolbox, and we love it. We use Tomcat in our day-to-day development and getting rid of the annoying reboot to see the changes in code and resources was a big relief.

We have recently started to work on a new project which uses a Servlet 3.0 feature: web fragments. Web fragments allow you to modularize your deployment descriptor which means that a part of your web application can reside in a separate module along with its own descriptor.

With such a project structure we didn't get our JRebel configuration right from the beginning but once you know how to do it it seems extremely trivial. Nevertheless, I would like to share here a working JRebel configuration for a project including web fragments.

Let's assume we have a maven project structure including the main web application and a web fragment. We want JRebel to monitor for changes both classes and resources in our web fragment as in the main web

-- web-fragment
    -- src
        -- main
            -- java
            -- resources
                -- META-INF
                    -- web-fragment.xml
                    -- freemarker
                    -- resources
                        -- static
                            -- js
                            -- css
-- web
    -- main
        -- java
        -- resources
        -- webapp
            -- static
            -- WEB-INF
                -- web.xml
                -- index.jsp

Thanks to Servlet 3.0 any resources under META-INF/resources are accessible from the root context of the web application. This needs some special attention in our JRebel configuration.

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.zeroturnaround.com"
             xsi:schemaLocation="http://www.zeroturnaround.com http://www.zeroturnaround.com/alderaan/rebel-2_0.xsd">

  <classpath>
      <dir name="/path/to/web/src/main/resources"/>
      <dir name="/path/to//web/target/classes"/>
      <dir name="/path/to/web-fragment/src/main/resources"/>
      <dir name="/path/to/web-fragment/target/classes"/>
  </classpath>

  <web>
      <link target="/">
          <dir name="/path/to/web/web/src/main/webapp">
	      <exclude name="WEB-INF/lib/**"/>
	  </dir>
      </link>
      <link target="static/">
          <dir name="/path/to/web-fragment/src/main/resources/META-INF/resources/static"/>
      </link>
  </web>
</application>

The web fragment's resources have to be defined using "link" element with a target matching the directory name. This way you only need to hit refresh in the browser to see the changes in your JavaScript, CSS or other static resources.

The above configuration uses absolute paths to define the location of directories. If you would like to commit your configuration to your VCS you can define a placeholder like ${project.root} which then every team member has to define as a custom property in JRebel Agent settings.

Processing 1M tps with Axon Framework and the Disruptor

July 20th, 2011 by
(http://blog.trifork.com/2011/07/20/processing-1m-tps-with-axon-framework-and-the-disruptor/)

LMAX, a trading company in the UK, recently open sourced one of their core components: the Disruptor. This component allows reduces execution overhead by removing the necessity for locks, while still keeping processing order guarantees. A pretty ingenious piece of engineering, if you ask me. I tried to apply the disruptor to the Axon Command Bus, just to see what it potential is. The results are pretty astonishing.

Read the rest of this entry »

New in Spring 3.1: Bean definition profiles at a glimpse

July 13th, 2011 by
(http://blog.trifork.com/2011/07/13/new-in-spring-3-bean-definition-profiles-in-a-glimpse/)

The next major release of Spring Framework, 3.1, brings a new feature called bean definition profiles. This is a great add-on which makes the definition of the application context even easier, both in xml and Java-based style. With this new functionality it is possible to group beans into profiles which can be activated at runtime. I will show in this blog post how to leverage bean definition profiles, based on a monitoring use case.

Read the rest of this entry »