Kategorien
Deep Learning IT Netzfund Python

Mit Charles durch Los Santos

Maschinenlernen/ Deep Learning und neurale Netze sind seit einiger Zeit „the hot shit“ in der IT (man möge mir die Formulierung verzeihen). Es gibt kaum ein Problem, das nicht irgendwie damit gelöst werden soll.

Kategorien
IT Kurztipp Linux Netzwerk Open Source Programmieren Server

Gogs: Fehler 503 nach Update auf 0.10

Ende Februar wurde die Gitlab-Alternative Gogs in Version 0.10.1 freigegeben. Benutzt man Gogs aus dem bereitgestellten Debian-Repository in Verbindung mit Apache, so kann es nach dem Update zu Problemen kommen.

Kategorien
News Open Source PHP Programmieren

PHPMap.co: Neue Plattform für PHP-Entwickler

PHPMap ist eine neue Entwicklerplattform von Florian Wartner. Der Dienst bietet die Möglichkeit, mit anderen PHP-Entwicklern in Kontakt zu treten oder Wissen mit der Community zu teilen. Dank der Karte ist es auch einfach in der Region andere PHP-Entwickler zu finden.

User haben auf der Plattform einen eigenen Feed und können Artikel verfassen. Die Community umfasst derzeit um die 350 Entwickler, es werden täglich mehr.

Das Projekt ist noch in aktiver Entwicklung, es ist Open Source (MIT-Lizenz), der Sourcecode ist auf GitHub zu finden. Jeder kann somit am Projekt mithelfen oder neue Ideen einbringen.

Mehr Infos zum Projekt gibt es direkt auf PHPMap.co oder bei Twitter unter @phpmapco bzw. bei Florian Wartner direkt (@fwartner).

Kategorien
Kurztipp Linux MySQL Programmieren

mycli

Die Auswahl eines Clients zum Entwickeln in einer Datenbank ist schwierig. Gerade für MySQL gibt zwar einige Clients mit Oberfläche bzw. als webbasierte Lösung, aber alle haben ihre Macken. Da ich inzwischen auch viel in der Shell mache, bin ich auf mycli gestoßen. mycli ist ein Shell-basierter MySQL-Client mit einigen sinnvollen Erweiterungen gegenüber der in MySQL mitelieferten Shell.

Installation

mycli ist in Python geschrieben und kann über den PIP-Paketmanager installiert werden.

sudo pip install mycli

Man kann mycli auch direkt aus GitHub klonen und darüber selbst bauen, wenn man das möchte.

Benutzung

Nach der Installation steht mycli als gleichnamiges Binary zur Verfügung. Die Kommandozeilenparameter ähneln sich stark der MySQL-Standard-Shell. Alle Parameter kann man an hier oder per mycli --help nachlesen.

Mit mycli kann man sich sehr bequem in der Datenbank bewegen. Das Syntax-Highlighting bw. die Auto-Vervollständigung erleichtern das Arbeiten in den MySQL-Datenbanken ungemein.

https://img.0fury.de/177a21865897c930e862776a65386b0a.png

mycli hat einen eingebauten Sicherheitsmechanismus, mit dem man vor „gefährlichen“ Kommandos, wie drop table oder drop database gewarnt wird, indem man diese noch einmal bestätigen muss.

https://img.0fury.de/276c732f6ed2345124af5f9815cca197.png

Kategorien
Kurztipp Programmieren

Google Fonts ohne Google

Screenshot

Häufig benutzt man Google Fonts für das Beziehen diverser Schriftarten. Das funktioniert einfach und problemlos, hat aber auch Nachteile.

Zum einen gibt es den Punkt Datenschutz. Es wird eben eine Verbindung zu Google-Servern aufgebaut, was einen digitialen Fußabdruck hinterlässt, den Google auch tracken könnte. Dadurch gibt genügend Benutzer, die über Plugins im Browser externe Verbindungen blocken.

Der andere Punkt: Falls es sich bei der Webanwendung z. B. um eine Kioskanwendung ohne Internetverbindung handelt, funktioniert ein solcher CDN einfach nicht mehr.

Eine Abhilfe bietet das Repository majodev/google-webfonts-helper, bei dem man sich die in Google Fonts verfügbaren Schriften aussuchen und – anders als bei Google Fonts- auch herunterladen kann. Das Repository bietet auch die Möglichkeit, sich selbst ein „eigenes Google-Fonts“ zu hosten. Das Programm selbst ist eine Node.js-Anwendung.

Man hat beim Download/ der Benutzung der Schriftarten die Wahl zwischen Best Support und Modern Browsers – je nach Zielgruppe sollte man dies mit Bedacht auswählen!

majodev/google-webfonts-helper ist unter MIT lizensiert, die Schriftarten selbst haben aber ihre eigenen Lizenzen.

Auf jeden Fall ist majodev/google-webfonts-helper eine einfache Möglichkeit, sich zusätzliche Schriftarten in die Webanwendung zu holen, ohne sich direkt mit dem Einbinden der Schriften herumkämpfen zu müssen. Auch für diejenigen, die gegenüber Google kritisch eingestellt sind bietet das Projekt eine praktische Alternative.

