seeseekey.net - Invictus Deus Ex Machina

Mittlerweile gibt es unzählige sogenannte Social Icons für Dienste wie Facebook, GitHub oder Twitter. In vielen Fällen benötigt man ein solches Social Icon auf einer Webseite oder in einem Dokument. Natürlich kann man sich nun die entsprechenden Bilder bei den jeweiligen Anbietern, über die Presse- bzw. Markenportale beziehen. Bei mehreren Anbietern kann dies allerdings eine zeitintensive Tätigkeit sein.

Der Font Socicon in Aktion

Mit dem Font Socicon, welcher unter socicon.com bezogen werden kann, hat man alle diese Social Icons in einem Font zusammengefasst. Dieser kann direkt auf Webseiten eingebunden oder lokal installiert werden. Lizenziert ist der Font unter der SIL Open Font License 1.1.

Gogs ist ein Git-Service welcher eine ähnliche Funktionalität wie der bekannte Dienst GitHub zur Verfügung stellt. Standardmäßig läuft der Dienst auf dem Port 3000. Möchte man ihn über die normalen Ports für HTTP (80) bzw. HTTPS (443) erreichbar machen, kann man hierfür einen Reverse Proxy nutzen. Dafür eignen würde sich zum Beispiel Nginx, der im ersten Schritt auf dem Server installiert werden muss:

apt-get install nginx

Anschließend wird die Konfiguration angelegt:

nano /etc/nginx/sites-available/example

In diesem Fall befasst sich die Konfiguration mit der verschlüsselten Kommunikation per HTTPS und der Weiterleitung von unverschlüsselten Verbindung in Richtung der verschlüsselten Verbindung.

server {
        listen 80;
        listen [::]:80;

        server_name example.com;

        return 301 https://$host$request_uri$is_args$args;
}

server {
    listen 443;
    listen [::]:443 default_server;

    ssl on;
    ssl_certificate        /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key    /etc/letsencrypt/live/example.com/privkey.pem;

    server_name example.com;

    client_max_body_size 500m;

    location / {
        proxy_pass https://localhost:3000;
    }
}

Nachdem die Konfiguration für Nginx hinterlegt ist, wird die Standardkonfiguration entfernt und ein symbolischer Link für die neue Konfiguration erstellt. Anschließend wird Nginx neugestartet, damit die geänderte Konfiguration wirksam wird:

rm /etc/nginx/sites-enabled/default
ln -s /etc/nginx/sites-available/example /etc/nginx/sites-enabled/example
service nginx restart

Nach der Anpassung der Nginx-Konfiguration, muss die app.ini (sie befindet sich im gogs/custom/conf/ Ordner) von Gogs angepasst werden und dort die neue ROOT_URL ohne zusätzlichen Port angegeben werden. Anschließend kann auf Wunsch, per Firewall, der Port 3000 für Zugriffe von außen gesperrt werden.

Einführung in die uncomplicated firewall

Wer aus einer Webanwendung heraus etwas in die Zwischenablage kopieren möchte, der benötigte bis vor einiger Zeit dazu ein Schnipsel Flash. Mittlerweile lässt sich dies, ohne zusätzliche Plugins, in den meisten Browsern über eine entsprechende Web Api nutzen.

clipboardjs.com

Einfacher wird die Nutzung dieser Web Api mit der JavaScript-Bibliothek clipboard.js. Die Bibliothek welche sich seit September 2015 in der Entwicklung befindet, abstrahiert die Nutzung der entsprechenden Web Api. Damit wird es möglich, mit wenigen Zeilen, die Zwischenablage in einer Webanwendung zu nutzen. Der Quelltext der Bibliothek ist auf GitHub zu finden. Sie ist unter der MIT Lizenz lizenziert und damit freie Software.

Vor einiger Zeit schrieb ich einen Artikel in welchem ich beschrieb wie die Firmware des Raspberry Pi aktualisiert werden kann. Mittlerweile lässt sich das ganze noch einen Schritt einfacher bewerkstelligen. Im ersten Schritt muss rpi-update installiert werden:

sudo apt-get install rpi-update

Anschließend kann der Updater mittels:

sudo rpi-update

