Wer mit XMLHTTPRequest und Common Lisp spielen will, CLiki : cl-ajax liefert das dafür nötige Framework zur einfachen Integration von Common Lisp Funktionen in Webanwendungen auf Araneida-Basis.
programmierung - 23.1.2005 - 16.3.2005
Naked Objects sind keine Schweinerei und Unanständigkeit, sondern einfach die Idee seine Objekte in Smalltalk direkt der Welt auszusetzen - jedes Objekt hat also sozusagen sein eigenes Mini-GUI mit dabei. Dadurch arbeiten Benutzer direkt mit den eigentlichen Objekten und viele Probleme von GUI-Frameworks fallen weg - es muss nicht mehr explizit zwischen GUI und Objekt vermittelt werden, das machen die Objekte selber.
Und wer kein Lisp mag oder kann, vielleicht hilft ja SAJAX - Simple Ajax Toolkit by ModernMethod - XMLHTTPRequest Toolkit for PHP das nicht nur PHP sondern auch noch Io, Lua, Perl, Python und Ruby unterstützt.
Usable XMLHttpRequest in Practice ist ein interessanter kleiner Artikel der anhand eines Beispiels die Nutzung von XMLHttpRequest erläutert und auf Useability-Aspekte eingeht.
ParenScript ist ein Compiler der Lisp nach JavaScript umwandelt. Für Lisp-basierte Webserver und Anwendungsframeworks sicherlich eine ziemlich geniale Sache, weil der Programmierer in seinen gewohnten Sprachmitteln arbeiten kann. Clientside Lisp auf Umwegen halt ...
CherryFlow - Continuations in Python
CherryFlow ist ein Continuation-based Framework für Python und CherryPy. Damit lassen sich auch in Python continuation-basierte Webserver bauen. Das besondere: CherryFlow benutzt entweder Stackless' dumpable Generators oder StateSaver, eine kleine C-Erweiterung die es unter normalem Python erlaubt laufende Generatoren zu kopieren. Genau das was ich damals gesucht habe um meine Continuations für Python zu vervollständigen
Poly/ML Home Page
Poly/ML ist eine sehr schnelle Implementation von Standard ML 97. Interessante Besonderheit (abgesehen von der Performance): das System orientiert sich weitaus stärker an Lisp-Systemen als an klassischen Kommandozeilencompilern. Man hat eine interaktive Arbeitsumgebung und ein Image das automatisch bei Beenden der Session gespeichert wird und somit alle Definitionen beim nächsten Lauf wieder verfügbar macht.
Der Vorteil dieser Arbeitsweise ist einfach das man sich sein System im Laufe der Zeit immer besser anpasst an die eigenen Bedürfnisse. Zusammen mit dem FFI und externen Libraries kann man sich so nach und nach eine schöne Umgebung zusammenstellen die genau für die anvisierten Ziele optimiert ist. Ausserdem spart man sich oft extra Objekt-Datenbanken: man speichert Werte (bzw. im Falle von ML dann Strukturen) einfach im Image und behält sie dort.
Dadurch das Poly/ML das Image einfach mittels mmap in den Adressraum hängt und nicht erst liest und später wieder schreibt ist das ganze auch recht fix - bei Image-Systemen stört ja häufig der Systemstart.
Oh, und Poly/ML läuft übrigens problemlos unter OS X ...
Die Geschwindigkeit des Compilers setzt sich leider im generierten Code nicht unbedingt fort, wie man aus diesem Vergleich sehen kann. Aber ähnlich wie bei OpenMCL ist die schnelle Umgebung gerade beim Prototyping durchaus von Vorteil. Man kann ja hinterher einen Compiler ansetzen der zwar länger braucht, aber dafür dann besser optimierten Code ausspuckt wie MLTon.
Ruby stuff for Macs
Ruby stuff for Macs ist ein fertiges DMG für sowohl Panther als auch Jaguar mit fertigem Ruby 1.8.2 und diversen Erweiterungen (unter anderem Rails und Rubygems!). Leider ist das 10.2 DMG kaputt - ich hab den Autor mal angeschrieben.
Man kann natürlich auch Ruby selber kompilieren, sonderlich kompliziert ist das nicht. Für OS X gibts das auch in den DarwinPorts. Nur zickt da der Port unter 10.2 rum und kann nicht sauber kompiliert werden. Irgendwas im iconv-Modul - Syntaxfehler.
Irgendwie mag mein System heute kein Ruby
Update: jetzt funktioniert das Paket.
The fate of reduce() in Python 3000
The fate of reduce() in Python 3000 - tja, dann wird es wohl wirklich Zeit für mich die Sprache zu wechseln. Denn wer so blöd ist sich von Lisp-Wurzeln zu lösen wird nichts weiter schaffen als die mächtigeren Möglichkeiten mit primitiven Mitteln nachzubauen. Ruby sieht auch sehr brauchbar aus und so langsam gewöhne ich mich an die Syntax ...
Anonyme Funktionen (lambda in Python, Blöcke in Ruby oder Smalltalk) sind weitaus mehr als nur obskure Lisp-Überbleibsel. Ich hab viele Programmstücke die genau davon leben das ich Codeblöcke anonym durchreichen kann - letzten Endes dient das dazu seine eigenen Programmstrukturen zu schreiben. In Smalltalk und ähnlichen Sprachen (und in gewissem Sinne auch in Ruby) kann man darüber eine Sprache selber erweitern und entwickeln - was gerade einer der Stärken von Lisp und seinen Freunden ist (und deshalb ja auch in Smalltalk und seinen Freunden sich wiederfindet - die Smalltalk-Entwickler hatten eine Menge Lisp-Know-How).
Sprachen die sich an der Stelle selber kastrieren und meinen das Iteratoren und List-Comprehension (im Prinzip nichts weiter als verkürzt geschriebene Schleifen) wirklich ein brauchbarer Ersatz dafür sind sich eigene Kontrollstrukturen und eigene Sprachmittel programmieren zu können sind für mich mitlerweile völlig uninteressant geworden. Ich mag keine Sprachdesigner die meinen schlauer als der spätere Programmierer zu sein und denen ein Sprachkorsett aufzwingen wollen.
UnCommon Web Tutorial
Der Artikel hyper-cliki : Web/Continuation beschreibt wie man mit dem Continuation-basierten Webframework UnCommon Web in Common Lisp Webanwendungen schreibt. Sehr interessant, da Common Lisp selber ja bei Continuations deutlich mehr gehandicaped ist als Scheme - in Scheme sind Continuations per Standard first-class Objekte, in Common Lisp nicht.
Continuation-basierte Webserver haben den Vorteil das der eigentliche Code sehr ähnlich klassischen Anwendungen strukturiert werden kann. Man muss sich viel weniger auf das Event-Modell der klassischen Webprogrammierung einlassen und hat viel seltener mit expliziten Session-Konstrukten zu tun, weil die Session bei einem continuation-basierten Websystem implizit ist.
Continuation-basierte Web-Frameworks gibt es für folgende Sprachen:
- [Smalltalk][1]
- [Common Lisp][2]
- [Scheme][3] (leider kein direkter Link auf den Webserver selber)
- [SISC Scheme][4]
- [Ruby][5] gleich [zweimal][6]
- [Python (über CherryPy und entweder Stackless oder StateSaver)][7]
Sicherlich gibt es noch mehr, aber das sind die die ich auf die Schnelle finden konnte.
Hedgehog ist ein netter kleiner Lisp-Compiler und Bytecode-Interpreter mit speziellem Fokus auf geringem Resourcenverbrauch. Leider leidet die Interaktivität und das Debugging darunter: keine Tracebacks und keine REPL, nur Scripts laufenlassen und über grep im Pseudo-Assembler-Source nach der Abbruchstelle suchen. Da wäre es schön wenn die Sprache diese interaktiven Features per Option bieten könnte - in kleinen Kisten kann man das dann ja weglassen.
cyrusharmon.org: More GCC-XML (new and improved -- now with pr0n!) - bekloppter Titel, aber geniale Sache: SBCL kriegt native Bindings zum Carbon API. Und stellt damit das zweite Open Source Lisp-System mit Integration in die OS X Welt dar (wobei Cocoa-Bindings natürlich noch cooler wären - aber das bietet bis jetzt im Open Source Bereich nur OpenMCL).
How to setup WebObjects 5.1 on Linux
How to setup WebObjects 5.1 on Linux beschreibt wie man WebObjects (das Original von Apple) unter Linux zum Laufen kriegt - wegen der Java-Basis der 5er-Versionen ist das ja mitlerweile deutlich problemloser geworden. Wobei mich natürlich die Objective-C Version noch weitaus mehr für Linux interessiert hätte - Java ist auf Linux nunmal nicht der grosse Überflieger was Performance angeht ...
Nunja, für die Objective-C-Version kann man auch gut auf SOPE( ich berichtete) zurückgreifen, es ist ja in vielen Bereichen kompatibel. Für den Einsatz von XCode gibt es ja auch Projekttemplates, so das man ähnlichen Komfort bei der Entwicklung geboten bekommt. Ich muss mal probieren wie das mit ProjectBuilder aussieht.
OpenACS
OpenACS ist eine immer wieder gerne übersehene Web-Applikations-Plattform die auf dem AOLServer und PostgreSQL basiert.
OpenACS liefert auch gleich noch einen ganzen Satz von fertigen Modulen mit - getreu seinem Namen als Ars Digita Community System bietet es einen ganzen Stall von fertigen Anwendungen. Ein komplettes CMS ist auch dabei. Und das ganze ist teilweise schon mehrere Jahre alt - aus Zeiten als andere CMS-Projekte noch davon träumten erdacht zu werden.
Der AOLServer ist ein multithreaded Webserver der TCL als Scriptingsprache einsetzt so wie man Apache oft mit PHP kombiniert. Allerdings ist der AOLServer sehr schnell und erstaunlich resourcenschonend. Das Teil heisst übrigens mit gutem Grund so: grössere Teile von AOL laufen auf dem Server und er stammt von dort. Taugt trotzdem was
Alles in allem ein spannender Oldtimer mit interessanten Features und - bedingt durch das Alter - einer recht guten Dokumentation. Aber auch einigen Warzen und Ecken die mitlerweile vielleicht etwas seltsam anmuten. Man muss dabei eben bedenken das zu Zeiten als ACS entwickelt wurde die Definition von CMS erst im Entstehen war.
SKYRiX Object Publishing Environment
Das SKYRiX Object Publishing Environment ist eine freie Variante eines Web-Applikations-Framework nach dem Modell von WebObjects. Speziell unter dem Aspekt das WebObjects neuerdings von Objective-C nach Java wandert ist SOPE sehr spannend - denn es ist immer noch Objective-C durch und durch.
Ausserdem läuft es nicht nur unter OS X, sondern auch unter Linux. Und mir gefällt natürlich das es auf PostgreSQL baut und nicht auf diesem glorifizierten Karteikasten ...
Wär glatt mal wieder ein Grund meine etwas eingerosteten Objective-C Kenntnisse aufzufrischen. Allerdings ist die Dokumentation noch recht spartanisch - man soll aber auf die WebObjects-Dokumentation zurückgreifen können für viele Bereiche.
Für Debian Sarge gibts übrigens ein Repository mit fertigen Paketen für SOPE. Steht allerdings noch nicht auf deren Homepage, nur auf der Freshmeat-Projekt-Seite zu SOPE.
Es ist übrigens die Basis für OpenGroupware.org - ein Groupware-Baukasten (nach eigener Aussage der Entwickler). Und es gibt eine Live-CD mit der man das ganze Monster testen kann, ohne gross was zu installieren.
Kann mir mal jemand erklären wieso ich das Projekt bisher nie gesehen habe? Hab ich Tomaten auf den Augen? Strange ...
Eine Warnung an Leute die damit loslegen wollen (ich hab gerade alles kompiliert, installiert und angetestet): die Dokumentation zu SOPE selber als nicht existent zu bezeichnen wäre noch geschmeichelt
Als Tipp: eine WebObjects-Anwendung ist sozusagen ein kleiner Webserver in sich - man startet sie einfach und hängt den Apache mittels des mod_ngobjweb Moduls vor diesen kleinen Mini-Server und dann kann man auf die Elemente der Applikation zugreifen. Ist nicht gerade offensichtlich für jemanden der WebObjects nicht kennt ...
Stu Nicholls Cutting Edge CSS An amazing CSS puzzle ist ein kleines Labyrinthspiel das nur in CSS realisiert wurde - kein JavaScript. Wow. (gefunden beim photomatt)
Ich wusste garnicht das der SmartEiffel The GNU Eiffel Compiler mitlerweile auch nach Java Bytecode compiliert. Könnte man ja vielleicht auf dem Mac zusammen mit der Java-ObjC-Bridge benutzen um Programme dort zu schreiben und mal wieder ein bischen mit Eiffel zu spielen.
Back to the Future: The Story of Squeak - wie eine der coolsten Smalltalk-Umgebungen entstanden ist.
PL/I for GCC ist eine Implementierung von PL/I als Frontend im GCC. Sehr interessant, da es nicht ein Präcompiler mit C-Output ist und anders als frühere Projekte nicht das Ziel nur einer Subset-Implementierung hat (wobei natürlich im Moment noch nur ein Subset implementiert ist - aber der wächst ständig). Ich gebs zu, die barocke Syntax von PL/I mag ich immer noch, auch wenn es schon viele Jahre her ist das ich damit programmiert habe.
Trackbacks generell moderieren
Für WordPress gibts ja ein Plugin das Trackbacks automatisch auf moderiert setzt. Das arbeitet aber mit zusätzlichen Datenbankzugriffen (setzt nach der Erstellung des Trackbacks das Moderationsflag), was bei Trackback-Spammern eher doof ist - jeder zusätzliche Datenbankzugriff treibt die Systemlast in die Höhe. Daher hab ich mal meine eigene Version davon geschrieben, die ganz ohne zusätzliche Datenbankzugriffe auskommt. Source gibts hier.
BA soll Accenture bei Online-Jobbörse begünstigt haben
BA soll Accenture bei Online-Jobbörse begünstigt haben - wundert das noch jemanden? Der Pfusch an dem Teil kennt keine Grenzen. Und jetzt ist es halt Pfusch und Kungelei - war bei dem miesen Ergebnis zu erwarten.
Was mich daran immer wieder wütend macht: wenn man selber in der Branche tätig ist, wundert man sich nur darüber was für horrende Preise bei solchen Geschäften gemacht werden - und wie mies die Leistung dann ist, die geliefert wird. Man selber muss aber bei jeder Stunde die geleistet wird am besten drei Stunden Nachweistätigkeit investieren um sein Geld zu bekommen, weil bei kleineren Geschäften ist Geiz ja Geil.
A Call to Action in OASIS
A Call to Action in OASIS ist ein offener Brief einer ganzen Reihe von Open Source Grössen gegen die neuesten Standardrahmenbedingungen von OASIS. OASIS beschäftigt sich mit der Standardisierung von Datenformaten und Webservices und in den neuesten Rahmenbedingungen sollen auch Standards erlauben die auf patentierten Techniken aufbauen - und damit im Endeffekt den Firmen Mittel an die Hand gäben mit diesen Standards Open Source Programme auszuschliessen. Im Prinzip der Neu-Aufguss der gleichen blöden Idee vom W3C - das auf die Proteste dann diese Idee wieder von Deck gezogen hat.
Plugin API for WordPress listet Actions und Filter auf, die WordPress definiert. Wird gerade mit Inhalt gefüllt.
Ape kann Python-Objekte in Zope transparent auf Filesystemobjekte oder PostgreSQL Datenbanken mappen. Könnte auf der Arbeit sehr interessant sein. Kann auch standalone (ohne Zope) benutzt werden.
Ian Bicking vergleicht FileSystemView vs. LocalFS als Alternativen um Zope-Objekte im Filesystem zu speichern.
Apache Rivet - TCL als Alternative zu PHP in den Apache einbinden und damit dynamische Seiten gestalten. Den Teufel mit dem Beelzebub austreiben?
Introducing sIFR: The Healthy Alternative to Browser Text
Introducing sIFR: The Healthy Alternative to Browser Text beschreibt eine auf JavaScript, CSS und Flash aufbauende Methode um Textstyling von den Beschränkungen von CSS zu lösen und beliebige Fonts zu verwenden.
Die Technik arbeitet ähnlich wie Image-Replacements durch CSS, nur das der ausgetauschte Text mit der Seite mitwachsen kann (z.B. wenn der Benutzer einen grösseren Basefont eingestellt hat). Hat ein Besucher Flash und JavaScript verfügbar, werden entsprechend markierte Textbereiche durch ein Flash-Rendering ersetzt.
Hat der Besucher kein Flash oder ist JavaScript deaktiviert, sieht er ganz normale Textinhalte über die Möglichkeiten des Browsers. Die Accessibility bleibt also weitestgehend erhalten - das HTML bleibt semantisch und Screenreader bei Textbrowsern sowie semantisch gesteuerte HTML Reader sollten problemlos damit klar kommen, Sehbehinderte mit grossen Fonts auch - durch Deaktivierung von Flash zum Beispiel würde der eingestellte Userfont gewählt.
Besser als CSS-Image-Replacement für Header ist es allemal, da es sich an die dynamische Umgebung wesentlich besser anpassen kann. Image-Replacements werden nicht gezoomed und unterstützen kein Copy-and-Paste der Inhalte (was von Flash ebenfalls unterstützt wird).
Die Technorati Plugin Beta stellt eine ähnliche Liste wie die normalen Kommentare zur Verfügung - nur stammen die Links und Textauszüge aus dem Technorati Link-Kosmos zu einem Artikel. Ich überlege gerade ob man sowas nicht sinnvollerweise auch mit blogger.de machen könnte - damit könnte man auch die erwischen, die nicht über Trackback oder Pingback automatisch verlinkt sind. Man müsste natürlich Duplikate gegen die normalen Trackbacks und Pingbacks testen. Hmm.
phpOpenTracker ist ein Live-Access-Auswerter für Webseiten. Er kann direkt in PHP-Anwendungen integriert werden oder über Webbugs (kleine unsichtbare Grafiken) aus statischen Webseiten gesammelt werden. Man kann damit ziemlich viel über das Benutzerverhalten in den Webseiten erkennen. Und bei Asymptomatic wird gerade an einem WP-Plugin dafür gestrickt, mit dem man die entsprechenden Auswertungen im WP-Backend zu sehen bekommt ...
javascript:xmlhttprequest [JPSPAN] - XMLHttpRequest ist das, was GMail und andere Webanwendungen mit hoher Interaktivität zum Ticken bringt. Integration von JavaScript Code mit Server Code über kleine HTTP-Requests die dann nur Teile der Seite aktualisieren.
Was einen erwartet wenn man MySQL 4.0 auf 4.1 aktualisiert. Ok, Datenbankversionsupgrades sind nie einfach und können immer mal Probleme machen.
Microsoft Interoperability
Ian Bicking beschreibt was Microsoft Interoperability wirklich heisst. Ein Zitat des Support-Mitarbeiters von Microsoft:
Microsoft isn't in the business of integrating with non-Microsoft software.
Deep Links finden in Logfiles
Weil mich der Pepino gerade danach fragte hab ich mal mein Deep Link Finder Script online gestellt. Es ist ein einfaches Python Script. Sollte ab Python 2.2 laufen, möglicherweise sogar mit Python 2.1 (ist aber nicht getestet). Das Script wird im Source konfiguriert (ich hab Kommentare dazu geschrieben) und dann einfach mit mehreren Logfiles als Parameter aufgerufen. Es sammelt aus Apache Combined Logs raus welche Sites wie oft auf angegebene Dateitypen (konfigurierbar, eingestellt sind einige Bildertypen) deep linked. Es spuckt dazu ein HTML Fragment raus das man mit Header und Footer garnieren kann um es online zu stellen - zum Beispiel entstehen so meine Zeitgeist-Seite für Deep Links. Die anderen Seiten haben ähnlich aufgebaute Scripte, nur das halt Suchbegriffe und generelle Referrer eingesammelt werden.
Ich guck mir ab und an die Deep Linker Liste an und wenn dann da jemand auftaucht der recht viel deep linkt und kein Aggregator oder News-Service ist, dann kriegt derjenige ein entsprechendes Austauschbild vorgesetzt. Aber eben auch wirklich nur diese Sites. Mich stört das nämlich auch immer wenn mir in meinem Feedreader unterstellt wird ich sei ein Bilderdieb oder Traffic-Räuber
Firefox - IDN - 0 Info - 0 Transparenz
Kai schimpt über Firefox - IDN - 0 Info - 0 Transparenz - und er hat Recht mit seinem Rant. Von kommerziellen Providern ist man ja dieses Security-Gemauschel gewöhnt, aber bei Open-Source-Projekten nervt es mich auch jedes Mal ganz besonders. Wann kapieren die Leute endlich mal das nur eine frühe Disclosure den Usern überhaupt die Chance gibt sich zu sichern? Geheimhaltung von Fehlern basiert auf der absurden Annahme das man der erste sei der diesen Fehler bemerkt hat. Was schlicht albern ist: ein Blackhat der diesen Fehler bemerkt wird ganz sicher nichts an die grosse Glocke hängen sondern diesen Fehler so lange wie möglich ausnutzen. Und damit profitiert von einer zu langen Geheimhaltung nur derjenige, dem man nicht helfen sollte.
Im Fokus der Überlegungen rund um Security muss der Benutzer stehen - und zwar der mündige Benutzer, der in der Lage ist die Informationen in sinnvolles Handeln umzusetzen. Den unmündigen Benutzer scherts eh nicht, der klickt auf alles. Aber ein Sysadmin der ein Problem kennt kann zumindestens durch eigene Aufklärung seiner User dazu beitragen das diese vielleicht für eine gewisse Zeit etwas vorsichtiger sind. Ein nicht informierter Sysadmin hat dazu nicht mal die Spur einer Chance.
In "Von der GPL" schreibt Isotopp über die GPL und was tatsächlich drin steht und wie man es verstehen kann. Eine recht gute Erläuterung, wie ich finde. Sollte jedem empfohlen werden zu lesen der den Unfug glaubt, den Microsoft, SCO und einige andere über die GPL verbreiten.
The MBROLA PROJECT HOMEPAGE - das MBROLA Projekt liefert einen freien Phonemsynthesizer. Phoneme rein, Sprache raus. Als Basis dienen Diphone-Datenbanken, die für eine ganze Reihe von Sprachen verfügbar sind. Auf der Projektseite gibt es auch Links zu Text-to-Speech-Projekten die auf MBROLA aufbauen.
Optimization Surprises
In dirtSimple.org: Optimization Surprises schreibt Phillip J. Eby über Optimierungen die er an seiner Implementation von generischen Funktionen in Python gemacht hat. Ich finde es immer wieder faszinierend wenn er über dieses Projekt schreibt, weil mir generische Funktionen gut aus Common Lisp bekannt sind. Faszinierend ist allerdings auch wie er halbe Mikrosekunden an Performance rausquetscht
In seinem Fall macht das übrigens durchaus Sinn, da es ja um eine zentrale Maschinerie geht die bei generischen Funktionen ständig aufgerufen wird. Minimale Performancesteigerungen machen in engen Schleifen eine ganze Menge aus.
Auch sehr interessant ist was er über die inneren Mechanismen von Python herausfindet und welche Auswirkungen z.B. alleine die Existenz von Closures in einer Funktion auf die Abläufe hat.
Spannend. Absolut spannend.
eAccelerator ist ein weiterer PHP Accelerator. Er baut auf dem Turck mmCache Source auf, ist aber aktiv in der Entwicklung.
Die Kostenlose Rechtsberatung für Open-Source-Entwickler ist sicherlich wohl nur für US-amerikanische Entwickler wirklich nutzbar - aber vielleicht kommt vergleichbares ja auch nach Europa.
Weg mit Trackback
Isotopp grübelt anlässlich des Spamtags über Trackback Spam und stellt mehrere Ansätze vor. Einer davon arbeitet mit einer Gegenprüfung der Trackback-URL gegen die IP des einsendenden Rechners - wenn der Rechner eine andere IP hat als der im Trackback beworbene Server, dann wäre das warscheinlich Spam. Ich hab mal meine eigenen Kommentare dazu zusammengeschrieben - und begründet, warum ich Trackback lieber heute als morgen los wäre. Komplett. Und ja, das ist eine komlette 180-Grad Wendung meinerseits zum Thema Trackback.
Der IP-Test-Ansatz kommt mal wieder aus der Sicht der reinen servererstellten Blogs. Es gibt aber dummerweise einen grossen Haufen Trackback-fähiger Softwareinstallationen die nicht auf dem Server laufen müssen (oft auch nicht laufen) auf dem die Blogseiten liegen - alle Tools die statischen Output produzieren zum Beispiel. Grosse Installationen sind Radio Userland Blogs. Kleinere PyDS Blogs. Oder auch Blosxom-Varianten im offline-Modus (sofern es da mitlerweile trackbackfähige Versionen gibt - aber das es typische Hackertools sind, gibts das mit Sicherheit).
Dann gibts noch die diversen Tools die nicht Trackback-fähig sind, wo die User dann einen externen Trackback-Agent benutzen um die Trackbacks abzusetzen.
Und last but not least kommen auch noch die diversen Blogger/MetaWeblogAPI-Clients hinzu, die selber den Trackback absetzen weil z.B. nur MoveableType im MetaWeblogAPI das Triggern von Trackbacks erlaubt, aber andere APIs nicht.
Von daher ist der Ansatz mit der IP entweder nur als ein Filter zu sehen der einen Teil der Trackbacks durchwinkt, oder aber eine Verhinderung von Trackbacks von den oben genannten Usern. Und letzteres wäre ausgesprochen unschön.
Eigentlich ist das Problem ganz einfach: Trackback ist ein krankes Protokoll das mit der heissen Nadel gestrickt wurde, ohne das sich der Entwickler auch nur einen Hauch von Gedanken zu dem ganzen Thema gemacht hat. Und gehört daher IMO auf den Müllhaufen der API-Geschichte. Das ich es hier unterstütze liegt einfach nur daran, das WordPress es standardmäßig implementiert hat. Sobald der manuelle Moderationsaufwand zu hoch wird, fliegt Trackback hier ganz raus.
Sorry, aber in dem Punkt Trackback haben die MoveableType-Macher wirklich Nähe zu Microsoft-Verhalten gezeigt: einen völlig unzureichenden Pseudo-Standard durch Marktdominanz durchgedrückt - ohne sich überhaupt mal über die Sicherheitsimplikationen Gedanken zu machen. Warum wohl bei RFCs immer ein entsprechender Absatz über Sicherheitsprobleme zwingend ist? Leider haben die ganzen Blogentwickler alle fleissig mitgezogen (ja, ich auch - bei Python Desktop Server) und wir haben dieses alberne Protokoll am Hals. Und seine - völlig erwartbaren - Probleme.
Besser jetzt eine bessere Alternative entwickeln und forcieren - z.B. PingBack. Bei PingBack ist definiert, das die Seite die einen PingBack auf eine andere Seite ausführen will auch wirklich diesen Link dort exakt so enthalten muss - im API werden immer zwei URLs übertragen, die eigene und die fremde URL. Die eigene URL muss im Source auf die fremde URL zeigen, nur dann wird der fremde Server den PingBack annehmen.
Für Spammer ist das ziemlich absurd zu handhaben - sie müssten vor jedem Spam die Seite umschiessen oder über entsprechende Servermechanismen dafür sorgen, das die gespammten Weblogs dann beim Test entsprechend eine Seite vorgegaukelt bekommen, in der dieser Link drin ist. Natürlich ist das durchaus machbar - aber der Aufwand ist deutlich höher und durch die nötige Servertechnik ist das nicht mehr mit fremden offenen Proxies und/oder Dialup-Zugang machbar.
Von daher wäre der richtige Weg einfach der Wechsel des Linkprotokolls. Weg mit Trackback. Das Trackback-Loch kann man nicht stopfen. PS: wer sich mal meinen Trackback in Isotopps Posting anguckt sieht gleich das zweite Problem von Trackback: abgesehen vom riesigen Sicherheitsproblem ist nämlich die Zeichensatzunterstützung von Trackbacks schlichtweg ein totales Debakel. Auch hier hat der ursprüngliche Autor des Pseudo-Standards keine Minute über mögliche Probleme nachgedacht. Und dann wundern sich noch manche Leute wenn TypeKey von den Moveable-Type-Leuten nicht so richtig akzeptiert wird - sorry, aber Leute die so bescheidene Standards machen werde ich auch noch gerade die Loginverwaltung übertragen ...
Orange Data Mining
Mal wieder ein Link für die Zahlenfresser: Orange ist eine Datamining-Library mit Python-Integration und eine - zumindestens nach den Screenshots - interessanten GUI.
darcs - Distributed Versioning
darcs ist eines der vielen Versionsverwaltungssysteme die als Nachfolger von CVS antreten. Speziell gehört darcs in die Klasse der verteilten Versionsverwaltungen und ist damit natürlich Subversion mit seinem zentralistischen Ansatz überlegen (jedenfalls wenn man ein verteiltes Projekt verwalten will und nicht einfach mit dem zentralen Repository klar kommen kann). Normalerweise würde ich über sowas nicht viele Worte verlieren - schliesslich gibts im Moment mehr Versionsverwaltungsprojekte als in den 80ern Editoren. Aber jetzt mal ernsthaft: wer kann ein Versionsverwaltungssystem ignorieren das in einer funktionalen Programmiersprache mit lazy evaluation geschrieben ist (ja, genau, das Teil ist in Haskell - soviel dazu das Haskell für praktische Projekte untauglich sei) und sich selber als auf einer "theory of patches" with roots in quantum mechanics basierend beschreibt? Und die Programmierer benutzen auch noch literate Programming - ja, diese etwas in Vergessenheit geratene Methode von Knuth in einem Source sowohl Dokumentation als auch Code unterzubringen und ein Programm dokumentationszentrisch zu entwickeln. Einfach nur cool.
Using the .Mac SDK - Objective C (und über PyObjC dann wohl auch Python) Schnittstelle zu .Mac.
freshmeat.net: Project details for JRuby - cool, JRuby ist mitlerweile bei Ruby 1.8 angekommen. Eine nette Alternative im Java-Umfeld einfach mit Ruby zu programmieren. Die Jython-Leute sollten mal aus den Puschen kommen und endlich Jython voll Python 2.3 kompatibel machen - da happerts noch gewaltig.
Introducing JSON - eine weitere Objekt-Ascii-Notation, diese hier angelehnt an JavaScript Syntax. Ganz interessant - nicht so pingelig was Leerzeichen angeht wie YAML und nicht so schwafelig in der Syntax wie XML.
.: json-rpc.org :. - eine auf JSON aufbauende RPC Bibliothek.
Asymptomatic » New “Secret” Project - sowas wie ein Peer2Peer-Netz, das auf Standardtechniken wie HTTP und DNS aufbaut. DynDNS zum gegenseitigen Finden, HTTP zum Filetransfer und RSS und HTML für die Filelisten. Eigentlich ne nette Idee.
RSS 1.1 und Postals Law
Der RSS 1.1: RDF Site Summary (DRAFT) enthält eine stelle die mir erst heute aufgefallen ist ( durch dieses Posting). Das passt gut zu dem Thema Arroganz von Entwicklern . Denn hier hat wieder mal ein Entwickler leicht den Pfad der Vernunft verlassen. Klar, es ist wichtig das ein Standard sauber definiert ist und das sich Produzenten der Formate an diese Standards halten. Es ist auch in Ordnung zu verlangen das ein Komsument dieses Format prüft und bei Abweichungen Meldungen gibt (wobei die wenigsten Benutzer mit diesen Meldungen ihres Aggregators was anfangen können). Es ist aber völlig utopisch zu glauben das Aggregator-Benutzer damit zufrieden sind, das ihr Aggregator nur eine Fehlermeldung ausspuckt und keinen Content. Das ist genauso dämlich wie der gleiche Antritt bei XHTML - wo einige Browser das durchaus umsetzen und bei defektem XHTML nicht in den Quirks-Mode gehen, sondern einfach den XML-Par4ser-Fehler liefern. Sorry, aber das ist komplette Moppelkotze. Jedes Kommunikationsprotokoll hat nunmal zwei Enden - den Produzenten und den Konsumenten. Und Postals Law - be conservative in what you produce and liberal in what you accept - ist nunmal der sinnvollste Weg wie man solche Kommunikationsprotokolle angehen sollte, die für Menschen bestimmten Content transportieren. Zu fordern das Konsumentenanwendungen vorhandenen Content nicht zeigen aufgrund von Formatfehlern ist schlicht unrealistisch.
Thinking Forth
Thinking Forth ist jetzt online verfügbar. Mein erstes Forth-Buch - hat mich damals für die Sprache sehr begeistert. Vor allem weil es den mir damals zugänglichen Rechnern wesentlich angemessener war als die meisten anderen Programmiersprachen.
Audioscrobbler :: Development - Last.fm Streaming API - ein API zum auf seinen last.fm Sender zuzugreifen.