Andreas Bruns

Softwareentwicklung für Oldenburg und Bremen

14. Mai 2017
nach bruno
Kommentare deaktiviert für Offenes WLAN in Harpstedt mit den Freifunkern

Offenes WLAN in Harpstedt mit den Freifunkern

Am Donnerstag fand eine interessante Veranstaltung zu dem Thema „Offenes WLAN und Freifunk“ im Harpstedter Hotel „Zur Wasserburg“ statt. Der Bremer-Freifunker Simon Stößer stellte nach Einladung von den Jusos (vertreten durch Daniel Helms) die Freifunker-Community und deren Konzepte vor. In der Kreiszeitung ist dazu ein aufschlussreicher Artikel erschienen: „Freifunk Bremen“ strebt nicht nach Profit

Auf der Webseite der Freifunker und Wikipedia erfährt man die Hintergründe und die Ziele/Visionen der Freifunker:

  • Aufklärung und Sensibilisierung zum Thema Kommunikations- und Informationsfreiheit
  • Verminderung der digitalen Spaltung
  • Ungehinderte Verbreitung von Wissen und Ressourcen
  • Menschen dazu befähigen, eigene Netze aufzubauen und zu betreiben
  • Vorhandene und neue Sozialstrukturen fördern und vernetzen

Freifunk verbindet! from Philipp Seefeldt on Vimeo.

Weiterlesen →

29. April 2017
nach bruno
Kommentare deaktiviert für GitLab – AllInOne-Werkzeug für Clean Code Developer

GitLab – AllInOne-Werkzeug für Clean Code Developer

Die Initiative Clean Code Developer (CCD) möchte mit Bewusstheit und Prinzipien die Professionalität im Software-Entwicklungsprozess stärken. Die Entwicklung soll durch den Einsatz der passenden Werkzeuge unterstützt werden:

In einem vorherigen Artikel habe ich SonarQube vorgestellt, mit dem wir Code Coverage Analyse und Metriken der statischen Codeanalyse abgedeckt haben. Für die anderen Werkzeuge können wir die passende Software installieren oder entsprechende Internet-Services nutzen: Git (Datei-Versionskontrolle), Redmine oder Trello (Issue-Tracking), Travis-CI oder Jenkins (Continuous-Integration, Continuous-Delivery)

Der bei Entwicklern beliebte Internetdienst GitHub vereinigt schon viele der Werkzeuge. Das zur Zeit noch weniger bekannte GitLab bietet uns sogar noch einen größeren Funktionsumfang, der die meisten Werkzeuge des Clean Code Developers umfasst. Wer seine Projektdaten keinem Cloud-Service anvertrauen kann oder möchte, der kann sich GitLab selber installieren und behält die volle Kontrolle über seine Daten.

GitLab Projekte

GitLab Projekte

Weiterlesen →

28. März 2017
nach bruno
Kommentare deaktiviert für Sicherheit von Webanwendungen und der Saftladen

Sicherheit von Webanwendungen und der Saftladen

Als Betreiber einer Webseite/Webanwendung sollte man sich bewusst sein, dass ein System im Internet ständigen Bedrohungen ausgesetzt ist. Statische Webseiten bieten dabei weniger Bedrohungspotential als dynamische Webanwendungen mit Kundendaten, sodass die Auswirkungen von unkritisch bis unternehmensbedrohlich reichen können:

  • Manipulation/Abschaltung der Webseite
  • unbewusste Verbreitung von Schadcode (Würmern, Viren) bei den Besuchern
  • Übernahme des Servers in ein Botnet
  • Webserver als Einfallstor in das Unternehmensnetzwerk
  • Entwendung von Kundendaten (siehe Datenpanne/Datenleak)

Wenn man seiner Verantwortung für seine Webseite/Webanwendung nachgehen und sein System absichern möchte, dann stellt sich die Frage – wie? Einen guten Einstieg bieten die folgenden Links:

Wer auch mal aktiv in die Rolle eines Angreifers schlüpfen möchte, der kann sein gewonnenes Wissen als Hacker anhand des Webshops OWASP-Saftladen ausprobieren. Weiterlesen →

26. November 2016
nach bruno
Kommentare deaktiviert für SonarQube für die Analyse des Programmcodes

SonarQube für die Analyse des Programmcodes

Während der Softwareentwicklung nutzen wir diverse Methoden im Team, um die eigenen Qualitätsanforderungen am Programmcode zu erfüllen, wie Code Reviews, Pair Programming oder Mob Programming. Ergänzend zu den Maßnahmen helfen Werkzeuge für automatisierte statische Code-Analysen. Im Java-Bereich werden PMD (Bad Practices erkennen), Checkstyle (Einhalt von Coding-Styles), FindBugs (Bugs finden) und Emma/JaCoCo (Testabdeckung) gerne genutzt. Das Konfigurieren und die Integration der Werkzeuge in die Entwicklungsumgebung oder der Build-Pipeline ist jedoch zeitaufwendig und nicht trivial.

