tessarakt – das vierdimensionale B-L-O-G

2Feb/100

Native Libraries in Java

Java erlaubt das Einbinden "nativer" Bibliotheken (also .so bzw. .dll, C-Bibliotheken halt). Allerdings gibt es da einige Tücken: Die Bibliothek muß mit System.loadLibrary("name"); explizit geladen werden. Sie ist dann nur in dem Classloader verfügbar, mit dem sie geladen wurde. Das allein ist noch nicht weiter schlimm - allerdings läßt sich eine Bibliothek auch nur einmal laden. Und "einmal" heißt einmal: Einmal in der Lebenszeit der gesamten JVM. Da ist es auch egal, ob es den Classloader noch gibt etc.

Problematisch wird das zum Beispiel in einem Servlet-Container. Gegeben seien zwei Servlets A und B, die beide libname.so verwenden wollen. Das zweite Servlet, das die Lib laden will, bekommt dann einen UnsatisfiedLinkError. Ein im Netz vorgeschlagener Workaround ist, dafür zu sorgen, daß die Lib vom System-Classloader geladen wird. Hört sich etwas kompliziert an ... Eine etwas einfachere Möglichkeit, die auch prompt funktionierte: Einfach die Bibliothek verdoppeln (cp libname.so libname2.so), im zweiten Servlet System.loadLibrary("name2"); ausführen. Wenn die Libraries eh irgendwo lokal rumflattern, paßt das ...

veröffentlicht unter: Informatik keine Kommentare
20Jan/100

Nominatim

Als ich gerade auf Openstreetmap.org war, habe ich gemerkt, daß dort jetzt ein neuer Geocoder im Einsatz ist, der offenbar deutlich besser funktioniert (und auch schneller reagiert, aber das muß ja nichts mit der Software zu tun haben) als der alte. Reverse-Geocoding kann er auch. Das macht für viele Usecases Google Maps überflüssig. Well done, Nominatim.

veröffentlicht unter: Informatik, Netzkultur, Web keine Kommentare
31Jul/090

Intervall-Kalender-Kontrollelement

In vielen Webanwendungen ist es nötig, Zeitspannen (Anfangs- und Enddatum) auszuwählen. Ein gutes Beispiel sind Reiseseiten. Leider sind diese Controls oftmals grottig programmiert.

Eine ziemlich vorbildliche Lösung hat Opodo.de. Die Kernfeatures:

  • Wenn man einen Tag auswählt, der im aktuellen Monat in der Vergangenheit liegt, springt er auf den nächsten Monat.
  • Das Enddatum wird erhöht, wenn man das Startdatum ändert. Man muß also nicht die ganze Liste durchscrollen, um den gleichen Monat nochmal auszuwählen.
  • Das Control ist brauchbar mit der Tastatur (auch Zifferneingabe) zu bedienen.

IMO gehört sowas in jedes AJAX-Toolkit.

veröffentlicht unter: Informatik keine Kommentare
12Jul/090

Computerzeitung

Letzte Woche bekam ich einen erfreulichen Brief von der Gesellschaft für Informatik:

  • Die unsägliche Computerzeitung wird eingestellt. ("muß ich Ihnen leider mitteilen", "Wir bedauern die Einstellung der Computerzeitung.")
  • Der Beitrag wird nicht erhöht.
  • Für den Beitrag gibt es künftig eine Spendenquittung.

Insgesamt also nicht nur eine gute, sondern eine sehr gute Nachricht :-)

veröffentlicht unter: Informatik keine Kommentare
16Mrz/090

OSOR

Durch Zufall habe ich gerade ein Projekt gefunden, das ich noch nicht kannte: das Open Source Observatory and Repository (OSOR). Es gibt dabei um Open-Source-Software für Behörden.

veröffentlicht unter: Informatik, Politik keine Kommentare
16Jul/080

Tiles@Home

Ich hoffe doch, daß das Projekt Openstreetmap hinlänglich bekannt ist. Eine Version der Karten wird verteilt, also von vielen Leuten auf dem PC zu Hause etc., gerendet: Dieses Projekt nennt sich Tiles at Home.

