seeseekey.net - Invictus Deus Ex Machina

Wenn man ein Image auf eine SD-Karte oder einen USB-Stick übertragen möchte, so kann man, je nach verendetem System, die Kommandozeile nutzen um das Image auf den Datenträger zu schreiben. Mit Hilfe des Cross-Plattform-Tools Etcher kann man diese Aufgabe unkomplizierter erledigen. In Etcher muss das Image und der Datenträger definiert werden und schon startet der Prozess. Das Tool wird unter anderem von der Raspberry Pi Foundation empfohlen.

Etcher

Heruntergeladen werden kann Etcher auf der Seite des Projektes unter etcher.io. Es ist für macOS, Linux und Windows verfügbar. Der Quelltext des Werkzeuges ist auf GitHub zu finden. Das Projekt ist unter der Apache 2.0 Licence lizenziert und damit freie Software.

In den letzten Tagen habe ich für ein Projekt einen REST-Server geschrieben. Der Server läuft unter .NET bzw. Mono – also war ich auf der Suche nach einer passenden Bibliothek bzw. einem Framework, welches mich bei dem Aufsetzen eines solchen Servers unterstützt. Nach einem Blick auf Nancy und einigen anderen Frameworks bin ich schlussendlich bei Grapevine gelandet.

sukona.github.io

sukona.github.io

Dabei handelt es sich um eine Bibliothek, welche neben einem REST-Client auch einen REST-Server bereitstellt. Das Hauptaugenmerk der Entwicklung wird dabei auf den REST-Server gelegt. Mit Hilfe des Frameworks lässt sich ein REST-Server mittels weniger Zeilen Quellcode aufsetzen:

ServerSettings settings = new ServerSettings();
settings.Host = "localhost";
settings.Port = "1111";

RestServer server = new RestServer(settings);
server.Start();

In diesem Beispiel werden die Einstellungen für den Server angelegt und anschließend dem Server übergeben. Danach wird der Server mit der Methode Start hochgefahren. Damit verfügt man zwar über einen REST-Server, dieser verfügt allerdings über keinerlei Methoden was die praktische Verwendung eher erschwert. Ressourcen für den Server werden mittels des Attributes RestResource markiert:

[RestResource(BasePath = "/time/")]
public class TimeModule
{
    [RestRoute(PathInfo = "date")]
    public IHttpContext GetDate(IHttpContext context)
    {
        context.Response.SendResponse(Grapevine.Util.HttpStatusCode.Accepted, getDate());
        return context;
    }
}

Über das Attribut RestRoute wird eine Methode für Grapevine gekennzeichnet – das Pathinfo definiert dabei den Pfad über welchen diese aufgerufen werden kann. Durch den über das Attribut RestResource festgelegten BasePath lautet die vollständige URL für die Ressource:

http://localhost:1111/time/date

Wird diese Methode per GET aufgerufen, so wird das aktuelle Datum zurückgegeben. Damit ist ein minimaler REST-Server mit einer Ressource implementiert. Grapevine selbst ist unter der Apache Lizenz lizenziert und damit freie Software. Der Quelltext der Bibliothek befindet sich auf GitHub.

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.

Auf der Suche nach einem kleinen Tool, um zu testen ob ein Minecraft-Server ordnungsgemäß läuft, bin ich auf den Minecraft Server Status Checker gestoßen. Er überprüft ob der Server erreichbar ist und liefert einige weitere Informationen wie z.B. die aktuelle Spieleranzahl. Zu finden ist der Check auf der Webseite des ehemaligen Minecraft-Entwickler Nathan Adams.

dinnerbone.com/minecraft/tools/status/

dinnerbone.com/minecraft/tools/status/

Der Minecraft Server Status Checker ist dabei freie Software dessen Quelltext auf GitHub zu finden ist. Als Lizenz wurde die Apache Licence gewählt.

Wenn man unter Java eine JSON-Datei schreiben möchte, so kann man dies natürlich von Hand tun. Einfacher und effizienter ist es allerdings wenn man das ganze mit der Bibliothek GSON erledigt. Dabei handelt sich um eine von Google entwickelte Bibliothek, welche ursprünglich für den internen Gebrauch bei Google gedacht war. Mit dieser ist neben vielen anderen Dingen unter anderem auch die Serialisierung von Java-Objekten in JSON möglich. Möchte man eine JSON-Datei manuell schreiben so nutzt man den von der Bibliothek bereitgestellten JsonWriter:

JsonWriter writer = new JsonWriter(new OutputStreamWriter(new FileOutputStream(new File("test.json")), StandardCharsets.UTF_8));

writer.setIndent("  "); // definiert die Einrückung

writer.beginObject();
writer.name("test");
writer.value("123");
writer.endObject();

writer.close();

Im ersten Beispiel wird ein einfaches Objekt in eine JSON-Datei geschrieben, was in der Datei schlussendlich so aussieht:

{
  "test": "123"
}

Natürlich ist es auch möglich beliebig viele Objekte in eine Datei zu schreiben und Arrays zu nutzen:

JsonWriter writer = new JsonWriter(new OutputStreamWriter(new FileOutputStream(new File("C:\\Temp\\test.json")), StandardCharsets.UTF_8));

writer.setIndent("  "); // definiert die Einrückung

writer.beginObject();
writer.name("persons");

writer.beginArray();

writer.beginObject();
writer.name("firstname");
writer.value("Hans");
writer.name("lastname");
writer.value("Meiser");
writer.endObject();

writer.beginObject();
writer.name("firstname");
writer.value("Luna");
writer.name("lastname");
writer.value("Bottom");
writer.endObject();

