Open Source ist auch Bildung

Es bringt ja Nichts. Egal wie man das Blatt dreht und wendet – von staatlicher Seite scheint in den nächsten Jahren nicht viel zu kommen, wenn es um digitale Bildung geht. Jugendliche stehen mit Ihren Smartphones zwischen dem Verbot an der Schule und den Eltern, die die neue Technik womöglich noch nicht einmal ganz verstehen. Sie stehen der Welt, dem Internet und der Flut der Information beinahe allein gegenüber.

Der Ist-Stand

Es werden zwar aktuell Milliarden-Investitionen für die technische Ausstattung von Schulen für die Bildung besprochen, doch was nützt das alles, wenn weder der Lehrplan noch die Ausbildung der Lehrer die Welt von morgen – oder eigentlich von heute – beinhalten?


Of races and mutexes: synchronizing async operations in JavaScript

While JavaScript is a strictly single-threaded language, the asynchronous nature of its execution model can easily lead to situations in which two or more async operations run at the same time and compete with the program flow depending on which operation succeeds first. The result is a specimen of the dreaded species of race conditions.

Issues of this type can be arbitrarily hard to reproduce, debug and fix, and I guess that every seasoned JavaScript developer can relate one or two horror stories where they literally spent days before finally fixing such an issue for good.

Race conditions are a well-known problem from any language that supports for concurrency, and often a mutex is used as a tool to synchronize such operations. This article shows how to apply the concept of mutexes to JavaScript in order to avoid race conditions.


Vom Symfony CMF und Open Source im Allgemeinen

Unser Max ist Core Contributor beim Symfony CMF. Das Content Management Framework bietet Entwicklern die Möglichkeit, sich einzelne Bestandteile eines CMS herauszupicken, ohne ein komplettes Content-Management-System installieren zu müssen.

In dieser einfachen Aussage stecken gleich zwei spannende Themen. Zum einen natürlich das CMF selbst, zum anderen die Frage nach dem Einsatz von Open Source in kommerziellen Projekten einzelner Unternehmen.


Hardening Compiler Flags for NixOS

In the past year some Mayflower colleagues have started using and contributing to NixOS, a purely functional GNU/Linux distribution that combines package and configuration management. We decided that we would give it a try in production but stumbled upon some issues that had to be resolved first. We have added new packages, services and fixed up some internal. Due to this work two colleagues have even gained commit access in the process. Weiterlesen

Ten tips for frictionless development with Apache Cordova

Cordova is a framework for developing cross-platform mobile apps using web technology. Develop your application using the technologies you know, deploy to all major platforms without the complications of native development, and tap into a rich ecosystem of plugins for adding native functionality to your app.

Sounds great, doesn’t it? Well, if you have used Cordova before, you may have found the harsh reality of Cordova development to be at least sometimes a bit more gloomy that this. As for us: we use Cordova for delivering a web application as a standalone mobile app for one of our customers. While we succeeded in creating a full-fledged mobile app that scored great reviews with our customer’s user base, the road that took us there was much more stony than we expected, and we often found ourselves hitting walls where we did expect smooth sailing instead. In this blogpost, I want to share ten tips to ease the pain and provide a smooth development experience with Apache Cordova.


Go-repro: a rewriting reverse proxy for testing multi-domain setups

Web applications that span multiple domains come with their very own set of challenges. As requesting resources that cross domain boundaries is a pattern common to many different attacks that threaten the security of websites, browsers restrict such requests to conform to with the same-origin policy: most resources (in particular if requested from Javascript via XHR) may only be requested from the domain that served the requesting web page.

However, as there are also completely legitimate reasons for such requests, various techniques exist for circumventing the same-origin policy, for example JsonP or the modern HTML5 CORS standard (Cross Origin Resource Sharing). While these techniques enable cross-domain web applications, the same-origin policy remains a source for subtle and hard-to-debug issues. Therefore, reproducing this setup in development and testing environments is vital to make sure that potential issues can be caught and fixed early before they hit production.


Running a secure docker registry

Some time ago, our team decided to deploy the application which we are developing for our customer as a docker container. As docker is a promising but still very young technology, this decision naturally put us on a quest for finding a reliable, secure and maintainable setup — many things are still in flux in the community, and the resulting lack of proven best practices leaves a lot of room for experiments (sometimes frustratingly so).

In this blogpost, I want to share one result of our experiences: how to set up and maintain a secure private docker registry.


Mayday, mayday! We are blinking!


For some time now, we at Mayflower can have slack time on every second friday. All colleagues who do not have urgent projects for our customers can choose to improve their knowledge, do some opensource development or just try out something cool and nerdy.

The Idea


First, we ordered some Raspberry Pis to test out their capabilities. Since we developed the new Steinigke webshop, we have a good source at hand for light and sound equipment. So we settled for some DMX experiments together with our customer.


Pimp my Backbone.View (by replacing it with React)

I’ve been using Backbone.js in a couple of projects now and my feelings about it are quite diverse. On the one hand, I like how it provides you with guidelines on how to structure your frontend code. Although splitting model and view is a very basic idea in software development, it also is very powerful. Backbone.js is of great help by providing collections which aggregate model instances and by being able to sync these models with a server via RESTful APIs. On the other hand, it always (and I hope that it’s not just me) seems to be a pain in the b*** to figure out the best way to implement a proper view lifecycle and to keep track of all registered event handlers. If you aren’t careful when removing or even just re-rendering views, you can seriously mess up event handling and prevent proper garbage collection. If you are just a little sloppy, this leads to a slow frontend with an always increasing memory footprint.
I’m not saying that Backbone.js is bad in handling UI events, just that you have to care about too many things that are common to most web applications. This article describes an alternative to the Backbone.View component.


Was SOLR für Ihren Shop tun kann

Kostenlose und kostenpflichtige Shop-Software für verschiedene Anwendungsszenarien ist im Internet zahlreich vorhanden. Die etablierten Anbieter haben eine Vielzahl von Lösungen für Standardprobleme im Gepäck. Viele Interessenten die ihren Bedarf für außergewöhnlich halten, waren schon überrascht, wenn wir ihnen erklären konnten, dass ihre Bedürfnisse zu großen Teilen bereits von der Shop-Software abgedeckt waren.

Umgekehrt gibt es aber auch den Fall, dass die Anbieter Lösungen im Gepäck haben, die im Einzelfall effizienter durch eine spezielle Software erledigt werden kann. Ein häufiges Beispiel ist die Shopsuche, die im Standardfall mit der Shopdatenbank betrieben wird.

Unsere Kunden stellen dann (zu Recht) oft dieselben Fragen, wenn wir empfehlen, die Suche durch eine Lösung auf Basis von Apache SOLR zu ersetzen: