programmierung - 24.6.2011 - 27.7.2011

Orange - Data Mining Fruitful & Fun. Wow, gerade drüber gestolpert, das kannte ich noch nicht, glaub ich. Eine GUI-Oberfläche mit einem Node-Interface zur Definition von Datenanalysen und Visualisierungen, wobei diese Knoten in Python programmiert sind. Das ganze Interface ist mit QT gebaut, daher gibts da auch eine OSX Version davon. Wenn man also größere Datenmengen durchwühlen muss, ist das sicherlich mal einen Blick wert, zumal es Open Source ist und man sich da ja nix vergibt.

Sage: Open Source Mathematics Software. Einfach weil ich ja letztens über Worksheet-Interfaces gegrübelt habe und drüber nachdenke, was es da alles so an Auswahl gibt - Sage ist ja nicht nur ein Mathematik-Paket, sondern primär erstmal eine gigantische Modulsammlung für Python und ein Worksheet-Interface ebenfalls für Python. Ok, man benutzt einen Webbrowser gegen einen lokal laufenden Webserver, aber trotzdem ist das eigentlich eine nette Sache. Und mitlerweile ist Version 4.7 mit vielen Änderungen draußen. Und man kann gute Sachen ruhig mal wiederholen. Billiger als Mathematik ist es allemal und Python gefällt mir auch deutlich besser als Programmiersprache. Da ich warscheinlich dann irgendwann mir meinen eigenen Server installieren will, um auf Notebooks von überall zugreifen zu können, hier mal ein Blogmark auf eine Anleitung, wie man mit Ubuntu einen eigenen Sage Server baut.

The Xavisys WordPress Plugin Framework - Xavisys. Interessant wenn man selber Plugins für WordPress bauen will, denn es nimmt einem ein paar der Standardarbeiten ab und macht den Code damit etwas simpler.

Creating Apps Using AppleScript Objective-C. Vielleicht sollte ich mir einfach das Buch hier holen, um meine (recht perverse) Neugierde für die AppleScript/Objective-C Bridge zu befriedigen.

SuperCard on Lion. Und weil ich gerade von HyperCard geschrieben habe, sein geistiger Nachfolger - SuperCard - existiert immer noch und ist für Lion wieder fit gemacht worden. Aber wohl immer noch eine Carbon Anwendung, seine Tage sind also wohl doch in nicht zu ferner Zukunft gezählt (bzw. wird es immer schwerer werden, SupeCard in aktuelle Entwicklungen zu integrieren, wenn nicht ein Wechsel nach Cocoa stattfindet). Und es reizt mich immer noch das Teil zu kaufen, und wenn es nur aus Nostalgie ist. Das Hack-Gefühl von HyperCard hab ich nur später wieder so in Smalltalk-Umgebungen erlebt (und die sind ja leider unter OSX auch eher tot).

Mac OS X 10.7 Lion Automation Release Notes. Die schrecklichste Spracherfindung seit Hypertalk hat in der Löwenversion einen Haufen Erweiterungen bekommen, besonders die Integration der Objective-C Bridge in den Apple Script Editor ist witzig - man kann damit direkt in Scripten auf Cocoa Frameworks zugreifen. Auch wenn ich der Überzeugung bin, dass AppleScript wahrscheinlich mehr Programmierer in den Wahnsinn getrieben hat als dass es Benutzern das Leben erleichtert hat, es ist allein schon aus Sprachhistorischen Aspekten immer wieder interessant zu gucken was sich dort tut. Seit Snow Leopard mit der Objective-C Bridge gekommen ist, ist es jedenfalls wieder im Aufwind und selbst im aktuellen XCode 4.1 kann man Anwendungen komplett nur mit dem Interface Designer und AppleScript zusammendengeln. Leider ist die Anwendungsstruktur unter Cocoa definitiv nicht Non-Programmierer-geeignet, XCode mit AppleScript Anwendungen ist also nicht wirklich eine Neuauflage von HyperCard (der einzige Grund, warum ich HypeTalk vergebe - es war die Sprache in diesem ziemlich genialen kleinen Tool mit großer Reichweite).

