Auffrischung der Programmiersprachenkenntnisse

Ich habe angefangen mich wieder in den Programmiersprachen zu trainieren, die ich mehr oder weniger gut kenne. Und lerne nebenbei eine neue Programmiersprache: Rust.

Da ich sehr viel Zeit in mein Studium investiere, bleibt mir keine Zeit für große und aufwendige Projekte. Aus diesem Grund habe ich begonnen, grundlegende Algorithmen in verschiedenen Programmiersprachen zu implementieren, um die syntaktischen Besonderheiten kennen zu lernen.

Gerade bei Rust muss ich mich an einige Besonderheiten gewöhnen. Begonnen habe ich mit Bubble Sort. Diesen Algorithmus werde ich in den Programmiersprachen Rust, Python, C und JavaScript entwickeln. Sowie auch die anderen Algorithmen, die ich mir aussuche. Möglicherweise werde ich dies auch auf Java und C# erweitern. C# werde ich dann wahrscheinlich mit MonoDevelop/Xamarin Studio entwickeln.

Die Algorithmen werde ich mit möglichst verständlichem Code, einfachen Funktionen, und hoffentlich auch Tests programmieren.
Sofern es mir die Programmiersprache erlaubt, werde ich idiomatischen Code schreiben. Ich werde, soweit ich die Motivation und die Zeit habe, den Code weiter optimieren.

deepin: Kalender

Es gibt eine Applikation, die für mich bei deepin fehlt: Ein Kalender.
Thunderbird möchte ich nicht nutzen, und mein Favorit, California/Maya, ist nicht für deepin erhältlich. Und wie ich California selber kompilieren kann, weiß ich nicht. Die Anleitung im Github-Repository scheint nicht zu funktionieren.

Also habe ich den Kalender in meiner Nextcloud aufgerufen und ein Chrome-App-Verknüpfung erstellt. Es funktioniert wunderbar. Da ich eigentlich immer mit dem Netzwerk Zuhause verbunden bin, habe ich auch Zugriff darauf. Auch außerhalb und mobil kann ich darauf zugreifen, per VPN. Und ganz nebenbei habe ich Zugriff auf den Rest der Nextcloud.

DeepinBildschirmfoto20160703215658

Nextcloud als Chrome-App

deepin: Installationswut

Mein Notebook, auf dem ich deepin installiert habe, ist ein Acer Aspire ES1-111-C827 und die verbaute WD Blue Mobile Festplatte hat mir einiges an Kopfschmerzen bereitet. Jedenfalls glaube ich, dass es die Festplatte war. Denn ich habe auch den Bluetooth-Treiber blockiert.

Daraufhin habe ich das System so oft neu installiert und zwischendurch auch ein Kubuntu installiert gehabt. Ich habe mein System bestimmt 15 mal neu installiert. Bin jetzt aber wieder bei deepin.

Ich habe sehr viel recherchiert und irgendwann bin ich auf den I/O Scheduler von Linux gestoßen. Das Symptom war nämlich, dass die Festplatte immer wieder abschaltete und das ganze Linux tot war. Ich habe den von cfg auf deadline umgestellt, der besser mit alten HDD’s zurechtkommt. Und seit dem läuft das System stabil.

~$ sudo -s
~# cat /sys/block/sda/queue/scheduler
noop deadline [cfg]
~# echo "deadline" > /sys/block/sda/queue/scheduler
~# cat /sys/block/sda/queue/scheduler
noop [deadline] cfg

Ich hoffe das hilft.

 

DeepinOS: Schönes Linux, schwerer Weg

Ich war ja schon immer ein Fan von Linux, und seit dem die Schule zu Ende war, brauchte ich auch nur Linux.

Eine Zeit lang habe ich openSuse verwendet, bin dann zu Ubuntu gewechselt, von dort aus zu elementaryOS für zwei Wochen und jetzt bin ich bei DeepinOS gelandet. Eine Debian-Distribution aus China.

Das Desktop Environment basiert auf Gnome3 und ist echt schön. Das Kontrollzentrum befindet sich, in einer Seitenleiste am rechten Bildschirmrand.

DeepinBildschirmfoto20160630230317