Kategorien
Linux Programmieren Server

Munin: Eigene Plugins entwickeln

Munin ist eine Monitoring-Lösung, mit der diverse Dienste und Informationen eines Server ausgelesen werden können. Es gibt aber auch Fälle, für die es keine Plugins im Netz gibt. Dann muss man sich die Plugins selbst schreiben. ### Ein Komplettbeispiel

Folgendes PHP-Skript liest eine Datei aus, in der die durchschnittliche Bewertung für den Distrochooser enthalten ist. Man kann ein Plugin prinzipiell in allen Sprachen schreiben, solange die Ausgaben für die Konfiguration (Parameter config) und die eigentliche Werte (ohne Parameter) erfolgen.

!/usr/bin/php

if(count($argv) == 2 && $argv == 'config') {
     echo "graph_title Distrochooser: Bewertung (Durchschnitt)\n";
     echo "graph_vlabel Bewertung\n";
     echo "graph_category Projekte\n";
     echo "rating.label Bewertung\n";
     echo "rating.type GAUGE\n";
     exit();
}
$hits = file_get_contents("/tmp/ldc_rating");
echo "rating.value $hits\n";

Der Parameter „config“

Munin muss wissen, wie die Graphen gezeichnet werden müssen. Hierfür wird das Plugin mit dem Parameter „config“ aufgerufen. Das eigene Plugin muss somit auch den Parameter config bearbeiten können. Fehlt dieser Parameter, wird das Plugin nicht dargestellt. Es müssen folgende Ausgaben erfolgen, die das Plugin für Munin beschreiben. Ganz wichtig: Pro Ausgabe eine Zeile.

AusgabeBeschreibung
graph_titleBeschreibung des Diagramms
graph_vlabelVertikaler Text am Rand (Beschreibung Y-Achse)
graph_categoryKategorie des Plugins
datenreihe.labelBeschreibung des Graphs „datenreihe“ (Name beliebig)
datenreihe.typeEntweder GAUGE oder COUNTER. In den meisten Fällen ist Gauge ausreichend

Pro Datenreihe (wenn man z. b. mehrere Graphen erstellen will) muss man sowohl datenreihe.label als auch datenreihe.type angeben, damit Munin weiß, wie das Plugin bzw. deren Datenreihen darzustellen sind. Wird das Plugin nun mit dem Parameter config ausgeführt, so sollte die Ausgabe wie folgt aussehen:
user@machine $ php /usr/share/munin/plugins/distrochooser_rating config
graph_title Distrochooser: Bewertung (Durchschnitt)
graph_vlabel Bewertung
graph_category Projekte
rating.label Bewertung
rating.type GAUGE

Wird das Plugin ohne den Parameter config ausgeführt, so wird nur der Wert der Datenreihe(n) ausgegeben, z. B. also
rating.Value 3,96

Das Plugin aktivieren

In /usr/share/munin/plugins liegen alle verfügbaren Plugins. Um ein Plugin zu aktivieren, muss ein Link nach /etc/munin/plugins erstellt werden. Es ist zu empfehlen, die selbst geschriebenen Plugins auch dort abzulegen.

sudo ln -s /usr/share/munin/plugins/pluginname /etc/munin/plugins/pluginname

Anschließend muss man Munin-node neu starten. Das geht je nach Distribution z. B. über `systemctl restart munin-Node` oder `service munin-node restart`. ### Funktioniert immer noch nicht?