XMPPFLASK — XmppFlask v0.1 documentation. Definitiv ein interessantes Projekt - ein XMPP Bot in Python, der eine ähnliche Struktur hat wie Flask, also einfache Definition für XMPP Handler mit Routing von Events. Da ich immer mal wieder vor hatte mir XMPP als Backbone für verteilte (also weit verteilte) Anwendungen mit Online/Offline-Möglichkeit anzugucken, mal geblogmarkt.

flot - Attractive Javascript plotting for jQuery. Mal wieder was für die Zahlenfresser, bzw. deren visualisierenden Kollegen - Zahlenwüsten in gut aussehenden Graphen darstellen, und das ganze als jQuery Plugin. Muss ich mir definitiv mal näher angucken, könnte bei speziell einem Projekt interessant werden.

clojurescript demo convex hull. Eine Demo für die Programmierung von Clientside Code in Clojure mit Hilfe von Clojurescript. Clojurescript compiliert Clojure nach JavaScript mit Hilfe des Google Closure Compilers und der Closure Library. Sieht nach einer sehr interessanten Möglichkeit der Clientprogrammierung aus, zumal Clojurescript unter Mithilfe von Rich Hickey steht, dem Erfinder und Hauptentwickler von Clojure, man kann also davon ausgehen, das die Integration in die Clojure Welt gut sein wird.

Pattern Matching In Python. Interessanter Artikel für Leute wie mich, also für Leute die Snobol4 oder dessen "Nachfolger" (in Tüddelchen, weil es ja dann doch eine gänzlich andere Sprache ist) Icon mögen und mal eine Alternative zu regulären Ausdrücken haben möchten. Implementiert ein dem Icon-Modell sehr ähnliches Pattern-Matching-System, komplett mit Backtracking und Generatoren. Ist allerdings aus 2004 und ist eher eine proof-of-concept Geschichte, nicht unbedingt ein direkt nutzbares und installierbares Python Modul. Im Gegensatz zu SnoPy ist es aber reines Python und nicht ein Swig-basierter Wrapper für eine Ada Library.

Bash on Balls. Für die Momente im Leben, wo selbst Visual Basic zu viel wäre - ein Webframework für Bash Scripte. Benutzt natürlich ein paar Unix-Werkzeuge zusätzlich, vor allem Netcat für den Netz-IO. Und ja, es kommt komplett mit Server und allem, so wie man es sich vorstellt. Sogar Dev-Code-Reload und solche Sachen gibts, auch eine Templatesprache. Und mit BoB ein nettes Acronym. (und im Gegensatz zu Cobol on Cogs ist das hier ein Projekt das man wirklich ausführen kann und nicht nur ein Ulk)

FAQ - Kotlin - Confluence. Die Drölfundfünfzigste Java-Killer-Sprache für die JVM, die hier auch gleich Scala attackiert (das übliche Argument "Scala ist zu kompliziert", welches auf den ersten Blick auch durchaus stimmt - Scala hat wenige zentrale Basisfeatures, die durch die Standardlibrary und die gute DSL Möglichkeit die eigentliche Sprache an der Oberfläche für den Programmierer dann mit vielen Features versorgt). Bleibt die Frage, was daraus wird, aber da JetBrains dahinter steht, wird sie zumindestens eine gute IDE haben (JetBrains baut IntelliJ und andere JVM IDEs, unter anderem auch PyCharm und mit AppCode die einzige derzeitige OSX Objective-C Alternative zu XCode). Und hey, wer seine Sprache nach einer Insel vor St. Petersburg benennt, hat schon mal einen Wohlwollensvorsprung bei mir.

WSGID When your WSGI app becomes a nix daemon. Mongrel2 von Zed Shaw hat mich schon geraume Zeit interessiert, aber das grösste Manko war, dass es nicht viele Python Frameworks gibt, die direkt mit Mongrel2 arbeiten. wsgid löst das Problem, es ist ein WSGI Server für Mongrel2 und kann damit dann Frameworks ankoppeln, die unter WSGI laufen können - zum Beispiel ist damit Mongrel2 als HTTP Server für eine verteilte Django-Installation benutzbar. Durch den Einsatz von ZeroMQ bei Mongrel2 ist das ganze dann deutlich flexibler strukturierbar als mit den klassischen (FCGI basierten) Serverintegrationen.

