programmierer-nachrichten.de
Startseite Podcast RSS Impressum

Alcatel veröffentlicht den Quellcode von Unix Edition 8, 9 und 10


Am heutigen Tag wurde der Quellcode der Edition 8, 9 und 10 des Research Unix von Alcatel freigegeben. Der Quellcode ist offen, aber weder frei noch OpenSource im Sinne der OSI. Man kann den Quellcode aber runterladen, ihn studieren und für nicht kommerzielle Dinge nutzen.

Die meisten Programmierer sind ja mittlerweile mehr oder weniger mit Linux oder vielleicht auch mit FreeBSD, NetBSD, oder OpenBSD in Kontakt gekommen. Die wenigsten aber kennen Unix, einfach, weil das aus einer Zeit stammt, die schon lange vorbei ist. Viele stellen Linux auf eine Ebene mit Unix und denken auch, dass es davon abstammt, aber das stimmt natürlich nicht. Linux ist etwas völlig Eigenständiges.

Die ganzen BSD-Varianten, FreeBSD, OpenBSD, NetBSD, und DragonflyBSD stammen von Unix Edition 5 ab. Diese Abspaltung ist aber schon Ende der 70er Jahre passiert. Heute sind diese Betriebssysteme deutlich fortschrittlicher und eigenständiger. Wenn also jemand sagt, dass *BSD ein Unix ist, dann ist das nur historisch relevant. Aus technischer Sicht ist das nicht sehr gehaltvoll. Aus heutiger Sicht sind sogar Free- und OpenBSD technologisch sehr unterschiedlich. Im Grunde sind sie aber ähnlich zu bedienen; das alleine sagt aber nicht viel aus. Bei FreeBSD gibt es ZFS; bei OpenBSD nicht.

Moderne und tatsächlich auf dem ursprünglichen Unix basierte Systeme gibt es weiterhin. Da gibt es HP-UX von HP, AIX von IBM und Solaris von Sun und jetzt Oracle. Wobei das auch nur die halbe Wahrheit ist. Bei AIX gibt es auch Einflüsse aus BSD. Aber auch hier ist das technisch nicht sehr gehaltvoll. Die Systeme sind so unterschiedlich, dass man jedes System einzeln neu lernen muss. Viele Dinge wird man einfach adaptieren können, vieles aber auch nicht.

Man sagt, dass Unix Version 7 das letzte "echte" Unix war. Ab Edition/Version 8 hatte man starke Einflüsse von BSD. Und ja, BSD basiert auf Unix 5. Das ist alles sehr konfus, aber so ist Geschichte nun mal :)! In Unix Version 7 war das erste Mal "bash" enthalten. Das, was viele heute unter Linux als Shell benutzen.

Wenn man Lust hat, kann man Unix mit Hilfe des Emulators "SIMH" ausprobieren und quasi live erleben. Auf moderner Hardware funktioniert das historische Unix leider nicht mehr; deswegen die Notwendigkeit eines Emulators, der die alte Hardware "von damals" emuliert. Ganz nebenbei gibt es auch den Quellcode von Version 7 und früher zum Download. Für Version 7 gibt es für SIMH gute Anleitungen, um es lauffähig zu bekommen.


C++ 17 ist fertig


C++ ist eine Programmiersprache, die andauernd erweitert und verbessert wird. Aktuell hat man sich auf die neue Version 17 geeinigt. Ich beschreibe nun kurz die, aus meiner Sicht, interessanten Neuerungen.

Man kann in C++17 nun verschachtelte Namespace Definitionen in einer einzigen Zeile abbilden.

Aus:

namespace A {
    namespace B {
        namespace C {

        }
    }
}
wird:
namespace A::B::C {

}

