Archiv | Februar, 2012

Nebenläufigkeit unter Android

20 Feb

Die Programmierung für Android erweist sich im Großen und Ganzen als relativ simpel – Das SDK bietet eine große Menge an Bibliotheken und API Aufrufe sodass das Rad nicht ständig neu erfindet werden muss. Eine kleine Applikation kann demnach den Ablauf von der Planung zum Release in einem hohen Tempo durchlaufen, wobei wichtige Aspekte wie Nebenläufigkeit vielleicht gänzlich ignoriert werden. Dies kann wiederum zu einem Application Not Responding (ANR) führen, indem der Benutzer die Möglichkeit hat das Programm zu schließen. Das auszuführende Programm wird im UI-Thread ausgeführt. Er ist für die Anzeige der Displayelemente (Views) verantwortlich und reagiert auf Benutzerinteraktionen. Wenn dieser Thread nun durch lang andauernde Operationen wie I/O (Netzwerk) oder lang andauernde Berechnungen blockiert wird, bekommt der Benutzer die ANR Meldung angezeigt. Ab Android 3 führen Netzwerkverbindungen, die im UI-Thread ausgeführt werden, zu einer Exception zur Laufzeit. Dem Entwickler werden dabei zwei Ansätze zur Lösung angeboten.

Weiterlesen

Werbeanzeigen

BA: SciFowWriter – Weiterentwicklung eines kollaborativen LaTeX-Echtzeiteditors

20 Feb

Das Schreiben von Texten gehört im wissenschaftlichen Umfeld zum Alltag. Oft werden wissenschaftliche Arbeiten nicht nur individuell von einem Einzelnen erstellt, sondern in Kooperation von mehreren Personen gemeinsam geschrieben.

Im Hinblick auf die immer weiter voranschreitende Entwicklung des sogenannten Cloud-Computing ist davon auszugehen, dass künftig vermehrt browserbasiert gearbeitet wird. Angefangen von E-Mail-Systemen (beispielsweise Google Mail, Hotmail) bis hin zu Office-Anwendungen (Google Docs, Windows Live) sind als browserbasierte Anwendungen verfügbar.

Einen nicht unwesentlichen Teilbereich browserbasierter Anwendungen stellen Textverarbeitungssysteme dar. Texte können online geschrieben und verwaltet werden. Zur Unterstützung des kollaborativen Schreibens werden Programme benötigt, die es mehreren Personen erlauben, gleichzeitig und in Echtzeit an einem gemeinsamen Text zu schreiben. Weiterlesen

Activity Streams in der ginkgo-API

17 Feb

In ginkgo gibt es nutzer- und veranstaltungsspezifische Activity Streams, die über verschiedenste Aktivitäten auf dem Laufenden halten.

Da Activity Streams heutzutage in vielen Bereichen des Webs anzutreffen sind, sollten für dessen Aufbau allgemeingültige Standards eingehalten werden. Nur so kann der Austausch über Programmgrenzen hinweg ermöglicht werden, was natürlich das Hauptziel der ginkgo-API ist. Der Standard, der hier genutzt werden sollte, kommt von der Activity Streams Working Group: JSON Activity Streams 1.0.
Weiterlesen

Template Projekte für die NetBeans IDE bearbeiten und im Modul Projekt neu zippen lassen

9 Feb

Möchte man ein Projekt Template für die NetBeans IDE erstellen geht man folgendermaßen vor:

  1. neues Projekt erstellen
  2. Projekt so einrichten wie das Template in Zukunft aussehen soll
  3. das Projekt über einen angebotenen Wizard in einem Modul Projekt als Template hinterlegen Weiterlesen

Masterarbeit: Near Copy Detection in large text corpora (ODIN): Was bisher geschah! (Text preprocessing)

8 Feb

Die Hauptaufgabe des Systems ist es Wissenschaftlichearbeiten zu verarbeiten und als Hintergrundkorpus für die Suche nach ähnlichen Textstellen zu verwenden. Als Eingabeformat sollen erstmal PDF-Daten herangezogen werden. In weiteren sollen aber auch andere Formate benutzbar sein, wie zum Beispiel ein Wikipediadump, um auch Textstellen aus dieser Quellen identifizieren zu können.

