Python-Skripte als systemd-user-service

11. Mar 2019

Development | Ops

Wer kennt das nicht, da hat man ein Python-Skript geschrieben, zum Beispiel einen kleinen Webserver in Flask, oder irgendein Test-Protokoll-Server mit Twisted. Diesen will man nun schnell auf einem Server oder Raspberry Pi starten, und ist durch unseren Post Systemctl Services unter Ubuntu auf den systemd-Geschmack gekommen. Das Python-Skript Folgendes schreibt man an den Anfang seines Python-Skripts. Wir nennen es hier jetzt mal main.py. #!/bin/sh -e "exec" "`dirname $0`/.env/bin/python" "$0" "$@" def start_server(): # .

#Ubuntu #Service #systemctl #Python #systemd #user #venv #virtualenv

¿Hablas FizzBuzz?

29. Jan 2019

Code Dojo

Es gibt unzählige - mehr oder eher weniger informative - Artikel zum Thema “Wie finde ich gute Softwareentwickler?". Sehr häufig kommt der Vorschlag, die Bewerberin eine Programmieraufgabe lösen zu lassen. Das Problem bei der Sache ist: Gute Entwicklerinnen lösen die Aufgabe potentiell mit Bravour, sind aber genervt und suchen sich vielleicht einen Arbeitgeber, der ihnen nicht die Zeit raubt. Im Netz kursiert seit einiger Zeit der “FizzBuzz-Test” - der ist kurz, anders und irgendwie witzig.

#Bewerbungsgespräche #Kotlin #Assessment

Dependency Injection mit Kotlin und Spring

5. Dec 2018

Knowledge Base | Development

Das Spring Framework ermöglicht drei Arten von Dependency Injection: Field Injection Setter Injection Constructor Injection Als Guter Entwickler™ verwendet ihr natürlich Constructor Injection und keine Field Injection. Doch manchmal gibt es Situationen, in denen das nicht passt. In dem Fall steht mit Setter Injection eine gute Alternative zur Verfügung - dafür ein Beispiel mit Kotlin zu finden ist aber gar nicht so einfach. Field Injection Field Injection ist erstmal sehr einfach und wird deswegen - leider - häufig in der Lehre verwendet.

#Dependency-Injection #Kotlin #Spring #Setter

Docker Registry mit Google Open Id

4. Dec 2018

DevOps

Die Docker Registry bietet seit Version 2 die Möglichkeit einen Open Id Provider für die Authentifizierung zu nutzen. Allerdings lässt sich die Registry nicht ohne weiteres an einen Open Id Provider anbinden, da man u.a. das Public Certificate des ausstellenden Open Id Providers in einem Ordner ablegen muss. Keycloak als Lösung Bis vor kurzem haben wir neben unserer Registry die in einem Kubernetes Cluster in der AWS läuft und die Daten in S3 ablegt zusätzlich einen Keycloak Server im Cluster betrieben, der seit Version 4 ein Feature anbietet, was es sehr einfach macht die Docker Registry anzubinden.

#DevOps #Docker #google #OpenID #Oauth

Kong - Das Api-Gateway

4. Dec 2018

Development | Architecture

Kong ist ein auf Nginx basierendes Api Gateway. Das besondere an Kong ist, neben der sehr schnellen Verarbeitungszeiten, dass man über Plugins problemlos und sehr einfach weitere Funktionalität hinzufügen kann. Zum Beispiel Open ID Connect oder Rate Limits per Request. Kong startet auf zwei unterschiedlichen Ports. Port 8001 ist für die Admin API reserviert und Port 8000 ist der Endpunkt für konsumierende Dienste und Clients. Service und Routen einrichten Nachdem wir Kong installiert und gestartet haben wollen wir eine einfache Route zu unserem User Microservice über die Admin API erstellen.

#Api-Gateway #Kong #Routing #Reverse Proxy #Proxy

Systemctl Services unter Ubuntu