Elnode - an Emacs version of node.js. Mal wieder ein Projekt aus der Klasse "weil es geht" - ich glaube jedenfalls nicht, dass irgendjemand auf die Frage "wie will ich meine Webservices betreiben" als Antwort spontan "Emacs" sagen würde. Aber nunja, das Betriebssystem mit eingebauten Basisfunktionen zur Textverarbeitung kann eben auch einen asynchronen Webserver darstellen.

Replication, atomicity and order in distributed systems. Sehr interessanter Artikel über Verteilung und Ordnung in verteilten Systemen mit paralleler Ausführung - denn das ganze ist nicht wirklich trivial. Lesenswert alleine für die Links auf verschiedene Projekte in dem Umfeld. Am Ende ein bischen ein Cliffhanger, weil auf einen kommenden Artikel verwiesen wird - hoffentlich kommt der auch, denn dessen Thema klingt ebenfalls interessant.

Kivy: a crossplatform framework for creating NUI applications. Interessante neue GUI-Library für Python, läuft auf verschiedensten Plattformen (und neben den drei Großen Desktopumgebungen ist mit Android ist auch schon eine mobile dabei) und kann OpenGL zur Beschleunigung der Ausgabe einsetzen (intern haben die einen JIT, der die Basisfunktionen compiliert und so schnelle Ausführung ermöglicht).

Simple, Secure, Scalable Web Development with Opa. Das Opa Buch ist auf den ersten Blick eine sehr vollständige Einführung in die Sprache Opa und ihre Motivation. Was auch begeistert: die Installation unter Linux basiert nur auf Basispaketen, da wird nicht erstmal das halbe Internet runtergeladen und installiert nur weil man eine Sprache benutzen will. (Was bei Spielereien mit Opa übrigens eher nicht so positiv auffällt: sehr lange Compile Zeiten - schon die im Buch gelieferten Beispiele, die ja nicht gerade überragend groß sind, liegen schnell mal bei recht heftigen 15-20 Sekunden ...)

Bulbflow: a New Python Framework for Graph Databases. Auch wenn ich immer wieder denke, Graphdatenbanken sind eigentlich sowas von 70er Jahre, nicht alles was alt ist ist automatisch schlecht - IMS ist ja auch immer noch da und für manche Zwecke sehr interessant. Und das hier klingt interessant, sowas wie DBAPI für Graphdatenbanken, so dass man in seinen Projekten auch mal die Datenbank wechseln kann, ohne das alles komplett umgeschrieben werden muss.

The Pragmatic Bookshelf | Core Data. Das Buch klingt recht interessant, Core Data wird auch bei MacRuby voll unterstützt, wäre also vielleicht interessant sich das zu holen und zu lesen.

Responsive Applications - Mono. Ein Artikel über die verschiedenen Wege wie man Anwendungen mit GTK# aufbauen kann, damit sie zügig reagieren und das Userinterface nicht blockieren, obwohl GTK# single-threaded ist (also nur vom GTK#-Thread auf das UI zugegriffen werden darf).

MonoMac und XCode 4

Autsch, das hat mich jetzt voll erwischt - ich wollte mal mit den GUI Tools spielen, aber MonoMac unterstützt XCode 4 noch nicht vollständig und hat nur lapidar das zu sagen:

Developers that use Interface Builder are recommended to install Xcode 3.2.6 for the time being. MonoTouch News.

Schlecht daran: das ist aus März. Das ist deutlich zu lange keine Unterstützung, so ist MonoMac einfach nur ein halbes Werkzeug (wenn überhaupt). XCode 3 und XCode 4 parallel laufen lassen ist auch keine Option (beides will im selben Ordner rumliegen). Defakto ist man entweder auf XCode 3 zurückgeworfen, oder MonoMac ist raus. Oder man baut seine GUI mit GTK# - dann ist XCode egal (der Compiler-Teil von XCode 4 ist unterstützt), aber dann kann man zum Beispiel AppStore vergessen (und GTK# sieht nicht wirklich toll aus). Mist.

