Protip zum schnellen Formatieren von Code in IDEA
intellijidea

Protip zum schnellen Formatieren von Code in IDEA

Jeder kennt vermutlich die Autoformat-Funktion in IntelliJ IDEA. Damit lässt sich jeglicher Content entsprechend einrücken und umbrechen, damit dieser einem gewohnten Standard entspricht. Möchte man aber etwa JSON aus dem Browser oder andere Codeschnipsel mal eben irgendwo übersichtlich anzeigen, so war mit bisher der Weg in IDEA zu umständlich. Eine Datei erstellen, entsprechende Dialoge zu Versionsverwaltung und Typ beantworten und dann noch darauf achten, dass ich die Datei nicht doch mit einchecke - es fühlte sich einfach nicht bequem an.

Self Organization - Do's and Don'ts
sociocracy

Self Organization - Do's and Don'ts

Our unit was established in summer 2015 and is a merger from three different teams. Right from the start (with little to no knowledge of holacracy and sociocracy) we used circles and consent (IDM). This combination results in circles that are primarily formed around competences and a decision process that nobody liked. Early in 2017, we started to learn more about sociocracy with an initial workshop from Bernhard Bockelbrink from S3 and with the help and consulting from Ted Rau from SoFA.

  • leif
    leif
Post Mortem zum KreditSmart Incident vom 20.02.2018
post-mortem

Post Mortem zum KreditSmart Incident vom 20.02.2018

Am Dienstag, dem 20. Februar 2018 kam es in der Zeit von 13 bis 17 Uhr zu einem mehrstündigen Ausfall von KreditSmart und dem Vorgangsmanagement. Wir möchten hier kurz schildern, wie es dazu kam und wie wir eine Lösung erarbeitet haben. Verlauf Bereits kurz vor 12 Uhr springt unser Monitoring an und meldet sämtliche Services im Umfeld von KreditSmart und dem Vorgangsmanagement als nicht erreichbar. Das ist nicht nur unüblich, sondern auch schwer vorstellbar.

Erfahrungen mit GitHub Pull Requests
github

Erfahrungen mit GitHub Pull Requests

Unser Team besteht aktuell aus 9 Entwicklern. Einige davon arbeiten dauerhaft im Home Office, aber auch die restlichen nehmen sich regelmäßig die Freiheit, von zu Hause zu arbeiten. Code Reviews wurden immer weniger aufgrund der verteilten Arbeit und der steigenden Breite an Arbeitsthemen. Um sowohl die Code Qualität wieder etwas zu verbessern als auch mehr Wissensaustausch in fachlichen und technischen Themen zu fördern, haben wir uns entschieden vermehrt auf GitHub Pull-Requests (PR) zu setzen.

Post Mortem zum KreditSmart Incident vom 07.02.2018
post-mortem

Post Mortem zum KreditSmart Incident vom 07.02.2018

Am 07.02.2018 war KreditSmart für viele Vermittler nur eingeschränkt benutzbar. Anfragen waren sporadisch sehr langsam oder funktionierten gar nicht. Unser Team bei EUROPACE erhielt entsprechende Hinweise durch Zendesk. Insgesamt dauerte der Incident ca. 4 Stunden, bis KreditSmart wieder wie gewohnt funktionierte. Wie kam es dazu und was werden wir zukünftig tun, um solche Unannehmlichkeiten für unsere Nutzer zu vermeiden? Vermehrte Hinweise auf Probleme Am Vormittag um ca. 11 Uhr bemerkten einige unserer Mitarbeiter und unsere Nutzer, dass KreditSmart langsamer als gewohnt arbeitete.

sociocracy in an agile world - our talk at the International Sociocracy Online Conference - May 1st
soziokratie

sociocracy in an agile world - our talk at the International Sociocracy Online Conference - May 1st

Michael Geiß and me are talking about sociocracy in an agile world at the International Sociocracy Online Conference. We’ll talk about how we formed a cross-functional unit out of 3 teams. Instead of autocracy or anarchy we use sociocracy to foster alignment and autonomy, while taking our long time agile software development practices into account. Besides our talk there are at lot of other interesting talks, like What does S3 bring to Sociocracy?

  • leif
    leif
Die Kreise mit Leben füllen - Nominierung und Driver Mapping
soziokratie

Die Kreise mit Leben füllen - Nominierung und Driver Mapping

