Thursday, May 31. 2007
Es tut sich wieder was bei newsbeuter. Und zwar hab ich in den letzten Tagen eine Filtersprache entwickelt, um dynamische Abfragen für theoretisch alles zu ermöglichen, primär aber, um Feeds und Artikel in Feeds zu filtern, nach Kriterien wie Autor, Titel, Inhalt, Veröffentlichungsdatum, Anzahl der ungelesenen Artikel, URL des RSS-Feeds, usw. usf. Derzeit ist es so implementiert, dass man in der Feedübersicht die Taste F drückt, eine Abfrage eingibt, die gefilterte Feedübersicht präsentiert kriegt, und diese Filterung wieder löschen kann. Ein Abfrage sieht etwa so aus: unread_count > 0 and unread_count <= 20 Mit dieser Abfrage erhält man alle Feeds, die mindestens einen, aber 20 oder weniger ungelesene Artikel enthalten. Bald werden auch solche Abfragen möglich sein: ( author =~ "Frank" or author =~ "John" ) and ( title =~ "Linux" or title =~ "FreeBSD" ) Das würde alle Artikel der Autoren "Frank" oder "John" (als Text innerhalb der Quotes sind übrigens Regular Expressions möglich) mit "Linux" oder "FreeBSD" im Titel. Eine freie Gestaltung der Abfragen ist möglich, "the sky is the limit" wie es im Englischen so schön heisst. Die Abfrage rssurl =~ "^https:" filtert übrigens alle Feeds mit HTTPS-URL heraus. Wie man merkt, kommt man mit diesen Mitteln schnell zu vorher ungeahnten Möglichkeiten.
Implementiert habe ich den Parser für diese Abfragesprache übrigens mit Coco/R für C++, ein Compilergenerator, der an der Uni Linz entwickelt wird. Das ging ziemlich schnell und intuitiv, und mit den verfügbaren Beispielen für z.B. dem Compiler für die Minisprache Taste war es auch mir Compilerbau-Unerfahrenen möglich, schnell zu einem funktionierenden Parser zu gelangen. Die Code-Templates für die Generierung der Klassen rundherum (die "frame files") musste ich etwas adaptieren, etwa um aus einem std::istream statt aus einem FILE* zu parsen (was den Vorteil hat, über std::ifstream Dateien und über std::istringstream auch Strings anbinden zu können). Die Anbindung an newsbeuter selbst habe ich so gestaltet, dass ich einen Matcher implementiert habe, der einen geparsten Ausdruck gegen jedes beliebige Objekt prüfen kann, solange dieses nur von der Basisklasse matchable (enthält lediglich zwei pure virtual functions zum überprüfen, ob ein Attribut vorhanden ist, bzw. um dessen Wert abzurufen) abgeleitet ist. Damit erhalte ich die größtmögliche Flexibilität, und kann eben theoretisch jedes Objekt matchen (auch wenn das nicht wirklich bei allen Objekten innerhalb von newsbeuter Sinn macht). Die eigentliche Integration war mit diesen Vorarbeiten dann ein Kinderspiel, und mittlerweile ist die Funktion zum Verstecken der bereits gelesenen Feeds sogar über die Filtersprache implementiert (über exakt den gleichen Mechanismus hängen sich dann auch die anderen Filterabfragen rein). Erstmals präsentieren werde ich dieses neue Feature übrigens übermorgen auf den Linuxwochen Wien. Kommt zahlreich.
Endrekursionen sind Rekursionen, bei denen der rekursive Funktionsaufruf die letzte Operation zum Berechnen des Funktionsergebnisses ist. Eine wichtige Eigenschaft von Endrekursionen ist, dass sie zu Iterationen transformiert werden können, d.h. der Speicherverbrauch auf dem Stack bleibt konstant, während bei nicht-endrekursiven Funktionen der Speicherverbrauch auf dem Stack mit der Rekursiontiefe wächst. Das ist insbesondere relevant für funktionale Sprachen, deren einziges Mittel zur Iterationen die Rekursion darstellt. Das sei einmal der Theorieteil.
Gestern hab ich mir aufgrund einer Diskussion mit nion zu dem Thema mal angeschaut, was der gcc mit endrekursiven Funktionen in C denn genau macht. Und siehe da: der gcc transformiert endrekursive C-Funktionen doch tatsächlich zu Iterationen! Folgende Codesnippets zeigen es deutlich:
int sum (int n) { if (n == 0) return 0; return n + sum (n - 1); }
wird zu sum: pushl %ebp xorl %eax, %eax movl %esp, %ebp movl 8(%ebp), %edx .L3: testl %edx, %edx je .L4 addl %edx, %eax decl %edx jmp .L3 .L4: popl %ebp ret
Damit das auch etwas praxisrelevanter wird, hier der Code zum rekursiven Freigeben einer verketteten Liste: void delete_word_r(word_t * e) { if (e) { word_t* next = e->next; if (e->word) free(e->word); free(e); delete_word_r(next); } }
Der gcc macht folgendes daraus: delete_word_r: pushl %ebp movl %esp, %ebp pushl %esi pushl %ebx movl 8(%ebp), %ebx .L33: testl %ebx, %ebx je .L38 movl (%ebx), %eax movl 4(%ebx), %esi testl %eax, %eax je .L36 subl $12, %esp pushl %eax call free addl $16, %esp .L36: subl $12, %esp pushl %ebx movl %esi, %ebx call free addl $16, %esp jmp .L33 .L38: leal -8(%ebp), %esp popl %ebx popl %esi popl %ebp ret
Coole Sache. In beiden Assembler-Snippets ist weder ein "call sum" noch ein "call delete_word_r" zu finden.
Monday, May 28. 2007
Einerseits hab ich wieder ein Panorama gemacht:
Andererseits hab ich noch ein zweites Libellen-Foto gemacht:
Ausserdem gibt es wieder Fotos vom Konzert am Samstag, und zwar hier.
Sunday, May 27. 2007
Folgender Schnappschuss ist mir heute mittag gelungen:
Eine Version in besserer Auflösung gibt's hier.
Friday, May 25. 2007
nion hat einen sehr interessanten Artikel zum Thema Callgraphen generieren veröffentlicht. Darin stellt er zwei verschiedene Methoden vor, um Callgraphen zu generieren, und zwar einerseits ein Tool namens "egypt", das aus der Register transfer language, die GCC per Commandline-Switch ausspucken kann, Files für das Tool "dot" generiert, und andererseits eine Methode, bei der über einen GCC-Commandline-Switch für jeden Funktionsein- und -austritt je ein Funktionsaufruf in den Code eingefügt wird, und über eine per LD_PRELOAD nachgeladene Shared Library zur Laufzeit ein dynamischer Callgraph der tatsächlichen Ausführung aufgezeichnet wird, ebenfalls für dot. Für Programmierer, die sich auch mit der Instrumentierung von Code auseinandersetzen, wird der Artikel auf jeden Fall interessant sein.
Mit C++ funktioniert das ganze grundsätzlich auch, allerdings werden die Graphen bei der Verwendung der C++ Standard Library, insbesondere der über Templates realisierten Klassen, sehr schnell sehr gross. Allein das Starten von newsbeuter bei einem leeren Cache-File spuckt ein ca. 30 MB (!!) großes dot-File aus.
Thursday, May 24. 2007
Nachdem es nur noch weniger als ein Monat dauert, bis ich nach Argentinien aufbreche, schau ich mich langsam um Ausrüstungsgegenstände um, die ich eventuell gebrauchen könnte, z.B. feste Winterschuhe (südliche Hemisphäre und so), die auch wandertauglich sind, oder so essentielle Dinge wie ein ordentlicher, großer Rucksack. Ich will nämlich keine Koffer oder Reisetaschen schleppen. Also bin ich gestern zum Eybl und hab mir mal angeschaut, was die denn da so alles haben. Tja, das Ergebnis ist eher ernüchternd. Erstens einmal, der größte Trekking-Rucksack hat grad mal ein Fassungsvermögen von 70 Liter, kostet schlappe EUR 199,-, und ist schmal und hoch, genau das, was ich eben nicht will (weil dann der Schwerpunkt weit oben ist, das find ich unangenehm zu tragen). Also bin ich einfach in den nächsten grindigen Armyshop gegangen, und hab mir dort angeschaut, was es so an Rucksackmodellen gibt. Und da bin ich auf einen Essl Trekking-Rucksack Modell "RU 85" gestoßen, um günstige EUR 100,-. Das Modell hat mich wesentlich besser angeschaut, nicht nur wegen des Volumens von 85 Litern, sondern auch, weil die Form in etwa so war, wie ich mir das vorgestellt hab, und weil ein Regenschutz integriert ist. Ich hab den also spontan gekauft, und auch gleich dazu verwendet, meine Einkäufe heimzutragen (insbesondere ein 6er Tragerl Mineralwasser, summa summarum ca. 10 kg), und bin vom Tragekomfort her sehr zufrieden. Nachdem in Sachen Wanderschuhen auch nicht passendes gefunden habe, werd ich mir wohl auch da überlegen, auf Equipment aus dem "Militärumfeld" zu setzen. Wären die schweren Feldschuhe nicht sooo hoch, dann wären die eigentlich ideal für meine Anforderungen.
Friday, May 18. 2007
Sicher ist das schon einigen Leuten aufgefallen, dass Videos zu kontroversen Themen der heutigen Zeit, wie z.B. 9/11, Israel, Libanonkrieg, Iran, Irakkrieg, Türkei oder die USA ansich, die entsprechend weit oben gereiht sind bei Youtube, von tausenden von Kommentaren ueberschwemmt, wo sich jede Menge Leute mit variierender Ausdrucksfähigkeit und Rechtschreibkenntnis gegenseitig mit Einzeilern niederflamen. Revisionisten haben in so einer Umgebung natürlich die besten Möglichkeiten, sich auszubreiten. Und so auch bei einem Video auf Youtube, das ich raufgeladen habe, und das einen Ausschnitt der faschistischen Wochenschau zu den Februarkämpfen 1934 in Linz zeigt ( siehe Wikipedia zu den Hintergründen). Gestern hat da ein User mit scheinbarem Bundesheer-Hintergrund doch tatsächlich so Sachen wie "Es lebe die christlichsoziale Partei!" und "Die Christlichsozialen waren die einzigen in Österreich die sich gegen den Nationalsozialismus stellten!" gepostet. Letzteres stimmt natürlich, im Kontext vor 1938, weil die Christlichsozialen die einzigen waren, die das noch machen konnten. Die Opposition steckte ja schon in den austrofaschistischen Anhaltelagern. 1938, ja, da war das was anderes. Da hat ein Christlichsozialer (bzw. ein Mitglied der Nachfolgeorganisation) das Berchtesgadener Abkommen unterschrieben.
Aber die Kommentare zeigen auf jeden Fall eindeutig, wes Geistes Kind diese Person ist. In der Öffentlichkeit würde sich heutzutage sowas niemand mehr trauen zu sagen, da wird die die Gesinnung höchstens durch ein Dollfuß-Bild hier und da zur Schau gestellt. Kennen wir ja aus dem ÖVP-Parlamentsklub. Aber im Internet, da traut sich jeder Internet-Parteikader und jeder Wohnzimmer-General, seine Meinung, und sei sie noch so absurd oder selbstentlarvend, zu postulieren, im Schutze der Pseudonymität. Nicht, dass das per se was schlechtes wäre (ich sollte mal über meine Leidenschaft zu Flames und Trolling in der neoliberalen Blogszene bloggen [die sich in Österreich als "liberal" gibt und gleichzeitig sozialdarwinistische Thesen postuliert, aber das nur nebenbei]), nur gerade in diesem Fall (der Austrofaschismus war ja nur das zweitschlimmste politische System nach der Nazi-Herrschaft, deswegen wird es überhaupt nicht aufgearbeitet) zeigt sich, welche Ideologien in den Köpfen der Menschen noch herumschwirren. Und natürlich werden diese Ideologien in den Youtube-Kommentaren ausgelebt, neben den 9/11-Verschwörungstheoretikern, den Israelverteidigern bzw. -gegnern, den Irankrieg-Befürworter bzw. -Gegnern, den türkischen Nationalisten bzw. Islamisten, und den Verteidigern der US-amerikanischen Politik bzw. deren Gegnern. Ohne dass das eigentlich irgendeinen Sinn hätte, weil eine sinnvolle Diskussion kommt in diesem völlig ungeeigneten Medium (Threading, anyone? Usenet hat halt doch noch seine Qualitäten, nur das kann der 08/15-Youtube-Klicker nicht bedienen) nicht wirklich möglich ist.
So, heute geht's nach Graz, wo morgen die Linuxtage stattfinden. Ich bin mit meinem Vortrag über newsbeuter dabei (schöne Grüße an den Herrn PR, der den Namen jedesmal spöttisch ausspricht, wenn ich ihn erwähne, und der sich längstens eine Windows-GUI-Version davon wünscht). Nun denn, ich hab spontan entschlossen, aufgrund der schlechten Zugverbindung schon um 11:10 loszufahren, damit ich um 14:00 in Graz ankomme. An meinen Slides muss ich noch etwas feilen, da werd ich eh noch genug Zeit haben dafür. Na dann...
Thursday, May 10. 2007
Gerade ist meine DVD-Box von The Prisoner gekommen. Diese Serie wurde Ende der 60er Jahre gedreht, und soll ja sehr schräg und vor allem sehr psychedelisch sein. Ich bin also schon ziemlich gespannt, weitere Berichte folgen. Achja, fuer die Simpsons-Fans in meiner Leserschaft: die Folge The Computer Wore Menace Shoes ist eine einzig große Anspielung auf ebendiese Serie. Eigentlich bin ich durch genau diese Folge auf "The Prisoner" aufmerksam geworden.
Tuesday, May 8. 2007
newsbeuter 0.4 ist released. Die Konfigurationsmöglichkeiten haben sich verbessert, die Geschwindigkeit des Reload hat sich massiv verbessert, es gibt Unit Tests und eine italienische Übersetzung, und, was das tollste ist, newsbeuter unterstützt jetzt auch Snownews/Liferea extensions. Damit gibt es keinen Grund mehr, nicht von snownews auf newsbeuter umzusteigen.
Thursday, May 3. 2007
Heute beim "Abpfiff" gewesen... der Abpfiff bei der Freistädter Brauerei ist ein "all you can drink"-Event, wo man EUR 6,- zahlt, was zu essen und ein Pfiff-Glas kriegt, und sich soviel Bier hinter die Binde kippen kann, wie man will, zumindest zwei Stunden lang. In den zwei Stunden hab ich immerhin 13 getrunken, und 14 gezapft. Dementsprechend geht's mir auch.
Wednesday, May 2. 2007
Beim Versuch, SQLite3 ohne Tcl-Support unter Cygwin mit --without-tcl statt mit --disable-tcl (beide ./configure-Optionen sind verfügbar...) zu bauen:
checking for Tcl configuration... configure: error: no directory doesn't contain tclConfig.sh
Tuesday, May 1. 2007
So, es ist offiziell: meine eingerichten Vorträge zu newsbeuter wurden sowohl auf den Grazer Linuxtagen als auch auf den Linuxwochen Wien genommen. Es erwartet jeden Besucher eine Einführung in newsbeuter, eine Feature Show, die zeigt, wie mächtig newsbeuter wirklich ist, und dann noch ein Blick "hinter die Kulissen", wie newsbeuter intern funktioniert, und welche Lehren ich aus der bisherigen Entwicklung gezogen habe. In spätestens einer Woche wird übrigens die Version 0.4 released werden, die einige tolle neue Features am Start hat.
|