In C++ kann man auch Daten destrukturieren. Ich hatte dieses Feature in meinem Text zu ECMAScript 2015 bereits erläutert. In C++ ist es ähnlich. Im Grunde können so gut wie alle modernen Programmier- und Skriptsprachen Daten destrukturieren. In C++17 wurde nun aber die Deklaration von Variablen im Kontext einer Datendestrukturierung vereinfacht. Vor C++17 konnte man "std::tie" benutzen, um Daten zu destrukturieren und Variablen zuzuweisen. Man musste für "std::tie" die Variablen vorher definieren. Das entfällt nun mit C++17.

Vor C++17:

std::tie(a, b, c) = tuple;
Mit C++17:
auto [ a, b, c ] = tuple;

Außerdem wurden Trigrafen in C++17 entfernt. Trigrafen sind eine Folge von drei Buchstaben, die einen Laut repräsentieren. In C++ werden 2 Fragezeichen mit anschließendem Zeichen entsprechend interpretiert und dargestellt. Aus "??=" wird beispielsweise "#". Aus "??(" wird "[", aus "??)" wird "]" usw...

In alten C++ Versionen würde also folgender Code:

printf("Wie bitte??!");
...folgende Ausgabe erzeugen:
Wie bitte|
erzeugen.

Natürlich gibt es viel mehr Neuerungen, aber das meiste davon sind Kleinigkeiten und Dinge, die mir nichts sagen. Wenn du mehr über alle Neuerungen nachlesen möchtest, so suche bei GitHub einfach nach "cpp17features" und du findest ein Repository, wo alle Neuerungen von C++17 aufgelistet und erklärt werden. Ich habe diese Quelle als Basis meines kurzen Artikels benutzt. Vielen Dank also an Bartłomiej Filipek für die außerordentlich umfangreiche Beschreibung der C++17 Neuerungen. Bartłomiej Filipek ist ein polnischer C++ Programmierer und er schreibt auch Artikel über C++ in seinem Blog (in englischer Sprache).

Es wird natürlich eine Zeit lang dauern, bis alle C++ Compiler alle neuen Features untersützen, aber schon jetzt sind viele Neuerungen in GCC, Clang und Microsofts C++ Compiler (MSVC) implementiert und benutzbar.

Es ist gut zu sehen, dass C++ sich immer weiter entwickelt. Es hat mittlerweile einen Status erreicht, der vermutlich einige Anfänger wieder dazu bringen wird C++ als erste Sprache zu lernen. C++ wirkt mittlerweile fast modern.


Podcast Folge 6


Wie versprochen der wöchentliche Podcast! Heute nun Folge 6!

Kurz und knackig geht es in dieser Folge um IBM, die Blockchain as a Service, Wren Skriptsprache, einen 15 Jahre alten Fehler bei SVN (Subversion), einen blinkenden Cursor, der viel CPU beansprucht, Gitlab, Swan, OpenSSL und seine neue Lizenz, offenen Büros, PHPStorm 2017.1, die Google Talk Einstellung und Fedex, die ihren Kunden 5USD schenken, wenn sie doch bitte wieder Adobe Flash installieren/aktivieren :).

Viel Spaß mit dieser Folge!


Visual Studio Code hat ein blinkendes Problem


Das ist ja mal skurril! Der Cursor in Visual Studio Code verursacht bei einigen Benutzern vergleichsweise hohe CPU-Auslastung, obwohl der Editor nicht genutzt wird. Die blinkende Animation des Cursors alleine verursacht die CPU-Auslastung.

Visual Studio Code ist ein, mittlerweile umfangreicher, Editor, welcher auf Basis von Electron entwickelt wurde. Man hat also einen "Webbrowser" genommen und daraus ein Editor gebaut. Electron kombiniert eine Chromium "Shell" mit node.js. So werden hier also mit Hilfe von JavaScript, CSS und HTML Desktopanwendungen entwickelt. Im Falle von Visual Studio Code wird TypeScript als Zwischensprache genutzt, wobei das letztendlich auch nur zu JavaScript transpiliert wird.