Unsere initialen Erfahrungen beim Einführen von Soziakratie führten dazu, dass in jedem Kreis ein Circle Coordinator (CC) gewählt wurde und abschließend der General Circle entstand. Dieser bekam den zuvor definierten Auftrag die Domänen und Treiber für unsere Kreisorganisation zu definieren bzw. dies in die Unterkreise mitzugeben. Im Folgenden möchte ich auf den Ablauf und auf unsere Erfahrungen mit diesen beiden wichtigen Schritten zu unserer Selbstorganisation eingehen. Wir nominieren die Circle Coordinators Bottom-Up Der Circle Coordinator ist für die Organisation und den operationalen Betrieb eines Kreises verantwortlich.

So praktisch ist Slack!
pku

So praktisch ist Slack!

Im Vergleich zur Nutzung von Email für die interne Kommunikation hat Slack einige wesentliche Vorteile. Slack ermöglicht eine offene und transparente Kommunikation Statt über große Verteilerlisten alle möglicherweise Interessierten anzuschreiben, oder seine Informationen nur mit wenigen vermeintlich relevanten zu teilen, kann sich in Slack jeder proaktiv Informationen holen und sich einbringen. Pull statt Push. Das Email-Kommunikationsmuster sieht vor zu antworten. Zumindest denken wir das alle. Also fleissig antworten, oben, unten, im Text, und wenn wir offline sind, darf natürlich die out-of-office Antwort nicht fehlen.

  • leif
    leif
Selbstorganisation - Do’s and Don’ts
selbstorganisation

Selbstorganisation - Do’s and Don’ts

Die Privatkredit Unit (PKU) wurde Mitte 2015 aus drei Bereichen gegründet und nutzt seitdem Kreise und Konsent. Anfang 2017 haben wir begonnen uns in Soziokratie (und S3) einzuarbeiten und sind dabei unsere Organisation darauf umzustellen. Bei der Selbstorganisation sowohl im Kontext der PKU als auch außerhalb haben wir unterschiedliche Verhalten und Probleme wahrgenommen und Erfahrungen gesammelt. Einige dieser wollen wir hier nochmals kurz verdeutlichen und zusammenfassen, um die anschließenden Empfehlungen besser nachvollziehen zu können.

  • leif
    leif
Soziokratie zur Stärkung der Selbstorganisation und Autonomie - ein Erfahrungsbericht
soziokratie

Soziokratie zur Stärkung der Selbstorganisation und Autonomie - ein Erfahrungsbericht

Unser Ziel ist es, eine funktionierende Selbstorganisation im Team zu etablieren. Vor kurzem haben wir unsere Organisationform hinterfragt und mittels der Soziokratie unserem Ziel entsprechend angepasst. Die dabei gemachten Erfahrungen, möchte ich an dieser Stelle gerne teilen. Vor etwas 2 Jahren haben wir eine vollfunktionale Unit gegründet, die sich dem Thema Privatkredit widmet und vom Vertrieb, über die Produktentwicklung bis zum eigenem Betrieb reicht. Dazu haben wir Kollegen aus 2 agile Entwicklungsteams zusammengebracht und das Key Accounting integriert.

Contract Testing in Practice
contract-test

Contract Testing in Practice

Mit dem Einsatz von Micro Services gewinnt die Kommunikation über Schnittstellen an Bedeutung. In den letzten Jahren hat sich dabei der Einsatz von lose gekoppelten Technologien gegenüber binär gekoppelten Technologien durchgesetzt. Es stellt sich jedoch die Frage, wie die Kompatibilität der Schnittstellen getestet und sichergestellt werden kann. Für das Testen von lose gekoppelten Schnittstellen wurden folgende Ziele ausgerufen: Unabhängige Entwicklung von Client und Server Client und Server sollen sich unabhängig voneinander entwickeln können, solange die Änderungen weiterhin kompatibel sind, d.

pku

Protip zur Verwaltung mehrerer IDEA Fenster

Bei der täglichen Arbeit sind schnell mal mehrere Projekte und somit mehrere IntelliJ IDEA Fenster geöffnet. Beim Wechsel zwischen den einzelnen Fenstern wird dann jeweils der Titel bestehend aus Dateiname, Projektname und Projektpfad angezeigt: MyClass.java - myPro...deaProject/arbeit/myProject. Durch dessen Länge ist der Titel zudem noch gekürzt. Wird jedes Projekt auf einem separaten Desktop platziert, so wird hier der gleiche schwer zu lesende Titel dargestellt. Dies erschwert uns als Entwickler das Auffinden eines konkreten Fensters sehr.

