research!rsc: Go Data Structures: Interfaces - eines der wirklich interessanten Features in Go: die Interfaces. Go-Interfaces haben einen entscheidenden Vorteil über Scala Traits, Java Interfaces, C++ Multiple Inheritance: sie werden nur als Interface definiert, aber implementierende Strukturen müssen nicht von diesen Interfaces erben. Interfaces können auch für Code definiert werden, der nicht im Source vorliegt und von ganz woanders kommt. Ich wünschte Scala hätte sowas bei den Traits. Das wäre ein gutest Stück näher an Duck Typing mit compile-time Prüfung. "Ich will hier ein Ding sehen, das folgende Funktionen mit folgenden Signaturen unterstützt" ist ja genau was Duck Typing ausmacht - nur das es z.B. bei Python oder Smalltalk oder anderen dynamischen Sprachen üblicherweise erst zur Laufzeit kracht.
programmierung - 25.12.2009 - 20.1.2010
taylanpince's django-doc-wiki at master - GitHub - klingt ganz interessant, ein Tool, das automatisch markdown Files in einem Repository ausliest und diese dann in einer Wiki-ähnlichen Struktur als Website präsentiert. Recht simple Basis, aber damit könnte man was machen.
Anonymous Pro - Aktualisierung des schon recht angenehm zu lesenden Anonymous Font. Anonymous spricht speziell Programmierer an und hat daher feste Laufweiten für die Zeichen. Kritische Zeichen können sehr gut unterschieden werden. Wirkt recht aufgeräumt und auf mich augenfreundlicher als Monaco (jedenfalls in den größeren Größen die ich mitlerweile dann doch vorziehe)
Java Image Processing - Blurring for Beginners - Tausend und ein Weg wie man ein Bild unscharf bekommt (was durchaus praktische Anlässe haben kann) mit Java Code als Beispielen.
Mercurial: The Definitive Guide - hab ich das echt noch nicht gelinkt? Naja, jetzt aber. Ein ganzes Buch - über Mercurial, mein bevorzugtes verteiltes Versionierungssystem. Kann man auch auf Papier oder als eBook kaufen. Oder halt hier online lesen.
jQuery 1.4 Released – The 14 Days of jQuery - neue Version von jQuery ist raus, viele Änderungen.
matthiask's feincms - erweiterbares CMS für Django. Sieht sehr interessant aus, speziell die recht kompakte Erweiterbarkeit um eigene Content-Typen.
ReusableAppResources - Django - Trac - genereller Startpunkt wenn man Django-Apps suchen will, von hier wird auf die verschiedenen Vergleichslisten verwiesen.
stream – Lazily-evaluated, parallelizable pipeline - interessante kleine Bibliothek für Python mit der Streams als lazy evaluation lists für bessere Parallelisierbarkeit von Code benutzt werden können. Und da Python ja durch das GIL bei Threads etwas limitiert ist, werden hier auch gleich Modelle für die Nutzung von Multiprocessing angeboten (durch unabhängige Prozesse lassen sich auch bei Python mehrere Cores effizient nutzen, allerdings zum Preis von Kommunikationsoverhead zwischen den Prozessen). Sicherlich wegen diverser Gründe mit Vorsicht einzusetzen - massive Parallelität sollte man damit eher vermeiden, denn da Systemthreads und Systemprozesse benutzt werden, ists nix mit tausenden von parallelen Abläufen (wie es z.B. mit Microthreads ja durchaus möglich wäre). Aber trotzdem für manche Probleme sicherlich sinnvoll nutzbar.
fingernails in oatmeal, The Unsightliness of Merge Commits - und noch ein bischen mehr über git commit/push/rebase und all das Zeug rundherum. Auch hier recht gut auf Mercurial zu übersetzen.
Introducing Akka - Simpler Scalability, Fault-Tolerance, Concurrency & Remoting through Actors - schöner Überblick über ein recht interessantes Projekt in Scala (hab glaub ich schon mal drauf gelinkt) das STM, distributed Actors und das Erlang Supervisor Modell für Scala liefert. Sollte ich mir unbedingt mal angucken.
Linus on git pull/rebase - wann man rebase nutzt und wann man pull nutzt und wann man merge commits macht. Gilt ähnlich auch für Mercurial, wo die Probleme ähnlich sind. Nicht ganz so stark für darcs, das durch Patch-Reordering hier kleine Vorteile bietet.
entrian.com - goto for Python - goto for Python - goto und comefrom für Python. Ja, war ein Aprilscherz, tuts aber trotzdem.
HeyChinaski.com » Blog Archive » HeyGraph Javascript and canvas graphing tool - Grafikbibliothek die Graphen automatisch ausrichtet und anzeigt. Könnte für das eine oder andere Projekt mal interessant werden.
Nailgun: Insanely Fast Java - wenn der JVM Start zu lange dauert kann Nailgun mit einer persistenten JVM helfen. Die läuft einfach weiter und kriegt gesagt was sie machen soll. Sollte dementsprechend auch mit Scala und Clojure helfen, gerade wenn man kleine Tools damit bauen will, die nicht jedesmal eine neue JVM starten sollen.
ProGuard - hilft beim runtertrimmen von standalone jars. Wobei das allerdings nicht so einfach mit Clojure oder Scala standalone jars ist, da gehört schon etwas Fummeln dazu scheinbar.
ScalaCheck User Guide - interessanter Ansatz für ein Unittest-Tool. Basiert auf den Ideen von QuickCheck für Haskell. Mir gefällt vor allem der Ansatz Tests als Eigenschaften zu deklarieren und dann Zufallsdaten (oder kontrollierte Testdaten) zu generieren und zu gucken ob diese Eigenschaften tatsächlich passen. Das ganze passt besonders gut zu rein funktionalem Code, da durch fehlende Seiteneffekte Funktionen sehr viel einfacher mit Zufallsinputs testbar sind.
technically.us Git - sling.git/blob - project/build/AssemblyProject.scala - nette kleine custom task für sbt um standalone-jars zu erzeugen.
Ursula - nicht unser aller Ex-Zensuristin, sondern eine Programmiersprache. Hier verlinkt auf einen Beispielcode. Wer glaubte das Anic schwer lesbar ist, Ursula gewinnt den Wettbewerb der unlesbarsten Programmiersprache locker. Komplett unverständlich wenn man es anguckt.
anic - Dataflow Sprache mit interessanten Features und (praktisch nicht existierendem, da die Codegenerierung fehlt) Compiler. Parallelisierung kommt bei Dataflow Languages automatisch frei Haus. Generell eine faszinierende Ecke von Sprachen die viel zu wenig Beachtung bekommt. Ob allerdings eine Sprache mit einer dermaßen Sonderzeichen-lastigen Syntax die Antwort ist ... jaja, ich weiß, Syntax ist nur Oberflächlich - aber tipp mal all die Sonderzeichen auf einer deutschen Tastatur!
Communities: DIY LabVIEW Crew: A Commodore 64 emulator written in LabVIEW - und weil wir gerade bei seltsamen X-in-Y Projekten sind: LabView ist eigentlich eine grafische Sprache zur Programmierung von Steuerungssystemen und Auswertungssystemen in Laborumgebungen. Und wird - in Abwandlung - zur Programmierung von Lego Robotern benutzt. Warum jemand überhaupt auf die Idee kommt, da drin einen C64 Emulator schreiben zu wollen, keine Ahnung. Aber er hats gemacht ...
qb.js: An implementation of QBASIC in Javascript (part 1) - Steve Hanov's Programming Blog - drin was drauf steht. Irgendjemand hat verdammt zu viel Zeit.
Alloy Analyzer - wer sich mal ansehen will, wieweit automatische Beweise und automatisches Reasoning auf Softwaremodellen heutzutage ist, guckt sich das Projekt mal an. In Java geschrieben, Installer für die großen Systeme verfügbar. Kommt mit einer deklarativen Sprache in der die Modellspezifikation gemacht wird und automatischen Konfliktfindern - also ein Modell, welches fehlerhaft ist, wirft Gegenbeispiele aus die mindestens eine der Randbedingungen verletzen. Und das Tutorial liefert nicht irgendwelche abstrakte praxisferne Beispiele, sondern z.B. ein Modell eines Datesystems mit verschiedenen Operationen darauf.
Apples and Bananas - sollte mal wieder ein Politiker Äpfel mit Bananen vergleichen, könnte dieser Artikel über Bilderkennungsalgorithmen zur Unterscheidung von Äpfeln und Bananen helfen!
Nullege: A Search Engine for Python source code - ganz nützlich, wenn man zu einem API gucken will wie es verwendet wird in verschiedenen Projekten. Manchmal sind Dokumentationen etwas unklar und Beispielsource angucken macht die Sache klarer.
[tw] : Building a Codeless Language Module with BBEdit 8.5 and (Ir-) Regular Expressions - weil ich immer wieder danach suche, hier eine Anleitung wie man die codeless language modules für BBEdit und TextWrangler baut. In der neuen Version können die nämlich regular expressions. Tipp: die regular expressions in der grep Suche von BBEdit/Textwrangler ausprobieren, dann sieht man ob sie auch korrekt auf einem Source funktionieren.
SQLiteJDBC - noch ein JDBC Treiber für SQLite
SQLiteJDBC - weil ich ein SQLite Fan bin (wenns zu komplex für simple Textfiles ist, ist SQLite die nächsthöhere Stufe), und weil ich mit Scala und Clojure rumspiele, könnte ich das hier mal brauchen.
Python Package Index : promise 0.2.1 - ziemlich cooler bytecodehack für Python der mittels Dekoratoren Funktionen als "pure" oder "constant" deklariert (oder ein paar andere) und dadurch Optimierungen von Python-Code ermöglicht. Speziell teure Lookups können so vermieden werden wenn man dem Compiler zusichert, das innerhalb einer Funktion z.B. Builtins oder benamste Funktionen sich nicht dynamisch ändern sondern konstant bleiben.
FleetDB - kleine In-Memory Datenbank mit Persistenz über ein append-only Transaktionslog. Das Protokoll besteht aus einfachen JSON Arrays. Implmentiert in Clojure, aber durch das JSON-Interface für beliebige Sprachen einbindbar (man braucht halt nur eine JSON Bibliothek und Zugriff auf Sockets).
generator_tools - weil man immer mal wieder auf die Situation stößt Generatoren in Python wegspeichern zu wollen (z.B. wenn man Continuations oder Coroutinen mittels Generatoren simuliert und diese als State eines laufenden Webworkflows in einem Webframework benutzt), mit diesem Modul (hack auf Bytecode-Introspection aufbauend) geht es eingeschränkt. Alleine schon interessant wegen der Einblicke die in den Interpreter gegeben werden.
Matasano Security LLC - Chargen - If You're Typing The Letters A-E-S Into Your Code, You're Doing It Wrong - interressanter Artikel (wenn auch in einer etwas seltsamen Präsentationsform) über typische Probleme bei Nutzung von Cryptographie für SSO in Websystemen. Einfach "ich verschlüssel das Cookie und dann ist alles gut" tuts eben nicht ...
MetaPython Documentation - eine der Sachen die mich immer wieder von Python zu Lisp bringen sind die netten Lisp Makros, mit denen man elegant embedded DSLs für verschiedene Zwecke bauen kann, die sich gut in die Hostsprache einbinden. Mit MetaPython kann man sowas vielleicht mit Python hinbekommen. Zumindestens sind alle Bauteile da.
OpenSimulator GForge - weil ich gerade mal wieder mit OpenSim rumspiele, hier findet man haufenweise Projekte rund um OpenSim.
Hg-Git Mercurial Plugin - sollte eigentlich den Zugriff auf GIT-Repositories mit Mercurial erlauben, scheint aber irgendwie im Moment nicht zu tu n - ich krieg jedenfalls nur Fehler. Aber erstmal for future use geblogmarkt.
hgsubversion - da man ja immer mal wieder auf SVN trifft und sich dann oft ärgert, das man nicht das Arbeitsverzeichnis zwischen Releases wechseln lassen kann, kann man einfach hgsubversion benutzen. Damit wird ein komplettes SVN Repository in ein lokales Mercurial-Repository gespiegelt aus dem man dann problemlos seinen Arbeitsbereich bestücken kann mit Mercurial-Mitteln. Auch gut wenn man Patches auf ein SVN Projekt verwalten will, da die Patchqueue von Mercurial da allen SVN-basierten Techniken überlegen ist.
duelinmarkers's clj-record - ein Persistency Framework inspiriert von Active Records (dem ORM von Ruby on Rails), aber halt in Clojure und mit einem mehr Lisp-like API. (das war jetzt sehr viel Denglisch in einem Satz!)
mattrepl's clojure-neo4j - und hier ein Interface zu Neo4J, einer Graphen-Datenbank für Java, mit der komplexe Datenstrukturen recht leicht auf Platte gespeichert werden können. Sieht für simple Persistenz in Programmen ganz interessant aus.
neo4j open source nosql graph database - die vorhin genannte Graphen-Datenbank für Java. Sieht recht interessant aus für die Situationen, in denen relationale Datenbanken zu starr und unflexibel sind.
pjstadig's tim-clojure-1.0.0 - ziemlich cooles Projekt welches mittels Terracotta (im Prinzip eine distributed Map für Java) ein verteiltes Environment für Clojure implementiert. Objekte mit passenden Metadaten werden automatisch auf alle diesem verteilten Environment angeschlossenen Clojures verteilt - und das tuts für nahezu alle Objekte die in Clojure definierbar sind.
Moscow ML Home Page - hatte ich erstaunlicherweise noch nicht. Ist ein kleiner SML Bytecode-Compiler der mitlerweile den vollen Sprachumfang und die Standardlibrary implementiert. Deutlich schlanker als das große SML/NJ und braucht auch weniger Ressourcen als SML/NJ oder MLton. Gerade für kleine Tools sehr brauchbar (und auf dem Mac mit MacPorts installierbar - genauso wie aber auch SML/NJ und Poly/ML, den zwei anderen großen ML Compilern).
Poly/ML Home Page - mal verlinkt, weil Poly/ML oft über der Existenz von SML/NJ und MLton ignoriert wird. Eventuell auch als Alternative zu MosML nutzbar, denn Poly/ML ist recht fix, liefert aber native Code der auch gut für standalone-Tools zu nutzen ist. Wobei da natürlich MLton nochmal auftrumpft, da es mit der Optimierung über das gesamte Programm zwar lange für den Compile braucht, aber wesentlich kleinere Executables produziert.
Standard ML of New Jersey - und weil keine Liste von ML Compilern ohne den Grandfather of SML vollständig wäre, hier noch der letzte Link. Schon etwas betagt, aber sicherlich immer noch eines der am besten ausgebauten Systeme.
Fuzzy Hashing and ssdeep - liefert Hash-Werte für Files die ähnlich sind, wenn die Files selber auch ähnlich sind. Kann benutzt werden, um partiell gleiche Files aufzufinden (also z.B. Code-Reuse in Sourcecodes oder unterschiedliche Versionen eines Dokumentes etc.).
Home of pHash, the open source perceptual hash library - perceptual hashing liefert ähnliche Hashes für visuell ähnliche Files. Also sowas wie fuzzy Hashing für Bilder oder Filme. phashes von Bildern zum Beispiel ändern sich nur minimal wenn das Bild minimal geändert ist. Je größer die Differenz der Bilder, je größer die Differenz der Hashes.
MLton Standard ML Compiler (SML Compiler) - MLTon wird ja für Ur/Web benötigt, es gibt netterweise einen Binary-Download für OS X der auch brauchbar funktioniert, wenn man die GnuMP library über MacPorts installiert hat (von dort kann man auch die mhash library installieren, die andere Voraussetzung für Ur/Web). MLton ist auch alleine schon ein interessantes Projekt, da es ein Standalone-Compiler für ML ist, welcher sehr gute Optimierungen (dafür aber auch extreme Laufzeiten für den Compiler) besitzt.
Ocsigen - sieht aus wie etwas zu Ur/Web vergleichbares, das auf der OCaml Toolchain und der Sprache OCaml aufbaut. OCaml hat einige sehr nette Eigenschaften, das könnte also auch interessant sein. Allerdings macht das Projekt einen mehr Baukasten-Eindruck mit mehreren zusammenspielenden Teilen, wie gut die Integration ist, muss sich da erst zeigen. Bei Ur/Web begeistert mich die Tatsache, das ich wirklich nur mit einer Handvoll Files direkt eine Webanwendung zusammenstellen kann, ohne großen Overhead. Auch die Installation aus dem Source von Ur/Web ist simpler, durch die geringe Zahl an Abhängigkeiten. Andererseits ist Ocsigen direkt in Debian verfügbar, was die Installation natürlich deutlich vereinfacht.
The Ur Programming Language Family - interessante funktionale Programmiersprache mit integriertem XML Templating und Persistenz. Das Ziel ist es die komplette interaktive Webanwendung in einer Sprache zu schreiben. Datenmodell in der gleichen Sprache wie Templates. Alles abgesichert mit Typdeklarationen und Typinferenz - z.B. gibt es einen Funktor, mit dem aus einer in Ur geschriebenen Tabellendefinition automatisch eine komplette Administrationsoberfläche für diese Tabelle generiert wird, alles mit Absicherung gegen Code-Injection und andere übliche Angriffsszenarien. Die Sprache selber orientiert sich sehr stark an ML, übernimmt aber einige Features aus Haskell (speziell die Monads und das mächtiger Typsystem). In einigen Punkten erinnert es mich stark an Scala von den Ideen her - gute embedded languages für SQL und HTML kombiniert mit einer mächtigen funktionalen Sprache. Allerdings erzeugt der Ur Compiler direkt object code (und JavaScript für die Client Seite) und nicht Code für eine virtuelle Maschine. Und die Runtime hat keine Garbage Collection, sondern aus dem Code abgeleitetes Memory-Management (was Speicherverhalten mehr deterministisch macht). Das ganze basiert auf MLTon, einem sehr gut optimierenden ML Compiler. Irgendwie erinnert mich vieles an dem Projekt an Django - nur eben nicht dynamisch getypt, sondern statisch. Könnte durchaus interessant sein.
Web Authoring System Haskell (WASH) - nur der Vollständigkeit halber auch verlinkt, es ist vergleichbar zu Ur/Web und Ocsigen, nur halt mit Haskell. Aber wirkt irgendwie noch mehr Stückwerk als aus einem Guss.
Mail::RFC822::Address - "Die in RFC 822 beschriebene Grammatik ist überraschend komplex. Die Implementierung der Validierung mit regulären Ausdrücken stößt etwas an die Grenzen dessen, was mit regulären Ausdrücken sinnvoll zu tun ist, obwohl Perl damit gut zurechtkommt"