MayDay, MayDay! Slacktime bei Mayflower

MayDay, MayDay!

Natürlich ist dies eine Wortspielerei, die bei Externen eine entweder irritierte oder schmunzelnde Reaktionen hervor ruft. Tatsächlich wollen wir keinen Notruf absenden, sondern deutlich machen, dass unsere Form der Slacktime ein Slackday in Mayflower ist. Dieser Slackday wurde Mayday getauft und findet nun schon seit über einen Jahr regelmäßig jeden zweiten Freitag statt.

Mit diesem, letzten Beitrag in der Adventsblog-Reihe beschreiben wir, welche Fragen uns rund um die Slacktime beschäftigt haben und wie der Mayday in der jetzigen Form entstand. Weiterlesen

Playing around with fragment shaders in WebGL

WebGL is a graphics library for web browsers, based on a version of OpenGL for embedded devices, OpenGL ES. The library allows for customized real-time 3d graphics rendering in modern browsers, including the use of shaders. There is a variety of scenarios in which you would want to make use of such a library. Consider, for example, browser games, 3D maps and product views. The simple WebGL interface is accessible via JavaScript and even whole frameworks are available, such as three.js (for an introduction, see Johannes Brosi’s great article from earlier this month).

As Christmas holidays are approaching, it is nice to have some toys to play around with. In this tutorial, I will provide a basis for fiddling around and experimenting with WebGL and fragment shaders, since it turned out to be a lot of fun to play around with them, and the basic concept is relatively easy to grasp. This article basically follows my own way of coming to play around with fragment shaders in WebGL. The idea was generated shortly before the Mayflower/Liip Barcamp, where David Sora Parra and I organized a collaborative session in which we wanted to generate some coding fun by discovering the unknown together. Weiterlesen

Fallstricke im Responsive Webdesign

Was Responsive Webdesign (RWD) meint, ist klar: Ein Layout, das sich flexibel an die Bildschirmgröße des Clients anpasst – für einen perfekten Auftritt auf dem Smartphone ebenso wie auf dem UltraHD-TV.

Doch was so schön klingt, birgt auch viele Fallstricke: “Welche Eigenschaften sind bei Responsive Newslettern zu beachten?”, “Wie gehe ich mit der Einbettung von iFrames um?”, “Gibt es unterschiedliche Bedienung von dynamischen Inhalten?”, etc. fragt sich der Entwickler.

In diesem Beitrag stelle ich einige Problemstellungen und deren Lösungsansätze vor. Weiterlesen

Warum wir lieber feiern als loben

Teams in der Challenge Zone sind motivierter, engagieren sich stärker für das Ziel und bringen eine deutlich höhere Performance. Doch welche Faktoren führen dazu, dass sich ein Team traut, in die Challenge Zone zu gehen? Es ist nicht das Lob des Chefs, sondern die Möglichkeit, eigene Erfolge zu erleben und zu feiern. Weiterlesen

node.js – Debugging in PHPStorm auf der VM

Bei Mayflower ist es üblich, dass dem Entwicklerteam für jedes Projekt eine virtuelle Maschine zum Entwickeln zur Verfügung steht. Im einem unserer letzten Projekte hatten wir einen größeren Service auf Basis von Node.js zu erstellen. Dabei stellte sich heraus, dass das Debugging von JavaScript unter Node.js eine echte Herausforderung ist. Wie wir dennoch in unserem Setup mit der Entwickler-VM zum Debuggen gekommen sind, beschreibt dieser Artikel. Weiterlesen

Salt and Pepper — Running native code within the browser with Google Native Client

When the web started off in 1989 at CERN, it was just a collection of static HTML documents, the first browsers were little more than document viewers, and computing still happend largely on big servers connected to many thin-client workstations. Much has changed over the last 20 years. Computing has moved from a the server-terminal model to the personal computers we know, and as web browsers are rapidly transforming from document viewers into sandboxed Javascript runtime environments, something amazing is happening: computing is moving back to a client-server model, with servers located in the cloud serving web applications running in the browser sandbox.

With browsers transforming into target platforms for general application development, there comes a desire for software running at near-native speed, something which a highly dynamic language like Javascript still has a hard time to deliver (even though Javascript runtimes have improved speed tremendously over the last years). It is not surprising that Google has come up with their own answer to this problem: Google native client (NaCl) allows native C/C++ code to be compiled to run directly in the browser and has been part of Chrome since version 14 (November 2011). In this blog post, I’ll take a closer look at this technology and explore how it works. Weiterlesen