docker

Blue/Green Deployment with Docker InfraKit

We’re a big fan of everything related to continuous deployment. There’s one aspect to tackle when continuously delivering new releases to our clients: we don’t want their connections to break during a deployment, because they might just be in the process of editing a form - with their customers sitting right beside them. Instead of the increased risk to have an unavailable backend, we want our clients to not even notice any change.

Create Your Own Twitter Follow Button
pku

Create Your Own Twitter Follow Button

If you want to embed a Twitter Follow Button in your website you can use their Generator. It has limited configuration options. To style it your way you just need to know that a follow me is triggered by calling the link <a href="https://twitter.com/intent/follow?screen_name=leifhanack">Follow me</a> where screen_name is the twitter account name. Either with or without leading @. I like this solutions because it is plain and simple. No need to include their javascript.

  • leif
    leif
Verteilte Verantwortung mittels soziokratischen Mitteln wahrnehmen
empowerment

Verteilte Verantwortung mittels soziokratischen Mitteln wahrnehmen

Warum Ich bin Führungskraft und war Head Architekt in einem unser agilen Entwicklungsteams. Der Gedanke, dass eine Person fest die Rolle Head Architekt inne hat ist meiner Vorstellung nach nicht mehr zeitgemäß. Laut unserer damaligen Definition sollte sie hauptsächlich die technische und fachliche Konsistenz der Anwendungsarchitektur und die Einhaltung von Qualitätsstandards sicherstellen sowie technische Ideen und Innovationen steuern. Zusätzlich war sie für den teamübergreifenden Austausch verantwortlich. Um diesen Anforderungen gerecht zu werden, entschied ich mich schon früh die Verantwortung mit dem Team zu teilen.

  • leif
    leif
ansible

Continuous Deployment with Gradle and Docker - Production Deploy

This is the final part of the article series about our continuous deployment pipeline. The previous articles showed you how we build and publish our Spring Boot based application, perform AngularJS end-to-end tests with Protractor, and how we perform contract tests to external services as consumer and provider as well. What’s missing are the description of how we package our application in Docker images, and how we distribute and deploy them to our production servers.

continuous-deployment

Continuous Deployment with Gradle and Docker - Contract Tests

In part four of our series about our continuous deployment pipeline you’ll learn about how we perform contract tests to ensure our service stays compatible with other service producers and our consumers as well. Please read the introductury post to learn about the other articles and the overall context of our deployment pipeline. This article contains both an introduction to contract testing, and our individual implementation of contract testers. If you’re new to the contract testing concept, just read on.

angularjs

Continuous Deployment with Gradle and Docker – Part 3

This is the third part in our series about our deployment of a JVM and AngularJS based application using Gradle as build tool and Docker as deployment vehicle. You’ll find the overview on all posts in the introductury post. As seen in the overview, our next step in the deployment pipeline performs so called e2e tests. The common Gradle project setup has already been described in part 2, so we can start with the Gradle script for the e2e test submodule.

angularjs

Continuous Deployment with Gradle and Docker - Part 2

After a quite long holiday break we now continue our series about the Continuous Deployment Pipeline with Gradle and Docker. This post is about the first step where our build chain creates the Spring Boot packages and publishes them to our Nexus repository manager. As shown in the high-level overview below, it is only a quite small part of the complete pipeline: Gradle and Spring Boot provide you a very convenient build and plugin system and work out of the box for standard builds.

angularjs

How to open async calls in a new tab instead of new window within an AngularJS app

I recently wanted to generate a PDF on users demand and show it in a new browser tab. Sounds trivial, at first not for me 🙂 I tried it with different „solutions“ and on my way my google search result got better and better. With „open window new tab without popup blocker async“ I finally found in this thread a nice and easy solution. The trick is to remember the reference to the new window and change the location of that window when your asynchron call completes.

  • leif
    leif
alias

managing multiple ssh keys