Seit Anfang der Woche wurde dort ein neuer Server installiert, der endlich mit mehr als ein paar Dutzend Clients klarkommt, und die Zahl der offenen Aufträge scheint rapide anzusteigen. Wenn ihr also Openstreetmap unterstützen wollt: Mitmachen!

14Apr/080

Efficient XML Interchange

Ich hab's ja eigentlich schon immer gesagt: XML ist eigentlich toll, aber das Serialisierungsformat ist Bloat. Und was sehe ich heute, als ich (aus ganz anderen Gründen) auf der W3C-Seite rumsurfe? Die sind gerade dabei, sowas zu entwickeln:

The development of the Efficient XML Interchange (EXI) format was guided by five design principles, namely, the format had to be general, minimal, efficient, flexible, and interoperable. The format satisfies these prerequisites, achieving generality, flexibility, and performance while at the same time keeping complexity in check.

Warum nicht gleich so :-)

veröffentlicht unter: Informatik, Web keine Kommentare
2Mrz/083

Zentralität

Mir ist gerade aufgefallen, daß Zentralität sowohl ein Fachbegriff in der Informatik (dort speziell in der Graphentheorie) als auch in der Soziologie (dort speziell in der empirischen Sozialforschung) ist.

Ob sich da wohl Verbindungen finden lassen?

veröffentlicht unter: Informatik, Wissenschaft 3 Kommentare
9Feb/082

Opensource-Heizungsregelung

In unserer WG haben wir eine Etagenheizung ohne Außentemperaturfühler, und Heizkörper mit einfachen Reglern ohne Thermostat. Das Ganze verstößt nicht nur gegen die Energieeinsparungsverordnung ("Zentralheizungen müssen beim Einbau in Gebäude mit zentralen selbsttätig wirkenden Einrichtungen zur Verringerung und Abschaltung der Wärmezufuhr sowie zur Ein- und Ausschaltung elektrischer Antriebe in Abhängigkeit von der Außentemperatur oder einer anderen geeigneten Führungsgröße und der Zeit ausgestattet werden." (§ 14), ), sondern ist auch extrem nervig, weil man in den Räumen keine konstante Temperatur halten kann.

Mein Mitbewohner hat sich schon einen elektronischen Heizungsthermostat gekauft (aber noch nicht montiert). Klar, als Wiwi guckt er erstmal, was es auf dem Markt gibt.

Ich finde die Teile irgendwie etwas unflexibel, und wenn man was besseres will (mit zentralem Regler, der die Ventile per Funk steuert), wird man für Steuerung und zwei Regler leicht deutlich über 100 € los. Als Informatiker frage ich mich da: Gibt es da nicht auch eine Open-Source-Lösung? Naja, wohl nichts Fertiges, aber die Möglichkeiten werden schon diskutiert. Gefunden habe ich da eine Diskussion in einem Webforum und in der Newsgroup de.sci.electronics. Werde mir das mal durchlesen und gucken, was realistischerweise machbar ist.

Damit wären ja schon coole Sachen denkbar: Koppelung mit Wettervorhersage, Ferneinschaltung von der Uni aus, bevor man nach Hause kommt, etc. pp.

veröffentlicht unter: Informatik, Technik 2 Kommentare
18Jan/080

VMWare: NTFS-Partition vergrößern mit Linux-Bordmitteln

Da ich das Ganze schonmal gemacht habe und nicht mehr ganz zusammenbekomme, wird es dieses Mal notiert.

Erster Schritt: Die VMWare-Platte vergrößern, mit
vmware-vdiskmanager -x 20Gb WindowsXPPro32bit.vmdk

Dann die VM mit einer gparted-Boot-CD starten. Dazu muß man darauf achten, daß das VM-Fenster auch wirklich den Tastatur-Fokus hat und dann beim Power-On der VM auf die Esc-Taste hacken.

gparted startet dann, und man sieht, daß die Platte freien Speicherplatz hat. Mit Resize/Move kann man dann die Partition vergrößern.

