Zombies und Ungeborene

Es gibt nichts schöneres, besseres und praktischeres als öffentliche Repository Platformen.

Deshalb gib es auch so unglaublich viele, sie alle (oder auch nur einen Bruchteil) zu nennen ist fast unmöglich. Zu unterscheiden sind Code Repositories und Package Repositories.

Doch was ist der Unterschied zwischen den beiden Formen?

Code Repos

Berühmte Beispiele sind GitHub und SourceForge, wobei SourceForge eine Zombie-Platform ist:

Sie lebt nicht mehr richtig, tot ist sie aber auch nicht und wenn du pech hast infiziert sie dich mit Malware. Aber um Zombie-Platformen geht es in diesem Eintrag eigentlich gar nicht.

Code Repos dienen dazu Code zu verwalten. Wenn sie halbwegs gut gemacht sind mit Versionsverwaltung, Gute mit Git, nicht so Gute mit anderen Systemen, Schlechte auch ohne Versionsverwaltung.

Das Prinzip ist einfach und jedem Programmierer bekannt: Man schreibt Quellcode und lädt ihn hoch.

Wichtig ist allerdings der Prozess: 1. Man schreibt den Quellcode und 2. man lädt ihn hoch. Nicht anders herum. Darum ist auch das neues Repository Prinzip von GitHub eigentlich falsch: GitHub macht automatisch einen ersten Commit, den man erst Pullen muss. Das Impliziert den Workflow Repo Erstellen -> Clonen -> Schreiben -> Pushen. Warum das ganz falsch ist, dazu komme ich später.

Je nach Platform werden unterschiedliche Zusatzfunktionen geboten, zB. Private Repos (meist gegen Bezahlung) oder Online Code Verwaltung.

Package Repos

Sind eine der besten Erfindungen der Computerwelt. Und ein wichtiger Grund für Windows sucks. Life is too short to live without a package manager.

Die Öffentlichen Package Repos gibt es in unterschiedlicher Form, von APTs PPA über Arch GNU/Linux' AUR (System-Repos) bis hin zu PyPi (Progamm-Repo).

Was unterscheidet ein System-Repo von einem Program[m]-Repo? Ganz einfach: ein System-Repo bringt Packete für ein Betriebssystem (zB. GNU) und ein Programm-Repo für ein Programm (zB. Python).

Bei einem System-Repo sollte (und ist auch meist) immer klar sein, dass was man da installiert ein

  • funktionierendes
  • sinnvolles
  • inhaltsvolles

Packet ist. Wenn man allerdings von einem Programm-Repo installiert, kann es gut und gerne sein, dass die letzten beiden Punkte nicht zutreffen.

Zombies

Jeder kennt sie: Sie sind irgendwie da, aber sie leben nicht mehr so richtig, und tot sind sie (leider) auch noch nicht.

Es gibt zwei Formen von Zombies: die Gutartigen und die Bösartigen.

Gutartige Zombies sind Repositories, bei denen irgendwann (vor langer Zeit) die Entwickler beschlossen haben: So passt das. Machen wir was anderes und vergessen wir das Repo. Der Code läuft (zumindest wenn man die mitunter altertümlichen Vorraussetzungen erfüllt) und macht was er soll, bloß neue Features gibt es halt nicht und er ist oftmals in einer seltsamen Zombie-Sprache (wie Basic oder Pascal) geschrieben. Wenn das Zombie ein Package ist, dann kann es sein, dass das eigentliche Programm zwar weiter entwickelt (wird|wurde) aber einfach kein neues Packet geschnürt wurde.