Recently I wanted to connect to some remote server using different ssh keys. With the right ~/.ssh/config file this is easy and comfortable. Easy IdentityFile ~/.ssh/%h/%r/id_rsa IdentityFile ~/.ssh/%h/id_rsa IdentityFile ~/.ssh/id_rsa %h and %r are placeholder for host and remote-user. ssh foo@bar will first check if ~/.ssh/bar/foo/id_rsa exists, next ~/.ssh/bar/id_rsa and finally ~/.ssh/id_rsa. Comfortable Host github HostName 123.45.678.90 User myuser IdentityFile ~/.ssh/123.45.678.90/id_rsa Instead of ssh myuser@123.45.678.90 the above config allows you to simply type

  • leif
    leif
angularjs

A Continuous Deployment Pipeline with Gradle and Docker

This series of posts will show you some aspects of our continuous deployment pipeline for one of our products. It is built, tested and deployed to our servers by using Gradle, while the application itself runs inside Docker containers. We want to show you how we use Gradle to implement a complete pipeline with minimal dependency on command line tools. We’ll also describe how to perform rollouts to production without the need for shell scripts or even remote shell access, by using the Docker remote API.

build-tools

Running Multiple Local Tomcats with Cargo and Gradle

We are currently using Cargo in combination with Gradle to implement consumer based tests for one of our projects. In order to do so, we created a Gradle script to deploy a service web app into a Tomcat container via Cargo and pass its URL to our consumer test suite. As long as we run the build script locally, everything works fine. But we noticed that it failed every once in a while when running on certain build agents in our TeamCity build pipeline.

docker

How to make Puppet and Facter work on Docker enabled hosts

Docker provides a lightweight virtual environment by using Linux containers (LXC). We are establishing Docker in one of our projects to implement continuous delivery. For host management we use Puppet, which itself relies on some facts provided by their tool Facter. Our Puppet modules make use of the ipaddress fact, determined by a built-in Facter script. We regard the ipaddress as the public IP address of the host. As described at gesellix.

apache

Apache RewriteRule - Rewriting URLs With Already Encoded QueryStrings

Recently we renamed a URL which was publically available. The system uses Apache httpd, so it was quiet easy to create a RewriteRule: RewriteRule ^/oldname/(.*) /newname/$1 [R,L] Unfortunately that didn’t work as expected. A URL like myserver/oldname?myprop=name with spaces will be encoded to myserver/oldname?myprop=name%20with%20spaces. With the above RewriteRule the rewritten URL will be myserver/oldname?myprop=name%2520with%2520spaces. It got encoded two times!. To fix this, you need the right keywords and Google. Searching for mod_rewrite url encode revealed that adding the NE flag (for No Encoding) does the trick:

  • leif
    leif
angularjs

AngularJS 1.2 update hints

As you might have noticed, AngularJS 1.2.2 1.2.3 has been released lately, without dedicated announcement. Our update from an AngularJS 1.2-rc2 has been quite smooth, only two hints might be noteable in addition to the official migration guide. With the current version the AngularJS team has fixed some issues regarding the isolate scope as described in the changelog for the 1.2.0 release or at the relevant GitHub issues #1924 and #2500.

angularjs

Passing Functions to AngularJS Directives

I recently built a custom directive that needed to call a function in its parent scope and pass some interal variables back as arguments. To be more specific: an editable label – a simple text that turns into an input field when it’s clicked and turns back into plain text, when the focus leaves the input field. On top of that, I needed it to invoke a callback function, if – and only if – the value of the input field has actually been changed.

angularjs

Ordered Initialization of an AngularJS Application with Asynchronous Data Using Promises

AngularJS helps with loading your app through dependency injection based on ordered class instantiation. Nevertheless, you sometimes need to know whether any pending request or function call has been finished in order to initialize your controllers, $scope or services. This article describes our solution to split the application lifecycle into several phases, namely „instantiation“, „initialization“ and „running“. You can find the downloadable code at GitHub, a working demo is available at jsfiddle.

classnotfoundexception

using a nested model for your custom gradle task or plugin

