| Google-App | Ersatz (serverseitig) | Ersatz (Desktop) | Ersatz (mobil) | Fortschritt |
| Calendar | Nextcloud Calendar | Nextcloud Calendar, Thunderbird | Fossify Calendar | 🟩🟩🟩 |
| Contacts | Nextcloud Contacts | Nextcloud Contacts, Thunderbird | (weiterhin Google Contacts) | 🟩🟩🟩 |
| Docs | Nextcloud Office | Nextcloud Office | ? | 🟩⬛⬛ wg. Netzwerkeffekt und Geschwindigkeit weiter schwer zu ersetzen |
| Keep | Nextcloud Notes | Nextcloud Desktop + Neovim | Quillpad | 🟩🟩⬛ Einzelne Notizen liegen noch in Keep, Umzug erfolgt schrittweise |
| Eigene Domain und normales Webhosting-Paket + snooze-server | Thunderbird + snooze-client | Thunderbird, Nextcloud Mail | 🟩🟩⬛ Manche Kontakte senden noch an GMail, wird weitergeleitet | |
| Maps | OpenStreetMap | OpenStreetMap | CoMaps | 🟩⬛⬛ Schwierig. Erstmal Karten runterladen zu müssen ist schon ein Komfortkiller. |
| Photos | Immich? Nextcloud Photos? | Immich? Nextcloud Photos? | Immich? Nextcloud Photos? | ⬛⬛⬛ Noch kein brauchbarer Ersatz gefunden. Vielleicht Immich, wenn es Bilder drehen kann. |
| Search | MetaGer | MetaGer | MetaGer | 🟩🟩🟩 |
| Tasks | Nextcloud Tasks | Nextcloud Tasks, Thunderbird | Tasks.org | 🟩🟩⬛ Einzelne (von langer Hand geplante) Aufgaben liegen noch bei Google, Umzug erfolgt schrittweise |
Archiv der Kategorie: Technik
PowerDrop, iDrop, DropBook

