Mozilla thunderbird des tages

Die wollen die weltherrschaft durch programmierung und bessere benutzerschnittstelle anstreben:

Wir sind nicht der dominante E-Mail-Client, aber der wollen wir werden

*grusel!*

Aber immerhin: wer einmal versucht hat, einen normalen anwender zu erklären, wie man im thunderbird eine regel definiert (das geht so, wie hier an einem komplizierten beispiel erklärt), der weiß, dass diese benutzerschnittstelle nicht das gelbe vom ei ist. Und nein, an anderen stellen sieht es auch nicht so viel besser aus, sondern eine überwältigende überkomplexität trifft auf schlechte benutzerführung der neunziger jahre. Und das nicht erst seit gestern. Vielleicht machen sie es ja gut, statt einfach nur modern. Man wird ja noch ein bisschen hoffen dürfen. Bis jetzt kann ich nur sagen, dass die relativ kleinen veränderungen der letzten fünf jahre durch die bank weg verschlechterungen waren. Das gilt auch für die integrazjon von PGP, die so dermaßen viel schlechter und undurchschabarer als das vorherige äddon enigmail geraten ist, dass selbst ich ein paar probleme damit hatte. Ich habe damals gespottet, dass die mozilla foundation wohl eine spende der NSA empfangen haben müsse, weil verschlüsselung viel zu einfach geworden sei.

Aber lassen wir das, in aller trübsal ist noch ein fünklein licht:

Das neue UI ist optional und wird es immer bleiben

Hoffentlich stimmt das.

Die ganzen alten schwächen dürfen sie gerne rausfummeln, auch in den kern gehend. Das lokale speicherformat für die mäjhls ist zum beispiel so schwierig zu parsen, dass es vor ein paar monaten einen üblen fehler gab, der sogar zum verlust von mäjhls führte. Es war einer der schlimmsten thunderbird-fehler, die ich je erlebt habe. So etwas darf man wirklich gern robuster und besser machen.

Prof. dr. Offensichtlich

Prof. dr. Offensichtlich, der forsche forscher an allen fronten der erkenntnis, hat mal ein paar kompjuterfachleute gefragt, was denn an ihrer arbeit so frustrierend ist, und er hat dabei fürwahr erstaunliches herausgefunden:

Laut einer Studie des Business-Software-Herstellers Freshworks unter 2000 IT-Profis weltweit ist Bloatware am Arbeitsplatz ein wichtiger Faktor für Frust bei der Arbeit […] 94 Prozent glauben, dass ihr Unternehmen davon profitieren würde, die Anzahl der Anwendungen zu reduzieren. Jeweils ein Drittel der Befragten sagt, dass sie veraltete Legacy-Software nutzen und dass sich ihre Firma nicht darum kümmert, dass sie mit schlechter Software arbeiten müssen […] 91 Prozent der befragten IT-Profis sind von der Software in ihrer Firma frustriert, weil sie ihre Arbeit verlangsamt, zu unflexibel ist oder sie zu viele unterschiedliche Programme nutzen müssen, um ihren Job getan zu kriegen. Aber warum ändert sich nichts? 70 Prozent sagten in der Studie, dass sie kein Feedback zu untauglicher Software geben – weil sie nicht als Meckerer dastehen wollen, weil ihre Firma Feedback in der Vergangenheit ignoriert hat oder weil sie glauben, dass ihnen sowieso niemand zuhört

Gar nicht auszudenken, was rauskommt, wenn prof. dr. Offensichtlich jetzt auch noch ganz normale anwender befragt. Davon, was passiert, wenn man seinem scheff oder anderen entscheidungsträgern die verwendung einer anderen softwäjhr vorschlägt (die auch noch preiswerter ist und gewisse lästige probleme gar nicht erst aufkommen lässt), könnte ich ein ganz langes lied singen. In den kwäligsten schmerztonarten.

Deine benutzerfreundliche softwähr weiß viel besser, was du eigentlich willst und was das beste für dich wäre, als du es selbst weißt

Das Problem der von Excel unbemerkt umgewandelten Bezeichnungen von Genen in wissenschaftlichen Veröffentlichungen ist noch größer als bislang angenommen. Das hat ein Team um Mandhri Abeysooriya von der Deakin University in Australien herausgefunden. Fast jede dritte wissenschaftliche Veröffentlichung mit einer Excel-Liste von Genen im Anhang wies demnach solche Fehler auf, vorher war die Rede von etwa 20 Prozent. Nachdem das Problem bereits seit Jahren bekannt sei, habe sich auch keine Verbesserung gezeigt, warnen die Forscherinnen und der Forscher […] Es geht darum, dass Microsofts Tabellenkalkulation Excel bestimmte alphanumerische Bezeichnungen für Gene automatisch und ohne Hinweis in Datumsangaben umwandelt

Da habt ihr eure nutzerfreundlichkeit!!1!

(Aber die nutzen excel als datenerfassungs- oder auswertungsprogramm? Echt jetzt? Die haben nix besseres? Oder liegts daran, dass sie nix anderes kennen?)

Wer gut englisch versteht und eine viertelstunde vergnüglicher zeit haben möchte, sollte sich mal Matt Parker über die verwendung von tabellenkalkulazjonen anschauen. Empfindliche gemüter legen dabei aber besser den verstärkten gesichtsbeklatschungsschutz an. Und der link geht natürlich zu evil juhtjuhbb. Wer das träcking durch evil guhgell vermeiden möchte: hier lang!

Eine mögliche alternative zu youtube-dl…