You probably know about using Annotation Types for your custom Gradle plugin input values: class MyTask extends DefaultTask { @Input String aSimpleProperty @InputFile File anInputFile @Input @Optional String[] optionalProperty @OutputFile File anOutputFile @TaskAction def performTask() { // … } } Using complex task input When using a more complex input model, you can try something like this: class TaskConfiguration { String aSimpleProperty File anInputFile String[] optionalProperty } class MyTask extends DefaultTask { @Input TaskConfiguration myConfiguration @OutputFile File anOutputFile @TaskAction def performTask() { // … } } After running that task Gradle will try to serialize your TaskConfiguration, but will fail due to the missing Serializable interface declaration.

angularjs

How to cause IE 8 to redraw pseudo elements on class change

Yesterday I spent the entire day trying to narrow down a nasty CSS bug that only surfaced in Internet Explorer 8. Everyones favourite browser didn’t redraw a pseudo element created via :before when its style got changed by adding or removing a class via JavaScript. It was a custom checkbox element with a JavaScript click handler that simply toggled a class on every click. Getting to the bottom of it Here is a jsFiddle with a trimmed down version of said checkbox.

angular-scenario

An AngularJS Test Pyramid

As a team with a strong taste for automated testing we focused from the beginning on how to test our Angular app. In this post we want to describe our different types of tests and how they form a Test Pyramid. Level 4: Selenium Tests. Level 3: E2E (Scenario) Tests. Level 2: Directive Tests. Level 1: Unit Tests. For each kind of test, we will explain the following aspects: Purpose: What’s the idea behind this type of tests.

  • andihypo
angular-scenario

Introduction to an Angular Scenario DSL for Remote Node Backend Configuration

This post was written by Andreas Marek (@andimarek) and Daniel Bechler (@SQiShER). In this article we’d like to introduce you to a library called node-config-ngscenario-dsl, which is our solution for advanced E2E testing with AngularJS and Node. This article may be interesting for you, if you are looking for a way to configure your Node backend right from your E2E tests. We are currently developing our first project with AngularJS. It’s a new module in a larger application and consists of an AngularJS frontend and a Java backend.

  • andihypo
couchdb

Lokaler NPM-Registry Mirror mit regelmäßiger Synchronisation

Im Rahmen der Entwicklung eines unserer Frontends verwenden wir node.js. Node.js erlaubt Paketmanagement mit Hilfe des Node Package Managers (NPM), der ähnlich wie Maven eine global verfügbare Registry verwendet. Einrichten einer lokalen NPM-Registry Die NPM-Registry wird auf einem nicht immer stabil erreichbarem Host bereitgestellt. Um die Latenz beim Abruf der aktuellen Paketinformationen zu vermeiden und um Downtimes möglichst gut kompensieren zu können, kann man einen Mirror der NPM-Registry im lokalen Netz bereitstellen.

dumbster

Verwendung eines SMTP-Servers in Unit-Tests

Im Rahmen von Unit-Tests möchte man die Anbindung externer Systeme vermeiden um Stabilität der Tests zu gewährleisten. Leider hat man genau dann Probleme, wenn man gerade diese Anbindung oder die Integration mit externen Systemen testen möchte. Für solche Unit-Test mit integrativem Charakter kann man Mocks verwenden, die recht spezifisch für den jeweiligen Anwendungsfall selbst implementiert werden. Wenn es allerdings an die Implementierung eines Mail-Server Mocks geht, ist der Aufwand der Eigenimplementierung oft nicht mehr gerechtfertigt.

pku

Ready ... Steady ... Sprint!

Bevor das Scrum Team mit seiner Arbeit beginnt, steht die Analyse des umzusetzenden Themas an. Für diese Analyse sollte sich das Team aus Product Owner und Business Analyst eigene Qualitätsansprüche festlegen, um vollständige Stories zu erhalten. Ein Erfahrungsbericht. Ich habe gerade einen Tag Scrum Zeremonien hinter mir. Als Product Owner ist die Estimation Session im Planning immer der anstrengendste Teil des Tages – und der kommt direkt nach dem Mittagessen. Fünfzehn User Stories habe ich gemeinsam mit dem Business Analysten dem Team vorgestellt, drei davon „durfte“ ich gleich wieder einpacken.

  • smrosek
certificate

Java SSL-Konfiguration mit Keystores

Hier wird das Erstellen eines lokalen Keystores mit self signed certificate für einen Tomcat und Java-Clients beschrieben. Die Inhalte sind größtenteils aus einer externen Quelle übernommen und darüber hinaus durch weitere Details ergänzt. Im Rahmen dieses Artikels werden diverse Dateien erzeugt, die für die Erzeugung eines Java-Keystores mit selbst-signierten Zertifikaten verwendet werden. Mit einem durch eine offizielle Certificate Authority (CA) signierten Zertifikat sind einige Schritte nicht notwendig. Erstellen des lokalen Keystores für den Tomcat