Archive for the ‘Programming’ Category.

A Ruby Script for Upgrading Multiple DokuWiki Installations

After DokuWiki has been released multiple times in the last few days because of security problems, I though it was a good time, to write a little script for automatically updating multiple instances. You can find the ruby script at http://gist.github.com/285219.

The ruby script basically automates the upgrade instructions from the DokuWiki main page. So the following actions are performed when executing the script:

  1. Making a backup into /tmp/dokuwiki_backup_#{timestamp} of every installation.
  2. Downloading the dokuwiki release (passed in as a parameter).
  3. Extracting the files and copying everything to the installations (execept for the content of the /data directory).
  4. Creating missing folders in the /data directory, making the owner www-data:www-data and chmodding them to 664.
  5. Deleting files from a list of file from older revisions.

Within the script you need to specifiy this snipped for setting your DokuWiki installations:

# Definition of existing installation
INSTALLATIONS = [
  '/path/to/docu/wiki/installation1',
  '/path/to/docu/wiki/installation2'
].freeze

Then you can call for a new release as follows:

/path/to/script/upgrade_dokuwiki.rb http://www.splitbrain.org/_media/projects/dokuwiki/dokuwiki-2009-12-25c.tgz

If you want to improve the script, feel free to fork me on Gist.

Print-Version anzeigen mit Greasemonkey und JQuery

Ich habe in letzter Zeit viel mit JQuery gearbeitet und als erste Javascript-Bibliothek habe ich bei JQuery das Gefühl, dass man richtig schönen Code schreiben kann.

Nun trug es sich aber zu (;-)), dass heise.de sein Design geändert hat. Mich hat deren Design schon vorhher immer genervt, wenn ich aus meinem RSS-Reader auf die einzelnen Artikel bin. Aber jetzt war definitiv die Schmerzensgrenze überschritten. Um nicht alle Elemente nachstylen zu müssen (was ja auch sehr fragil ist, da die ids und classes ja jederzeit geändert werden können), habe ich mir überlegt, das ich erstmal die Styles der Printversion nehme. Das ging erstaunlich einfach:

// Erstmal JQuery ins Dokument einführen
// Der Code zum einbinden von JQuer ist ist von:
// http://www.joanpiedra.com/jquery/greasemonkey/ und ist unter MIT-Lizenz gestellt
// Kommentare sind angepasst.
var GM_JQ = document.createElement('script');
GM_JQ.src = 'http://jquery.com/src/jquery-latest.js';
GM_JQ.type = 'text/javascript';
document.getElementsByTagName('head')[0].appendChild(GM_JQ);
 
// Warten bis JQuery nachgeladen ist
function GM_wait() {
if(typeof unsafeWindow.jQuery == 'undefined') { window.setTimeout(GM_wait,100); }
else { $ = unsafeWindow.jQuery; letsJQuery(); }
}
GM_wait();
 
// Das normale Greasemonkey Skript, nur jetzt mit JQuery
function letsJQuery() {
// Lösche alle Stylesheets die nicht media=print sind
$('link[rel=stylesheet]').not('[media=print]').remove();
// Ändere das media von print auf screen
$('link[rel=stylesheet]').filter('[media=print]').attr('media', 'screen');
}

Ich habe das Skript speziell für heise.de noch etwas erweitert … wen das interessiert, der möge mich ansprechen.

EURUKO 2008

Wie der eine oder andere von euch mitbekommen hat, bin ich dieses Wochenende auf der European Ruby Conference in Prag gewesen. Damit die Banausen, die zu Hause geblieben sind auch ungefähr mitbekommen, was sich dort so abgespielt hat, hier eine kurze Zusammenfassung von mir:

Ruby 1.9

Matz und Koichi Sasada haben das neue Ruby 1.9 vorgestellt. Und einen Überblick darüber gegeben, was war, was ist und was noch kommen wird. Neben den technischen Details (die man übrigens sehr gut auch aus dem Google TechTalk Vortrag von Matz entnehmen kann) hat Matz vorallem herausgehoben, dass für ihn die Innovation der Sprache Ruby sehr wichtig ist. Er möchte nicht mit dem zufrieden sein was ist, sondern möchte weiter gehen und Ruby weiter entwickeln.
Weiterhin ist natürlich zu erwähnen: Ruby programming is fun …

JRuby

Für mich war JRuby die absolute Überraschung. Bisher hat man sich immer gefragt, was eigentlich JRuby soll – nun im Prinzip ist JRuby dazu da, Ruby Code zu schreiben und gleichzeitig Java-Klassen zu verwenden. Whant so see some?
(Nach Installation via apt-get install jruby1.0 und interaktiv, also jirb1.0)

require 'java'
include_class 'javax.swing.JFrame'
include_class 'javax.swing.JLabel'
include_class 'java.awt.event.ActionListener'
include_class 'javax.swing.JOptionPane'
 