Jtalk Smalltalk. Keine Ahnung wieso das bisher an mir vorbeigeschlichen ist - aber eine recht vollständig wirkende Smalltalk-Implementation in JavaScript inklusive IDE mit Class-Hierarchy-Browser ist schon durchaus bemerkenswert, auch wenn es nicht das erste Projekt dieser Art ist (Clamato wäre ein anderes, aber das scheint größtenteils tot zu sein).

jQuery vs MooTools: Choosing Between Two Great JavaScript Frameworks. MooTools hab ich ein bischen aus den Augen verloren, früher (bevor ich mit jQuery und dessen vielen Plugins Bekanntschaft gemacht habe), war es meine bevorzugte Library für JavaScript. Von daher mal interessant zu lesen, wie es sich mit jQuery vergleicht (aus der Sicht eines MooToolers geschrieben).

asuhan / happy. Auch nicht uninteressant: ein PHP Interpreter bzw. Compiler in Python auf Basis der PyPy Toolchain. Ok, ist jetzt nicht der Brüller, ich glaube nicht, dass ich schon sehr oft die Frage hatte "wie kann ich jetzt in Python PHP Code ausführen" - aber z.B. wenn eine Site auf Django-Basis den Nutzern PHP als Scriptsprache zur Verfügung stellen will, könnte sowas durchaus interessant werden - PHP ist nunmal eine der bekanntesten Scriptsprachen für das Web, Python aber mit einigen Frameworks einfach sehr viel interessanter aus Produktionssicht.

cfbolz / Pyrolog. Hatte ich den schon mal? Ein Prolog-Interpreter in Python, der die PyPy Toolchain benutzt. Könnte sehr interessant werden wenn man mal wieder ein bischen Regellogik in seinen Programmen braucht aber nicht unbedingt externe Tools dafür anwerfen will.

The Node Beginner Book » A comprehensive Node.js tutorial. Falls ich mir wirklich Node.js nochmal näher angucken will, könnte das (freie!) Buch hier hilfreich sein. Oder auch für andere, die das gleiche vor haben.

JQuery-Wysiwym - PushingKarma. Noch was das für mich interessant werden könnte: ein Markdown (unter anderem) Konverter in JavaScript. Kann benutzt werden um einen Life-Editor für Markdown-Code zu bauen. Ob man das für Restructured Text erweitern könnte? Denn das ist eines der Probleme mit denen ich mich öfter mal rumschlage, das ich für Docbook/XML Output eben ReST als Input habe, aber dann keinen geeigneten grafischen Editor.

pdf.js reached its first milestone. Und weil wir gerade bei JavaScript und PDF sind: mit dem Projekt hier kann man PDF Dateien ohne PDF Reader anzeigen - nur mit HTML5 und JavaScript. Sehr interessant, wenn das weiter ausgebaut wird, könnte das an vielen Stellen den PDF Reader völlig überflüssig machen.

PDFKit — A PDF Generation Library for Node. Ich glaub ich muss mir doch nochmal wieder Node.js angucken. Und CoffeeScript. Diese PDF Generierung sieht sehr interessant aus und könnte bei einigen Projekten ganz praktisch sein. Wobei mir bei solchen Libraries immer der Highlevel-Teil fehlt - das eigentliche Layouten. Wann baut jemand eine TeX Engine in JavaScript? Hyphenator liefert ja schon eine sehr gute Silbentrennung, aber was einfach fehlt ist eine gute Layoutengine zur Verteilung von Texten auf definierten Seiten. Und bitte auch mit guter Unterstützung für Tabellensatz.

manuel/edgelisp. Weil ich nie die Finger von Klammern lassen kann - ein Common Lisp Dialekt und dessen Implementation, die nach JavaScript compiliert un den Lisp-Code im Browser ausführbar macht. Macht einen recht vollständigen Eindruck - viele andere Projekte zeigen nur die rudimentären Elemente, aber hier gibts auch schon generische Funktionen und Makros.

