January 28, 2008

LaTeX-Editor für MacOS

Vor einiger Zeit schrieb ich bereits einen kleinen Artikel zu LaTeX-Editoren unter Windows. Da ich mittlerweile auf einem Mac arbeite, benötigte ich auch dafür einen geeigneten Editor. Ich habe ihn gefunden: TeXShop

Dieser Editor bietet wirklich das, was die anderen Editoren unter Windows versprachen. Allerdings muss nicht erst konfiguriert oder zusätzliche Software instlliert werden. So funktioniert das Springen an eine Stelle im Zieldokument und ebenso aus diesem zum LaTeX-Dokument (Apfel + Doppelklick).

TeXShop-PDF>TeXTeXShop-TeX>PDF

Für meine Ansprüche ist dieses Tool ideal, so dass es damit sogar richtig Spass macht Dokumente zu erstellen. Ich überlege auch nicht mehr, ob ich eine WYSIWYG-Office Anwendung für kleinere Dokumente benutze oder doch LaTeX.

November 30, 2007

Tools für (Web-)Entwickler: Firefox Add-ons

Geeignete Werkzeuge können die Entwicklung und das Testen von Webanwendungen erheblich erleichtern. Nachfolgend eine kurze Aufzählung von Add-ons, die jeder Entwickler installiert haben sollte:

Firebug

Schon lange kein Geheimtipp mehr, dient dieses Tool zum Debugging von JavaScript. Vor allem untertützt es bei der Überprüfung von AJAX-Funktionen, da es XMLHttpRequests anzeigen kann und zum Profiling von JavaScript geeignet ist. Daneben bietet Firebug ebenso Hilfestellung beim Debugging von XHTML und CSS.

Web Developer

Wie der Name schon sagt dient dieses Add-on dazu, die Erstellung von Webanwendungen zu erleichtern. Ebenso wie Firebug kann der XHTML-Code sowie das dazugehörige CSS inspiziert werden. Allerdings bietet es zusätzliche Funktionen, wie die Deaktivierung der Stylesheets oder JavaScript. Es können Webseiten und CSS validiert werden, Accessibility Tests angestoßen oder die Ansicht im PDA simuliert werden.

Selenium IDE

Der Test von Webseiten war bislang ein schwieriger Teil. Mittels Selenium gehört dies der Vergangenheit an, da Testszenarien einfach einmalig mit allen Klicks und Eingaben aufgenommen werden können und dann beliebig oft wiederholbar sind. So ist die Erstellung von Testfällen sehr einfach. Bezüglich der Continuous Integration sollen die Selenium Testfälle auch mit Ant ausführbar sein, was ich bisher noch nicht getestet habe.

November 18, 2007

Google mag Wordpress

Seitdem ich Wordpress für diese Seite verwende, stiegen die Page-Impressionen deutlich. Das bedeutet wohl, dass die vorherige selbst geskriptete Seite nicht gerade für Suchmaschinen optimiert war :)

Die Statistik zeigt ein deutliches Ansteigen der Besucher nach Installation von Wordpress Mitte September. Allerdings wird das Ergebnis durch die neuen Blog-Einträge verfälscht.

Website-Statistik

October 29, 2007

Synchronisation von Verzeichnissen mittels Unison

Immer wieder stehe ich vor dem Problem, dass ich die Inhalte von zwei Verzeichnissen synchronisieren muss. Ob das die Synchronisation von einem USB-Stick und einem Rechner ist oder zwischen zwei Rechnern. Diese Situationen stellen sich häufiger als man denkt. Die alte Lösung war die manuelle Synchronization, wobei man teilweise überhaupt keine Ahnung hat, was nun alles kopiert werden muss und vor allem von wo nach wo.

Eine Lösung des Problems fand sich mit der Anwendung Unison. Das Tool ist für alle Plattformen verfügbar und wird über Profile gesteuert. So kann beispielsweise eine Profil zur Synchronisation mit einem USB-Stick erstellt werden. Unter Linux Systemen legt man diese Profildateien (*.prf) im Ordner .unison im Home-Verzeichnis ab.
# synchronization folders
root = /home/micha
root = /media/USB

# Non-conflicting changes will be propagated; conflicts will be skipped
batch = true

# ignored sources
ignore = Path tmp

# needed for sync with FAT disks
perms = 0

Eine Besonderheit bei FAT formatierten USB-Sticks ist die Konfigurationseinstellung perms=0, da FAT keine Berechtigungsstrukturen unterstützt.

Daneben lassen sich Verzeichnisse auch über SSH synchronisieren.
# synchronization folders
root = /Users/micha/Documents
root = ssh://192.168.1.2//home/micha/

# Non-conflicting changes will be propagated; conflicts will be skipped
batch = true

# ignored sources
ignore = Path tmp

Gestartet wird Unison beispielsweise in der Konsole über unison profilName (weitere Informationen in der Manual von Unison).

October 28, 2007