Das freie verfügbare SonarQube vereinigt die genannten und auch viele andere Werkzeuge unter einer einheitlichen Oberfläche und stellt die Ergebnisse als Webanwendung bequem zur Verfügung. Wer also schnell mal ein Einblick in sein Projekt bezüglich folgender Punkte benötigt, der kann sich mit der angehängten SonarQube-Installationsanleitung einfach seinen eigenen SonarQube-Server aufsetzen.

  • Projekt-Übersicht mit dem zeitlichem Verlauf
  • Statistiken zum Projekt: Line of Codes, Tests, Testabdeckung,
  • Verletzungen von Programmierrichtlinien (Coding-Styles)
  • Erkennung von Bad Practices und Schwachstellen im Design
  • Erkennung von potentiellen Bugs, doppelten und ungenutzten Programmcode
  • Erkennung von Sicherheitslücken, z.B. mit Find Security Bugs
  • bereits angehäufte technische Schulden

SonarQube - Projekt-Übersicht

SonarQube – Projekt-Übersicht

Weiterlesen →

27. Oktober 2016
nach bruno
Kommentare deaktiviert für Virtualisierung für DevOps mit Docker

Virtualisierung für DevOps mit Docker

Ein Trend der letzten Jahre im Bereich der Softwareentwicklung ist das Zusammenführen von Entwicklung (Development) und Betrieb (Operator), der mit dem Begriff DevOps beschrieben wird. Passenderweise entstehen dazu auch weitere neue Konzepte und Werkzeuge, die mich als Entwickler (und jetzt auch DevOp) unterstützen.

Ein wichtiges Konzept ist dabei Infrastructure as Code, dass die Server-Infrastruktur als Programmcode revisioniert abgelegt wird und jederzeit automatisiert aufgesetzt werden kann. Die Virtualisierungssoftware Docker nutzt dieses Konzept und ermöglicht es Entwicklern, Server-Infrastruktur besonders einfach auf unterschiedlichsten Umgebungen bereitzustellen und zu betreiben.

Zunächst einmal ein kurzer Überblick zu den Vorteilen von Virtualisierung mit Docker und dann folgt ein kurzes Beispiel.

  • einfach portierbare Docker-Container laufen auf unterschiedlichsten Umgebungen
  • lokale Entwicklungsumgebung funktioniert identisch wie die produktive Umgebung
  • Docker-Container lassen sich einfach ausrollen
  • Anwendungen laufen in einer Docker-Sandbox isoliert
  • Unterstützung vieler Cloud-Provider (Amazon ECS, Google Container Engine, MS Azure)
  • aktuelle Docker-Images der Software-Hersteller: Ubuntu, WordPress, Java, MySQL, PostreSQL
  • freie Software, umfangreiche Dokumentation und Werkzeuge

Weiterlesen →

30. September 2016
nach bruno
Kommentare deaktiviert für Datenbank-Update zu PostgreSQL 9.6 + pgAdmin 4

Datenbank-Update zu PostgreSQL 9.6 + pgAdmin 4

Am Donnerstag ist die Version 9.6 des populären PostgreSQL-Datenbanksystems erschienen. Das passt mir gerade ganz gut, weil ich mein bestehendes PostgreSQL wegen noch nicht unterstützten JSON-Funktionen von der Version 9.4 auf 9.5 migrieren will.

Wer gerade nicht die neusten PostgreSQL-Funktionen nutzt, könnte trotzdem von einem Update profitieren. Gleichzeitig ist nämlich auch das Admin-Werkzeug pgAdmin in der Version 4 mit einem ganz neuen Design erschienen.

pgAdmin 4 - Dashboard

pgAdmin 4 – Dashboard

Falls man die Daten seiner alten Datenbank in die neue Datenbank überführen möchte, dann muss man die auszuführenden Schritte etwas planen. Bei mir sah das so aus: Weiterlesen →

22. August 2016
nach bruno
Kommentare deaktiviert für Phonest – eine Alternative für das Fairphone?

Phonest – eine Alternative für das Fairphone?

Über das Handy Fairphone, das unter fairen nachhaltigen Bedingungen hergestellt werden soll, wurde schon des Öfteren in den Medien berichtet (z.B. bei Arte: Fairphone – das nachhaltige Smartphone). In der Wikipedia heißt es dazu:

Die Fairphone B.V. ist eine Gesellschaft mit beschränkter Haftung nach niederländischem Recht mit eingetragenem Sitz in Amsterdam, die unter der Leitung von Bas van Abel zwei Mobiltelefone entwickelt hat. Diese sollen unter möglichst fairen Bedingungen hergestellt werden. Weiterhin werden einige der in den Fairphones verbauten Metalle bzw. deren Rohstoffe, aus Minen bezogen, die nicht in die Finanzierung von Bürgerkriegen verwickelt sind (z. B. Zinn, Tantal, Wolfram oder Gold).