Jo Liss hat mit Fehlerticket 22900 bei GitHub im Visual Studio Code Projekt den Fehler gemeldet und beschrieben. Bei ihr verursacht Visual Studio Code eine CPU-Auslastung von ca. 13%.

Das Skurrile an der Sache ist, dass Chromium (und auch Chrome ;)) nicht den Cursor des Betriebssystems nutzen. Sie zeichnen ihren eigenen Cursor, um betriebssystemübergreifend einheitlich bleiben zu können, ohne einen großen Aufwand zu treiben. Im Falle von Chromium ist das Problem, dass er den eigenen Cursor alle 16ms neu zeichnet, was diese CPU-Auslastung zur Folge hat. Empfohlen wird hier das Neuzeichnen des Cursors in einem Zeitabstand von 500ms. Dieses Problem wurde dem Chromium Projekt bereits 2014 zugetragen.

Das Problem ist nur unter macOS relevant. Unter Windows bleibt die CPU-Auslastung bei 0,xx%, wenn ich nichts im Editor tippe.


SVN behebt Tree-Conflict Fehler


SVN, oder auch Subversion genannt, ist ein VCS, welches vermutlich noch in vielen Firmen eingesetzt wird. Subversion ist immer noch gut zugänglich und gut dokumentiert. Es kann mit binären Dateien ganz gut umgehen und das Wissen um SVN herum ist sehr gut. Man hat also selten ein Problem, welches vorher noch nie von jemand anderem gelöst oder beantwortet wurde.

Aber es hat eben auch so seine Macken und eine eigenwillige Macke ist der Tree-Conflict. Jeder, der SVN mit mehr als einer Person nutzt, kennt diesen Fehler. Als ich ihn das erste Mal hatte, wusste ich gar nicht, was das bedeutete und schlimmer noch wusste ich nicht, wie man es behebt. Aber einer Suchmaschine sei Dank konnte ich diesen Fehler bis jetzt immer ohne größere Probleme beheben. Aber letztendlich fragte ich mich immer, wieso es dazu kam und wieso SVN das nicht selbst auflösen konnte. Weil: es ist ein Fehler :)! Und dieser Fehler besteht offenbar seit ca. 15 Jahren.

Branko Čibej hat am 11. September 2002 das Fehlerticket SVN-898 erstellt. In diesem Ticket fordert er, dass SVN doch bitte echte Dateiumbenennungen unterstützen soll. Bei SVN war und ist ein Umbenennen einer Datei so implementiert, dass die Datei mit dem neuen Namen kopiert und die alte Datei dann gelöscht wird. Damit geht die Historie der alten Datei verloren. Für die neue Datei wird eine neue Revision erzeugt, obwohl man sie lediglich umbenannt hat. Dieses Verhalten führte oft zu dem genannten Tree-Conflict.

Mit Subversion 1.10 und neuer wird diese Art von Fehler deutlich reduziert sein.


Wren Skriptsprache von Bob Nystrom


Och Menno! Wer braucht denn noch eine Scriptsprache? So oder so ähnlich wird man das häufiger lesen. Und doch ist es der Traum eines jeden Programmierers seine eigene Programmier- oder Skriptsprache zu entwickeln. Die Gründe sind vielfältig. Von "isso" bis "anspruchsvoll" oder gar "alles andere ist schrott" findet man da alles. Oft ist es aber auch "ich bin der Beste; aus dem Weg!" :).

Wren kenne ich persönlich schon relativ lange. Wenn es eine neue Programmier- oder Skriptsprache gibt, so schaue ich sie mir an. Ganz selten probiere ich sie auch in der Praxis aus, weil das viel Zeit kostet. Das war früher anders, aber wenn sich eine Programmier- oder Skriptsprache nur wenig von bestehenden Sprachen unterscheidet, so passe ich :). Im Falle von Idris e.g. musste ich es unbedingt ausprobieren, um zu sehen, ob der Aufwand lohnt (imho: nein).