Automatisiertes Posten in einem Simple Machines Forum
Seit 2002 betreibe ich die Website der Gesellschaft zur Stärkung der Verben (GSV), seit 2007 nutze ich dafür die von Wikipedia bekannte Wiki-Software MediaWiki. Seit 2003 gibt es parallel dazu ein Forum, auch bulletin board genannt. Dieses läuft mit der Forensoftware Simple Machines Forum (SMF), die aber erst seit 2004 so heißt. Als ich das Forum einrichtete, hieß sie noch YaBB SE. Zu den aktiveren Zeiten der GSV fand die meiste Interaktion zwischen den Mitgliedern im Forum statt. Um die Aktivität im Wiki sichtbarer zu machen, richtete ich ein Skript ein, das regelmäßig den RSS-Feed der letzten Änderungen im Wiki abruft und neue Änderungen als Forenpost formatiert in einen dedizierten Faden im Forum postet. Dieses Skript hatte zunächst die Form eines SMF-Mods. Mods sind softwaretechnisch gesehen abenteuerliche Gebilde. Ähnlich wie Plugins fügen sie der Basissoftware (hier: SMF) neue Funktionalität hinzu. Sie tun dies jedoch nicht notwendigerweise über sauber definierte Schnittstellen. Vielmehr können sie, und so war es in diesem Fall, als eine Art Patch in einem SMF-eigenen XML-Format daherkommen, mit dem der PHP-Code von SMF im laufenden Betrieb modifiziert wird. Es ist sogar SMF selbst, das diese Modifikation an sich vornimmt, über den Paketmanager im Administrationsbereich. Neben dem Patch zur Installation enthalten Mods auch einen Patch zur Deinstallation, der unabhängig von ersterem ist. Z.B. sagt der Installationspatch »Suche in Datei X nach dem String ABC und füge direkt danach den String XYZ ein« und der Deinstallationspatch sagt »Suche in Datei X nach dem String XYZ und entferne ihn.« Man kann sich leicht vorstellen, wie chaotisch es werden kann, wenn eine Mod-Autorin es versäumt, die beiden Patches synchron zu halten, wenn SMF ein Update erhält, durch das der String ABC verändert wird, oder wenn zwei Mods benachbarte Codebereiche modifizieren. Aber für viele Jahre funktionierte mein Setup, basierend auf einer selbst modifizierten Version eines nicht mehr gepflegten Mods namens »RSS Feed Poster«, das eine komplette RSS-Parsing-Bibliothek im Code mit sich führte, gut. Erst kürzlich begann es zu holpern, es kam zu Dopplungen bei den Einträgen. Ich vermute, es hatte etwas mit neuen aggressiven Rate-Limiting-Einstellungen seitens meines Webhosters zu tun, durch die das Skript abbrach, bevor es Gelegenheit bekam, in der Datenbank zu vermerken, welche Feed-Einträge es schon bearbeitet hatte. Das nahm ich zum Anlass, endlich einen softwaretechnisch schöneren Zustand herzustellen, indem ich das Mod aufs Altenteil schickte und durch ein Python-Skript ersetzte, das auf dem Server als Cronjob läuft. Das Auslesen des Feeds der letzten Änderungen aus MediaWiki umzusetzen war easy, Feed-Parsing-Bibliotheken für Python gibt es zuhauf, ich entschied mich für feedparser. Interessanter war die Interaktion mit SMF, das leider über kein API verfügt. Mein Skript muss also so tun, als wäre es eine menschliche Benutzerin, die sich über einen Browser in das Forum einloggt und dort einen Beitrag verfasst. Dazu braucht man einen sog. headless web browser. Als ich aus dieser langen Liste einmal einen ausgewählt hatte, der schön leichtgewichtig ist und ein herzaugenmachend cutes API hat, nämlich mechanicalsoup, war auch das ein Vergnügen. Ah, die Freuden der Systempflege!
Vorlesungsaufzeichnung mit Kamera-Roboter
Eine Studentin kann wegen einer Überschneidung meine Vorlesung nicht besuchen und fragt, ob eine Videoaufnahme gemacht werden könne. Mir gefällt die Idee. Wenn die Vorlesung aufgezeichnet wird und von den Kursteilnehmer/inne/n zeit- und ortsunabhängig gesehen und gehört werden kann, lohnt sich der im Vergleich zum Ertrag dieses eher veralteten Wissensvermittlungsformats doch recht hohe Vorbereitungs- und Energieaufwand sicher etwas mehr.
Ich also in den Hörsaal, um zu gucken, ob da eine fest installierte Kamera ist. Das ist der Fall. Aber wie benutzt man sie? Ich frage in der Portiersloge, die schickt mich zum AV-Dienst, der schickt mich zum Büro für studentische Angelegenheiten, das schickt mich zur Abteilung Stundenpläne. Dort wird die Vorlesung im zentralen Stundenplansystem als aufzunehmen markiert, mir wird aber nahegelegt, wegen der Kurzfristigkeit dem AV-Dienst nochmal Bescheid zu sagen, damit die den anscheinend erforderlichen analogen Zwischenschritt noch vornehmen können. Das tue ich per E-Mail, die Bestätigung kommt alsbald und ich kann im webbasierten Kursportal meinem Kurs eine Sektion hinzufügen, in der dann die Videos aller Vorlesungswochen nach und nach automatisch auftauchen sollen.
Von da an geht anscheinend tatsächlich fast alles von selbst. Vor der ersten Vorlesungssitzung hole ich in der Portiersloge ein Funkmikrofon ab. Pünktlich um 13:00 Uhr geht im Hörsaal die Kamera an und dreht sich automatisch, wenn ich auf und ab schreite. Die ersten zehn Minuten lang zeichnet sie ohne Ton die Versuche von mir und der studentischen Hilfskraft auf, PC und Beamer zum Laufen zu kriegen. Alles wird zentral über ein Touchscreen-Gerät bedient, das sich aber anscheinend gerne mal aufhängt, und der Neustart beinhaltet einen kompletten Abkühl- und Wiederaufwärm-Zyklus des Beamers. Nicht alle Technik ist so benutzerfreundlich wie der freundliche Kamera-Roboter.
Am Anfang und Ende des Vortrags und aller Pausen gelingt es mir jeweils, den Mute-Schalter im richtigen Moment in die richtige Stellung zu bringen. Minuten nach der Vorlesung ist im Kursportal ein Vorschaubild zu sehen, nach ein paar Stunden ist das Video dann transkodiert und kann angesehen werden – schön mit dem separat aufgezeichneten Output des Beamers daneben, wie man das mag. Gerne wieder.
Matching in Perl, Python and Java
Quick quiz: Which of these expressions return a truthy value? Kudos if you don’t have to try it out or look it up.
| Perl | Python | Java |
|---|---|---|
"zabc" =~ /abc/ |
re.match("abc", "zabc") |
Pattern.matches("abc", "zabc") |
"abcd" =~ /abc/ |
re.match("abc", "abcd") |
Pattern.matches("abc", "abcd") |
Your diff viewer is right
I stumbled upon the most ridiculous article tonight. The author claims diff viewers are wrong for displaying deletions in red and additions in green. Why? Because, he says, that is tantamount to passing a value judgment, red being associated with evil and danger, and green with good, and all:
Our diff viewer, then, tells us that deletions are bad, dangerous, and possibly an error, while insertions are good, safe, and successful. More code good. Less code bad.
At this point we know the article is utterly flawed, because of course it is not the deletions that are colored red by diff viewers such as GitHub’s. It is the old code. The author acknowledges this objection:
Edit: multiple people have suggested a different interpretation: old code bad, new code good.
But he still tries to save his argument:
However, since that would be a similarly invalid value judgment, the argument below is still valid.
Invalid value judgment? Why, of course the old code is bad, or at least worse than whatever replaced it – hopefully! Otherwise, why would we have deleted it? Perhaps what the author is thinking about is that we may have made a mistake and don’t know whether we really improved the program:
In reality, insertion/deletion is orthogonal to good/bad. There are good insertions, good deletions, bad insertions, bad deletions. Only we humans get to judge which changes are good and which are bad, but during code review, the diff viewer is constantly subtly trying to influence our judgment.
But he got it all backwards. A human already made the decision that the old code is bad, and the diff viewer had better be doing its job and reflect that judgment! Software cannot spot the programmer’s mistakes – it should make her intent clear so she or others will hopefully notice.
As far-fetched as the author’s complaints about diff viewers trying to influence our judgment is his theory of why red came to accompany deletions and green, additions:
I believe the reason for this strange color scheme is the lack of a revision control system. Back in the dark ages of programming, we didn’t use them. We edited files on disk, and that was that. In that environment, a deletion is dangerous. (…) But we don’t live in a world without revision control. It is peculiarly ironic that the ‘deletion is dangerous’ sermon is being delivered by our version control systems. That same revision control system which tells us that ‘it’s okay to delete things, because it’s all still there in the history.’
Far from it – there are still very good reasons to associate deletions with danger, and therefore, the color that stands out the most (red). Philosophically appealing though the author’s God-like perspective on revision histories may be – there is no time, all is one, deletions and additions are just the same thing seen from two sides – in reality, software development still happens from past to future.
This firstly means that deleted lines are, though not lost, quickly forgotten – and hopefully for a good reason. Highlighting them in a color that warns us to check our deletions carefully helps avoid relegating important stuff to history and later not being able or bothered to retrieve it.
Secondly, the function of a diff – at least the type that the author shows us, which is not side-by-side – is not to show us an impartial view between two versions of equal status. What we are typically interested in is the new version and how it compares to the previous one. And the new version is right there: it consists of the white and green lines. The green ones are marked for being new, but other than that are not really different from the white ones. In addition, there are red lines showing us what was deleted. Mistaking a red line for part of the new version would be dangerously misleading – hence, again, the signal color.
Lemmidemmi (3): Ebbe
Lemmidemmi (2): Der Nachzügler
Lemmidemmi (1): Der Außenseiter
In related news: how to turn a 13-year-old QBASIC program into an animated GIF.
Der Vorteil von zoomenden Präsentationsprogrammen
Über Vortragsfolien hatte ich alles gesagt, bis ich Prezi entdeckte. Richtig eingesetzt, halte ich Prezi und andere zoomende Präsentationsprogramme für eine ausgesprochen gute Idee. Eine häufige Hauptschwierigkeit beim Gestalten von Vorträgen ist ja, dass man beim Publikum gleichzeitig das Verständnis für Details wecken und das Verständnis für das große Ganze am Leben halten muss, das „big picture“, das Thema des gesamten Vortrags oder der Vortragsreihe. Mit dem Zoomeffekt kann man das Verhältnis von beidem sehr schön veranschaulichen, indem man zum Beispiel ein großes Diagramm macht und im Laufe des Vortrags zwischen diesem und dem jeweils nächsten Detailframe hin- und herzoomt. Ich habe das erstmalig in meinem LREC-Vortrag vom letzten Jahr ausprobiert, in dem es um die Pipeline ging, mit der die Groningen Meaning Bank erstellt wird:
Wenn man das groß genug ausdruckt (sagen wir, auf A3), hat man auch ein schönes Handout, und wenn man es noch größer ausdruckt, hat man ein Poster. Ich kann mir auch vorstellen, dass man auf ähnliche Weise mit visueller Strukturierung und Zoomen mit Gewinn den Stoff für ein ganzes Seminar in eine Präsentation packen kann, etwa mit Hilfe der freien Prezi-Alternative Sozi. Das will ausprobiert werden.
Bloß als knalligen Übergangseffekt sollte man das Zoomen, Drehen und Fahren natürlich nicht verwenden.