aufgerufen werden. Neben diesem Aufruf existieren eine Reihe weiterer Optionen mit denen sich der Aktualisierungsprozess noch besser steuern lässt. Im Normalfall werden diese allerdings nicht benötigt. Nach dem Backup der alten Firmware und vor dem eigentlichen Update erscheint in der aktuellen Version eine Sicherheitsabfrage:

#############################################################
WARNING: This update bumps to rpi-4.9.y linux tree
Be aware there could be compatibility issues with some drivers
Discussion here:
https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=167934
##############################################################
Would you like to proceed? (y/N)

Wenn man keine spezielle Hardware (der Beitrag im Forum behandelt eventuelle Probleme) betreibt, kann man das ganze mit einem Druck auf die y-Taste bestätigen. Anschließend wird das Firmware-Update durchgeführt. Dabei werden die Firmware, Kernel Module, das SDK, einige Bibliotheken wie z.B. die VideoCore und HardFP-Bibliotheken und weitere Komponenten aktualisiert. Wenn die Aktualisierung fehlerfrei durchlief, sollte der Raspberry Pi mittels:

sudo reboot

neugestartet werden. Das Projekt des Updaters kann auf GitHub gefunden werden. Der Updater ist unter der MIT Lizenz lizenziert und freie Software. Technisch handelt es sich bei dem rpi-update-Tool um ein Bash-Skript. Es befindet sich seit April 2012 in aktiver Entwicklung, so das man auch in Zukunft auf dieses Tool bauen kann.

Für ein kleines Projekt an dem ich zur Zeit arbeite war ich mal wieder auf der Suche nach einer sprintf Implementation für JavaScript. Und wieder wurde ich bei der gleichen Implementation – wenn auch erheblich weiterentwickelt – fündig. Seit 2007 arbeitet Alexandru Marasteanu an seiner Implementation der sprintf Funktion für JavaScript. Mit der Hilfe dieses Funktion wird so sprintf-like aus einem:

sprintf("%2$s %3$s a %1$s", "cracker", "Polly", "wants")

ein:

Polly wants a cracker

Der Quelltext ist auf GitHub zu finden. Die Implementation ist freie Software und unter der 3-Klausel-BSD-Lizenz lizenziert.

Manchmal ist man als Entwickler auf der Suche nach einem Stück Quellcode. Die Gründe dafür sind vielfältig und natürlich kann man für diesen Zweck die Suchfunktionen einzelner Portale wie GitHub und Co. nutzen um den gewünschten Quelltext zu finden.

searchcode in Aktion

Einfacher wird das ganze mittels searchcode.com, einer Quelltextsuchmaschine. Bei searchcode, werden nach eigenen Angaben, über sieben Millionen Projekte verschiedenster Plattformen durchsucht. Für den Gebrauch in Firmen, welche natürlich auch private Repositories betreiben, gibt es searchcode dabei auch als Lösung zum selberhosten. Der Quelltext von searchcode ist auf GitHub zu finden. Zu beachten ist hierbei, das es sich um keine freie Software handelt und man damit die Lizenzbedingungen bei der Eigennutzung des Servers genau lesen sollte.

Ein REST-API von Hand entwickelt, benötigt eine Dokumentation, ein entsprechenden Server und eventuell einige Clients als Referenz. Einfacher wird es mit einem Framework wie Swagger. Unter Zuhilfenahme der Beschreibungssprache YAML können mit Hilfe des Frameworks REST-APIs, Dokumentation, Server und Clients generiert werden.

Der Swagger Editor

Der Swagger Editor

Doch Swagger versteht sich nicht nur als Framework, sondern auch als Spezifikation. Begonnen wurde mit der Entwicklung bereits im 2010; die Swagger Specification trägt seit Anfang Januar 2012 offiziell den Namen OpenAPI Specification und beschreibt eine maschinenlesbare Interfacedefinitionen einer REST-API. Ähnliches wurde unter anderem schon mit WSDL und WADL versucht – alles Konzepte bzw. Beschreibungsprachen welche an ihren eigenen Limitationen gescheitert sind und wenn überhaupt nur noch sporadisch genutzt werden.