4. Dec 2018

Development | Ops

Um ein Executeable als Service einzurichten, musst du unter /etc/systemd/system/ eine neue Datei erzeugen. Sinnvollerweise nennst du sie nach deinem Executable. Wollen wir zum Beispiel einen Nginx Webserver als Service einrichten, wäre der Name nginx.service. [Unit] Description=Nginx Webserver [Service] Type=simple ExecStart=/usr/bin/nginx [Install] WantedBy=multi-user.target Jetzt musst du deinen neuen Service nur noch aktivieren. sudo systemctl enable nginx.service Anschließend kannst du ihn starten. sudo systemctl start nginx.service

#Ubuntu #Service #Systemctl

Monads in Typescript

3. Dec 2018

Development | Best Practice

Beim Zugriff auf Objekte und Variablen gibt es immer wieder kleine Pitfalls. Manchmal ist das Objekt leer, wir lesen aber eine Property daraus und bekommen dann natürlich cannot read property 'x' of undefined. Einige dieser Pitfalls sind: Der Wert könnte oder könnte nicht existieren Der Wert könnte existieren, aber es gibt mehr als einen Um den Wert zu bekommen sind I/O Operationen notwendig Der Wert könnte eventuell in der Zukunft existieren Der Wert könnte einen Fehler produzieren Der Wert hängt von einem State ausserhalb ab … Ein Monad verhält sich wie ein Container der dieses Verhalten abstrahiert und uns die Möglichkeit gibt uns mehr auf das zu fokussieren was wir wirklich tun wollen: Mit den Werten arbeiten.

#Typescript #Monads #tsmonad #Either #Maybe

Was bedeutet "Softwareentwicklung im Kundenauftrag?"

14. Mar 2017

Einblick | Erfahrungsbericht

Immer wieder stelle ich fest, wie schwierig es ist Menschen in meinem Umfeld zu erklären, was wir bei den Ninjaneers eigentlich tun. Software zu programmieren ist schon für sich alleine genommen ein komplexes Thema - zumindest wenn man dabei versucht zu erklären, auf was man als guter Entwickler achten sollte. Wir entwickeln Software darüber hinaus ja nicht für uns selbst oder zum Spaß sondern für Dritte. Im Folgenden möchste ich dich einladen, einen Blick in unsere Welt zu werfen um der Frage nachzugehen: Was bedeutet “Softwareentwicklung im Kundenauftrag”?

#Software #Scrum #Produktentwicklung #Agil #Team #Gründer

Sicher bloggen mit Static Page Generatoren

25. Aug 2016

Knowledge Base

In den letzten Monaten liest man ständig von erfolgreichen Angriffen auf die Netze von Firmen. Viel zu häufig dringen die Angreifer dabei unter Ausnutzung von seit langem bekannten Lücken in Standard-Software ein. Ein beliebtes Ziel: Content Management System (CMS) wie Drupal, Typo3 oder WordPress. Doch das muss nicht sein! Der folgende Artikel beschäftigt sich vor allem mit WordPress. Das liegt nicht daran, dass die Software per se schlechter ist als der Rest!

#Injection #Penetration #Exploit #Hugo #CMS #WordPress #Vulnurability #Blog #Microservice #Container #Docker #Cloud

Abzocker, Teil 2

24. Aug 2016

Erfahrungsbericht

Der erste Monat ist noch nicht vorbei und schon flattert das zweite recht fragwürdige Angebot in’s Haus: Für schlappe 933,72 € darf man sich diesmal in die LORESI Datenbank eintragen lassen. Die gibt es wirklich. Wenn ihr Lust habt könnt ihr auf der Website ja mal nachschauen, wer auf die Geschichte reingefallen ist… Bei dem Anschreiben handelt es sich im Übrigen wie schon beim Brief der IGV um ein Angebot und keine Rechnung.

#Gründung #GmbH #Selbstständig #Abzocker