Bösartige Zombies sind eine Qual. Wenn sie Code Repos sind, nisten sie sich auf deiner Festplatte ein und saugen dir deine Lebens- oder Arbeitszeit ab. Man wollte nur eine fertige Library für irgendwas hernehmen, aber man braucht Stunden um sie zu compilieren. Und dann stellt man fest, dass der Entwickler einfach mitten in einem Umbau aufgehört hat weiter zu machen und die Library also im wesentlichen, entweder nichts, irgendwelchen Mist oder im schlimmsten Fall gefährlichen Mist macht, aber nicht dass wass sie soll. Wenn ein Package-Repo ein bösartiges Zombie ist, dann nicht weil es gecrackt wurde, sondern weil der Verwalter ein Packet-Chaos hinterlassen hat: Packete die nicht zusammenarbeiten, die nicht mit dem (aktualisierten) System/Programm funktionieren oder eine oder mehr Sicherheitslücken aufreißen.

In jedem Fall gilt: Vorsicht vor Zombies! Sie könnten Bösartig sein. Und Bösartige Zombies sollte man ausrotten.

Zombie-Clone sind ein Spezialfall der Code-Zombies: Irgendjemand hat sich gedacht: Dieses Repo (meist auf GitHub) gefällt mir. Das will ich auch haben, es verändern, oder was auch immer man sich in einem derartigen Moment denken mag. ABER: Wer einen Clon anfertigt, der muss sich auch drum kümmern! Der Fork-Button auf GitHub ist schnell mal gedrückt, aber man kann doch wenigstens Oben im README auf das Original Verweisen, das auch Updates erhält! Bitte! Oder einfach gleich wieder Löschen!

Ungeborene

Ich bin oben schon auf den (vermeintlichen) Workflow bei GitHub eingegangen, hier ist der Grund weshalb er so tückisch ist:

Wer eine Idee hat, ist meist sehr motiviert etwas Tolles, Neues (und Großes) zu schaffen. Das ist auch gut so, denn vielleicht wird auch was Tolles draus. Aber: ganz oft ist nach ein paar Entwürfen, Versuchen (und Fehlschlägen) die Motivation weg. Das ist auch gar kein Problem, man sollte sogar das was man gemacht hat in einem Verzeichnis irgendwo auf seiner Festplatte lassen, vielleicht kommt man ja noch mal darauf zurück.

Ätzend (für Andere) ist allerdings wenn der hoch motivierte Ideenhaber zuerst mal auf den New Repository Button bei GitHub drückt. Dann schreibt er noch ein tolles Readme in dem drin steht was sein tolles neues Ding können soll und legt (um einen komplett zu verwirren) sogar noch die Ordnerstruktur einer möglichen Implementierung an und verliert dann die Motivation.

Diese Ungeborenen nehmen nicht nur Speicherplatz auf einer öffentlichen Repo-Platform in Anspruch, sondern kosten einen lösungssuchenden Programmierer/User viel Zeit um zu merken, dass das keine Lösung, sondern ein Hoax, ein Ungeborenes ist.

WTFIT

WTFIT steht für What The F_ck Is That, und das beschreibt sie auch: Repos umd die Integration in eine IDE zu testen (nur N00bs nutzen IDEs und es gibt den Löschen Button auf GitHub!) oder Packete/Repos wie MyFirstRepo oder MyFirstPackage. Da ist sogar (fast immer komplett undokumentierter) Code drin, der auch irgendwas (evtl. gefährliches) macht, aber Komplett Unnütz, Trivial und Nicht Publizierbar ist. Warum lädt man so was hoch?

Ist es Sadismus? Naivität? Oder ein Ruf nach Aufmerksamkeit?

Zumindest Letzteres ist ja verständlich. Wer will nicht (besonders als Programmieranfänger) Anerkennung für seine Schöpfung? Aber bitte nicht in PyPi! Ich bin dafür, dass solche Anfängerprojekte auf reddit (https://www.reddit.com/r/Coding_for_Teens/ oder https://www.reddit.com/r/Coding101/ )Anerkennung Suchen/Finden sollten.

Formel des Eintrags


In [3]:
import math
f = lambda x: sum([(x // (10 ** ten)) % 10 for ten in range(int(math.log10(x)) + 1)])

Bildet die Quersumme einer Ganzzahl.


In [4]:
f(45)


Out[4]:
9