Die Installation gestaltete sich vergleichsweise schwierig. Obwohl DeepinOS den einfachsten Installer der Welt an Bord hat, musste ich es fünf Mal installieren. Beim ersten Mal hat es die Ubuntu Installation nicht gelöscht und drüber geschrieben. Bei den anderen Malen hatte die Festplatte zu viele primare Partitionen. Das war aber dann mein Fehler. Schlussendlich habe ich die Partitionen gelöscht und im einfachen Modus deepinOS alles regeln lassen. Dann lief es.

Ob ich noch manuell Grub als EFI Standard einstellen müsste, weiß ich nach den ganzen Installationen nicht mehr.

Dokumentation 2 Go

Ich habe vor kurzem entschieden aus einem Projekt auszutreten und war gezwungen meinen Code zu dokumentieren. Ich suchte nach Tools, um mir das Leben einfacher zu machen. Da ich einen Teil des Codes bereits mit docstrings kommentiert habe, konnte ich hier mit apigen eine ansehnliche PHP-Dokumentation basteln.

Da das aber nicht alles war, was ich dokumentieren musste, bin ich zu http://sphinx-doc.org gekommen. Sphinx ist ein wunderbares Tool und ich hatte es schnell aufgesetzt und die ersten Seiten geschrieben. Tmux und Vim machten dies unfassbar schnell möglich.

Um die Dokumentation schöner zu gestalten, habe ich das ReadTheDocs-Theme benutzt und ein paar Tricks von ReadTheDocs und anderen Quellen genutzt, um die Dokumentation effektiver zu gestalten.

Das Hinzufügen neuer Seiten ist unglaublich einfach und ich habe so viel Zeit gespart, die ich sonst mühselig in LibreOffice verbracht hätte.

Obwohl ich sagen muss, dass ich bei ` und ^ die Taste zweimal drücken muss, und so Überschriften dritten Gerades etwas mühselig sind, bin ich zufrieden.

REST-CodeSchnipsel: RestRecipes

Vor kurzem ist bei mir die Notwendigkeit nach eine REST API aufgekommen und ich wollte keine großen Frameworks dafür nutzen, die viel zu viel Overhead mitliefern.

Aus dem Grund habe ich mir selber eine kleine Sammlung an Hilfsklassen erstellt, die mir das Leben einfacher machen. Die Sammlung habe ich RestRecipes getauft.

Zu finden unter: https://github.com/maikwoehl/rest-recipes

Nutzbar wie folgt:

require_once "RestRecipes/autoload.php";

use RestRecipes\Router;

$app = new Router();

$app->route("/order/<id>", "GET", function($id) {
    // Fancy stuff with $id
});

$app->route("/order/<id>", "PUT", function($id, $data) {
    // Fancy stuff with $id and $data
});

$app->route("/order/<id>", "POST", function($id, $data) {
    // Fancy stuff with $id and $data
});

$app->route("/order/<id>", "DELETE", function($id) {
    // Fancy stuff with $id
});

Das ganze kann auch per Composer im eigenen Projekt eingebunden werden:

~$ composer require maikwoehl/rest-recipes

USB-Stick im ReadOnly Modus retten

Heute ist mir meine Stiftebox heruntergefallen und ich habe einen alten USB-Stick gefunden. Diesen haben ich natürlich direkt angesteckt (Windows) und festgestellt, dass ich nicht schreiben konnte. Sonst war der Stick aber leer.

Was ist mit diesem Stick passiert? Warum kann ich nicht schreiben? Der hat keinen Schalter für einen Schreibschutz. Also startete ich meinen PC in mein openSUSE neu und versuchte mit dem Internet eine Lösung zu finden.

fdisk lieferte mir diverse komische Partitionen verschiedenen Typs. Außerdem meldete dmesg einen WriteProtect. hdparm -r0 /dev/sdb behob das Problem und ich habe mit fdisk den USB-Stick komplett formatiert. Eine primäre Partition im W95 Fat32 (fdisk b HEX-Code) entstand. Interessanterweise wurde diese unter Linux nur unter /dev/sdb gemeldet, kein /dev/sdb1. Das sollte mich nicht weiter stören.
Das tat es aber dann doch. Gparted half mir. Es tat Dinge die ich nicht kannte. Die Magie der GUI.

Der Stick funktioniert mittlerweile wieder. Ein schöner Stick mit meinem Sternzeichen eingraviert. Sehr edel, finde ich.