Wrrrrrren wurde von Bob Nystrom entwickelt. Bob Nystrom ist ein Eishockey-Spieler. Das zumindest findet man, wenn man seinen Namen bei Google eingibt :D...gut, er ist kein Eishockey-Spieler, aber ein Software Entwickler bei Google (gewesen?). Er ist an der Entwicklung von Dart beteiligt und interessiert sich allgemein für Sprachdesigns. Bob Nystrom hatte bei EA als Spieleprogrammierer gearbeitet, er ist laut eigenen Angaben ein UI Nerd und hat wohl auch ein Buch geschrieben (Game Programming Patterns). Auf seinem Twitter Profilfoto hat er einen kleinen Hund neben seinem Gesicht.

Bob Nystrom schreibt aktuell ein neues Buch darüber, wie man Skriptsprachen implementiert (Crafting Interpreters). Das soll Werbung für sein Buch sein. Bücher schreiben ist doof, zeitaufwendig und meistens nicht allzu lohnenswert :). Also wenn du dich thematisch dafür interessierst, schau auch da mal vorbei.

Achso, ja, es ging ja um Wren :). Wren ist eine klassenbasierte Skriptsprache mit Unterstützung von Fibers. Heißt: du kannst Code asynchron ausführen, nicht aber parallel. Das unterstützt Wren aktuell nicht. Wren ist sehr kompakt und überschaubar. Schau dir das Github Repository am besten mal an. Man kann Wren embedden, das Github Repository ist sehr aktiv und das Projekt gibt es schon recht lange. Einen Blick ist es somit auf jeden Fall wert :).


IBM bietet Blockchain mit Zusatzdiensten an


Blockchain? Das ist doch dieses Ding, was bei Bitcoin verwendet wird. Jawoll! Aber was ist eine Blockchain eigentlich? Man liest und hört oft im Kontext von Bitcoin davon, aber so richtig klar wird es selten dargestellt. Die Ursache ist, dass dieses Thema sehr komplex ist. Auch ich kann das im Kontext dieser Nachricht nur kurz anreißen und grob beschreiben.

Eine Blockchain ist eine dezentrale Datenbank. Die Daten in der Blockchain sind korrekt, unversehrt und vor falschen Modifikation geschützt. Um das zu erreichen wird Kryptografie verwendet. Die Nutzer der Blockchain müssen sich gegenseitig nicht vertrauen; sie müssen sich nicht einmal kennen. Eine Blockchain Datenbank wird peer-to-peer ausgetauscht.

Eine Blockchain Datenbank besteht aus Blöcken. Bei jeder Transaktion werden Blöcke hinzugefügt. Diese Blöcke werden mit jedem Benutzer dieser Datenbank geteilt. Bevor ein Block hinzugefügt werden kann, muss technisch verifiziert werden, dass dieser neue Block authentisch ist.

Wenn mir mittels Bitcoin jemand Geld schickt, dann wird diese Information in die Blockchain hinzugefügt. Diese Daten werden von extrem vielen Computern übernommen und gesichert. Die kombinierte enorme Rechenleistung wird dazu genutzt, um die Authentizität zu gewährleisten. Jeder neu hinzugefügte Block stellt eine Beziehung zum vorigen Block her. Es ist technisch zwar möglich eine Transaktion zu fälschen, praktisch aber so enorm aufwendig, dass die Blockchain aus heutiger Sicht sicherer ist als alles zuvor.

Die Blockchain Datenbank ist offen zugänglich und transparent. Man kann jede Transaktion einsehen. Sie ist außerdem anonym.