MP3 Server im lokalen Netz

Möchte man iTunes benutzen, aber seine Musikbibliothek nicht auf mehrere Rechner redundant speichern, ist der Firefly Media Server die Lösung. Auf dem Rechner, der die Musik enthält, wird dieser einfach installiert und schon kann man mit anderen Rechner über iTunes darauf zugreifen.

In meinem konkreten Anwendungsfall läuft der Server auf einem Ubuntu Rechner und als Clients laufen Windows und Mac Systeme. Die Installation unter Ubuntu verlief mittels apt-get unkompliziert. Eine Anleitung findet sich hier.

Allerdings hatte ich einige kleine Schwierigkeiten, nachdem ich die Konfiguration (/etc/mt-daapd.conf) angepasst hatte. So sollte der Benutzer, unter dem der Dienst ausgeführt wird auf mt-daapd gesetzt bleiben. Ich hatte das Problem, dass ich diesen veränderte und somit der Dienst nicht gestartet werden konnte. Der Grund dafür waren wahrscheinlich Rechteprobleme.

Soweit so gut. Der Server lief und ich konnte auch auf die Admin-Weboberfläche zugreifen (http://localhost:3689). Allerdings bekam ich keine Musik-Dateien im iTunes auf dem Client angezeigt. Ebenso war hier die Lösung nicht weit. Ein Blick in das Log-File brachte Aufschluss: Der User mt-daapd hatte keine Leseberechtigung auf das Verzeichnis, worin sämtliche Musikdateien enthalten sind.

Folglich legte ich eine neue Gruppe mp3 an und fügte diese dem Benutzer mt-daapd und meinem Benutzerkonto hinzu.
sudo addgroup mp3
sudo adduser mt-daapd mp3
sudo adduser micha mp3

Nun musste nur noch das Verzeichnis mit der entsprechenden Gruppe ausgestattet werden.
chgrp -R mp3 music/

Nach Neustart des Daemons (sudo /etc/init.d/mt-daapd restart) indizierte der Dienst alle Musikdateien erfolgreich.

October 6, 2007

Lokalen iCal Kalender mit Google Calendar synchronisieren

Seit geraumer Zeit nutze ich Googles Calendar zur Planung meiner Termine. Somit kann ich diese von jedem Rechner mit Internetanschluss einsehen und verwalten. Allerdings besteht trotzdem der Bedarf die Termine offline zur Verfügung zu haben. Dazu benutze ich die iCal-fähigen Kalender Evolution oder das Thunderbird Add-on Lightning.

Folglich bestand der Bedarf, Termine zwischen Google und lokalen iCal-Kalender-Dateien zu synchronisieren. Nach langer Suche stieß ich auf den GCALDaemon, der dies leistet. Ich verwende die dateibasierte Synchronisation, so dass ich Termine offline verwalten kann und soweit eine Internetverbindung verfügbar ist, werden die Änderungen an den Google Kalender übertragen - funktioniert hervorragend.

Als Alternative stieß ich auf ein zusätzliches Google Calendar Provider Add-on für Thunderbird, das direkt mit dem Google Kalender synchronisiert. Allerdings muss dazu eine ständige Internetverbindung bestehen. Eine Anleitung, wie das Add-on installiert wird findet sich hier.

Nun ist auch der Weg zur Synchronisation von Terminen mit dem Handy über eine Kabel-, Infrarot- oder Bluetoothverbindung nicht mehr weit, aber dazu später mehr.

October 2, 2007

Website Änderungen

Die vorherige Version der Website hatte als Kernelement einen Blog, so dass ich jetzt zur Verwaltung/Darstellung wordpress einsetze. Zuvor war die Seite von Hand programmiert, was zwar Spaß machte und eine Menge Erfahrungen im Umgang mit PHP brachte. Allerdings habe ich mittlerweile kaum noch Zeit mich um solche Belange zu kümmern und möchte einfach schnell Informationen erstellen und präsentieren können. Das bietet wordpress.

PS: Das Bild im Kopf der Seite ist übrigens von der Mountain-Bike Tour im Rahmen unserer Südamerika-Reise, als wir mit 15 Personen im und 20 Fahrrädern auf dem Bus zum Ausgangspunkt der Downhill "Todesstrecke" fuhren.

August 22, 2007

Verwendung vom Eclipse UML2 Projekt zur Bearbeitung von UML2-Modellen und Profilen

Das Eclipse UML2 Projekt findet bereits in einigen Werkzeugen (z. B. Topcased UML Editor) Verwendung. Allerdings sind diese Tools zumeist Eclipse-Plugins die das Projekt innerhalb der Eclipse Umgebung verwenden. Möchte man UML2 in einer eigenständigen Java-Anwendung oder im Rahmen eines Unit-Tests verwenden, müssen einige Initialisierungen durchgeführt werden. Das nachfolgende Listing zeigt das erforderliche Setup:
protected static void registerResourceFactories(){
Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().
put(UMLResource.FILE_EXTENSION, new UML22UMLResourceFactoryImpl());
Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().
put("ecore", new EcoreResourceFactoryImpl());
Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().
put("ecore2xml", new EcoreResourceFactoryImpl());
}

protected static void registerPathmaps(URI uri) {
URIConverter.URI_MAP.put(URI.createURI(UMLResource.LIBRARIES_PATHMAP),
uri.appendSegment("libraries").appendSegment(""));
URIConverter.URI_MAP.put(URI.createURI(UMLResource.METAMODELS_PATHMAP),
uri.appendSegment("metamodels").appendSegment(""));
URIConverter.URI_MAP.put(URI.createURI(UMLResource.PROFILES_PATHMAP),
uri.appendSegment("profiles").appendSegment(""));
final String UML2_200_NS_URI = "http://www.eclipse.org/uml2/2.0.0/UML";
EPackage.Registry.INSTANCE.put(UML2_200_NS_URI,
EPackage.Registry.INSTANCE.get(UMLPackage.eINSTANCE.getNsURI()));
Ecore2XMLPackage.eINSTANCE.getEClassifiers();
}

private static void registerMapping(URI uri) {
final String ECORE2XML = "platform:/plugin/org.eclipse.uml2.uml/
model/UML2_2_UML.ecore2xml";
URIConverter.URI_MAP.put(URI.createURI(ECORE2XML),
uri.appendSegment("model").appendSegment("UML2_2_UML.ecore2xml"));
}

Mit Hilfe der vorhergehenden Initialisierungen lässt sich ein UML2-Profil (XMI Version 2.x) laden und kann zur Modellierung verwendet werden.
 private Profile loadProfile() {
registerResourceFactories();
URI uri = URI.createURI("resources");
registerPathmaps(uri);
registerMapping(uri);
URI profileFile = URI.createFileURI("MyProfile.profile.uml");
Resource r = new ResourceSetImpl().getResource(profileFile, true);
Profile p = (Profile) EcoreUtil.getObjectByType(r.getContents(),
UMLPackage.Literals.PROFILE);
return p;
}

July 31, 2007

JBoss AS und Portal

Mittlerweile gibt es von JBoss den Application Server in der Version 4.2.1. Zur vorherigen 4.0.x Version gab es umfangreiche Änderungen des Webcontainers. Zum einen wird nun ein Tomcat6 und zum anderen die JSF Implementierung von Sun verwendet. Möchte man trotzdem MyFaces einsetzen, kann der Servletkonfiguration (web.xml) ein zusätzlicher Paramter übergeben werden, so dass die Bibliotheken des WARs benutzt werden.

<context-param>
<param-name>org.jboss.jbossfaces.WAR_BUNDLES_JSF_IMPL</param-name>
<param-value>true</param-value>
</context-param>

Auf Grund der Änderungen am Web Deployer kann das Portal in Version 2.4.1 nicht mehr verwendet werden, da es nicht korrekt geladen wird. Man erhält die Nachricht, dass die PortalWebApp nicht vom Web Deployer gehandhabt werden kann.

Folglich muss eine aktuelle Version des Portals genutzt werden. Ab Version 2.6 ist das Portal wieder mit dem JBoss AS 4.2.x lauffähig. Allerdings sollte unbedingt 2.6.1 verwendet werden, da das Portal 2.6.0 einige Bugs enthält. Diese wirken sich auf andere Anwendungen, die MyFaces verwenden, negativ aus, so dass diese nicht mehr lauffähig sind.

May 31, 2007

Mehrere Literaturverzeichnisse in LaTeX

Im Rahmen meiner Diplomarbeit stand ich vor dem Problem, dass ich gern mehrere Quellverzeichnisse je nach Typ haben wollte. Beispielsweise getrennt nach Büchern, Spezifikationen oder Webseiten.

Dazu definiert man in LaTeX folgendes in der Präambel:

\usepackage[square,sectionbib]{natbib}
\usepackage{bibtopic}
\bibliographystyle{alphadin}


Innerhalb des document Blocks können nun mehrere Quellenverzeichnisse mittels btSect Block definiert werden.

\begin{btSect}{bib/literature}
\section{Literatur}
\btPrintAll
\end{btSect}


\begin{btSect}{bib/specs}
\section{Spezifikationen}
\btPrintCited
\end{btSect}

\begin{btSect}[alpha]{bib/misc}
\section{Sonstiges}
\btPrintAll
\end{btSect}

Nach der Blockdefinition folgt die Angabe der BibTex Datei, die die Quellen eines bestimmten Typen enthalten. Innerhalb des Blocks kann noch die Bezeichnung des Verzeichnisses (section} angegeben werden, sowie welche Quellen das Verzeichnis enthalten soll. Mögliche Anweisungen sind:

  • btPrintAll - alle Quellen

  • btPrintCited - nur zitierte Quellen

  • btPrintNotCited - nicht zitierte Quellen