In den Munin-HIlfeseiten gibt es [ein weiterführendes Tutorial](http://munin-monitoring.org/wiki/HowToWritePlugins) zum Schreiben von Plugins. Ebenfalls sollte man die Zugriffsrechte überprüfen und in den Munin-Logfiles nach Fehlermeldungen suchen, falls das Plugin nicht angezeigt wird. Gewöhnlich wird das Plugin erst nach der nächsten Generierung angezeigt! – – – – – –

_Bild: https://stocksnap.io/photo/DUAHA1V312_

Kategorien
Kommentar Programmieren

Murks des Tages: Programmiersprachenrankings

Immer wieder werden Rankings erstellt, in denen Programmiersprachen miteinander verglichen werden.

Problem der Vergleichbarkeit – Von Äpfeln und Birnen

Es gibt z. B. Programmiersprachen, die mehr fürs Web (JS, PHP, .NET (ASP.NET)) bzw. für Clientprogramme (.NET, Java) oder für ganz andere Zwecke (z. B. R für Statistiken) gedacht sind. Jedoch werden in Rankings alle diese Sprachen in einen Topf geworfen und miteinander verglichen. Woran die Sprachen verglichen werden? An ihrer Quantität. Dazu später mehr. Ein ganz extremes Beispiel: Im gleichen Ranking werden indirekt C, C++ und Tex miteinander verglichen. Man vergleicht (objektorientierte) Programmiersprachen mit einem Textsatzsystem. Muss man noch mehr dazu sagen? Welche Aussagekraft hat dieser Vergleich? ### Problem der unterschiedlichen Projektziele

Nun gehe ich mal davon aus, in einem Ranking werden nur Programmiersprachen miteinander verglichen, die eine ähnliche Zielsetzung aufweisen. Z. B. JavaScript via Node.js, PHP und ASP.NET (.NET).

Die Wahl einer Programmiersprache für ein Projekt hat mehrere Gründe. Das kann sowohl die Zielinfrastruktur, vorhandene Kenntnisse der Entwickler oder auch Budgetfrage sein. Ein Beispiel: Eine Firma X hat ihre gesamte Infrastruktur auf Windows Server laufen. Die Wahrscheinlichkeit, dass die Firma bereits mit .NET (ASP.NET) gearbeitet hat, ist durchaus möglich. Will die Firma jetzt eine Webanwendung entwickeln, so könnte es durchaus möglich sein, dass die Firma sich für .NET entscheidet. Hätte die Firma weniger auf Windows gesetzt und stattdessen Linux im Einsatz, so wäre die Wahl wohl kaum auf .NET basierte Lösungen gefallen. Eine kleine Veränderung an den Parametern, so fällt die Wahl höchstwahrscheinlich ganz anders aus als zuvor. > Und bevor jetzt einer meckert: ASP.NET vNext bzw. der .NET Core, der ja auch auf Linux läuft habe ich für das Beispiel jetzt nicht beachtet. Gehen wir für das Beispiel einfach von der Situation vor ca. 1 Jahr aus.

Quantität vor Qualität

Bei öffentlich verfügbaren Datenquellen wird z. T. auch die Aktivität der Repositories ausgewertet. Bin ich an einem Projekt besonders aktiv, nur weil mir die Programmiersprache besonders gefällt? Nein. Ich arbeitet dran, weil mir das Projekt gefällt. Die Programmiersprache ist dabei, wenn überhaupt, sekundär. In einem Großteil der Rankings wird jedoch primär ausgewertet, wie viele Projekte mit der Programmiersprache X entwickelt werden. Viele Projekte teilen sich in mehrere Unterprojekte auf, wodurch hier die Frage zu stellen ist, wie gezählt wird. Zählt man einfach nur die Anzahl der Projekte (Repositories) mit der Sprache X, so wird auch nur ein Projekt, dass sich in Unterprojekte splittet, das Ergebnis verfälschen, sofern die Unterprojekte in der gleichen Sprache entwickelt werden. ### tl;dr

Die Aussagekraft von Programmiersprachenrankings ist mit einem Fragezeichen zu versehen. Nicht zuletzt wegen: – Programmiersprachen mit unterschiedlichen Zielsetzungen werden indirekt miteinander verglichen (z. B. C, C++ vs Tex)

  • Vergleich häufig nur in der Quantität
  • Problem der Zählweisen (Unterprojekte)
  • Wahl der Programmiersprache von diversen Umgebungsparametern abhängig (Budget, vorhandene Kenntnisse, Systemumgebung)

    Die einzige Aussagekraft eines solchen Rankings ist die quantitative Verteilung der Programmiersprachen. Aber sollte man eine Programmiersprache nur daran bewerten, wie häufig sie genutzt wird?

Kategorien
News Programmieren

StackOverflow feiert 10 Millionen Fragen

StackOverflow kennt eigentlich jeder. Jetzt wurde die Marke von 10 000 000 Fragen geknackt. Das gilt es zu feiern! Man sollte Stack Overflow nicht nur als Firma sehen, sondern gerade als Entwickler als eine zentrale, wenn nicht sogar den zentralen Anlaufpunkt für eigentlich alles rund ums entwickeln. Es ist eigentlich nicht möglich, nicht über einen StackOverflow-Link bei Recherchen zu stolpen. Ich möchte zum Abschluss noch ein altes Sprichtwort zitieren: > Die Komplexität einer Aufgabe x wird an der Anzahl offener Stack Overflow-Tabs gemessen.

Konfusius (PUN intended)


Bild: Screenshot https://stackoverflow.com/

Kategorien
Linux Open Source Programmieren Projekte Redundancy

Redundancy 2: Vorläufig letztes Update des „Unstable“-Zweigs

Ich habe heute ein noch ausstehendes Wartungsupdate für Redundancy 2 veröffentlicht. Dieses Update beinhaltet noch einige interne Modifikationen, um die Geschwindigkeit etwas zu verbessern. Das Update auf 1.9.14-git-beta4-5 fügt an die Version den Suffix „eol“ an. EOL steht in diesem Falle für End-of-Life. Das bedeutet, wie es schon erahnen lässt, dass der „Unstable“-Entwicklungszweig nun auch offiziell eingestellt ist und nicht mehr aktiv entwickelt wird. In dringenden Fällen werde ich wohl auch noch kleinere Updates einpflegen. Jedoch sind in diesem Zweig keine großen Sprünge mehr zu erwarten 😉 Die gewöhnliche Information über den Entwicklungszweig im Infodialog wurde über einen Hinweis zum eingestellten Entwicklungszweig ersetzt,. Schluss ist. Schluss ist. Das Update dient nur zu einer Überbrückung. Wenn wir Redundancy 1.9.15. so weit entwickelt haben sollten alle Redundancy-Installationen auf die neue Version migriert werden.