Nun kommt IBM mit einem Blockchain Produkt um die Ecke und möchte es vermarkten. Wieso aber ist die Blockchain so interessant? Aus Sicht von IBM ist die Blockchain auch für den Finanzmarkt abseits Bitcoin sehr interessant. Es wird berichtet, dass bei Aktienhandel sehr hohe Clearingkosten entstehen. Zwar ist der Aktienhandel sehr schnellebig, jedoch dauert es praktisch einige Tage, bis der Verkäufer sein Geld und der Käufer seine Aktien bekommt. Mit der Blockchain könnte man also die Kosten der Kaufabwicklung sparen. Und das ist nur eines von vielen Beispielen.

Auch in anderen Bereichen ist eine Blockchain durchaus denkbar. Was passiert zum Beispiel bei einem Hauskauf? Man muss sich in ein Grundbuch eintragen lassen. Die Organisation, in diesem Fall vermutlich immer die Stadt, verifiziert den Verkauf/Kauf des Hauses und nimmt die Eintragungen vor. Hier hat man eine zentrale Stelle, die das verwaltet. Auch in diesem Fall könnte man das sehr wohl mit einer Blockchain austauschen.

Wenn man den Gedanken weiter spinnt, könnte man letztendlich auch auf Banken verzichten. Deswegen ist es auch nicht verwunderlich, dass große Firmen wie IBM auf diese Technologie setzen. IBM basiert sein Produkt auf Hyperledger Fabric v1.0. Diese OpenSource Software Lösung wurde in Zusammenarbeit mit Accenture, Intel, J.P. Morgan, Daimler, IBM, American Express, Airbus, Hitachi usw... entwickelt. Die Software ist OpenSource, aber nicht frei im Sinne von Richard M. Stallman.

IBM selbst bewirbt ihr Blockchain Produkt mit den Vorteilen wie Zeitersparnis, Kostenreduzierung, Risikominimierung und die Erschließung neuer Geschäftszweige. Zu den Kosten selbst gibt es keinerlei Informationen, die öffentlich zugänglich wären. Wobei ich mich gerade frage, wie man etwas dezentrales abrechnen will.

IBM möchte ihre eigenen Goodies um das Produkt "Hyperledger Fabric" bauen, um so den Kunden in ihr System einzusperren (Vendor-Lock-In). IBM möchte außerdem bei der Entwicklung unterstützen. Das ist offensichtlich erkennbar, da sie eine Entwicklungsplattform bereitstellen. Sie betonen OpenSource, meinen aber kosteneffektiv. Im Grunde liest sich das ganze Angebot von IBM sehr schäbig und halbgar, weil keinerlei Angaben zu den Preisen gemacht werden; überall nur "contact us". Also typisches Gebrubbel einer riesigen Firma. Insofern ist diese Nachricht vielleicht gar nicht so sinnvoll, aber sie erfüllt den Zweck sich etwas mehr Gedanken über die vielen Möglichkeiten einer Blockchain zu machen. Vielleicht regt das auch Konkurrenz an.

Und was hat das mit Programmierung zu tun? Sehr viel sogar :). Als Programmierer sollte man zumindest eine Kleinigkeit darüber wissen. Im Detail wird es dann erst wichtig, wenn man plant so ein System umzusetzen. Bis dahin ist Detailwissen natürlich wertlos. Schau dir am besten mal die Projekte von Hyperledger auf github an. Da gibt es einige Projekte zum ausprobieren :). Realistisch betrachtet wird man vermutlich niemals so ein System bauen. Dafür ist der Ruf in der Allgemeinheit der Bevölkerung noch zu schlecht. Aber das muss ja nichts bedeuten. Ich kann mir aber schwer vorstellen dieses System im Gesundheitswesen e.g. einzuführen, da die Strukturen in diesem Bereich sehr festgefahren und steif sind. Ich kann mir vorstellen, dass man mit so einer Technologie relativ schnell für verrückt erklärt wird und unter Umständen seinen Job verlieren könnte :).

Mich hat es aber irgendwie überzeugt. Also die Blockchain; nicht das IBM Angebot :)!


Alte Beiträge



Startseite Podcast RSS Impressum