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.
programmierung - 28.1.2011 - 28.3.2011
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.
ongoing by Tim Bray · Broken Links. Warum diese übermäßig eingesetzten #! Fragmente in URLs ganz große Scheiße sind und warum man sie nicht benutzen sollte. Und ja, es nervt, dieses Web vergewaltigen - zumal es dafür absolut gar keinen Grund gibt, dynamische Server können Problemlos verschiedenste URL Strukturen mappen. Und ja, ich weiss um das Problem, dass man die URL im Browser nur im Fragment-Part umschalten kann per JavaScript, ohne ein Reload zu erzwingen - aber das ist kein Grund gleich alle URLs auf so ein blödes Fragment-Format umzustellen.
scgi-wsgi 1.1 released - Allan Saddi's projects blog - bisher benutzen wir seinen FLUP basierten Server, der in Django mitkommt, aber die Möglichkeit auf mod_prox_scgi zu gehen wäre schon interessant, weil wir effektiv einen Server dazwischen einsparen könnten und nicht mehr mit ajp arbeiten müssen. Wobei allerdings ajp auch nicht so schrecklich ist - also vielleicht einfach mal ein paar Tests machen. Für einfache Webservices benutze ich aber weiterhin den auf gevent aufbauenden wsgi Server den ich deezeit im Einsatz habe, denn der ist einfach nur genial schnell und benutzt fast keine Resourcen.
RUR-PLE ist sowas wie Logo, nur eben mit Python anstelle von Logo als Sprache. Also eigentlich nur die grafische Umgebung von typischen Logo-Implementierungen. Auf jeden Fall ein nettes Spielzeug.
How to write vim plugins with python. Weil ich Python mag, weil ich Vim mag und weil man immer mal wieder kleinere Sachen bauen will die einem das Leben erleichtern. Und weil die Script-Sprache von Vim selber doch eher grausig ist.
WorkingWithSubversion - Mercurial. Weil ich immer wieder auf gammelige SVN Repositories stoße und doch Mercurial deutlich vorziehe, sollte ich mir hgsubversion mal genauer angucken.
Weil ich sowas nicht zum ersten Mal suche und es recht praktisch aussieht: Sorting elements with jQuery – James Padolsey.
Java Hangs When Converting 2.2250738585072012e-308. PHP ebenfalls. Des Rätsels Lösung in beiden Fällen: die Zahl ist die kleinste darstellbare Zahl in double floats und für die Konvertierung werden in Java und PHP Näherungen ermittelt, aber bei diesen werden ungünstige Werte als Start angenommen - und damit ergeben sich Endlosschleifen, weil der Zielwert nie erreicht wird. Und ja, das ist kritisch, weil man damit Server in eine Schleife schicken kann, wenn man diese Zahlenwerte in Eingebefelder die zu double float konvertieren eingibt. Mit Python hab ich es auch mal probiert (CPython und PyPy), aber die rennen nicht in eine Schleife, die liefern einfach einen etwas anderen Wert.
mobl ist da schon eher mein Ding, eine Programmiersprache, die nach HTML5+JavaScript compiliert und mit IDE-Unterstützung in Eclipse kommt. Da HTML5 auch mit Clientside-Databases kommt, und über Manifest-Dateien die ganze Anwendung auf dem Device gecached werden kann, kann man so auch gut offline-taugliche Anwendungen bauen. Und nebenbei ist das ganze auch für Androiden brauchbar.
Three20 - angucken, falls ich mir doch noch mal iPhone-Programmierung antun will. Hat einige interessante Konzepte, speziell zur Persistenz und internen Struktur (benutzt interne URLs und URL-Routing um Models und Views zusammenzubringen).
Introduction to Pharen. Ein Lisp, welches nach PHP kompiliert. Weird. Ok, könnte praktisch sein, wenn der Hoster nur PHP als Serversprache anbietet. Aber trotzdem. Weird.
cfbolz / Pyrolog. Interessantes Projekt, weil das Prolog in Python geschrieben ist, aber die PyPy Toolchain für den JIT benutzt - das gibt einen schönen Einblick was mit PyPy neben Python alles möglich ist.
Sho - Microsoft Research. So ein bischen wie SciPy und Sage (dem Teil von Sage, der sich mit Datenanalyse und -visualisierung beschäftigt), nur auf IronPython und .NET aufbauend.
eMIPS - Microsoft Research. Ja, Microsoft macht auch andere Sachen als Fenster. Und manches davon ist durchaus interessant - wie zum Beispiel extensible MIPS, im Prinzip eine Prozessorarchitektur mit ladbarem Microcode. So ein bischen hatten wir das schon mit den Kisten von Xerox (die Alto natürlich und später auch die D-Systeme).