writer.endArray();

writer.endObject();

writer.close();

Heraus kommt dabei eine JSON Datei welche so aussieht:

{
  "persons": [
    {
      "firstname": "Hans",
      "lastname": "Meiser"
    },
    {
      "firstname": "Luna",
      "lastname": "Bottom"
    }
  ]
}

Zu finden ist die Bibliothek auf GitHub. Lizenziert ist die GSON-Bibliothek unter der Apache Lizenz und damit freie Software.

Viele größere Firmen wie Apple, Google und auch Facebook sind in den letzten Jahren dazu übergegangen, Eigenentwicklungen zu veröffentlichen und unter eine freie Lizenz zu stellen. Eines dieser Projekt aus dem Hause Facebook ist dabei Phabricator. Dabei handelt es sich um ein auf PHP basierendes Werkzeug zur kollaborativen Softwareentwicklung.

Die Projektseite von Phabricator

Die Projektseite von Phabricator

Phabricator stellt dabei unter anderem Werkzeuge wie einen Repository Browser, ein Bug/Issue-Tracker, eine Wiki und Möglichkeiten zum Code Review zur Verfügung. Genutzt wird Phabricator nicht nur von Facebook, sondern auch andere Firmen und Projekte wie Blender, Bloomberg, Dropbox oder MediaWiki nutzen dieses Werkzeug für die Softwareentwicklung. Bezogen werden kann Phabricator über die offizielle Projektseite oder die entsprechende GitHub-Seite. Der Quelltext ist unter der Apache Lizenz lizenziert.

Die meisten Bibliotheken welche Zugang zur Twitter-API in C# (.NET/Mono) bereitstellen haben ein Problem. Sie sind schlicht zu groß. Meist bestehen sie aus einem dutzend Bibliotheken und werden mit der Zeit immer unhandlicher. So war auf der Suche nach einer leichtgewichtigen Bibliothek für den Zugriff auf das Twitter-API. Fündig wurde ich mit TinyTwitter.

TinyTwitter auf GitHub

TinyTwitter auf GitHub

Diese Bibliothek besteht im Kern aus einer Datei und lässt sich einfach verwenden. Um einen Tweet zu senden, recht folgender Code:

var oauth = new OAuthInfo
{
    AccessToken = "YOUR ACCESS TOKEN",
    AccessSecret = "YOUR ACCES SECRET",
    ConsumerKey = "YOUR CONSUMER KEY",
    ConsumerSecret = "YOUR CONSUMER SECRET"
};

var twitter = new TinyTwitter(oauth);

twitter.UpdateStatus("I'm tweeting.");

Zu finden ist die Bibliothek auf GitHub. Lizenziert ist TinyTwitter unter der Apache Lizenz und damit freie Software.

Mit den in den letzten Jahren zunehmenden Fähigkeiten der Browser, tauchten vermehrt Engines auf, mit denen einfach 2D und 3D Anwendungen und Spiele programmiert werden konnten. Eine dieser Engine ist dabei Babylon.js. Dabei handelt es sich um eine auf HTML5 und WebGL basierende 3D-Engine, welche in Javascript implementiert ist. Sie enthält unter anderem einen kompletten Szenengraph mit Entitäten wie Licht, Kameras, Materialien und Meshes. Daneben deckt die Funktionalität der Engine Themengebiete wie Kollision, Physik, Animation, Partikel und vieles mehr ab.

Ein einfaches Beispiel

Ein einfaches Beispiel

Ausprobiert werden kann die Engine auf dem Babylon.js Playground. Lizenziert ist Babylon.js unter der Apache License in der Version 2.0 und damit freie Software. Der dazugehörige Quelltext ist auf GitHub zu finden. Daneben kann die Engine auch über die offizielle Seite unter babylonjs.com bezogen werden.

Der Titel dieses Artikels, könnte den Leser glauben lassen, das es in diesem Artikel um ein Skript geht, welches irgendwelche Vorteile bei schlechten Netzwerkverbindungen bringt. Allerdings ist das Gegenteil der Fall. Bei dem in Go geschriebenen Tool mit dem Namen Comcast handelt es sich um ein Skript zur Simulation eines schlechten Netzwerkes.

Comcast auf GitHub

Comcast auf GitHub

Comcast soll dabei helfen Anwendungen zu testen, welche Netzwerkfunktionalitäten nutzen. So kann man überprüfen das die Anwendungen auch unter schlechten Bedingungen funktionieren (und falls dies nicht der Fall ist nacharbeiten). Das Skript läuft unter Linux, Mac OS X sowie BSD-Systemen. Der Quelltext der unter der Apache-Lizenz stehenden Software ist auf GitHub zu finden.

Wer eine Rest-API testen möchte, der kann dies natürlich im Browser tun. Einfacher funktioniert das ganze mittels RESTClient. Dabei handelt es sich eine freie Anwendung um die REST-API aufzurufen und anschließend das Ergebnis auszuwerten.

RESTClient

RESTClient

Dabei hat man volle Kontrolle über die gesendeten Parameter, die HTTP Methode, den Header und einige andere Einstellungen. Nach einem ausgeführten Request können die Ergebnisse der Anfrage eingesehen werden. RESTClient ist unter der Apache Lizenz lizenziert. Neben der offiziellen Seite, gibt es den Download auf Foss Hub. Der Quelltext (sowie der Bugtracker) ist auf GitHub zu finden. Da RESTClient in Java entwickelt wurde ist es unter Linux, Mac OS X und Windows lauffähig.