frame = JFrame.new "Das JRuby Fenster"
frame.setSize 400,200
# Überlagerter Setter von
# frame.set_default_close_operation(JFrame::EXIT_ON_CLOSE)
frame.default_close_operation=JFrame::EXIT_ON_CLOSE
label = JLabel.new "Hello World"
frame.add label
 
frame.visible= true

Dinge wie obejct.method etc gehen natürlich auch, sodass man super neuer Java-Bibliotheken über jruby ausprobieren kann, selbst wenn man sie ‘nur’ für Java selbst verwenden will.
Übrigens wurde die 1.1 Release während der Konferenz bekannt gegeben.

Weitere Vorträge

Wurden auch gehalten. Alle waren sehr interessant und haben vorallem eines gezeigt: Mit Ruby kann man verdammt viel mehr machen, als bloß Rails. Und dass heißt ja nun wirklich etwas … Ich fands jedenfalls sehr cool (schon alleine wegen der T-Shirts ;-) )

Die Folien sollten in Kürze http://www.euruko2008.org zu finden sein.

RANDI2 kommt zurück

Mit einem Vortrag im Deutschen Krebsforschungszentrum in Heidelberg ist heute der Startschuss zur Weiterentwicklung von Randi 2 gefallen. Randi 2 ist eine Plattform zur Randomisation in klinischen Studien.

In klinischen Studien – also Studien in denen neue Therapien im Gesundheitswesen am Menschen getestet werden – ist es Standard, Patienten zu randomisieren. Das bedeutet, dass man Patienten auf zwei, manchmal auch mehrere, sog. Arme aufteilt und das, wie der Name schon vermuten lässt, zufällig. Patienten bzw. Probanden die zu einem Arm randomisiert wurden, erhalten dann eine Behandlung gemäß ihrem Arm. Das sieht so aus, dass zum einen die neue Therapie und zum anderen die Standarttherapie bzw. Placebo zu der Zielerkrankung angewendet wird. Diese beiden Arme können nachher verglichen werden, sodass festgestellt werden kann, ob das neue Medikament besser ist als das andere oder eben nicht.

Randi 2 ist eine webbasierte J2EE Anwendung, die es ermöglicht, eben jene Randomisation durchzuführen. Dabei kann sich – wenn eine Klinische Studie angelegt ist – der Arzt einloggen und die von ihm rekrutierten Probanden sofort randomisieren lassen.

Randi 2 ist im Studiengang Medizinische Informatik an der Universität Heidelberg/Hochschule Heilbronn in einem Softwarepraktikum entstanden. Ich war damals auch Mitglied des ca. 18-köpfigen Teams, dass die jetzige Version von Randi2 in zwei Semestern entwickelt hat. Jetzt soll das Projekt als Open Source unter GNU GPL 3.0 weiterentwickelt werden.

Seit gut einer Woche gibt es die Seite http://randi2.hs-heilbronn.de und ab heute sind wir auch unter http://sourceforge.net/projects/randi2 zu finden. Auf der ersten Seite findet man die wichtigsten News rund um Randi 2 und seine Entwicklung. Die zweite ist unsere Kommunikationsplattform die auch gerne genutzt werden darf, um Wünsche zu äußern.

Bis die Software für die erste klinische Studie produktiv eingesetzt wird, wird es vermutlich noch etwas arbeit bedürfen. Daher ist jeder willkommen, der das Open Source Projekt unterstützen will. Dazu einfach Mail an randi2@hs-heilbronn.de. Ich freue mich auf euch!

APIs verschiedener Programmiersprachen meistern

Vielleicht fällt es dem einen oder anderen unter euch auch so schwer, die verschiedenen APIs aus Java, Ruby, Ruby on Rails, GWT etc. immer zu finden. Sicher, es gibt Lesezeichen. Aber ich habe etwas gefunden, was mir deutlich besser zusagt: http://gotapi.com.

Die Seite bietet neben dem Suchen (natürlich mit Aut-Expansion), was ja bei der traditionellen Java-API immernoch fehlt, in einer API, auch das Suchen in mehreren sowie das Merken von den gewünschten Favoriten. Außerdem können die Suchwidgets einzelner APIs auch in andere Seiten integriert werden – müsste theoretisch sogar mit iGoogle gehen. Heißt: Lieblings-API auf der Browser-Startseite serviert?
Der Inhalt der APIs wird nicht von gotAPI gepflegt, sondern es werden die Seiten angezeigt, die in der Ursprünglichen API benutzt werden. So ist man auch bei Änderungen – etwa durch SUN – immernoch auf dem neuesten Stand. Wenngleich hier anzumerken wäre, dass die Java 1.6.0 API noch nicht zur Verfügung steht. Lediglich 1.5.0.
Was mich als Rails Entwickler natürlich freut ist, dass Ruby und Rails in einer API aufgeführt werden. Das macht das Suchen nach Funktionen einfacher bzw. spart mir einfach die Überlegung, ob das eine Ruby oder eine Rails frage ist.

Fazit: Unbedingt ansehen!

gotAPI java