Archiv | Kooperatives Schreiben RSS feed for this section

ShareJS – Live concurrent editing

11 Apr

ShareJS ist eine „Operational Transformation“-Library für Node.JS, die von einem ehemaligen Entwickler von Google Wave programmiert wurde. Genutzt werden kann Sie für gleichzeitige (mehrere Benutzer an verschiedenen Computern) Bearbeitung von Texten oder auch JSON-Objekten. Weiterlesen

Aufruf zur Teilnahme an einer Benutzerevaluation

13 Mrz

Andreas Hoffmann beschäftigt sich in seiner Masterarbeit mit der Realisierung einer Android-Tablet-Applikation, die es möglich macht kooperativ ePub Dokumente zu annotieren. Konkret realisiert er zwei verschiedene Szenarien und hat sowohl die Tablet-Applikation als auch eine Dozentensicht zur Auswertung implementiert. Evaliert werden soll nun zunächst die Usability und Intuitivität der Tablet-App.

Für die Evaluation müsstet ihr einen Task mit dem Tablet durchführen (Tablet stellen wir natürlich, wenn ihr ein eigenes habt könnt ihr das aber gern mitbringen). Die Bearbeitung des Tasks wird etwa 10 bis 15 Minuten in Anspruch nehmen. Danach wird wie immer ein Online-Fragebogen ausgefüllt und das war es schon.

Ich freue mich auf zahlreiche Teilnehmer im Doodle unter http://www.doodle.com/2mts4cs59ne32dk5

Neues Plugin-Framework für Etherpad Lite

3 Mrz

In den letzten Wochen ist bei der Entwicklung von Etherpad Lite eine Menge passiert. Äußerlich ist nicht viel zu sehen, unter Haube wurde jedoch sehr viel Aufräumarbeit betrieben. Dies bringt schlankeren und stabileren Code mit sich.

Vergangene Woche fand außerdem ein sogenanntes Hackathon statt. Dabei ist unter anderem ein Plugin-Framework entstanden. Damit ist es nun möglich geworden, Etherpad Lite relativ einfach mit Plugins zu erweitern. Weiterlesen

SLaPP – Eine RESTful API mit NodeJS, Express und MongoDB

2 Mrz

Die Umstellung von SLaPP als NodeJS Applikation zu SLaPP als RESTful API war doch aufwändiger als gedacht. Bis zum Zeitpunkt der Umstellung hatte ich das mongoose Modul für Node benutzt, um mit MongoDB zu arbeiten, was auch immer sehr zuverlässig funktioniert hat. Da ich aber Dateien in der Datenbank speichern muss und mongoose keine Funktionialität für GridFS (Grid File Store, Spezifikation um Dateien in der Datenbank zu speichern) bereitstellt und auf der Prioritätenliste anscheinend auch nicht sonderlich weit oben steht musste ich auf node-mongodb-native (kurz mongodb) umsteigen. Zu der Zeit war die stabile Version (und jetzt auch noch immer) 0.9.8-3 im Node Packet Manager aktuell. Da ich mit mongoose GridFS nicht benutzt habe und auch nicht konnte ist es mir auch erst nicht aufgefallen, dass die Funktionalität von GridFS in dieser Version teilweise defekt war. Nachdem ich einige Tage jedes Code-Snippet ausprobiert habe, dass ich im Internet gefunden habe und GridFS noch immer nicht funktioniert hat gab es endlich ein Update. Mit der Version 0.9.9-4 funktioniert jetzt auch wieder das auslesen der Dateien aus der Datenbank. Mittlerweile benutze ich node-mongodb-native nicht nur wegen des funktionierenden GridFS gerne, auch die Syntax innerhalb von Node ist sehr nah an der in der Kommandozeile angelehnt und somit auch einfach zu bedienen. Wenn man von mongoose kommt ist es doch etwas gewöhnungsbedürftig, aber durch die Kommandozeile schnell erlernt.

Zum Zeitpunkt dieses Blogeintrags sind alle CRUD-Befehle (Create, Read, Update, Delete) für die Arbeit mit PDF und TeX Dokumenten implementiert. Der nächste Schritt wäre die API in einer Beispielapplikation, auch in Node geschrieben, zu nutzen, um noch fehlende Funktionen zu finden und zu implementieren.

Was ist REST?

Um diese Frage zu beantworten möchte ich auf den Blog-Eintrag von Ryan Tomayko How I explained REST to my wife verlinken. Dieser Eintrag ist zwar schon etwas über sieben Jahre alt, aber trifft es eigentlich genau auf den Punkt.

Wie benutzt man PUT und DELETE in HTML?

Zwischenzeitlich waren PUT und DELETE funktionierende Parameter für das method-Attribut in einem form-Tag. Mittlerweile sind diese nicht mehr unterstützt und es funktionieren nur noch GET und POST. Für einen großen Teil der Browser gibt es einen Workaround. Man sendet das Formular mit POST als Methode ab und übergibt in einem versteckten Feld PUT bzw. DELETE.

<form method="POST" action="http://localhost:3000/api/restful/link">
<label>Update text</label><br />
<input type="text" name="update" /><br />
<input type="hidden" name="_method" value="PUT" />
<input type="submit" name="submit" value="update" />
</form>

Eine weitere Methode PUT und DELETE in HTML nutzen zu können wäre über die ajax-Methode von jQuery, die aber leider nicht in jedem Browser funktioniert.

$.ajax({
url: '/api/restful/link',
type: 'PUT'
success: function(result) {
// tue etwas mit dem Ergebnis
}
});

Wie greife ich in Node auf die API zu?

Node bietet dafür das http-Modul an. Vor Version 0.4.x gab es die Funktion createClient(options, callback), welche mit aktuellen Versionen immer noch funktioniert, aber seit der besagten Version nicht mehr unterstützt wird und dementsprechend noch fehlerhaft ist. Mit den neueren Versionen wird die Funktion request(options, callback) benutzt. Um beispielsweise den API-Key für die API im Header zu versenden kann man wie folgt vorgehen:

var options = { host: 'localhost',
port: 3000,
path: '/api/apikey',
method: 'POST',
headers: {'apikey':'abc12345'}
};
var req = http.request(options, function(res) {
res.setEncoding('utf8');
res.on('data', function(chunk) {
if (JSON.parse(chunk).authentication == 'successful')
console.log('Connection to API server established.');
else
console.log('Couldn\'t connect to API server.');
});
});

Anmerkung: JSON.parse(chunk).authentication == ’successful‘ funktioniert hier nur, weil der Datenaustausch in der SLaPP API über JSON läuft und die Antwort im Format { authentication: ’successful‘ } bzw. { authentication: ‚failed‘ } zurückgegeben wird.