Texte die als PDF-Dateien zur Verfügung stehen haben aber einige Nachteile für die automatisierte Verarbeitung, so müssen nach der Textextraktion noch einige cleaning Schritte vollzogen werden, die ich im folgenden ein wenig Beschreibe:

  1. PDFToText: Den Volltext aus einer PDF-Datei zu extrahieren ist recht einfach. Hierzu gibt es eine Vielzahl an Tools die diese Aufgabe übernehmen können. Ich habe mich für Apache PDFBox entschieden, da diese API in JAVA implementiert ist und ich sie so direkt in Hadoop Map-Reduce Jobs verwenden kann. Mit PDFBox ist es möglich neben den Volltext als ganzes auch seitenweise Text zu extrahieren, auch ist es möglich die Grafiken auf den Seiten und die Seiten als Thumbnails zu extrahieren. Diese Möglichkeiten werden noch nicht benötigt, aber sie sind potenziell verwendbar um auch Kopien der Grafiken zu detektieren.
  2. Speichern der Texte: In der weiteren Verarbeitung können Textstellen entfernt, hinzugefügt oder geändert werden. Ich möchte aber gern die Positionen im Verhältnis zum Ausgangszustand beibehalten. Hierfür habe ich ein Speicherformat entwickelt das mir dies ermöglicht. Dieses Format kann in JSON ausgedrückt werden und sieht dann so aus:{„chunks“: {„0“: „text text“,“10″: „more text“},“pages“: [0,3119,6708],“sentences“: [0,15,33,67],“lines“: [0,100,219,322]}Das Feld „chunks“ beinhaltet hierbei einzelne Textteile, zum Anfang sind das die einzelnen Zeilen des Dokuments. Jeder Chunk ist mit einem Offset versehen das die Zeichenweise Position im Ursprungsdokument angibt. Das Feld „pages“ enthält die Startoffsets der einzelnen Seiten des Dokuments, gleiches gilt für die Felder „sentences“ und „lines“.
  3. Header-Footer-Removal: Die nächsten Cleaningschritte habe ich speziell für die Eigenarten von Printmedien entwickelt, das Entfernen von Header und Footer. Wenn auf zwei oder mehr Seiten die ersten, respektive die letzten Zeilen ähnlich sind wurde eine Kopf- bzw. Fußzeile gefunden. Ähnlich bedeutet hierbei die Textzeilen sind gleich bis auch einen numerischen Part der hoch zählt (also die Seitenzahl). Der Algorithmus beachtet dabei auch unterschiedliche Kopf- oder Fußzeilen in einem zwei seitigen Format.
  4. Hyphenation-Removal: Hier sollen Silbentrennung am Zeilenende entfernt werden. Dafür suche ich ein Bindestrich am Zeilenende, wird einer gefunden wird noch untersucht ob er direkt an einem Wort steht, wenn ja dann wird der Bindestrich entfernt und das erste Wort in der nächsten Zeilen an die neue Position geschoben. Dieser Algorithmus kann Fehler erzeugen, wenn zum Beispiel zusammengesetzte Worte wie „Meier-Schultze-Friese“ über zwei Zeilen getrennt wird, könne Wortkonstruktionen wie „Meier-SchultzeFries“ oder „MeierSchultze-Friese“ entstehen. Dies kann noch mit einer Rechtschreibprüfung abgefangen werden, indem geprüft wird ob das neue Wort korrekt ist. Dies ist aber (noch) nicht implementiert.
Die Ergebnisse aus diesen Schritten werden als JSON in HBASE gespeichert. Hier entspricht eine Zeile einem PDF-Dokument und jede Spalte einen Verarbeitungsschritt. Dementsprechend werden bis jetzt die Spalten „PDF“, „extractedFulltext“, „removeFooter“, „removedFooterAndHeader“ und „fulltext“ das alle ob Beschriebenen Schritte vereint und für die weitere Bearbeitung benutzt wird.