visionmedia/asset. Nachdem ich schon pip (für Python Module) und jip (für Java-Libraries) hatte, hier ein analoges Werkzeug für JavaScript Bibliotheken. Also zur automatischen Installation von JavaScript-Libraries in node.js Projektverzeichnisse von der Kommandozeile aus.
programmierung - 12.2.2011 - 6.4.2011
jRumble | A jQuery Plugin That Rumbles Elements. Das neue Blink-Tag! (okok, gibt durchaus sinnvolle Anwendungen, z.B. wenn man ein Element auf der Webseite kurz anzeigen lassen will, dass dort was passiert ist - analog zu hüpfenden Icons im OSX Dock).
Python Package Index : pip 1.0. Der Vollständigkeit halber hier geblogmarkt, auch wenn pip für mich mitlerweile eh fester Bestandteil der Python Infrastruktur ist. Aber vielleicht hat der eine oder andere ja noch nicht mit pip rumgespielt, dann ist jetzt wohl der richtige Zeitpunkt gekommen. Man sollte es meiner Meinung nach immer zusammen mit virtualenv benutzen, denn dann kann man einfach für jedes Projekt genau die passenden Abhängigkeiten installieren und sauber von anderen Projekten trennen.
sunng87/jip. Im Moment mache ich nicht so viel mit Jython, aber jip klingt sehr praktisch: es ist ein Analog zu pip, aber für Java-Libraries. Also ein einfaches Kommandotool, welches die notwendigen Jar-Files runterlädt und an den richtigen Ort packt. Integriert mit virtualenv. Für mich deutlich angenehmer als zum Beispiel mit Maven oder ähnlichen Java-üblichen Infrastrukturtools rumzumachen.
Exploring Beautiful Languages: A quick look at APL. Einfach weil mich APL immer begeistert hat. Auch wenn ich nach eigenen Erfahrungen damit nie in die Verlegenheit geraten will, ein APL Programm warten zu müssen - für mich ist APL das Musterbeispiel für write-only Sprachen.
How I learned to stop worrying and write my own ORM. Ein bischen Hintergrundinformation warum Dapper entwickelt wurde und welche Problemfälle es löst - im Prinzip wird es dort eingesetzt, wo bisher aus Performancegründen direkte SQL Zugriffe über Linq "getunnelt" benutzt wurden, weil Linq2Sql dort ineffizient ist.
dapper-dot-net - Simple SQL object mapper for SQL Server. Könnte eventuell ja ganz interessant auf der Arbeit sein. C# bietet ja auch Linq an, aber nach deren Messungen scheint Dapper deutlich auf Performance getrimmt zu sein.
philikon / python-weave client ist fast noch interessanter als das andere Tool: eine Python-Bibliothek zum Zugriff auf Mozilla Sync. Damit könnte ich mir diverse kleine Tools bauen, die Links automatisch in Bookmarks einmischen oder aus dem Sync rausholen und in andere Bookmarkdateien reinwandern lassen. Oder wie wäre es mit einem Cronjob, der aus den Bookmarks aus einer speziellen Gruppe Links rausnimmt und automatisch ins Weblog postet? Lauter lustige Spielereien sind möglich ...
philikon / weaveclient-chromium. Noch nicht ausprobiert, es ist eine Chrome-Erweiterung die Mozilla Sync in Chrome und Chromium integriert. Damit könnte man endlich die Bookmarks zwischen Chrome und Firefox austauschen ohne über XMarks gehen zu müssen. Wenn jetzt noch jemand diese Extension auch für Safari baut, wäre ich glücklich - die Tatsache, dass ich zwischen den Browsern nicht vernünftig syncen kann, sondern jeder sein eigenes Süppchen kocht, ist hochgradig nervig. Mozilla Sync ist frei zur Nutzung und dahinter steht ein Laden, dem ich in dem Bereich deutlich mehr traue als allen anderen.
Pipe ist ein Modul mit infix-Syntax für verkettete Funktionsaufrufe über potentiell lazy streams (intern sind das Generatoren). Im Gegensatz zu stream (hatte ich hier schon mal) ist es ohne Unterstützung von Parallelität, also einfach nur syntaktischer Zucker. Mir gefällt allerdings der von stream besser (also der Zucker) und die Parallelität von stream ist auch interessanter als nur eine etwas andere Syntax zu liefern.
markrendle/Simple.Data - GitHub. Sollte ich mir mal angucken, sieht ganz interessant aus - ein ORM für .NET.
Basho: An Introduction to Riak. Müsste ich mir auch mal genauer angucken, hat eine recht saubere und einfache Architektur und alle Knoten im System sind gleichwertig (das ist ähnlich zu Cassandra). Das ganze ist hier in Erlang geschrieben, aber interessant ist die MapReduce-Schnittstelle: Funktionen können als JavaScript Code reingeliefert werden und die Kommunikation geht über ein simples JSON Interface.
HBase vs Cassandra: why we moved « Dominic Williams. Nicht ganz uninteressanter Blog-Post, der einen Vergleich von Hadoop/HBase mit Cassandra wagt und die verschiedenen Schwerpunkte herauszuarbeiten versucht. Sein Fazit: HBase ist mehr für Warehousing, Cassandra mehr für Transaction-Processing. Allein dadurch wäre sowas wie Brix noch viel interessanter, wenn es diese beiden Aspekte wirklich vereinen kann.
Brisk – Apache Hadoop™ powered by Cassandra | DataStax. Sollte ich auch mal beobachten, da verheiratet jemand Hadoop mit Cassandra als Backend. Dadurch werden Higher-Level-Layer aus dem Hadoop Projekt auch mit der hohen Performance von Cassandra nutzbar und vor allem mit dem freieren Update von Daten in Cassandra und dessen eventually-consistent-Modell.
HIVE: Data Warehousing & Analytics on Hadoop. Ein Punkt, der mich im Moment stark interessiert: Auswertungen, speziell BI, von großen Datenmengen. Hadoop liefert dafür Hive als Lösungsansatz. Zugriff auf HIVE kann nicht nur über Thrift geschehen, sondern auch über JDBC und ODBC.
Apache Thrift. Auch mal genauer angucken, im Prinzip etwas ähnliches wie Google Protocol Buffers, nur eben im Apache-Umfeld stärker vertreten. Dadurch in Ecken wie Hadoop oft als Weg der Wahl für den Zugriff von verschiedenen Sprachen auf Services vorgesehen. Ein kleiner Vergleich der beiden Protokolle. Mir gefällt, dass Thrift nicht nur die binäre Darstellung erlaubt, sondern auch eine JSON basierte Darstellung - dadurch wird die Integration der Thrift-APIs in Weblösungen einfacher, da JSON ja nunmal JavaScript native ist.
The Secrets of Building Realtime Big Data Systems. Darüber bin ich auf Cascalog und ElephantDB gestoßen: ein Vortrag des Programmierers der beiden Projekte über Große Datenbanken. Er schreibt auch gerade an einem Buch "Big Data". Könnte sehr interessant sein.
nathanmarz/elephantdb. Gleicher Autor wie für Cascalog, hier hat er auf Hadoop mit Clojure einen verteilten Key/Value-Store aufgebaut. Auch nicht uncool.
nathanmarz/cascalog - mal näher beobachten, eine Verheiratung von Clojure und Hadoop zur einfacheren Auswertung großer Datenbestände. Das Interessante an Cascalog: es greift Ideen aus Datalog auf und bildet in Clojure eine Abfragesprache für Hadoop Datenbestände.
JavaScript Quotations - interessanter Link über ein Metaprogramming-Feature für JavaScript. In diesem Fall für eine sehr interessante JavaScript-Implementierung: in F# geschrieben und für die CLR Welt, lauffähig unter .NET und Mono.
Enterprise Java Development Tools | SpringSource. Muss ich mir mal genauer angucken, weils letztens um J2EE und EJB Alternativen ging, und das ja nun eine der bekannteren Alternativen ist.
Trinity - Microsoft Research. Muss ich mir mal näher angucken, klingt etwas wie verteiltes Redis (in-Memory Strukturen die persistiert werden) kombiniert mit einer Abfragesemantik die eher auf Graphbeziehungen aufbaut (vergleichbar in etwa zu RDF Triple Stores).
Programmieren, verdammt nochmal. Mach es. Sprichst du es?
Why Cloud9 Deserves your Attention - browserbasierte IDE in Javascript auf Server und Client. Und Source der aktuellen Version auf github verfügbar.
Django-nonrel - NoSQL support for Django. Liefert einen ersten Ansatz in Django verschiedene NoSQL Datenbanken zu integrieren, und zwar auf Ebene des Django-ORM. Backends für MongoDB (nein Danke), AppEngine und Cassandra sind in der Mache. Besonders Cassandra interessiert mich im Moment.
Vundle 0.7 is out. Ich benutze ja normalerweise Pathogen, aber Vundle hat ein paar Eigenschaften die es doch recht interessant machen - vielleicht sollte ich doch mal damit rumspielen. Andererseits habe ich an meiner Vim-Installation schon länger keine Updates und Änderungen mehr gemacht. Aber da jetzt alle vim.org Scripts auf GitHub liegen, ist die GitHub-Integration von Vundle sicherlich sehr interessant.
Programming Languages - Progopedia - Encyclopedia of Programming Languages. Das war das Programmiersprachenwiki das ich letztens gesucht hatte als mal wieder in der Wikipedia der Löschwahn um sich schlug. Hatte ich glaube ich schon im alten Blog.
Instagram hat jetzt offizielle APIs. Ist ganz an mir vorbeigegangen. Damit könnte ich vielleicht auf Dauer mal an Tumblr vorbei kommen um meine Instagram-Bilder in die Seitenleiste zu bekommen. Andererseits tuts Tumblr in letzter Zeit ganz gut und warum was funktionierendes ändern (der Fluch jeglicher Weiterentwicklung - good enough).
pdict.py at master from segfaulthunter/sandbox - GitHub. Eine PersistentHashMap für Python - also eine funktionale Datenstruktur, welche keine Veränderungen zulässt, sondern eine neue Struktur mit minimaler Änderung gegenüber einer bestehenden Struktur mit Substruktur-Sharing zur originalen Struktur liefert. Eine recht interessante Implementierung. Gibt auch nähere Erläuterungen zu den Ideen dahinter. Und eine alternative Implementation der gleichen Idee.
Threads sind ein Hammer, aber nicht jedes Problem ist ein Nagel
Wer mal herzhaft lachen will: Node JS and Server side Java Script. Da meckert jemand aus dem Java-Lager darüber, das Node.JS ja nun wirklich nicht ernstzunehmen sei und produziert doch selber gleich das beste Beispiel, warum sowas wie Node.JS (und viele andere Alternativen für Serverprogrammierung) existieren - denn der Java Code wird mit jedem Schritt länger und länger. Und selbst nach mehreren Iterationen für ein in Node.JS (oder z.B. mit gevent in Python) ziemlich simpel zu realisierendes Beispiel werden in den ersten Kommentaren gleich ein paar Fehler und Lücken im Java Code angesprochen.
Versteht mich nicht falsch - Java hat eine Menge von guten Lösungen für Programmierung mit multiplen Threads in der Standard-Library. Warscheinlich von allen derzeit verfügbaren Sprachen die größte Auswahl an Möglichkeiten mit multiplen Threads zu programmieren. Aber wie so oft im Leben: Threads sind nicht die Antwort auf alle Fragen der Parallelisierung. Besonders wenn es in die Richtung von hoher Request-Last geht, ist die Einschätzung in den Kommentaren das 20K Threads schon sehr hoch sind lächerlich - erzählt das mal den Programmierern von Eve Online, in der jedes Schiff in derem virtuellen Universum als Microthread modelliert wird.
Java ist als Plattform sehr interessant, eben weil es viele Low-Level-Libraries mitliefert mit denen man sehr interessante Sachen machen kann - und die hilfreich sind um vernünftige Highlevel-Konstrukte darauf aufzubauen. Zum Beispiel im Zusammenspiel mit Sprachen wie Clojure oder Scala wird dem Threadmonster einiges an Schrecken genommen. Aber manchmal ist die Antwort eben nicht der Thread, sondern asynchroner IO (sowohl bei Festplattenzugriffen und Netzwerkzugriffen) und die intensive Nutzung von Coroutinen oder Continuations.
Auch das Unverständnis der Java-Programmierer auf den Ansatz das Multi-Core Problem einfach mit mehreren parallelen Prozessen und Message-Passing zwischen diesen zu lösen ist in 2011 ziemlich seltsam - denn schließlich waren 2009 und 2010 die Revival-Jahre für Erlang (nicht vergessen, die Sprache existiert schon sehr viel länger) und gerade die zentrale Idee von Erlang ist ja das Netz- und CPU-übergreifende Message-Passing als Standard zu setzen um eine sehr einfache Parallelisierbarkeit und Skalierbarkeit zu bekommen.
Java-Programmierer erinnern mich immer wieder an die Cobol-Programmierer meiner Anfangszeit, die in jeder Sprache und jeder Programmierweise ganz gezielt die Sachen rauspickten und kritisierten, die in Cobol eben anders (und manchmal sogar vielleicht etwas einfacher) gelöst waren - aber dann gnadenlos auf die Schnauze fielen wenn sie damit reale Probleme ausserhalb der Cobol-Komfortzone lösen mussten.
Das Beste von Java ist die JVM und damit eine Plattform die gerade die Multiparadigmen und -sprachen Ansätze möglich machen mit denen man dann für Probleme die Werkzeuge einsetzen kann, die ihnen angemessen sind. Und selbst dann ist manchmal die Antwort trotzdem Node.JS oder ein anderer kleiner, schlanker, asynchroner Server. Denn selbst mit einer großen Sammlung verschiedenster Hämmer wird man sich für die Schraube trotzdem einen Schraubendreher holen.
Re: Factor: Google Charts - ich sollte wirklich mehr mit factor machen, immer wenn ich wieder mal sehe wie praktisch eine visuelle repl ist (in Factor können auch grafische Repräsentationen von Objekten eingebettet werden in die normalen Ausgaben, ähnlich wie bei alten Lispmaschinen) reizt es mich.
Python Tools for Visual Studio. Wer auf Windows sitzt und Zahlenfresser ist - SciPy und NumPy sind da jetzt direkt in der .NET Plattform verfügbar mit diesen Tools. Und ich frage mich, warum Apple sowas nicht mit XCode mitliefert, denn das würde sicherlich im Umfeld der Universitäten Anklang finden (man denke nur an Sage).
ABCL - Release notes v0.25. Neue Version raus und ABCL entwickelt sich immer mehr in eine wirklich brauchbare Common Lisp Implementation. Dadurch, dass es auf der JVM läuft, hat man auch leichten Zugriff auf viele Libraries (sofern man es denn will) und seit 0.24 läuft auch Quicklisp sauber mit ABCL und damit hat man auch leichten Zugriff auf viele Common Lisp Libraries. Bei den CL Libraries hakt es aber leider etwas, da viele Programmierer ABCL nicht berücksichtigen (und gerade im CLOS Bereich noch Defizite sind).
fantasm - Project Hosting on Google Code. Unbedingt mal angucken, eine Workflow-Engine in Python. Sowas könnte für Projekte auf der Arbeit recht interessant werden.
harukizaemon/hamster. Immutable Threadsafe Datastructures - für Ruby. Man kann sie also nicht ändern, aber dafür bekommt man neue, geänderte Versionen zurück. Ideal um sie z.B. über Threadgrenzen hinweg zu benutzen. Clojure hat sowas von Hause aus, Scala seit 2.8 ebenfalls. Ich hätte sowas gerne für Python ...
Pyjamas - Python Javascript Compiler, Desktop Widget Set and RIA Web Framework. Hatte ich im alten Blog schon mal, aber a) hat sich ne Menge getan und b) kams mal wieder heute hoch als Thema, also nochmal geblogmarkt.
Mal angucken: pqc - PostgreSQL Query Cache. Ein PostgreSQL Proxy, der Abfragen über eine Memcache-DB cached um Performance für wiederkehrende Abfragen zu verbessern. Dadurch, dass er als Proxy arbeitet, kann er auch Anwendungen beschleunigen, die nicht von Hause aus schon Caching selber realisieren.
jsFiddle ist ein sehr nett gemachter Online-Editor für Javascript, HTML und CSS. Es werden verschiedene Javascript-Frameworks unterstützt und es gibt die Möglichkeit Snippets zu speichern und mit anderen zu diskutieren. Progressing.js steht auch zur Verfügung, genauso wie eine Reihe von Tools um sie auf den Code loszulassen. Für Experimente recht cool.
balupton/history.js liefert ein API zum Zugriff auf die HTML5 Historymanipulation, aber gleichzeitig unterstützt es auch alte Browser und macht da dann diese hässliche # Notation - aber eben nur dann, wenn HTML5 nicht verfügbar ist. Könnte für ein Projekt bei mir recht interessant sein.
WordPress JSON API. Keine Ahnung ob ich das jetzt wirklich brauche, aber es könnte sich irgendwann mal als nützlich erweisen - die XMLRPC oder Atom APIs sind doch relativ umständlich wenn man nur per JavaScript mal fix auf Daten aus dem Blog zugreifen will.
Feeding the Bit Bucket» Blog Archive » Common Lisp, Clojure and Evolution. Nein, Clojure wird nicht als Evolution von Common Lisp beschrieben - das ist einfach das Beispielprogramm "Evolution" aus dem Buch "Land of Lisp" in Clojure übersetzt von jemandem der mit dem Buch Clojure lernt indem er eben alle Beispiele in Clojure realisiert mit der Common Lisp Code als Basis. Und von daher eine gute Vergleichsmöglichkeit zwischen Clojure und Common Lisp. Vielleicht ja für 2 oder 3 Leser meines Blogs interessant. Ansonsten für mich als Blogmark um später wieder draufzugucken.
Ada 95: The Craft of Object-Oriented Programming. Freies Online-Buch (ehemals Prentice Hall aus 97) über Ada 95. Ganz nett mal wieder den schön byzantinisch anmutenden Sourcecode von Ada zu sehen.
Weil ich von Prograph schrieb: Andescotia Software scheint eine neue kommerzielle Prograph-Version zu haben. Das ganze tuts unter OSX 10.4 und es gibt eine Demo-Version zum Ausprobieren. Und teuer ist das ganze auch nicht mit 68 Dollars. Ich glaub da weiss ich womit ich heute abend mal rumspiele! Und als freien Download gibt es dort das Buch "Visual Programming With Prograph CPX". Update: das Spielen hat sich erledigt, unter Snow Leopard startet die Demo nicht ... (und der Traffic auf deren Mailingliste sieht nicht so aus als ob da große Reaktion zu erwarten wäre). Schade. Hab mal eine Mail geschrieben, vielleicht passiert ja noch was, aber klingt doch arg wieder nach totem Projekt. Wieder mal.
hotzen/ScalaFlow liefert eine sehr interessante Erweiterung zu Scala: dataflow Programmierung mit automatischer Auflösung über Continuations - man definiert Variablen, kann auf Variablenwerte zugreifen bevor denen Werte zugeordnet sind und das System selber sortiert alle Zugriffe und Zuweisungen in die passende Reihenfolge. Besonders interessant als Basis für parallelisierung, wenn partielle Bereiche eben sich erst später ergeben aber entsprechende Bearbeitungen vorher schon definiert werden sollen. Dataflow-Sprachen finden bei mir seit Prograph Interesse, die Integration in eine normale Sprache als Basis könnte durchaus interessant sein.
JSSpeccy: A ZX Spectrum emulator in Javascript. Weils geht.
remogatto/gospeccy - in ZX Spectrum Emulator in Go geschrieben. Da ich ein alter Spectrum-Besitzer bin und das meine erste Kiste war, die ich mit selbst verdientem Geld (damals ein Artikel in der c't! Mein erster und einziger Ausflug in die Schreiberei!) gekauft habe.
Get inPulse and Hack Your Watch. Sieht ganz cool aus, einfach nur ein kleiner Computer und ein Display, programmierbar, Anschluß über Bluetooth. Könnte man nette Spielereien mit machen. Vielleicht sogar die Uhrzeit anzeigen lassen.
PyPy Status Blog: PyPy Winter Sprint Report. Wichtigster Punkt: fast-forward ist in Trunk, womit die nächste Version von PyPy also definitiv 2.7er Kompatibilität bekommt.
SourceTree | Mercurial and Git GUI for Mac OS X. Hmm - ist nicht ganz billig mit 45 Euro im AppStore. Aber manchmal hätte ich schon ein GUI für die Arbeit mit Mercurial, speziell wenn ich mit fremden Repositories arbeite und womöglich lokale Changes habe. Vielleicht spiel ich irgendwann mal mit der Trial rum.