Dabei laufen die Schritte

  • calibrate /dev/hda1
  • calculate new size and position of /dev/hda1
  • grow partition from 11.99 GiB to 19.99 GiB
  • check filesystem on /dev/hda1 for errors and (if possible) fix them

problemlos durch, aber bei "grow filesystem to fill the partition" hapert es.

Also ein Terminal starten, und dort erst mal ntfsresize ein paar Infos ausspucken lassen.

Dabei stehen dann unter anderem die aktuelle Größe von "volume" (also Dateisystem) und "device" (also Partition).

Erstmal ntfsresize -n -s /dev/hda1 - Simulation klappt.

Problem: Ich habe das Windows falsch heruntergefahren, Journal ist hinüber, also nochmal Rebooten (also: gleich darauf achten, das Windows sauber herunterzufahren). Das kostet also wieder ein Minuten.

Danach ging es dann ohne "-n" wunderbar. Also reboot eintippen, und gut. Beim nächsten Neustart überprüft Windows dann automatisch das Dateisystem, und dann ist alles fertig - man hat eine größere Platte.

veröffentlicht unter: Informatik keine Kommentare
2Dez/070

Visual Studio SP1

Gerade habe ich unter Windows mal routinemäßig Updates installiert. Aber für das hier:

Visual Studio 2005 Service Pack 1
Date last published: 4/5/2007
Visual Studio 2005 Service Pack 1 updates Microsoft Visual Studio 2005, Microsoft Visual Studio 2005 Team System, Microsoft Visual Studio 2005 Tools for the Microsoft Office System, and Microsoft Visual Studio 2005 Team Explorer with the latest security and stability enhancements to help keep those systems up-to-date, reliable, and secure. The goal of all of our service packs is to increase the overall quality of the existing product features while maintaining a high level of compatibility. The installation of this service pack might take up to several hours. After you install this item, you may have to restart your computer.
System Requirements
Recommended CPU: Not specified.
Recommended memory: Not specified.
Recommended hard disk space: 6200 MB

muß ich erstmal die Platte vergrößern ...

veröffentlicht unter: Informatik keine Kommentare
24Nov/070

Character Description Language

I just stumbled across some pretty cool project at the junction of linguistics and IT. Of course, again, it concerns Chinese language processing ...

The Character Description Language's aim is to provide a description language for Han ideographs. The project seems to be well-organized, and they have captured 56k CJK characters, including all from the BMP.

This data would probably be very useful for developing an Input Method Engine using a graphic tablet, or showing the decomposition of characters into their constituent parts. Alas, I have as of yet not been able to find the database - is it commercial stuff (namely, Wenlin) safely locked away from the interested public? That would really be a pity ...

veröffentlicht unter: Informatik, Sprache keine Kommentare
30Mai/070

Paper eingereicht

Das Wochenende war mal echt Streß. Diverse Nachtstunden habe ich mit der Arbeit an meinem Paper für AGTIVE 2007 verbracht, dazu haben wir uns noch an den Feiertagen (Pfingstsonntag und -montag) im Institut gesprochen, um uns gegenseitig Hilfestellung bei Messungen, Formulierungen etc. zu geben. Gestern war dann Endspurt: 23:00 war die offizielle Deadline (da die wohl bei der Angabe der Zeitzone GMT+1 nicht an die Sommerzeit gedacht haben, eigentlich doch 24:00), bis dahin wurde noch fleißig an den Papers geschraubt. Kurz vor dem echten Endspurt gab es um ca. 20:00 noch Pizza, und nach Abgabe wurde dann eine Flasche Diabetikersekt geleert (das Zeug steht hier haufenweise im Kühlschrank) ...

Mal sehen, ob es angenommen wird, cool wär's ja schon ...

veröffentlicht unter: Informatik, Uni keine Kommentare
26Feb/070

Branchen mit SVN

Bruncanchen mit SVN ist ganz einfach, denkt man. Einfach ein svn copy, und im Nu hat man eine neue lazy copy, in der man nach Belieben Änderungen vornehmen kann.