paver/paver. Klingt interessant, wie eine Mischung aus SetupTools/DistUtils und Make (bzw. deren high-level Kumpel Rake/Cake). Könnte ich mir mal angucken, denn für Python-Projekte wäre das vielleicht doch recht praktisch - allerdings sind die Standardtools von Python auch schon ganz brauchbar.

PerlDancer - The easiest way to write web applications with Perl. Zur Ergänzung meiner Sammlung von Sinatra-angelehnten Microframeworks für Webanwendungen hier noch eines in Perl. Nicht das ich jetzt unbedingt Perl wieder einsetzen wollen würde - ist eher wegen der Vollständigkeit hier aufgeführt.

danlucraft/git.js. Wow, beeindruckend. Und potentiell sehr interessant - git als genereller Synchronisationsmechanismus ist ausgesprochen praktisch und Integration von Git-Funktionalität in Webanwendungen könnte einige Probleme gut lösen (z.B. wenn es um Synchronisation mit anderen Stellen geht, oder natürlich für Dokumenteninterne Versionierung). Muss ich mir mal genauer angucken bei Gelegenheit, ich hätte da schon die eine oder andere Idee wie ich das einsetzen könnte. Ist im Moment noch recht rudimentär, aber beobachten lohnt sich sicherlich.

Stiivi / cubes. Mal für später geblogmarkt: eine OLAP Library in Python die auf SQL Datenbanken oder MongoDB aufbauen kann. Für so einige Sachen auf der Arbeit könnte das mal interessant werden.

Tree for policy-settings-basic in MeeGo Multimedia - MeeGo. Da immer mal wieder behauptet wird, Prolog sei so eine völlig esoterische Sprache die niemand im normalen Leben benutzen würde: der Teil von MeeGo (wir erinnern uns, das ist dieses Handset-Betriebssystem vom Nokia N900/N950/N9), der abhängig von Umgebungsbedingungen verschiedene Einstellungen triggert, ist in Prolog geschrieben. Und läuft so produktiv auf den Handsets.

DropKick - a jQuery plugin for beautiful dropdowns. Sieht nett aus, auch wenn es natürlich hauptsächlich optisches Gimmick ist. Aber manchmal sind optische Gimmicks auch notwendig.

Prowl - iOS Push Notifications. Ist ein ausgesprochen praktisches Teil für das iPhone oder iPad als Ergänzung, weil man nette APIs bekommt, mit denen man z.B. von Servern aus Nachrichten an das iPhone schicken kann. Oder man benutzt Send2Prowl vom Firefox oder Prowl von Chrome um sich einen Link direkt ans iPhone zu schicken.

Opa: Advancing web development to the next generation. Hatte ich glaube ich im alten Blog schon mal, aber was solls - jetzt ist der Code auf github und unter Open Source Lizenz. Und das ganze Projekt ist nicht irgendwas grade frisch rausgekommen - das hat 10 Jahre Forschungseinsatz hinter sich, die Leute wissen wirklich was sie da treiben. Die Idee ist cool (und auch schon von anderen aufgegriffen): eine Sprache, aus der in Webanwendungen alle Schichten erzeugt werden, also auch JavaScript, HTML, CSS und das Backend. Das ganze mit typsicherung und entsprechenden Prüfungen und einer sich zum Beispiel daraus ableitenden Sicherheit vor Injections und XSS Angriffen. Und als Sprache drunter läuft OCaml, was ja auch nicht die schlechteste Sprache ist. Sollte ich mich wirklich mal ernsthaft mit auseinandersetzen, besonders weil verteilte Installation auch gleich mit kommt - und damit eine weitaus einfacherer Scalability gegeben ist als bei vielen anderen Ansätzen (der von OPA erinnert in gewisser Weise an den von Erlang-basierten Systemen). Oh, und Webanwendungen sind dann einfach nur ein einzelnes Executable - und nicht gigantische Verzeichnisstrukturen mit drölfundneunzig XML-Files (oder YAML-Files) zum Anpassen.