Eine Einführung in ThreeJS (WebGL)

Auf PCs und Macs haben anspruchsvolle 3D-Grafiken schon vor einer ganzen Weile Einzug gehalten. In Form von Fotogalerien, Produktkonfiguratoren und -ansichten und natürlich in Form von Spielen. Auch der mobile Bereich ist technisch mittlerweile auf dem Stand, aufwendige 3D-Grafiken berechnen zu können.

Nun stellt sich bei der Planung einer entsprechenden Anwendung oder eines Spieles aber die Frage, auf welche Programmiersprachen und Frameworks gesetzt werden sollte. Insbesondere, wenn das Produkt dann auf mehreren Plattformen erscheinen soll.

Mit diesem Artikel möchte ich eine Einführung in das JavaScript-Framework ThreeJS geben und zeigen, wie einfach es sein kann, mit vertrauten Web-Werkzeugen und dem richtigen Framework durchaus auch anspruchsvollere 3D-Anwendungen zu schreiben. Am Beispiel von CocoonJS werde ich kurz erklären, wie diese dann nicht nur auf Desktop-Browsern, sondern auch auf mobilen Endgeräten genutzt und in die Stores gestellt werden können.

Weiterlesen

The Puppet Anchor Pattern in Practice

Recently, my team rewrote all Puppet manifests for Mayflower’s core infrastructure with our two year long Puppet experience in mind. Many mistakes were made in the past, but this time we decided to write clean and structured Puppet code based on the latest language features from Puppet 3. More blog posts about advanced Puppet topics are going to be published in 2014.

The main theme of the rewrite was abstraction. Our goal was to use as many third-party modules as possible. Because many modules needed fixes, we contributed a lot of code back to the community. We adopted the Roles, Profiles, Components Design and use Hiera extensively to separate business logic, modules, manifests and data. Our manifests basically glue the modules together and embed them sensibly in our environment, seeded with data from Hiera.

The Problem

If you’ve written your fair share of Puppet manifests, you can imagine that such an architecture requires the definition and inclusion of lots of classes. Sadly, Puppet’s dependency system treats classes different than resources: If you include class foo in class bar, then class  foo and all its contained resources and dependencies won’t have any dependency relations with class bar. Weiterlesen

JavaScript Coding Patterns: Objekt-Vererbung mit Prototypen

In den vorangegangenen Teilen der Reihe JavaScript Coding Patterns (Teil I, Teil II und Teil III) wurde immer wieder betont, dass JavaScript eine funktionale und zugleich objektorientierte Skriptsprache ist. Funktionen sind hier selbst Objekte die in JavaScript nicht auf Klassen beruhen, sondern ihre Attribute und Methoden von bereits existierenden Objekten erben. Es handelt sich dabei um eine prototypenbasierte Art der Vererbung.

In diesem vierten Teil der Reihe wird es darum gehen sich die Rolle, die Prototypen in JavaScript spielen, etwas genauer anzuschauen.

Weiterlesen

The JavaScript Craftsman

Gestern, 14.12.2013, fand der Global Day of Code Retreat statt. Ein Code Retreat ist eine Veranstaltung der Software Craftmanship Bewegung für Entwickler, um ihre handwerklichen Fähigkeiten zu trainieren. Was ist ein Craftsman? Sucht man im Wörtbuch nach Craftsman findet man die Begriffe Facharbeiter, Handwerker und Handwerksmann und unter dem Wort Craft findet man die Begriffe Kunstfertigkeit, Geschick, Gewerk und Handwerk. Betrachtet man nur die Begriffe aus dem Wörtbuch, könnte man meinen, bei Software Craftmanship handelt es sich einzig und allein um das beherrschen des Handwerks, also um das schreiben von wunderschönen Code. Das stimmt so nicht ganz, klar möchte ein Software Craftsman guten Code produzieren, darüber hinaus aber möchte ein Software Craftsman ein professionelles Bild seiner Zunft abgeben. Was das bedeutet und wie die Prinzipien der Software Craftsman auch im JavaScript Umfeld umgesetzt können, soll in diesem Beitrag gezeigt werden. Weiterlesen