Repo.js. Darüber hab ich die Source-Highlighter gefunden - ein kleines jQuery Plugin, welches auf einfache Weise ein github Repository in eine Webseite einbettet. Ganz praktisch, wenn man seine Projekte in eigenen Webseiten einbinden will und nicht die ganze Website an github abtreten will.
programmierung - 25.4.2012 - 2.7.2012
isagalaev/highlight.js. Gerade drüber gestolpert, kleiner Source Highlighter in JavaScript der mit einer Sprachheuristik arbeitet und so keine expliziten Angaben der zu färbenden Sprache braucht - er versucht einfach alle Sprachen durch und nimmt die mit den meisten erkannten syntaktischen Elementen. Mit jQuery VanGogh gibt es dafür auch noch ein jQuery Plugin.
ErlPort - Erlang port protocol for Python. Ein etwas anderer Ansatz für verteilte Kommunikation ist dieses Modul bei dem einfach die Erlang-Bordmittel für Kommunikation (Ports und Terms) implementiert werden. Damit kann man Systeme bauen die je nach Bedarf Python oder Erlang als Implementierungssprache verwenden.
Hurricane. Klingt interessant, ist ein verteiltes Messaging System das mit verschiedensten Sprachen arbeitet und damit Integration von verschiedenen Systemen biete. Unter anderem dabei is Python mit WSGI und Ruby mit Rails, wodurch z.B. ein verteiltes System auf Basis von Rails und Django denkbar ist. Zusätzlich gibt es noch einen Prozessmanager, mit dem die Prozesse selber nur Standard-IO machen können müssen und dann direkt von Hurricane gemanaged werden. Könnte ich mir gut für das eine oder andere Projekt in der Firma vorstellen.
SQLite4: The Design Of SQLite4. Das klingt sehr interessant. Besonders der erste Absatz in "2.0 Overview", in dem er ein wenig darauf rumreitet, dass SQLite3 weiter unterstützt wird und beide Versionen parallel verfügbar bleiben. Und natürlich dann die diversen Änderungen, die SQLite4 gegenüber der anderen Version haben wird, wie zum Beispiel die deutlich bessere Kapselung der Engine in einem eigenen Objekt. Dadurch ist es durchaus möglich mehrere Datenbanken gleichzeitig offen zu haben, ohne großes jonglieren. Und was mich besonders freut: alle Berechnungen in Decimal Math und nicht mehr double oder float. Sorry, aber double (und schon gar nicht float) hat irgendwas in einer Datenbank zu suchen, ausser vielleicht als Datentyp für seltene Sonderfälle. Auch sonst einige nette Sachen drin, zum Beispiel covering indexes und natürlich die standardmäßig verfügbaren foreign key constraints.
Jarvis. Da bastelt jemand an sowas wie Light Table für Python (Light Table hat auch Python Support versprochen, aber bisher gibts da nur eine Preview für Clojure). Sieht ganz interessant aus und bringt endlich mal wieder frischen Wind in interaktive Umgebungen für Programmiersprachen.
Remote Debugging - Real Software Documentation. Davon sollten sich andere Systeme ein paar Scheiben abschneiden. Bei meinem Spielprojekt hatte ich in der neuesten Version ein Problem unter Linux. Meine Entwicklungsumgebung ist aber OSX. Da läuft alles tadellos. Also was tun? Nunja, gute Gelegenheit sich mal den Remote-Debugger anzugucken. Und der ist wirklich trivial. Ein Linux hochfahren (ich benutze dazu Vagrant auf meinem OSX Rechner), das Remote Debugger Stub rüberkopiere, ausführen, minimal konfigurieren und loslegen. Direkt aus der OSX IDE den kompilierten Code auf die Remote Umgebung übertragen und starten, direkt mit Breakpoints und Variablenwatch und solchen Sachen. Eben all das, was ich auch mit OSX lokal hätte. Im Prinzip gibt es nahezu keinen Unterschied, ausser das halt das Programm im Linux läuft. Warum ist das bei so vielen anderen Umgebungen so viel komplizierter? Ich werd wohl langsam alt, ich hab einfach keine Geduld für umständliche Umgebungen mehr.
..Nowhere... hat eine Reihe von freien Klassen und Plugins für RealBasic, unter anderem eine für einen syntaxfärbenden Editor und Listboxen mit beliebigem Zelleninhalt.
The Opa blog: Announcing Opa 1.0. Opa erzeugt jetzt keinen Native Code fürs eigene Backend mehr, sondern erzeugt JavaScript für Node.js Integration. Klingt durchaus interessant, durch die Integration von Node.js könnte da auf Dauer auch Zugriff auf die dort verfügbaren Libaries Einzug halten (wobei man dann natürlich die garantierten Eigenschaften von Opa verliert). Und zusätzlich sind jetzt auch die Chancen höher, dass man einen geeigneten Hoster findet bzw. das Selbsthosting könnte dadurch auch angenehmer werden.
Make runfcgi fail when database connection is open before fork. Das ist eine Sache nach der ich schon ewige Zeiten jage, zuletzt in ein paar ziemlich wichtigen Projekten. Flup arbeitet so, dass es die WSGI-Anwendung erst initialisiert und mit dieser initialisierten WSGI Anwendung dann die Forks für die Worker macht. Dummerweise gibt es bei uns aber Datenbankzugriffe wärend der Anwendungsinitialisierung - dadurch hat der Basisprozess schon eine offene Datenbankverbindung, jeder Fork kopiert diese Daten. Aber der Socket der Verbindung geht natürlich nicht mit - der neue Prozess denkt nur er wäre verbunden, ist es aber nicht. Zugriffe von denen neuen Prozessen fallen dann mit einer Exception raus. Man kann im verlinkten Patch auch gut den raise auf die Exception einfach durch connection.connection = None ersetzen. Dann wird einfach die Verbindung die sowieso defekt ist weggeworfen und in neuen Prozessen immer eine neue Verbindung aufgebaut. Damit haben wir zumindestens in einem Produktionsumfeld (mit psycopg2) das ganze beheben können und sind guten Mutes, dass es auch bei der Umgebung mit pyodbc helfen wird.
LiveScript. Sieht interessant aus, ein Abkömmling von CoffeeScript, aber mit einer Syntax die stark an Haskell angelehnt ist und einem Prelude, der sich ebenfalls an Haskell orientiert. Man kann damit dann statt JavaScript in einer funktionalen Sprache arbeiten, die allerdings weiter versucht eine Balance zwischen funktionalen und imperativen Elementen zu halten - also nicht der pure-Ansatz wie bei Haskell.
SET TRANSACTION ISOLATION LEVEL Transact-SQL. Da gibts mehr Infos zum Isolation-Level in MSSQL, speziell was die Snapshot-Geschichte bedeutet. Im Prinzip bringt man MSSQL damit dazu sich ähnlich zu PostgreSQL zu verhalten.
#18251 multithreading deadlock in django.models.loading.get_apps – Django. Und noch eine Sache, die uns vielleicht betreffen könnte - Raceconditions zwischen Django-Threads bei der Initialisierung von Django-Applications. Gibt auch schon einen Patch dafür, der das in den Django Internals behebt.
Enabling Snapshot Isolation - SQLAlchemy 0.7 Documentation. Könnte uns das helfen? MSSQL hat scheinbar einen eher ungünstigen Isolation-Level als Default. Hmm, werden wir wohl mal ausprobieren.
Using SELECT FOR UPDATE in Django. Drin was dran steht. Denn der Django ORM kann derzeit keinen SELECT FOR UPDATE erzeugen, aber manchmal braucht man ihn einfach.
Thomas Tempelmann | Arbed - The Advanced RB Editor. Worüber man so alles stolpert - den Thomas kenne ich noch aus Modula-2 Zeiten, er war da sowas wie der Modula-2 Compiler Guru damals. Und jetzt benutzt er Real Basic. Und hat da ein recht interessantes Tool zum Arbeiten mit RBP Files gebaut, das ich mir mal angucken sollte, weil es ein paar Sachen vereinfachen könnte (speziell die Versionierung, die Möglichkeiten die RB von Hause da liefert sind da nicht so beeindruckend). Und ja, ich benutze wirklich Basic. Ist kein Witz.
ucsd-psystem-vm 0.11. Weil ich gerade mal einen Flashback hatte - UCSD-p System lebt! Der Link ist eine VM für UCSD Pascal, die unter Linux läuft. Und es gibt auch noch das originale UCSD-p System zum Download. Dort ist sogar eine Version (IV) für DOS, das kriegt man warscheinlich am leichtesten zum Laufen.
TryAPL. Also im Web. Also, so ein APL in JavaScript. Mit Popup-Tastatur mit den lustigen APL Zeichen drauf. Luschtig.
PEG.js – Parser Generator for JavaScript. Drüber gestolpert als ich ein paar Parser-Implementierungen gesucht habe, unter anderem eben PEG basierte Parser Generatoren, denn ich habe für Markdown eine PEG Definition. Aber ich muss da wohl noch etwas Theorie studieren bevor ich das sinnvoll einsetzen kann. Oder ich löte mir doch den Parser mit der Hand - so kompliziert ist die Syntax von Markdown ja nicht wirklich. Und ich muss für mein Spielprojekt sowieso den Parser um diverse eigene Sachen erweitern.
REALbasic | Open Source | Charcoal Design. Open Source für Real Basic. Jau, ich programmiere zur Zeit Sachen für mich selber in Basic. Und ehrlich: das macht Spaß. Die Site hab ich gefunden als ich nach JSON Implementierungen für Real Basic gesucht habe.
Xcode 4.3 MacRuby compatible problem workaround - 東 . Blog. Lästig, aber notwendig - die AppStore-Migration von XCode hat die Template-Installation von MacRuby zerbröselt, so dass auch mit dem neuen MacRuby (0.11 mit Support für XCode 4.2 und 4.3 ist raus) die Templates nicht auf Anhieb funktionieren und die Integration mit Interfacebuilder nicht tut. Mit der Anleitung hier tuts wieder.
Waterbear: Welcome. Fällt in die ähnliche Ecke wie Google Blockly, aber es ist eher ein Toolkit auf dem aufbauend man visuelle Sprachen bauen kann. Also vielleicht doch interessant für den einen oder anderen. Zum Rumspielen allemal interessant.
google-blockly - A visual programming language - Google Project Hosting. Grundsätzlich halte ich visuelle Programmiersprachen in den meisten Fällen für dead-ends und eher unnütze, wenn auch unterhaltsame Spielereien. In diese Ecke würde ich auch Blockly stellen, zumal es sich hier wirklich nur um eine visuelle Repräsentation klassischer Programmierstrukturen handelt - also IFs, Variablen und ähnliches. Eigentlich enttäuschend, wenn man bedenkt, dass Prograph schon vor Jahrzehnten Datenflussprogrammierung visualisiert hat (und damit ein wesentlich interessanteres Modell für eine visuelle Programmierumgebung geliefert hat).
RQ: Simple job queues for Python. Wirklich simpel - man braucht nur einen Redis Server und das Modul und das wars mehr oder weniger. Simple Funktionsaufrufe werden in die Queue geworfen, ausgeführt und Ergebnisse zurückgeliefert. Kein großer Overhead im Code.
git-annex. Interessantes Plugin für git mit dem man nur die Metadaten von großen Dateien, aber nicht deren eigentlichen Inhalte in git verwaltet. Die Dateien selber werden als normale externe Files verwaltet, aber die Verzeichnisstrukturen und Verweise werden korrekt versioniert - und das ganze zusammen mit normal versionierten Dateien. Dadurch wird das Problem, dass git mit großen Dateien hat, umgangen. Und damit wird z.B. auch sowas wie ein Foto-Archiv auf git-Basis möglich.
TypeQuery. Generische Funktionen für Python. Nur eine einfache Variante mit einem eingeschränkten Zielbereich, aber für manche Sachen durchaus überlegenswert. Derzeit noch single-dispatch auf das erste Argument, aber mulitple dispatch ist geplant. Im Moment also ziemlich identisch in der Funktion zu simplegeneric von PJE. Und sehr ähnlich zu meinem multidispatch, in welchem ich versuche das Modell der Clojure generic methods nachzubauen. Ich muss wohl wirklich mal wieder an multidispatch weiter arbeiten. Oder einfach mehr mit clojure-py spielen, da kann ich dann gleich "the real thing" benutzen.
PostgreSQL: Documentation: 8.4: hstore. Aus der Reihe "Sachen die deine Datenbank kann, die du aber vielleicht nicht kennst": Key-Value-Stores innerhalb eines PostgreSQL Datenfeldes. Oder auch poor-mans-object-notation. Oder einfach dann praktisch, wenn man lose strukturierte Daten ablegen will, aber nicht ständig das Schema anpassen will - das Schema sind dann die primären Daten für die Ordnung des Modells, die Abhängigkeiten, Kardinalitäten etc. - und das hstore Feld speichert dann die zusätzlichen Ausprägungen, die sich zum Beispiel durch fachliche Anforderungen dynamisch ergeben. Manchmal die bessere Alternative zu einer ausnormalisierten Property-Tabelle. Und das ganze ist schon seit den 8er Versionen drin (ist allerdings ein ladbares Modul).
Matasano Security - Matasano Web Security Assessments for Enterprises. Analyse von Kryptographie in JavaScript. Kurzfassung: Kryptographie in JavaScript ist in der Regel eine dumme Idee, da man das JavaScript aus einer nicht vertrauenswürdigen Quelle oder einem nicht vertrauenswürdigen Netz bezieht (würde man ihm vertrauen, wäre ja wohl kaum Kryptographie notwendig) und daher ein Henne-Ei-Problem besteht. In bezug auf das vorherige 0bin Projekt: dort ist die Kryptographie nicht eingebaut worden um den Benutzer zu sichern, sondern um den Betreiber des 0bin abzusichern - es ist also relativ egal für den Betreiber, ob die User sicher sind oder nicht, es geht dabei nur um "plausible deniability" für den Betreiber. Anders sieht es aber aus, wenn anstelle SSL einzusetzen eine Verschlüsselung in JavaScript implementiert wird.
sametmax/0bin. Interessanter Ansatz die Probleme des pastebin-hostings zu umgehen. Bei pastebin-ähnlichen Sites ist ja das Problem im Hosting, dass User jeden Kram posten und der Server-Betreiber dann schnell in Regress genommen wird. 0bin versucht das Problem so zu verschieben, dass der Betreiber nicht wissen kann, was in den Pastebins steht, da sie verschlüsselt abgelegt werden und die Verschlüsselung durch den Client per JavaScript passiert. Das klappt natürlich nur, wenn die Richter dann auch akzeptieren, dass der Serverbetreiber nicht wissen kann, was da läuft - und nicht zum Beispiel argumentieren, er solle dann halt eine andere pastebin-Software installieren bei der er es wissen kann und ihn trotzdem verantwortlich machen. Sicherlich aber ein interessanter Ansatz, speziell die Idee, den Key für die Verschlüsselung in den hash der URL (also das nach dem # in der Adresse) zu packen und so eine funktionerende URL zu haben, aber trotzdem dem Server den Key nicht zu liefern (denn der hash einer URL wird nur vom Client verwendet und nicht dem Server mitgeteilt).
Embedding Python in Objective-C: Part 2. Ein interessantes Projekt, dass Python in Objective-C Projekte einbettet und direkte Verbindungen zwischen Python und Objective-C Code erlaubt über automatisch generierte Bridge-Module. Könnte ich mir auch mal bei Gelegenheit angucken, ich hab da immer noch so ein Spielprojekt, das davon profitieren könnte.
jodal/pykka. Eine Actor-Library für Python, baut auf Threads und alternativ auf GEvent auf. Sieht ganz gut aus und könnte für kommunizierende Prozesse recht praktisch sein, wenn das Actor-Modell passt. Eventuell könnte man sowas auch als Basis benutzen um darauf meinen Linda Tuplespace verteilt zu betreiben.
Jython 2.7 alpha1 released!. Wow, das hat zwar ewig gedauert, aber damit sind jetzt die drei größeren alternativen Python Runtimes wenigstens alle auf 2.7 (IronPython, PyPy und jetzt Jython). Wobei ich hoffe, dass Jython 2.7 deutlich an Performance gewonnen hat, denn ansonsten ist es im Vergleich weit abgeschlagen - meine letzten Tests waren eher deprimierend (Faktor 2-3 langsamer als CPython).
cocoa-python - Port of Objective-C runtime to Python using ctypes. Steht eigentlich schon alles im Linktext drin. Interessant, weil der Autor es benutzt um einen Port von Pyglet zu schreiben, der ohne PyOBJC auskommt und damit komplett python-only Sourcecode wäre.
r17 - flexible, scalable, relational data mining language. Sieht ganz interessant aus, im Prinzip sowas wie eine Kreuzung aus AWK und SQL. Das Ergebnis ist nicht wirklich schön, aber wirkt praktisch - speziell weil man auf einfache Weise mehrere Prozessoren nutzen kann, oder sogar mehrere Maschinen (implizite Parallelisierung), und damit auch recht einfach große Datenmengen mit ad-hoc Queries auswerten kann. Dadurch, dass es ein einfaches Format für die Übermittlung von daten an weitere Schritte gibt, kann man es auch leicht auf neue Datenquellen anpassen, ohne dort erst einen langwierigen Exportschritt laufen zu lassen.
The Schemaverse. Und weil wir gerade bei seltsamen Projekten sind: da hat jemand ein MMO programmiert, das komplett innerhalb PostgreSQL läuft. Also pgSQL als Sprache benutzt. Sowas wie ein Multi-User-Schiffeversenken. Nur läuft es halt in einer Datenbank. Und wird über SQL bedient.
sipML5 - The worlds first open source HTML5 client. Äh - jemand hat einen SIP Client in JavaScript geschrieben, der komplett im Browser läuft. Es baut auf WebRTC auf, einem Standard für Realtime-Kommunikation im Web.
Plumbum: Shell Combinators and More — Plumbum: Shell Combinators. Schaut interessant aus und deutlich durchdachter als manche Alternative die ich mir angeguckt habe (und deutlich ausgebauter als shutil+glob).
Clojure/core — Reducers - A Library and Model for Collection Processing. Warum eine neue Library? Weil die Standardfunktionen zwar interessant und sinnvoll sind, aber man eben manchmal doch eine striktere Implementierung braucht, die z.B. zwischendurch generierte temporäre Collections vermieden werden und eine direkte out-of-the-box Unterstützung für Parallelisierung geliefert wird. Ohne große Handstände und Umstände, nur ein anderer Namespace.
backbone-fundamentals/index.md at master · addyosmani/backbone-fundamentals. Ein freies Buch (das es von O'Reilly auch als totes Holz oder elektronisches Holz geben wird) über backbone.js. Backbone.js liefert eine MVC-angelehnte Struktur für JavaScript Programmierung (wobei man sich fleißig streiten kann, was denn da nun genau der View und der Controller ist und ob es "reines" MVC ist - oder man programmiert einfach und ignoriert den theoretischen Ballast).
PyPy Status Blog: STM update: back to threads?. Die Diskussion und Entwicklung schreitet immer weiter voran - und gerade die Diskussion kommt wieder zurück zum alten Thread-Modell, nur erweitert um eine Funktion zur Definition atomarer Blöcke an Code. Und das ganze so, dass es als Code sogar unter normalen CPython laufen würde (allerdings dann natürlich ohne die Vorteile von STM, denn das gibts da ja nicht, in CPython gibt es weiterhin das GIL) aber trotzdem schon Multicore Architekturen sinnvoll nutzt. Gefällt mir immer besser und ich hoffe, es wird bald im PyPy Main Branch landen.
tuupola/jquery_lazyload. Für die Anzeige großer Mengen von Bildern eventuell interessant, weil man damit das Laden der Bilder so lange verzögern kann, bis der Benutzer tatsächlich auch zu den Bildern hinscrolled. Die Seite wird mit Platzhalterbildern schon vorgebaut und nur die Bilder wandern später über die Leitung. Ich glaube aber Infinite Scroll ist doch die bessere Lösung, da damit nicht nur Bilder, sondern generell Inhalte nachgeschoben werden können - und das arbeitet dann auch problemlos mit Masonry zusammen, so dass diese Inhaltsblöcke dann auch optisch gut verteilt werden können.
dirq 1.1.2 documentation. Hey, sowas hab ich vor kurzem gesucht - eine Queue, die auf dem Dateisystem aufbaut. Der Vorteil: einfachste Persistenz und gutes "Debugging" in dem man einfach im Dateisystem rumprokelt. Der Nachteil ist dann aber oft, dass Queues einige Operationen atomar ausführen müssen - und das kann dann schon etwas hakeliger werden, wenn man es richtig hinbekommen will. Dieses hier ist die Portierung eines schon länger existierenden Perl-Moduls, die Chancen, dass die meisten Kinderkrankheiten raus sind, sind also recht hoch. Das API jedenfalls sieht nett simpel aus. Definitiv mal genauer angucken.
Hotcanvas: Realtime coding. Bin ja ein fan von Processing-ähnlichen Umgebungen, dies hier kommt dem recht nahe, läuft aber als interaktive Umgebung und sieht ganz nett aus. Ok, gibt sicherlich mitlerweile eine ganze Reihe von diesen Dingern, aber trotzdem, ich mag sowas.
Bilderarchiv | rfc1437. Mein Bilderarchiv wurde übrigens am Wochenende überarbeitet und kommt jetzt mit lustigem Javascript-Schnickschnack zum automatischen Kacheln daher. Nicht wirklich weltbewegend, aber interessanter als das vorherige, eher langweilige Format. jQuery Masonry ist der Hauptanteil der Arbeit. Nette kleine Javascript Library. Das interessanteste daran ist warscheinlich die Heuristik in meinem kleinen Plugin, mit dem ich die Bilder in Hoch/Quer/Quadratformate bringe, damit das ganze nicht durch eine Übermacht an Querformaten allzu langweilig wird. Leider bleiben noch immer Lücken im Bilderstrom, da könnte Masonry eigentlich noch gerne etwas intelligenter werden (und z.B. kleine Quadrate hochziehen). Oder ich muss mich nochmal an die Heuristik setzen und dafür sorgen, dass die Chancen für Lücken verringert werden.
RubyMotion - Ruby for iOS. Da mich MacRuby schon interessiert, klingt das hier auch gut - direkt für iOS programmieren in Ruby. Allerdings gibt es keine freie Version, das schränkt das Ausprobieren dann doch ein bischen ein. Ausserdem ist da nix in einer IDE, das ist Kommandozeile pur. Was zwar ein Vorteil sein kann, aber z.B. für Debugging auch ein echter Nachteil.
Mojolicious - Perl real-time web framework. Du hattest ein Problem, du hast Perl genommen. Jetzt hast du zwei Probleme und einen Haufen scharfkantige Klammern, an denen du dich verletzen kannst. Spaß beiseite: nett zu sehen, dass Perl immer noch nicht nur aktiv, sondern auch modern aktiv ist im Web-Umfeld. Immerhin hat Perl ja mal den Standard in dem Bereich gesetzt.
RavenDB - 2nd generation document database. Geblogmarkt weil ich mir das mal in der nicht zu fernen Zukunft angucken will. Klingt von den Features her recht interessant und ist vielleicht für das eine oder andere Projekt, über das ich zur Zeit nachdenke, brauchbar.
JSIL - .NET to JavaScript compiler. Keine Ahnung, ob ich das schon hatte, aber es ist eines dieser verrückten Projekte die man ruhig zweimal linken kann. Da wird wirklich der .NET IL Code übersetzt - man kann also Programme im Browser laufen lassen, die eigentlich nicht wirklich dafür gedacht waren. Zum Beispiel soll ein Teil von XNA laufen, so dass man Spiele im Browser laufen lassen kann, die eigentlich für die XBox sind.
the { buckblogs :here }: Maze Generation: Ellers Algorithm. Labyrinthalgorithmen faszinieren mich schon seit meiner Jugend, aber der hier war mir neu. Er generiert perfekte Labyrinthe Zeilenweise, ohne Trackback oder Rekursionen, mit einer Laufzeit linear abhängig von der Größe des Labyrinthes. Ziemlich genial das ganze.
jQuery Masonry. Alternative zu BlocksIt. Auch mal angucken. Schiebt Blöcke sogar etwas aggressiver, ordnet auch die Reihenfolge notfalls um.