So dachte ich mir auch, als ich das Projekt für meine Studienarbeit vom Kollegen geforkt habe. Aber Pustekuchen - dafür braucht man Schreibzugriffe auf das gemeinsame Oberverzeichnis, die ich nicht hatte. Also Arbeitskopie (Revision 336) ausgecheckt bzw. exportiert, in einen Checkout meines eigenen Pfades kopiert, und wieder eingecheckt. Damit sind dann natürlich die Log-Messages weg.

Heute habe ich dann einen Merge der Änderungen meines Kollegen von Revision 336 bis 476 abgeschlossen. Und was sehe ich da? Er hat die Log-Messages neu hinzugekommener Dateien einwandfrei übernommen. Das also geht von den Berechtigungen her. Wenn ich also statt des nicht erlaubten svn copy einen Merge von r1 bis r336, Ziel: mein Pfad, gemacht hätte, hätte ich (fast?) dasselbe Ergebnis erzielt, also alle Log-Einträge behalten etc. Schon irgendwie merkwürdig ...

veröffentlicht unter: Informatik keine Kommentare
4Feb/070

BFS – generic and fast

This weekend, originally I wanted to implement special BFS procedures for my student job, of course using generic programming and the like. Looking at the normal BFS implementation in Boost I noticed that it needs a ColorMap and allocates one as the default behavior. However, in many applications of breadth-first search one can use another map for this purpose, like one for distance or predecessors, and interpret a special value like -1 or the null pointer as white, i.e. not visited. Then one can no longer distinguish between gray and black nodes, though (I have not understood how this can become relevant for BFS - for DFS it's clear), but one does not have to anyway in most applications. Doing so, one saves the memory for another map - normally one byte per vertex - and the overhead for updating it.

So I started working on an implementation of the ReadWritePropertyMap concept that is initialized with another map and a value for "white" and when queried for the color of a vertex reads the value of the underlying map and determines whether it is white. Write operations just do nothing. This was not totally easy, as with all this template stuff, even small mistakes lead to very long diagnostics. But the result is now here. So now there remains just the issue with the Koenig lookup, but I hope this will be soilved as well ...

veröffentlicht unter: Informatik keine Kommentare
4Feb/071

BFS generisch und schnell

Dieses Wochenende wollte ich eigentlich Spezialbreitensuchmethoden für meinen Hiwi-Job implementieren, natürlich generisch und so. Beim Anschauen der normalen BFS in Boost fiel mir auf, daß das Teil ja eine ColorMap benötigt und standardmäßig eine anlegt. Dabei kann man ja für viele Anwendungen der Breitensuche dafür eine andere Map, zum Beispiel für Distanz oder Vorgänger, verwenden, und einen speziellen Wert, wie -1 oder den Nullpointer, als weiß, also unbesucht, ansehen. Dann kann man zwar nicht mehr zwischen grauen und schwarzen Knoten unterscheiden (mir ist noch nicht ganz klar geworden, welche Relevanz das überhaupt bei BFS haben kann - bei DFS ist es klar), aber das muß man ja in den meisten Anwendungen auch nicht. Damit spart man dann den Speicherplatz für eine weitere Map - immerhin im Regelfall ein Byte pro Knoten - und den Overhead für das Update derselben.

Also hab ich mich daran gemacht, eine Implementierung des Konzepts ReadWritePropertyMap zu erstellen, die mit einer anderen Map und einem "Weiß-Wert" initialisiert wird und bei Anfragen nach der Farbe eines Knoten den Wert aus der zugrundeliegenden Map liest und guckt, ob der Knoten weiß ist. Schreibzugriffe gehen einfach ins leere. Das Ganze war nicht ganz einfach, da mit dem Template-Geraffel auch kleine Fehler zu ellenlangen Fehlermeldungen führen. Aber das Ergebnis ist jetzt hier. Bleibt nur noch die Sache mit dem Koenig-Lookup, aber die wird mir hoffentlich auch jemand beantworten.

veröffentlicht unter: Informatik 1 Kommentar
30Dez/061

Statische Polymorphie dynamisch machen

Modernes C++ benutzt häufig statische Polymorphie, die auf Templates basiert. Das allerdings kann nicht nur zu Code-Bloat führen, sondern macht es auch unmöglich, die Objekte einer Klasse, die ein bestimmtes Konzept modelliert, in einer separat kompilierten Bibliothek zu benutzen - denn die kennt den Typ des Objekts ja nicht.

In graph-tool, genauer in graphml.hpp, bin ich auf eine schöne Musterimplementierung eines Wrappers gestoßen, der gewissermaßen statische Polymorphie in dynmische Polymorphie verwandelt.

Zum Anwendungsfall:

Es geht darum, GraphML-Dateien einzulesen. Dafür hat der Benutzer der Bibliothek ein Objekt einer Klasse, die das Konzept MutableGraph modelliert. Die Klasse mutate_graph stellt dann eine einheitliche Laufzeitschnittstelle für MutableGraphs zur Verfügung, die Wrapper für jeden einzelnen MutableGraph sind dann template class mutate_graph_impl, die von mutate_graph erben. Wo die Schnittstellen dann immer noch unterschiedlich sind, weil sie abhängige Typen verwenden, werden diese in boost::any gewrappt.

Et voilà - wir haben eine einheitliche Schnittstelle für MutableGraphs. Geht analog natürlich für fast beliebige andere Konzepte.

veröffentlicht unter: Informatik 1 Kommentar
13Sep/061

Begleitmaterial

Die Idealvorstellung vieler Profs, die ihre Vorlesungen mit Beamerfolien halten, ist ja vermutlich oft, daß sich die Studenten auf den vorher ausgedruckten Folien Notizen machen. Mag ja sein, daß das was bringt, aber ich weiß da nie, was ich aufschreiben soll. Entweder ist der Stoff eine Ansammlung von Fakten und die Erläuterungen dazu bloßes Rumgelaber, oder aber der Stoff ist so kompliziert, daß ich hinreichend damit beschäftigt bin, ihn zu verstehen und weder die Denkkapazität noch das Stoffverständnis habe, um zu entscheiden, was wichtig ist.

Umso wichtiger, daß man den Stoff hinterher nochmal nachvollziehen kann. Eine Möglichkeit: Der Prof hat seine Vorlesung auf Video aufzeichnen lassen. Suboptimal, denn nochmal will ich mir das Zeug eigentlich nicht anhören müssen. Zweite Möglichkeit: Die Folien sind hinreichend ausführlich und selbsterklärend, daß das geht. Schon besser, aber es fehlt immer noch die zweite Sichtweis, mit der man es dann vielleicht besser versteht. Dritte Möglichkeit: Es gibt ein Buch (oder mehrere Bücher), an die sich die Vorlesung über weite Strecken hält, einschließlich Notationen und Begriffen. Das ist IMO der Idealzustand, weil Bücher meist wirklich aus sich heraus verständlich sind.

Und diesen Fall darf ich zum Glück gerade bei der Vorbereitung auf die Übersetzerbau-Prüfung erleben. Die Folien von Prof. Goos entsprechen bei vielen "klassischen" Kapiteln inhaltlich sehr stark dem Buch von Goos und Waite: Compiler Construction. Das Buch ist naturgemäß an vielen Stellen um einiges tiefgehender, aber dieser Tiefgang hilft eher beim Verständnis, als daß er verwirrt.

Heute habe ich mir den Zusammenhang zwischen LR(1), LR(0), SLR(1) und LALR(1) reingezogen - und verstanden! Und ich muß sagen: Ein gutes Gefühl!

veröffentlicht unter: Informatik, Uni 1 Kommentar
23Jul/060

Fakultätsfest

Für den diesjährigen Tag der Informatik der Fakultät für Informatik der Uni Karlsruhe wurde die Werbetrommel mal richtig ordentlich gerührt: Die Einladung gab es nicht nur in allen möglichen Vorlesungen, nein, auch auf der Website der Uni und sogar der Stadt Karlsruhe erschien ein Hinweis. Zum Glück wurde da aber das Freibier nicht erwähnt, wer weiß, wieviele Leute sonst den Bierstand gestürmt hätten ...

Das Vortragsprogramm hab ich dieses Jahr leider verpaßt (auch wenn es laut Oli recht interessant gewesen sein soll), aber zum Fest war ich dann natürlich da.

Eine Portion Häppchen hab ich auch ergattert, wobei ich zum Glück recht weit vorne stand, als ich vorhatte, mir nochwas nachzuholen, war die Schlange ziemlich lang, und danach waren die Häppchen dann alle.

pict2046.jpg

Dafür floß das Freibier wirklich reichlich. Nachdem Frau Prof. Zitterbart um ca. 19:00 das symbolische Faß angestochen hatte, gab es bis 21:30 alle Getränke kostenlos - in der Zeit hatte ich dann drei (oder waren's vier) Bier und zwei Grape intus. Meine Helferbons für meine Schicht am Bierstand gab es zum Glück auch schon, so daß ich dazu ein leckeres Steakbrötchen essen konnte.

Danach wurde es dann aber schwierig: Ich mußte die Zeit bis zu meiner Schicht um 1 Uhr überbrücken. Und die Stimmung war, gelinde gesagt, ziemlich chillig, obwohl im Zelt (in dem sich kaum jemand aufhielt) eine Band spielte. OK, bis kurz nach zwölf ging es halbwegs, dann nochmal kurz nach Hause, und am Bierstand gab es dann doch noch recht viel zu tun, so daß ich recht schnell wieder wach wurde. Am Stand dann nochmal so drei bis vier Bier konsumiert, zum Glück konnte ich am Samstag ausschlafen (auch wenn's nicht wirklich erholsam war, viel zu heiß ...).

Und mein auf der Wiese verlorenes Brillenetui samt Sonnenbrille fand sich dann am nächsten auch bei den Fundsachen an. Juchu!

veröffentlicht unter: Freizeit, Informatik keine Kommentare
11Mai/060

C++ und generisches Programmieren

Im Moment beschäftige ich mich gerade mit C++. Im Stroustrup (dem Stroustrup, also The C++ Programming Language. Special Edition.) bin ich inzwischen bei der Standardbibliothek angekommen, parallel habe ich angefangen, C++ Template Metaprogramming. Concepts, Tools, and Techniques from Boost and Beyond zu lesen - übrigens erstaunlich leicht lesbar. Diese C++ In-Depth-Serie scheint sehr empfehlenswert zu sein ...

Vielleicht sollte ich noch kurz ausholen, wie ich zu C++ gekommen bin. Aus einem Problem bei Hennings 3D-Engine (Dreiecke - wenn möglich - zu Vierecken zusammenfassen, was auf einer geschlossenen Oberfläche immer möglich sei) entwickelte sich die Frage, wie man Matchings in nicht bipartiten Graphen findet. Des Problems Lösung: Der "Paths, Trees, and Flowers"-Algorithmus von Edmonds, Laufzeit: O(|V|*|E|*alpha(|V|*|E|)). Davon habe ich mir dann interessehalber mal das Paper besorgt, erschienen im Canadian Journal of Mathematics. Leider nicht online erhältlich, der Zeitschriftenband sollte aber in der Bibliothek jeder besseren Uni mit Mathe-Fakultät zu finden sein. Das Paper war dann irgendwie ziemlich langatmig, ich habe es immer noch nicht ganz durch :-| . Also habe ich mich auf die Suche nach einer Implementierung dieses Algorithmus gemacht. Fündig wurde ich bei der Boost Graph Library. Da ich in meinem Hiwi-Job Graphenalgorithmen implementiere, hat mich das natürlich gleich interessiert, und generisches Programmieren ist schon ziemlich hochgradig.

Auf meiner Vormerkungsliste in der Unibib (und langfristig auf meiner Anschaffungsliste) steht dann natürlich auch noch The Boost Graph Library: User Guide and Reference Manual. Und ich hoffe ja, hier im Institut auch mal statt dem Java-Rumgemurkse was mit der BGL machen zu können ...

veröffentlicht unter: Informatik, Uni keine Kommentare