Betreut und weiterentwickelt wird die Spezifikation nun von der Open API Initiative, zu der namenhafte Firmen wie Google, PayPal, IBM, Atlassian und Microsoft gehören. Die Spezifikation als solche ist freie Software und auf GitHub zu finden. Sie ist unter der Apache Lizenz lizenziert. Aktuell ist die Spezifikation in der Version 2.0 veröffentlicht.

Auf der offiziellen Webseite von Swagger findet sich ein Editor, mit welchem APIs definiert werden können und anschließend exportiert werden können. Der Editor kann dabei Server unter anderem in den Sprachen bzw. für die Framworks Haskel, Jax-RS, Node.js, Python, Rails und PHP erzeugen. Bei den Clients ist die Auswahl noch größer. Diese können in C#, HTML, Dart, Go, Groovy, Java, Javascript, Objective C, Perl, PHP, Ruby, Scala, Swift und vielen weiteren Sprachen erzeugt werden.

Neben dem Editor kann für die Erzeugung von Clients auch der Swagger Codegen genutzt werden. Dabei handelt es sich um eine Java-Anwendung um die Clients lokal auf dem eigenen Rechner zu erzeugen. Der Editor und viele weitere Tools rund um Swagger sind ebenfalls auf GitHub zu finden. – auch diese sind freie Software, welche unter der Apache Lizenz stehen.

Das Shellskript ist fertig und wartet auf seinen Einsatz. Wer das eigene Skript vor dem Einsatz überprüfen möchte, sollte ShellCheck ausprobieren. Bei ShellCheck handelt es sich um ein Tool zur statischen Code-Analyse von Shell-Skripten. Neben allgemeinen Skriptfehlern, weißt ShellCheck dabei auch auf andere Probleme hin und schlägt Verbesserungen vor.

ShellCheck in Aktion

ShellCheck in Aktion

Neben der Webseite, welcher unter shellcheck.net zu finden ist, kann ShellCheck auch auf der Konsole ausprobiert werden. Das Tool ist unter der GPLv3 lizenziert und damit freie Software. Der Quelltext ist auf GitHub zu finden.

Wenn man eine Präsentation mit einem Office-Programm seiner Wahl erstellt, so führt das meist dazu das man sich die ersten Stunden Gedanken über das Design der Präsentation macht, anstatt sich um die Inhalte zu kümmern. Das war einer der Gründe, warum ich für Präsentationen nur noch Frameworks nutzte, welche im Browser laufen und ihren Fokus auf den Inhalt legen.

Eine Präsentation welche mittels Reveal realisiert wurde

Eine Präsentation welche mittels Reveal realisiert wurde

Eines dieser Frameworks ist reveal.js. Besonders schätze ich an reveal.js die Möglichkeit den eigentlichen Inhalt der Präsentation in Markdown-Textdateien auszulagern. So kann sich voll und ganz auf den Inhalt konzentrieren. Das Framework unterstützt dabei alles was man für eine Präsentation benötigt wie Tabellen, Fragmente, Auflistungen und ähnliches. Der Quelltext ist auf GitHub zu finden. Lizenziert ist reveal.js unter der MIT-Lizenz und damit freie Software. Eine Demo gibt es auf der entsprechenden Demo-Seite des Autors.

Unit-Test sind in der Softwareentwicklung ein wichtiger Teil der Entwicklung. Problematisch wird es wenn ein solcher Unit-Test fehlschlägt. Dann muss der Grund dafür gesucht und beseitigt werden. Unit-Test werden bei vielen Continuous-Integration-Systemen beim Build-Vorgang automatisch ausgeführt. Der Entwickler wird vom System über entsprechende Fehler bei der Ausführung informiert und kann handeln.

github.com/hmlb/phpunit-vw

github.com/hmlb/phpunit-vw

Wem das zu anstrengend ist, der kann sich mit der Phpunit VW Extension behelfen. Sobald die Unit-Test über ein Continuous-Integration-System ausgeführt werden, werden sie dank der Phpunit VW Extension automatisch durchgewunken. Bei der normalen Entwicklung schlagen die Tests wie gewohnt fehl – ein Prüfstandmodus für Unit-Tests.