Jetzt ist ein Werbevideo für das Phonest erschienen, das mit 100% transparenter Herstellung wirbt. Ist das Phonest vielleicht eine Alternative für das Fairphone?


Weiterlesen →

27. Juli 2016
nach bruno
Kommentare deaktiviert für SSH-Zugriff auf Server mit Public-Key-Authentifizierung

SSH-Zugriff auf Server mit Public-Key-Authentifizierung

Wenn man erweiterten Zugriff auf Server bekommt und dadurch Befehle in einem Terminal ausführen kann, dann wird das meistens über Secure Shell (SSH) realisiert. Dabei erfolgt standardmäßig die Authentifizierung mit Benutzername und Passwort. Das ist zwar eine einfache Methode, allerdings geht es bequemer und sicherer mit Public-Key-Authentifizierung.

Das bedeutet dann konkret, dass wir folgenden Befehl nicht mehr eingeben brauchen:

ssh mein-benutzer@11.22.33.44 
mein-benutzer@11.22.33.44's password:mein-passwort 

Und wir stattdessen nur mit der IP-Adresse (ohne Benutzername und Passwort) auskommen:

ssh 11.22.33.44 

Diese Methode ist nicht nur bequemer und sicherer (Why is SSH key authentication better than password authentication?), sondern wird auch für die automatisierte Ausführung von Skripten benötigt (z.B. für Continuous Delivery).

In meinem Beipiel verwende ich für jeden Server ein individuelles Schlüsselpaar und passe die SSH-Konfiguration so an, dass die passende Schlüssel-Datei ausgewählt wird: Weiterlesen →

29. Juni 2016
nach bruno
Kommentare deaktiviert für Leichtgewichtige Web-Apps mit dem Play-Framework

Leichtgewichtige Web-Apps mit dem Play-Framework

James Gosling gilt als Urvater von Java, eine der am weitesten verbreiteten Programmiersprachen (TIOBE-Index). Martin Odersky veröffentlicht 2004 die auf der Java-Plattform beruhende Programmiersprache Scala, die funktionale und objektorientierte Programmierung mit statischer Typisierung vereint. Wenn Martin Odersky ein Unternehmen gründet und sich von James Gosling beraten lässt, dann sind die Erwartungen hoch.

Das 2011 gegründete Unternehmen Typesafe entwickelt moderne Frameworks und Werkzeuge im Scala-Umfeld, wie Akka (Event-Driven Middleware), Play Framework (Web), sbt (Scala Build Tool). Inzwischen hat sich das Unternehmen zu LightBend umbenannt, entwickelt neue Produkte (z.B. Lagom Reactive Microservices Framework) und treibt die Standardisierung von Reactive Streams voran.

In einem Ecommerce-Projekt konnte ich das Play Framework in der Version 2.5 einsetzen, das sehr viel Spaß machte und leider manchmal nervte: Weiterlesen →

27. Mai 2016
nach bruno
Kommentare deaktiviert für Passwörter sicher in Datenbank ablegen

Passwörter sicher in Datenbank ablegen

Bei vielen Systemen ist eine Anmeldung des Anwenders mit Benutzername und Passwort nötig. Als Anwender kann man den Anmeldemechanismus der Systeme leider nicht überprüfen und muss sich auf die Sorgfalt der Entwickler und Betreiber verlassen. Zu viel Vertrauen sollte man dabei selbst großen Anbietern von Webseiten nicht entgegenbringen, wie die Meldungen bei Heise zu LinkedIn (300 Millionen Mitglieder), MySpace und Tumblr verdeutlichen (z.B. Passwort-Leck hat desaströse Ausmaße).

In einem vorherigen Artikel habe ich die wichtigsten Regeln zusammengefasst, beispielsweise:

  • ausreichend lange Passwörter mit Groß-, Kleinbuchstaben, Sonderzeichen und Ziffern
  • Passwort niemals mehrfach verwenden

Die Regeln lassen sich einigermaßen leicht befolgen. Falls ein Webseiten-Betreiber die Sicherheit der Passwörter nicht so ernst nimmt, dann ist wenigstens für den Anwender nur diese Webseite betroffen und niemand hat Zugriff auf die Daten anderer Webseiten des Anwenders.

Als Entwickler und Betreiber stellt sich natürlich die Frage: „Wie werden Passwörter sicher in einer Datenbank abgelegt?“ Es gibt einfache Regeln und komplizierte Implementierungsdetails:

  1. Passwort niemals im Klartext speichern
  2. keine eigenen Verfahren entwickeln beim Umgang mit Passwörtern
  3. Passwort wird als Hash gespeichert
  4. Hash eines Passworts wird mit Salz (Salt) gebildet
  5. Passwort wird mit langsamen Hash-Verfahren erzeugt
  6. einfache Implementierung des Hash-Verfahrens nutzen

Weiterlesen →