SymPy. Symbolische Mathematik mit Python direkt in der Python Shell. Zusammen mit NumPy für Matrizenoperationen und SciPy für diverse weitere wissenschaftliche Funktionen wird aus Python damit ganz fix ein schon recht veritables Mathematiksystem. Nichts wirklich groß neues außer vielleicht SymPy selber.

PyPy Status Blog: Global Interpreter Lock, or how to kill it. Wow, das klingt gut - das PyPy Projekt will das GIL durch STM (Software Transactional Memory) entschärfen - und hat dafür durchaus einen interessanten Ansatz. Manche Sachen sind auch erst durch PyPy möglich, weil dort entsprechende Infrastruktur für Codetransformationen vorhanden ist, die in CPython fehlen.

jsPlumb für alle, die Diagramme darstellen wollen (also vernetzte Graphen von Objekten) und an denen rumzuppeln müssen, um sie besser zu sehen oder zu strukturieren. Oder einfach nur weils witzig ist und cool.

Paper.js ist eine Grafikengine für das Canvas Element. Sieht alles sehr nett aus und hat eine Menge Features. Schon beeindruckend was man alles mit JavaScript im Browser anstellen kann - und das hier könnte im Gegensatz zum bootenden Linux sogar recht interessant für Projekte sein. Das ganze kommt aus dem Illustrator Umfeld und orientiert sich an Scriptographer, einem Plugin für Illustrator mit dem man dort Grafikelemente in JavaScript programmieren kann.

Sync BitBucket and GitHub - Ramanas Blog. Falls ich mal wechseln will, oder einfach nur Repositories sowohl für git als auch bitbucket zur Verfügung stellen will, dann könnte das hilfreich sein. Ausserdem auch einfach nur um mal Repositories zu konvertieren.

Issue Bucket. Gibt auch einen Client für BitBucket auf iOS, allerdings ist der iAd-Verseucht und leider sehr eingeschränkt in den Features. Und sieht eher wie eine Fingerübung in Oberflächengestaltung aus - sehr schlicht, man könnte fast "lieblos" sagen. Aber man kommt wenigstens an die wichtigsten Sachen zum Angucken ran und es kostet ja nichts.

iOctocat is your GitHub companion for the iPhone and iPod Touch. So langsam wird GitHub immer interessanter - auch für iOS gibt es einen interessanten github Client. Und der ist Open Source.

NancyFx/Nancy. Nancy ist dann schon deutlich näher an Sinatra oder Scalatra dran, geht aber eigentlich von C# aus - aber vielleicht kann man da ja auch einfach Module in F# schreiben, die Interoperabilität der beiden Sprachen ist ja sehr hoch (vergleichbar zu Scala und Java).

Bistro. Das ist jetzt ein Web Framework für F#, inspiriert von Django (unter anderem). Leider nicht so schlank wie Scalatra oder andere Mikro-Frameworks, aber vielleicht trotzdem mal einen Blick wert.

scalatra/scalatra. Das ist sowas wie Sinatra, nur eben nicht für Ruby sondern für Scala. Es hat direkte Unterstützung für Scalatest und bietet auch sonst einige nette Features und DSLs um schnell und simpel zum Ergebnis zu kommen - könnte gerade für die Erstellung von Webservices in Scala interessant sein.

The Larch Environment. Mal angucken - eine visuelle Programmierumgebung für Python. Interessantes Detail: Objekte werden nicht einfach nur textuell dargestellt, sondern über einen eigenen Mechanismus auch grafisch dargestellt - klingt ein bischen wie Output-Recording von CLIM. Zusätzlich ist das ganze eher als interaktives Dokument aufgebaut - also vergleichbar zu diversen Mathematik-Systemen (z.B. Mathematica oder Maxima). Leider nicht auf der normalen Python-Umgebung aufbauend, sondern auf Jython - also JVM als Runtime drunter.

django-gae2django - Django-based implementation of App Engine APIs - Google Project Hosting. Müsste ich mir mal angucken - damit kann man AppEngine Programme auf eigenen Servern laufen lassen, die dann auf Django basieren (die AppEngine-APIs werden also über Django-Mittel nachgebildet). Sicherlich besser als direkt den AppEngine Dev-Server zu benutzen.