benötigt vielleicht noch ein bisschen tjuhning und ein paar module für weitere videoplattformen, wie etwa die mediateken von ARD und ZDF und natürlich die diversen pr0n-webseits. Nein, ich habe keine erfahrung in rust und überlasse das lieber den menschen, die sich um die jeweiligen daunlohd-verhinderungen herumwerkeln, ohne dabei auch noch die programmiersprache lernen zu müssen. 😉

Herzallerliebst der kommentarbereich unterm artikel. Internetz in bestform!

Wo DRM und kopierschutz draufsteht, ist enteignung drin

Disney hat im Dezember 2010 das PC Game Tron: Evolution veröffentlicht. Wer das Game gekauft hat, hat jetzt das Nachsehen. Das Game läuft mit Ausnahme der Schwarzkopie nicht mehr […] Disney hätte es Geld gekostet, weiterhin alte Spieletitel mithilfe des SecuROM Systems zu schützen. Und weil Disney das Abo nicht verlängert hat, sind alle mit SecuRom geschützten Spiele jetzt unbrauchbar

Seht ihr, leute, und deshalb besorgt man sich eine so genannte „raubkopie“ mit einem kräck! Die läuft nämlich auch dann noch, wenn so eine klitsche wie disney entschieden hat, dass die softwäjhr jetzt nicht mehr laufen soll. Wer dafür bezahlt hat, hat am ende weniger. Denn genau dafür wird ein gewisser teil des bezahlten geldes ausgegeben, dafür, dass man als zahlender kunde am ende weniger hat. Da muss man schon ganz schön doof sein, wenn man das auch noch bezahlt. Noch besser ist es, sich gleich andere softwäjhr ohne gängelung, abzocke und enteignung zu holen. Die ist dann aber nicht von disney (oder äppel, meikrosoft, adobe)? Passt. 😉

Sinnlos verbautes funkzjonsmerkmal des tages

Der KDE-Dateimanager führt unter bestimmten Umständen Schadcode aus. Die Entwickler entfernen die Funktion nun, da sie sowieso niemand verwendet hatte

Das wäre doch mal ein anfang: funkzjonen aus softwäjhr entfernen, die da drin sind, weil irgendwann einmal eine „tolle idee“ hatte (oder ausprobieren wollte, was er im studium gehört und nur halb verstanden hat), die aber gar nicht oder kaum benutzt werden. Wenn man jetzt damit anfängt und sich keine falsche zurückhaltung beim entfernen sinnloser funkzjonen auferlegt, ist in wenigen jahren alles besser. Die softwäjhr wird schneller geladen und schneller ausgeführt, und sie wird sicherer. Denn komplexität ist bei softwäjhr nun einmal das genaue gegenteil von sicherheit.

Ich musste jedenfalls unwillkürlich an einige nahezu unlesbar gewordene kwältexte im GNU-projekt denken. 😀

Da ist geld, ab in die flammen damit…

60 Millionen Euro gab die Bundesagentur für Arbeit für eine Software aus, die 14 verschiedene Anwendungen bündeln sollte. Nun stellt die Behörde fest: Das System funktioniert nicht

Woran scheitert es? Vermutlich scheitert es daran, dass die programmierer bei der bundesagentur für arbeit in ihrem mutmaßlich von der bundesagentur für arbeit erteilten SQL-kurs noch kein UPDATE hatten und deshalb keine möglichkeit gesehen haben, dem anwender eine datenbearbeitung zu ermöglichen:

Es habe sich gezeigt, das nachträgliche Änderungen, etwa die Korrektur einer Kontonummer, in dem System nicht möglich seien. Um eine solche Angabe dennoch korrigieren zu können, habe man sämtlich Leistungs- und Vermittlungsdaten in das System neu eingeben müssen

m(

Welcher zertifizierte spezjalexperte (name, vorname, geburtsdatum) hat da das projektmänätschment gemacht?

Waren ja auch nur sechzig milljönchen, die für so einen erbärmlichen schrott verbrannt wurden. Haftet ja auch niemand für. Das geld holt man einfach wieder rein, indem man es einspart. Zum beispiel, indem man hartz-IV-empfänger mit willkürlichen schikanen in den freitod treibt. Wo ist also das problem? :mrgreen:

Was der jornalist verschweigt, ist, um was für ein „großprojekt“ es sich dabei gehandelt hat. Hier mal eine kleine präsentation für jornalisten und die interessierte öffentlichkeit, und zur absicherung gegen durch löschung verursachte datenarmut hier noch eine lokale sicherheitskopie davon.

Achtung, vor dem weiterlesen getränke aus dem mund entfernen!

Immer daran denken: Heute benötigt der mitarbeiter viele IT verfahren [sic! Deppen leer zeichen!], mit medienbrüchen und oberflächengestaltungen. (Seite 4 der BA-internen präsentazjon.) Bwahahahaha! Die staatlich entlohnten hartz-IV-kwäler bei der BA sind damit überfordert, wenn sie mehr als eine anwendung benutzen müssen, und deshalb sollte eine eierlegende wollmilchsau geproggt werden (anstatt etwa einer vernünftigen schnittstelle zwischen den bestehenden fachanwendungen, die die arbeit mit diesem gewaxenen kaos erleichtert, fehlerkwellen reduziert und die man schön nach und nach implementieren und schrittweise ausrollen kann, um früh schwächen zu entdecken)! Nachdem ich das gesehen habe, braucht mir niemand mehr das pflichtenheft zuzustecken. Dieser fisch stinkt von dem kopfe her, der solche tollen ideen ausbrütet und solche entscheidungen trifft.

(Wenn doch jemand ein mutmaßlich dickes, aufgeblähtes und für programmierer letztlich unbrauchbares pflichtenheft rumliegen hat, bevorzugt als PDF: ich freue mich drüber. Wenn da irgendwo ein paar kwelltexte auf einem CVS-sörver lumlungern, die auf einen checkout warten, freue ich mich darüber genau so. Es gibt ja eine menge sharehoster. Aber kümmer dich bitte selbst darum, dass man dich nicht identifizieren kann, denn ich werde das hier genau so bringen. Und wenn du mehr aufmerksamkeit brauchst, steck es Fefe, der freut sich auch. Ich bin mir sehr sicher, dass im pflichtenheft nicht drinsteht, dass man daten auch mal bearbeiten können muss, denn dieses kleine funkzjonsmerkmal ist doch — trotz der fachlichen anforderungen an dokumentazjonspflicht und völliger nachvollziehbarkeit des gesamten verwaltungsvorganges mit allen altdaten — ziemlich trivial…)

Kwalitätssoftwäjhr des tages

Vor vielen jahren habe ich mal in einem C++-projekt eine der schlimmsten zeilen kohd gesehen, die ich je gesehen habe (nicht-programmierern ist das nur schwierig zu erklären):

#define private public

Nun, wenn man so etwas in PHP machen will, hat man zwar keinen präprozessor zur verfügung, aber das heißt noch lange nicht, dass man das nicht doch irgendwie machen kann.

Was uns allen… na ja: aber doch einigen… gefehlt hat…

An Open Source reimplementation of Windows PowerShell, for Mono. https://groups.google.com/group/pash-project

Gefällt mir! Leider noch alfa, also noch nicht wirklich empfehlenswert. Ich — als jemand, der es oft mit der bash (und manchmal mit der ollen sh) und praktisch nie mit der powershell zu tun hat — habe mir nicht angeschaut, wie weit die sind und was alles geht. Ein paar lustige bildschirmfotos gibt es schon.

Smartdingens des tages

Gut, im jahr 2005 hatten die werber noch nicht das wort „smart“ erfunden, aber digitaltechnik wurde trotzdem überall verbaut. Zum beispiel in autos. Und dann wurde programmiert, dass man nur froh drüber sein kann, wenn meistens gut gegangen ist. Muss sich ja niemand wegen der mordversuche aus niederen motiven (profitstreben) im industriemaßstab vor irgendeinem gericht verantworten, geht auch niemand hinter schwedische gardinen, also drauf geschissen!

Wer gern englisch liest: der von Fefe verlinkte englische text lehrt erst so richtig das gruseln.

Auch weiterhin viel spaß mit geheimgehaltener softwäjhr irgendwelcher profitorientierter unternehmen, die in allen möglichen geräten wie ein technischer zauber vor sich hinläuft, ohne dass sich irgendjemand gedanken drum macht! Freut ihr euch auch schon so auf das „internetz der dinge“? :mrgreen:

Es ist ja nicht so, dass man sich bei toyota nicht um softwäjhrkwalität bemüht hätte… nur der industriestandard war halt zu aufwändig, zu langsam und zu teuer, und da hat man sich dann halt einen privaten standard ausgedacht:

Toyota substituted its own process, which had little overlap with the industry standard. Even so, Toyota’s programmers often broke their own rules

Kennt ihr die reklame noch? *sing!* „Nichts ist unmöglich… toyota…“ 👿

VW (und rechtsfreier raum) des tages

Wisst ihr eigentlich, warum VW über jahre hinweg mit einen betrug durchgekommen ist, der so dreist ist, dass man sich nicht einmal mehr rausreden kann, wenn man erwischt wird? Das liegt am bananengeschmack in der bimbesrepublik deutschland, der dort aufkommt, wo von der p’litik ganz gezielt „rechtsfreie räume“ geschaffen werden:

Im VW-Skandal um manipulierte Abgaswerte hat der TÜV Nord schwere Vorwürfe gegen die Bundesregierung erhoben. Diese habe den Prüfern auf Drängen der Automobilindustrie untersagt, die Motorsoftware zu untersuchen […] „Wir haben leider gesetzlich keinerlei Möglichkeit, Einblicke in die Motorsteuerung und die dort verbaute Software der Fahrzeuge zu nehmen“

Wegen dieser bedingungen in korruptistan konnte sich die tief in die BRD-p’litik verflochtene organisierte kriminalität namens VW auch ihrer sache so sicher sein.

Ich wünsche euch übrigens auch weiterhin viel spaß mit allen geräten, die mit geheimgehaltener softwäjhr betrieben werden! Und natürlich mit regierungen und parlamenten, die mit ihrem gut geschmierten gestaltungswillen dafür sorgen, dass solche unverschämtheiten wie geheimgehaltene softwäjhr zum gesellschaftlichen standard werden.

Ach ja, apropos korruptistan — das funkzjoniert ja auch besser mit totaler verblödung der menschen, und dazu leistet auch die ARD-tagesschau ihren regelmäßigen beitrag:

Zudem manipulierte der Wolfsburger Konzern auch bei 800.000 Autos die Angaben zum Ausstoß des klimaschädlichen Kohlendioxids

Was die aktuelle kamera der BRD hier mal wieder verschweigt, ist die für käufer von autos vielleicht gar nicht so unwichtige bedeutung dieser angabe. Aber nein, das würde die leute ja zu schlau machen, wenn man ihnen deutlich macht, wie der betrug von VW mitten ins eigene geld reinragt. Ist eben besser fürs geschäft derer, die die BRD-p’litik kaufen, wenn die menschen in der BRD dumm bleiben — und somit fügt sich die verdummung der massen durch das BRD-staatsfernsehen prächtig in die von monströsen, verbrecherischen unternehmen gekaufte BRD-p’litik.

Autostilllegung des tages

Unterdessen erhöht das Kraftfahrtbundesamt (KBA) den Druck auf Volkswagen. Die Behörde habe die Rechtsabteilung von VW schriftlich aufgefordert, bis zum 7. Oktober einen „verbindlichen Maßnahmen- und Zeitplan“ vorzulegen, ob und bis wann die Fahrzeuge ohne Manipulationssoftware die verbindliche Abgas-Verordnung einhalten werden, berichtet die Zeitung.

In einem zweiseitigen Schreiben heiße es, die Behörde sei aufgrund der Rechtslage dazu gezwungen, „die erforderlichen Maßnahmen anzuordnen, um sicherzustellen, dass die hergestellten Fahrzeuge mit dem jeweiligen genehmigten Typ in Übereinstimmung gebracht werden“. Sollte Volkswagen die Aufforderung nicht beachten, könnten die Typengenehmigungen der Wagen entzogen werden. Dann dürften die betroffenen Autos nicht mehr verkauft oder bewegt [!] werden

Na, da würden sich aber alle „freuen“, die einen atmosfärenkonverter von VW gekauft haben! Aber hinstellen darf man ihn noch… sieht ja hübsch aus, wie er da steht und raum einnimmt. :mrgreen:

Aber keine sorge, VW wird schon etwas vorlegen; es ist ja nicht so schwierig, papier zu bedrucken. Ob die das auch einhalten, spielt fürs gestellte ultimatum zunächst keine rolle, und es wäre auch mal etwas völlig neues in der BRD, dass betrug in derartigen ausmaßen irgendeine konsekwenz für die täter hätte. Hier, in der bananigen republik täuschland, werden schließlich betrug, blenderei, hochstapelei und großkriminalität dermaßen kultiviert und allmedial verherrlicht, dass sie geradezu zur bedingung für gesellschaftlichen aufstieg und wirtschaftlichen erfolg geworden sind.

Deshalb kann auch eifrig erklärt (und von der scheißpresse unkommentiert zu den augen und hirnen der leser weitergetragen) werden, dass sich das problem mit einem softwäjhr-update lösen lässt, obwohl jedes mit gewöhnlichen funkzjonsmerkmalen ausgestattete gehirn bemerken sollte, was das für eine bullschittige lüge ist. Denn wenn die hardwäjhr die geforderten werte nicht einhalten konnte und deshalb eine vorsätzlich zu diesem zweck geproggte betrugssoftwäjhr einen falschen eindruck erweckte, dann wird sich das problem nicht in wohlgefallen auflösen, wenn man die betrugssoftwäjhr gegen eine nicht betrügerische softwäjhr austauscht. Allein die tatsache, dass die professjonellen PR-lügner von VW diese dürftige und für jeden durchschnittlich begabten zehnjährigen (so er nicht sohn eines jornalisten ist) durchschaubare lüge versuchen, zeigt, wie sehr man bei VW die intelligenz der eigenen kunden verachtet. Denn wenn das so einfach ginge, dann hätte VW den riskanten betrug mit vorsätzlich zu diesem zweck geschriebener betrugssoftwäjhr gar nicht erst nötig gehabt.

Aber was kümmert sich ein scheißjornalist schon um logik und hirnbenutzung, wenn es um die PR-lügen eines großes werbekunden einer scheißzeitung geht?! Was bin ich froh, dass ich den anfang vom ende der scheißpresse erlebt habe!

Stirb, scheißjornalist, stirb! Verrecke, scheißverleger, verrecke!

Bundesagentur für armut des tages

Wenn ihr jemals was mit einem jobcenter zu tun haben solltet…

BA-Mitarbeiter und Kunden berichten, dass es nach den üblicherweise am Wochenende eingespielten Updates regelmäßig zu Störungen kommt, wenn auch nicht so schweren wie in der vergangenen Woche

…dann akzeptiert am besten nur termine von mittwoch bis freitag. :mrgreen:

Prof. dr. Offensichtlich

Prof. dr. Offensichtlich sitzt gerade in der karl-wiechert-allee und hats da rausgekriegt: den leuten wird unfertige und oft unbrauchbare bananensoftwäjhr zum preis einer vollversjon verkauft. Jetzt muss prof. dr. Offensichtlich nur noch bemerken, dass das nicht nur für spiele gilt, sondern seit etlichen jahren für beinahe alle softwäjhr von so ziemlich jeder klitsche, die vom softwäjhr-verkauf lebt.

Ach, geht nicht, weils nicht zu den reklame-partnerschaften von heise passt? Schon gut, ich habs ja verstanden…

Ubuntus gwibber ist schrott!

Ich benutze häufig (vor allem, wenn ich an ubuntu-kisten sitze) gwibber, um meist eher bedeutungslose textstummel auf twitter und identi.ca zu posten. Wenn man einmal davon absieht, dass dieses programm für einen recht kleinen anwendungsfall einen recht großen speicherabdruck hinterlässt, ist es an sich ganz brauchbar.

Es ist vermutlich leicht vorstellbar, dass ich dieses stück softwäjhr oft sehr lange im hintergrund mitlaufen lasse. Genau dafür scheint mir so eine softwäjhr auch gemacht zu sein, dass sie ähnlich wie ein IRC-klient oder ein IM-programm gut im hintergrund laufen kann. Wenn mein nick erwähnt wird, bekomme ich eine kleine einblendung auf dem desktop, die mich zur aufmerksamkeit ruft.

So weit das gute.

Und nun das miese, also die art, wie dieses gwibber seine daten speichert. Und natürlich, wie dieses gwibber programmiert wurde.

Fange ich mal damit an, wie ich das problem entdeckt habe. Mir ist aufgefallen, dass einer der rechner, an denen ich häufig sitze, in regelmäßigen abständen in die knie ging. Es ist ein für meine verhältnisse ausgesprochen gut ausgestatteter rechner mit einer zweikern-CPU und 4 GiB RAM. Dennoch stand dieser rechner regelmäßig so sehr unter last, dass ich bei der audiobearbeitung probleme mit aussetzern bekam und es sogar zu rucklern beim abspielen von 720p-videos gekommen ist.

Natürlich empfand ich das als untragbar. Die video-probleme sind für mich eher untergeordnet, aber wenn ich keine klänge bearbeiten kann, ist ein kompjuter für mich kastriert. Ich benutze kompjuter verdammt noch mal zum musikmachen, und ich konnte das schon in den neunziger jahren mit meinem amiga machen, ohne mich mit derartigen aussetzern herumschlagen zu müssen.

Und deshalb habe ich mir dieses problem näher angeschaut.

Dabei ist mir schnell aufgefallen, dass der rechner in regelmäßigen abständen für mehrere sekunden eine CPU-auslastung von 100 prozent hat. Genauer gesagt: er wurde alle fünf minuten für ungefähr fünfzehn bis zwanzig sekunden unter so große last gesetzt, dass andere prozesse nicht mehr rund liefen.

Alle fünf minuten… schnell fiel mir ein, dass das genau die frekwenz war, mit der sich gwibber automatisch aktualisiert. Genauer gesagt: mit der sich ein hintergrund-prozess, der übrigens auch noch läuft, wenn man gwibber beendet hat, die fiepser und die statusmeldungen von identi.ca abholt, um sie lokal zu speichern. Ein aufruf von top an der kommandozeile brachte gewissheit, es war der prozess gwibber-service, der mir hier den spaß am rechner verdarb.

„Aber das ging doch früher“, habe ich mir gedacht.

Und dann bekam ich einen verdacht, dass gwibber wohl unmengen alter daten irgendwo gespeichert hatte und inzwischen probleme haben könnte, neue daten einzufügen.

Zeit, sich das einmal anzuschauen.

Zum glück speichert gwibber seine daten wie erwartet unter ~/.config/gwibber. In diesem verzeichnis liegt eine sqlite3-datenbank mit dem namen gwibber.sqlite herum. Ein schnelles ls -l führte dann dazu, dass mir einen kurzen moment lang die gesichtszüge entgleisten:

$ ls -l
-rw-r--r-- 1 elias elias 684362752 Apr 26 15:39 gwibber.sqlite
$ _

Dieses… ähm… tolle programm hat also im laufe der zeit 652,7 MiB an daten gespeichert. Kein wunder, dass das einfügen von daten in diese übergroße datei, das aktualisieren der indizes, und das anschließende benachrichtigen des GUI-prozesses gwibber, der aus dieser datei dann die neue ansicht ermittelt, ein bisschen last verursacht.

Ich dachte einen moment lang, dass gwibber niemals alte nachrichten löschen würde und dass die programmierer hirnlose vollpfosten seien, die ihre eigene softwäjhr gar nicht nutzen. Dieser gedanke erwies sich allerdings als halber trugschluss, denn in gwibber befindet sich sehr wohl etwas kohd, der die datenbank von alten einträgen befreit. In einer etwas obskuren SQL-anweisung mit zwei unter-SELECTs werden für jeden dienst alle nachrichten bis auf die letzten 2000 entfernt. Dies gilt allerdings nur für normale nachrichten. Gwibber hält… moment…

*tipptipptipp* SELECT stream, count(*) from messages group by 1;

…aber neben den „messages“ auch noch „images“, „links“, „lists“, „private“, „profile“, „replies“, „search“, „send_private“, „send_thread“, „user“ und „videos“ — und moment…

*tipptipptipp* SELECT operation, count(*) from messages group by 1;

…neben den empfangenen nachrichten („receive“) auch ein paar weitere nachrichtentypen, die als „lists“, „private“, „receive“, „responses“, „search“, „send“, „send_private“, „send_thread“ und „user_messages“ ausgewiesen sind. Was das alles bedeutet? Ich kann es in einigen fällen sicher erraten, und in anderen ist es mir eigentlich egal.

Entscheidend ist nur eines: alles, was gwibber davon selbst löscht, sind einträge, bei denen operation = "receive" und stream = "message" ist.

Und alles andere sammelt sich im laufe der zeit in einer datenbank an, über deren relationales desein ich an dieser stelle lieber den gnädigen schleier des schweigens senke, um nicht an einem akuten mangel unflätiger wörter zu verenden. Nur so viel sei hierzu noch angemerkt: Damit die datenbank auch schön moppelig werde und nicht gar zu viel platz auf der festplatte unbelegt bleibe, steht zu jedem eintrag einer nachricht auch noch das vollständige json-format, in dem er vom gwibber-service empfangen wurde, in der datenbank. Was die programmierer sich dabei gedacht haben? Ich weiß es nicht. Vielleicht wollten sie einfach eine möglichkeit der wiederherstellung haben, wenn einmal eine spalte mit daten verdampft. :mrgreen:

Nun gut, wenn gwibber das selbst nicht besser kann, muss ich das problem halt ein bisschen „spanabhebend“ lösen. Zum Beispiel, indem ich mit einer SQL-anweisung alle einträge lösche, die älter als dreißig tage sind. Und weil zu erwarten ist, dass ich diese wartungsaufgabe noch etwas häufiger vor mir haben werde, und weil andererseits nicht zu erwarten ist, dass die im auftrage canonicals meinen kompjuter unbrauchbar machenden gwibber-programmierer in der kommenden monaten etwas gegen dieses problem tun werden, ist es wohl am günstigsten, hierfür ein ganz schnelles skript zu hacken, dass man bei bedarf ausführt. Zum beispiel dieses hier:

#!/bin/bash

db_dir=~/.config/gwibber
db_name=gwibber.sqlite
db_keepdays=30

db_path=$db_dir/$db_name
db_keepsecs=$(($db_keepdays * 24 * 60 * 60))
db_deletebefore=$((`date +%s` - $db_keepsecs))

sqlite3 "$db_path" <<EOF
delete from messages where time < $db_deletebefore;
vacuum;
EOF

Eine kommentierte versjon des skriptes kann bei pastebin angeschaut und heruntergeladen werden — es ist also nicht nötig, hier bei bedarf die zwischenablage zu bemühen…

Nach aufruf dieses skriptes (und etlichen sekunden intensivens kratzens auf der festplatte) befanden sich bei mir nur noch die einträge der letzten dreißig tage in der datenbank. Wer ein anderes zeitfenster wünscht, kann für $db_keepdays einen anderen wert setzen.

Die größe der datenbank hat sich in meinem fall auf 83,5 MiB reduziert. Das ist zwar eine menge, aber es sind nur noch 13 prozent der ursprünglichen größe — die speicherverschwendung liegt an der stark redundanten datenhaltung. Und ich kann gwibber immer noch so benutzen, wie ich das will: ich kann meine timeline lesen und meine textstummel auf twitter und identi.ca veröffentlichen. Welchen vorzug der gespeicherte datenmüll aus anwendersicht haben sollte, ist mir auch nach kurzem lesen der gwibber-kwelltexte nicht aufgegangen.

Dabei fühlt sich gwibber jetzt deutlich schneller an. Und die systemlast bei aktualisieren ist so sehr reduziert, dass es nicht mehr zu derart üblen aussetzern kommt, wie ich sie weiter oben beschrieben habe.

Warum canonical seinem ubuntu eine derartige müllanwendung ausliefert, die den rechner in einer weise unbrauchbar macht, die „normale anwender“ einfach nur vor rätsel stellt (das ging doch vor ein paar wochen auch noch), gehört zu den fragen, mit denen man sich bitte an canonical wendet. Mein verdacht ist ja, dass die „zielgruppe“ canonicals leute sind, die niemals mit ihrem kompjuter arbeiten.

Warum ich die libc hasse!

Nachtrag: ja, die überschrift ist ein „bisschen“ irreführend, und ich meine die glibc. Aber die hasse ich wirklich jeden tag ein bisschen mehr.

Ja, ich weiß, das ist jetzt ein ziemliches friek-tema. Aber ich hasse die normale libc (und könnte Fefe unentwegt für seine dietlibc küssen) und möchte mir unbedingt mal das bisschen luft verschaffen.

Das ich die glibc hasse, liegt daran, dass ich mein eigenes c-gehäcksel manchmal statisch binde, also keine shared libraries verwende, sondern ein binary haben möchte, das ich „einfach so“ auf einem anderen rechner verwenden kann. Ich sitze an ständig wexelnden geräten, und ich habe auch nicht überall eine entwicklungsumgebung zur verfügung oder die erforderlichen rechte, nach belieben softwäjhr nachzuinstallieren — einmal ganz davon abgesehen, dass ich die installazjon eines laufenden sörvers nur anfasse, wenn es gar nicht anders geht. Da ist es für mich oft das günstigste — meine eigenen, unentbehrlichen tuhls habe ich auf einer speicherkarte ständig bei mir — wenn ich ein binary habe, dass ich auch starten kann, selbst wenn bestimmte shared libraries nicht installiert sind. Die meisten libraries, die ich verwende, sind relativ klein, so dass dieses „vergnügen“ nicht zu „teuer“ wird.

Bis auf diese verdammte libc! Machen sich heutige programmierer eigentlich gar keine mühe mehr, bloatware zu vermeiden?

Nehmen wir einmal ein beispiel. Der folgende, sehr schlichte „programm“ ist eine kleine abwandlung eines klassischen lehrbuchbeispiels.

#include <stdio.h>
#include <stdlib.h>

int
main (int argc, char **argv)
{
  const char *s = "Hallo Welt";
  puts (s);
  return EXIT_SUCCESS;
}

Speichern wir es einmal unter dem namen hello.c. Wenn dieses programm mit der anweisung…

cc -s -Os hello.c -o hello

…kompiliert wird (-Os optimiert den erzeugten kohd auf geringe dateigröße, und -s entfernt die symboltabelle und andere für die lauffähigkeit nicht benötigte verwaltungsinformationen vom erzeugten binary), denn ist das ergebnis ja noch durchaus plausibel, wie ein anschließender ls -l verrät:

-rwxr-xr-x 1 elias elias 5652 2010-11-05 18:51 hello
-rw-r--r-- 1 elias elias  145 2010-11-05 18:29 hello.c

Fünfeinhalb kilobyte für eine schlichte textausgabe ist zwar ein bisschen mehr, als man von „einfachen“ betriebssystemen gewohnt ist, aber der startup code für so einen aufgeplusterten pinguin ist ja auch nicht trivial.

Die für die ausgabe verwendete funkzjon puts — ich habe für dieses beispiel mit absicht nicht printf verwendet, weil printf eine menge weiteren kohd benötigt, um die im formatstring angegebenen formate zu interpretieren — sollte relativ einfach implementiert sein, vielleicht ungefähr so¹:

/* Einfache beispielimplentazjon der standard-funkzjon puts */
int
puts (const char *s)
{
  register int c, n;
  for (n = 0; putchar ((c = *s) == 0 ? '\n' : c) >= 0 && c != 0; ++s, ++n)
    ;
  return ferror (stdout) ? EOF : n;
}

Nichts ist darin, was ehrfurchtgebietende komplexität erwarten lässt. Dieses ferror sollte einfach nur ein fehlerbit im FILE *stdout prüfen und im fehlerfall eventuell errno setzen und einen wert ungleich 0 zurückgeben; und dieses putchar ist ein makro, das ein zeichen an einen ausgabebuffer anfügt, einen index für die näxste bufferposizjon erhöht und gegebenenfalls den buffer mit write wegschreibt und anschließend den index für die näxte zeichenposizjon zurücksetzt. Ich könnte hier jetzt auf die schnelle ein beispiel angeben, wie man so etwas als makro implementieren kann, aber das würde durch die schwer lesbare verschachtelung einiger ?-operatoren (buffer voll? zeilenbufferung?) nicht gerade deutlicher als die verbale beschreibung, und deshalb lasse ich es.

Kurz gesagt: Es ist zu erwarten, dass diese puts-funkzjon nicht wesentlich mehr als — sagen wir einmal — 1000 bytes objektkohd erzeugt. Sie ist völlig trivial. Eine dereferenzierung, ein test auf das nullbyte am stringende und ein verhältnismäßig einfaches makro bilden die innere schleife, am ende wird der rückgabewert durch einen bit-test ermittelt, damit fehler an den aufrufenden kontext gemeldet werden können. Als zusätzlicher kohd kommen die vier bytes für die globale variable int errno hinzu und natürlich die funkzjon write für die native, ungebufferte ausgabe, die direkt an den kernel weitergeleitet werden sollte (natürlich wird auch hier anschließend errno gesetzt, wenn ein fehler auftrat — aber auch das sind auch nur eine handvoll bedingungen).

Nun, bei der libc, die mit einem normalen GNU/linux-system (in diesem fall eine debian-distribution) daher kommt, sieht das offenbar ein bisschen anders aus. Mit dem folgenden aufruf…

cc -s -Os -static hello.c -o hello

…kann man eine statisch gebundene versjon dieses schlichten hallo-welt-programmes erzeugen, das völlig bewusst so formuliert wurde, dass es nur eine triviale und den kohd nicht aufblähende funkzjion verwendet. Ein anschließendes ls -lh lässt einem die kinnlade herunterklappen und bei empfindlichem magen den mageninhalt nach oben steigen:

-rwxr-xr-x 1 elias elias  510K 2010-11-05 21:34 hello
-rw-r--r-- 1 elias elias   145 2010-11-05 18:29 hello.c

WTHF! 510 KiB für das dazulinken von ansich völlig trivialem kohd ist doch eine menge holz. 😦

Den blick in die (nicht gerade schnell erfassbaren) kwelltexte der libc, um diesem bloat auf die spur zu kommen, erspare ich mir mal. Stattdessen hier eine schnellere und schlampigere analyse, die auch schon erschüttert:

Lässt man die opzjon -s beim kompeiler-aufruf einmal weg, um die symboltabelle im binary zu belassen, kann man sich hinterher mit nm -g hello | awk '$2 == "T"' anschauen, welche symbole in der kohd-sekzjon des kompilates enthalten sind; und das zeigt wiederum, welche funkzjonen der linker dazugebunden hat, weil sie von der einzigen verwendeten funkzjon puts verwendet werden. Wer jetzt meint, dass sich seit den siebziger jahren doch einiges in sachen komplexität einer standard-ein-ausgabe getan haben könnte und dass die implementazjon von puts vor allem deshalb „ein bisschen“ fett geworden ist, der kann mir bitte einmal erklären, warum (unter anderem, denn ich nenne hier nur einige besonders absurde beispiele) die folgenden funkzjonen für die schlichte ausgabe einer nullterminierten zeichenkette benötigt werden sollten:

  • bsearch
    Wozu zum abgehackten pimmel nochmal benötigt die libc dafür eine binäre suche? Selbst beim wildesten spekulieren fällt mir kein grund ein, warum die benötigt werden sollte.
  • dprintf
    Hui, den printf für die direkte ausgabe in dateideskriptoren, den sieht man wirklich selten in „echtem“ kohd…
  • fprintf
    Haben die beim häcken der libc etwa die triviale standardfunkzjon puts (s) mit einem printf ("%s\n", s) implementiert? Das würde den ganzen bloat ja erklären. Aber es wäre auch so gnadenlos dumm, dass einem nichts mehr dazu einfällt.
  • localtime
    Was zum schwefelkackenden höllenhund?!?!
  • open_memstream
    Wozu soll hier eine ein-/ausgabe in einen speicherbereich benötigt werden? Die puts-funkzjon ist trivial und bedarf derartiger abstrakzjonen des stream-konzeptes nicht.
  • qsort
    OMFG! Was soll bei diesem einfachen vorgang bitte durchsortiert werden!?
  • setlocale
    Soll da etwa die ausgabe von einzelzeichen in einem stream an die landeseinstellungen angepasst werden?
  • sscanf
    Mir fehlen die passenden derben worte, um dazu noch etwas sagen zu können. m(

Wie gesagt, dass alles für die ausgabe einer nulltermierten Zeichenkette nach stdout.

Diese allgemein bekannten funkzjonen werden natürlich ergänzt um einen wust von internen funkzjonen, mit denen diese standards implementiert werden. Es ist einfach unfassbar. Wer immer an der libc herumprogrammiert hat, er schien sich gesagt zu haben, dass ruhig ein anständiger bloat entstehen kann, sein kompjuter hat ja kein problem damit. Und deshalb wurde jede disziplin abgelegt und man hat sich allgemein einen dreck darum geschert, ob bloat entsteht oder nicht. Und die meisten programmierer, die so einen dreckskohd nutzen, merken es niemals, weil ja der ganze bloat schön in einer dynamischen bibliotek versteckt bleibt und nicht die größe des binary aufbläht. Dass es speicher frisst und auf die performanz geht, drauf geschissen! Dass bei einer zentralen bibliotek wie der libc jedes einzelne programm von diesem bloat betroffen ist, dass es also eine last für das gesamte system wird, drauf geschissen! Sorgfalt und sparsamkeit waren gestern, lasset uns gewaltige mengen RAM voraussetzen und überall, wo dieses nicht wie vorausgesetzt vorhanden ist die platten auf die auslagerungspartizjon kratzen und gebet der CPU extrafette brocken kohd für die erfüllung noch der simpelsten und elementarsten aufgaben! Denn das ist die neue zeit, sie ist schäbig, verantwortungslos und schlecht und „erfreut“ zum ausgleich für die kwalitativen missstände im kernsystem mit polierten und effektheischenden benutzerschnittstellen zur verpackung dieser scheiße. So hat man doch etwas zum „freuen“, wenn man von ein paar billigen effekten unterhalten wird, während man sich fragt, warum trotz aller technischen fortschritte der letzten zehn jahre die trägheit der anwendungen gleich geblieben oder gar schlimmer geworden ist.

Und das — so viel noch zum ende — ist leider auch im bereich der freien softwäjhr symptomatisch für die entwicklung in den letzten anderthalb jahrzehnten. Früher einmal habe ich linux geschätzt, weil kompjuter — auch etwas betagtere — viel zu schade zum wegwerfen sind und weil ich eine menge guter softwäjhr auch auf „uralten trümmern“ einsetzen konnte. Inzwischen ist dort in der softwäjhr-entwicklung allerdings der gleiche gleichgültige irrsinn eingekehrt, der auch so prägend für alle anderen plattformen ist. Manchmal hasse ich das alles nur noch!

Die verwendung „moderner konzepte“ macht das ganze noch schlimmer. Wenn man das oben gegebene beispielprogramm einmal zeile für zeile in die hochgejubelte und für beinahe alle „modernen“ projekte verwendete bloatware-sprache c++ überträgt…

#include <iostream>
#include <cstdlib>

int
main (int argc, char **argv)
{
  std::string s("Hallo Welt!");
  std::cout << s << std::endl;
  return EXIT_SUCCESS;
}

…unter dem namen hello.c++ speichert und schnell mit…

c++ -Os -s -static hello.c++ -o hello++

…kompiliert, denn zeigt einem nicht nur die sehr spürbar gewordene wartezeit, die der kompeiler nun benötigt, um sich von diesen recht lächerlichen neun eingabezeilen zu „erholen“, dass hier noch etwas viel schlimmeres geschieht. Auch das anschließende ls -lh ist erschröcklich:

-rwxr-xr-x 1 elias elias 1006K 2010-11-05 21:05 hello++
-rw-r--r-- 1 elias elias   163 2010-11-05 21:09 hello.c++

Dass nach der übersetzung eines lehrbuchmäßig einfachen nullprogrammes nahezu ein MiB kohd benötigt werden soll, nur, um eine kurze zeichenkette in einer std::string-instanz abzulegen und diese zur standardausgabe zu schreiben, das ist wirklich pathologisch. Hier ist der bloat fest ins grundsystem und in die entwicklungswerkzeuge eingebaut, und er „vererbt“ sich von dort auf das gesamte system. Wer sich beim starten eines anwendungsprogrammes wie etwa des beliebten brausers firefox darüber wundert, warum so eine anwendung, die eigentlich nur ein bisschen netzwerkverkehr macht und HTML-dokumente in ein fenster rendert (eventuell ergänzt um den start von plugins, wenn die dargestellte webseit derartige objekte enthält), dafür so viele megabyte speicher belegt, der hat hier einen teil der antwort.

Und wer einen alten, ansich noch funkzjonsfähigen und dienstbaren rechner hat, auf dem sich die „moderneren“ anwendungen gar nicht mehr verwenden lassen; wer sich mit einem derartigen gerät im internetz bewegen will (was ja keine absurde anforderung ist, und was ansich auch keine riesigen ressorßen erfordert)², der ist genötigt, entweder alte, unsichere und in allen ihren bekannten fehlern ausbeutbare softwäjhr zu verwenden (Bog bewahre!), oder aber seinen alten, ansich noch funkzjonfähigen und dienstbaren rechner als sondermüll zu entsorgen und sich einen neuen rechner zu verschaffen.

Und draußen, vor den städten, wäxt das eigentliche monument unserer „zivilisation“: der müllberg. Was die kompjuter darin zu müll gemacht hat, ist allerdings müllsoftwäjhr.

Ach ja, bevor ich es vergesse: das kompilat der hallo.c gegen die dietlibc gelinkt hat bei mir eine dateigröße von 1004 bytes. Es tut das gleiche wie der megabytefette c++-kohd.

¹In wirklichkeit wird puts (s) wohl meist ein makro sein, das fputs (s, stdin) aufruft, aber die implementazjon von fputs ist auch nicht schwieriger. Ich habe das beispiel einfach gehalten, damit die primitivität einer derartigen funkzjon besser sichtbar wird, in einer realen implementazjon einer derartigen library wird ein gewisses augenmerk darauf gelegt werden, keinen kohd zu duplizieren, um sich keine alpträume bei der pflege zu bereiten. Die gleiche betrachtung gilt auch für das putchar-makro, das im regelfall mithilfe des fputc-makros implementiert werden wird.

²Natürlich gibt es immernoch pine und lynx