SucheVerwaltung des BlogsKategorienKontaktMarkus Brückner |
Sonntag, 25. Mai 2014Probleme mit OpenWRT BuildrootHilfe, hab ich da jetzt lang gesucht: ich will (dank Software-Update auf meinem DSL-Router) ein Programm neu kompilieren, welches ich für das Ding geschrieben habe (zur Überwachung meiner Heizung). Also ein OpenWRT-Buildroot nach Anleitung runtergeladen und ausgepackt, ebenso nach Anleitung versucht, einen eigenen Feed für das entsprechende Paket zu erstellen und *bumm*: *** target pattern contains no `%'. Stop. Komische Fehlermeldung. Alle Sachen, die ich im Netz gefunden habe, waren nicht das richtige oder haben keine Lösung enthalten, sondern nur Hinweise, dass Leute das Problem gelöst haben, allerdings ohne Hinweis, wie. In meiner Verzweiflung (die Tatsache, dass ich mich nicht beim OpenWRT-Forum registrieren kann, weil da irgendwas mit dem Versenden der Bestätigungsmails nicht funktioniert, hilft auch nicht) habe ich jetzt einfach rumprobiert. Am Ende stellt sich raus: wenn ich meinen Quellcode in ein Verzeichnis packe in der Form <SECTION>/<Package-Name> (wobei <SECTION> der Wert der entsprechenden Variable im Makefile des Projekts ist), dann geht's. Warum auch immer. Für die Detailsuche fehlt mir jetzt der Nerv.
So eingerichtet kann ich jedenfall den neuen Feed in der feeds.conf anlegen: src-link feedname /pfad/zu/SECTION und mich an einem fehlerfreien Feedupdate erfreuen. Mal schauen, ob das Kompilieren dann jetzt auch klappt.
Dienstag, 23. April 2013Browser in Thunderbird umstellenHm, das hat mal wieder länger gedauert mit dem Suchen. Ich möchte gern aus Sicherheitsgründen meinen Browser unter einem extra Nutzer ausführen. Das ist soweit kein Problem. Einfach mein Profil in den neuen Nutzer kopiert, mittels kdesudo -u webuser firefox den Browser aufgerufen, alles gut. Ok, ich müsste theoretisch mein Passwort jedesmal eingeben, aber das kann man ja durch eine geeignete Einstellung in /etc/sudoers verhindern. Falls das mal jemand braucht: user ALL=(webuser) NOPASSWD: /usr/bin/firefox Diese Zeile in /etc/sudoers erlaubt dem Nutzer user den Befehl /usr/bin/firefox ohne Passwortrückfrage als webuser auszuführen. Diese Einstellungen gelten auch für kdesudo (ich verwende KDE), statt des normalen sudo nimmt dieses aber auch die X-Credentials mit, so dass ein grafisches Programm wie Firefox angezeigt werden kann. Wenn man jetzt noch in der KDE als Standardkomponente für den Webbrowser den kdesudo-bewehrten Befehl oben einstellt, dann öffnen alle KDE-Programme ihre HTTP- und HTTPS-Links mit Firefox unter dem webuser. Doof nur, dass ich Thunderbird verwende (ich mag Akonadi nicht, seitdem ich da mal längere Zeit Probleme mit verschwindenden Terminen etc. hatte). Als GTK-Programm hält der sich dummerweise nicht an die Einstellungen von KDE (ist Vielfalt nicht manchmal toll?). Ich habe eine ganze Menge Tipps im Netz gefunden, die samt und sonders alle nicht mit meinem Thunderbird 17 wollten. Ergo: selbst etwas rumprobiert (ich wusste, dass ich das schonmal eingestellt hatte…) und folgendes gefunden: man gehe über Bearbeiten -> Einstellungen -> Anhänge und suche dort die Dateitypen http und https raus. Dort steht normalerweise firefox (oder sonstwas vergleichbares) drin. Man kann da zwar ein anderes Programm angeben, aber leider keine Standardparameter einstellen, was die kdesudo-Lösung direkt verhindert. Deswegen schreibt man sich ein kleines Bash-Skript mit folgendem Inhalt: #! /bin/bash kdesudo -u webuser firefox $1Das legt man irgendwo erreichbar hin, macht es ausführbar und stellt es im Thunderbird als Anwendung für die http und https Dateitypen ein. Siehe da: es funktioniert, auch der Thunderbird öffnet die Links in einem Browser unter einem anderen Nutzer. Samstag, 29. Dezember 2012Duplicity und "system clock issues?"
Weil ich's garantiert mal wieder selbst brauche und dann sinnlos danach suchen würde: wenn duplicity mit "AssertionError: time not moving forward at appropriate pace - system clock issues?" fehlschlägt, dann kann es sein, dass im lokalen Signatur-Cache noch fehlerhafte Dateien von einem fehlgeschlagenen vorangegangenen Backupversuch liegen. Einfach in ~/.cache/duplicity/<Backup-ID> alle .part-Dateien löschen. Beim nächsten Lauf beschwert sich duplicity möglicherweise, dass Reste eines fehlgeschlagenen Backups rumliegen, sollte dann aber ganz normal weitermachen. Die Fehlermeldung ist… nicht unbedingt naheliegend. Dummerweise wollen die Bugs nur mit Anmeldung haben, worauf ich grad keinen Bock habe.
Dienstag, 29. November 2011Richtige Verwendung von select()Merke: manchmal hilft Doku lesen erheblich. Ich habe gerade einen halben Tag danach gesucht, wieso eine pipe() zwischen zwei Threads eines Programms nicht funktioniert. Ich habe eine pipe, an deren lesendem Ende ein Thread mittels select() auf Befehle wartet. Dummerweise wollte bei folgendem Code select nicht zurückkehren: select(1, &fdset, 0, 0, 0) Irgendwie wollte das partout nicht zurückkehren, obwohl ich das Schreib-Ende des File-Descriptors beschrieben habe… Hm… Nach einigem Suchen habe ich die Doku nochmal genauer gelesen: nfds is the highest-numbered file descriptor in any of the three sets, plus 1. Tja, richtig lesen. nfds (der erste Parameter von select) ist nicht die Anzahl der Descriptoren im fd_set, sondern die Nummer des höchsten Descriptors plus eins. Dummerweise ist das Beispiel in der Doku mit fd=0 gemacht, so dass der höchste plus 1 gleich 1 ist (und damit gleich der Anzahl), was mich natürlich auf die völlig falsche Fährte gelockt hat. Naja, ein halber Tag versemmelt, aber wenigstens was bei gelernt. Fast wie Goethe… Freitag, 22. April 2011Neuer Release des Logging-TemplatesIrgendwann vor langer, langer Zeit (laut Versionshistory mittlerweile 5 Jahre her) hatte ich mal als Fingerübung ein Logging-Template in C++ geschrieben, was sich anfühlen sollte wie std::cout. Ziel war den geneigten Programmierer vom Denken zu entlasten und ihm quasi std::cout-Debugging mit etwas mehr Möglichkeiten zu erlauben. Hat offenbar damals schon gut gepasst, kurz darauf kam nämlich die Fähigkeit zur Anpassung an verschiedene Multithread-Umgebungen via Policy-Klasse dazu. Dann lag das ganze erstmal 5 Jahre im Dornröschenschlaf, in denen ich es zwar hin und wieder genutzt habe, aber eigentlich keine neuen Fähigkeiten brauchte. Bis vor kurzem... Daher jetzt: tada! ein komplett neues Release, in dem sich so einiges geändert hat. Das Frontend an sich bleibt gleich (sprich: existierender Code sollte problemlos weiter kompilieren, es sei denn er macht was total dämliches und verwendet zweimal einen Log-Level in einer Nachricht). Im Hintergrund hat sich allerdings einiges getan. Erstmal wurde der Code etwas aufgeräumt, da sich dort von verschiedenen Experimenten Reste angesammelt hatten. Dann wurde das Handling der Loglevel komplett umgebaut um eine flexiblere Ausgabe nach unten zu ermöglichen. Hintergrund: ich brauche für ein Projekt gerade die Möglichkeit Daten ins Syslog auszugeben. Dazu muss der zugrundeliegende Ausgabestream aber das Log-Level wissen. Außerdem muss er zuverlässig wissen, wann eine Nachricht beendet ist. Beides stellt das Frontend jetzt sicher. Weil's so schön war habe ich gleich noch den passenden SyslogStream beigelegt, der das Loggingfrontend an syslog() anklemmt. Benutzung ist wie üblich relativ einfach: #include <syslogstream.hxx> use namespace Logging; int main(int argc, char *argv[]) { SyslogStream slog("TestLogger"); Syslogger logger(slog, LEVEL_INFO); logger << LEVEL_INFO << "This an INFO message which has a number attached: " << 12345 << std::endl; logger << LEVEL_WARNING << "This is a warning message." << std::endl; return 0; } Dieser Code schreibt zwei Nachrichten unter dem Präfix TestLogger ins Syslog. Die Doku der Klassen gibt noch einige Informationen her, welche Eigenschaften man zusätzlich konfigurieren kann. Das Logging-Frontend kann dank std::ostream-Kompatibilität natürlich jedes Element ausgeben, welches auf einem ostream ausgegeben werden könnte. Der Code ist weiterhin header-only, braucht also keine Installation irgendwelcher Bibliotheken, sondern kann dan public-domain-Lizenz einfach ins eigene Projekt mit übernommen werden. Wer nett sein will: mich interessiert immer, wo der Code verwendet wird. Kurze Mail an mich wäre nett (hm... sollte ich vielleicht mal in die Lizenz schreiben...) Der Code ist mittlerweile umgezogen und liegt bei Bitbucket: https://bitbucket.org/namenlos/logging/ Sonntag, 30. Januar 2011screen für X-ProgrammeKennt wahrscheinlich eh schon wieder jeder außer mir, aber wer schonmal das Problem hatte, dass er gern ein X-Programm laufen lassen will und dann vielleicht noch auf einem anderen Rechner wieder drauf zugreifen, der sollte sich mal xpra anschauen. Wie screen das für die Konsole macht kann man mit xpra grafische Programme laufen lassen und später wieder an einen laufenden X-Server anklemmen. Geht (natürlich) auch von einem anderen Rechner aus via ssh. Macht sich sogar ganz bequem mit xpra attach ssh:user@host:display. Wieder was gelernt... Donnerstag, 3. Juni 2010Wenn NVidia einen Monitorwechsel nicht erkennen will…Manchmal regt mich meine NVidia-Karte im Notebook echt auf. Nicht nur, dass ich nur mit dem Binary-Treiber unter Linux Features wie 3D-Beschleunigung oder Suspend-to-RAM nutzen kann, nein, leider ist der auch noch nicht kompatibel mit der Standardarchitektur zum Setzen von Bildschirmauflösungen etc. Dafür braucht man ein spezielles Tool von NVidia, welches nur im Klicki-Bunti-Modus bedienbar ist. Nix mit Skripten und so (zumindest zum großen Teil). Macht alles nix, kann ich mich gerade noch dran gewöhnen. Was aber wirklich nervig ist, ist die Weigerung des Tools einen Wechsel des externen Monitors zu erkennen. Wenn man nach dem Booten einmal einen Monitor erkannt hat, dann lässt es sich durch nichts und niemanden davon überzeugen einen Wechsel desselben zur Kenntnis zu nehmen. Das ist normalerweise kein Problem: ich arbeite mit einem 1680x1050-Monitor, welche üblicherweise als erster erkannt wird und wenn ich dann mal zu einem Beamer wechsele, dann muss die Auflösung eben von Hand runtergestellt werden (sowieso sinnvoll, da viele Beamer interessanterweise eine höhere Auflösung melden, als sie nativ darstellen). Wenn ich jetzt allerdings mal ausnahmsweise einen Beamer nach dem Booten ranhänge und dann später zum großen Monitor wechseln will, dann hängt man mit der niedrigeren Auflösung fest. Nach einiger Rumprobiererei hab ich jetzt eine Methode, die das ohne X-Server-Neustart zu beheben scheint:
Warum das so kompliziert ist fehlt mir im Moment jegliche Idee. Evtl. sitzt hier das Problem auch einfach mal wieder vor dem Monitor. Samstag, 1. Mai 2010Neues yeanpypa-ReleaseNach über drei Jahren hab ich's dank der Anregung eines Kollegen doch mal geschafft, meinen kleinen Parser-Generator in Python aufzuarbeiten und eine neue Version zu veröffentlichen. Diese bringt endlich rekursive Regeln und die Möglichkeit Regeln zu gruppieren. Außerdem sollte sie jetzt auch Python 3 kompatibel sein. Geblieben ist natürlich die einfache Definition von Parsern in Form einer (leicht abgewandelten) EBNF direkt in Python. Weil Gelaber über Software ohne Beispiel immer doof ist hier ein Beispiel für das Parsen einer einfachen XML-ähnlichen Sprache: #! /usr/bin/env python # -*- coding: utf-8 -*- from yeanpypa import * test = '<tag><inner attr="Just a test">plah</inner></tag>' text = Word(alpha) name = Combine(alpha + ZeroOrMore(alpha | digit)) value = Literal("\"").hide() + Word(alpha | AnyOf(" \t.,!?+-") | digit) + Literal("\"").hide() attribute = name + Literal('=').hide() + value opening_tag = Group(Literal('<').hide() + Word(alpha) + ZeroOrMore(attribute) + Literal('>').hide()) closing_tag = Group(Literal('').hide() + Word(alpha) + Literal('>').hide()) tag = Recursive() tag.set(text | opening_tag + tag + closing_tag) result = parse(tag, test) print result.getTokens() Die Ausgabe ist hierarchische Liste von Token sein (wobei alle, die mit .hide() markiert werden nicht enthalten sind): [['tag'], [['inner', [['attr', ['Just a test']]]], 'plah', ['inner']], ['tag']] Mittels semantischer Aktionen die an Teile der Regeln gehängt werden kann man komplexere Datenstrukturen on the fly aufbauen statt erst auf der endgültigen Tokenliste zu arbeiten. Bspw. könnte die Regel tag mittels einer semantischen Aktion ein Objekt einer Klasse Tag anlegen, welches strukturierten Zugriff auf die Bestandteile des Tags gibt. Semantische Aktionen sind Funktionen, die die Tokenliste, welche durch die Regel gematcht wurde als Parameter erhalten und darauf beliebige Aktionen ausführen können. Yeanpypa ist so konstruiert, dass der Rückgabewert einer semantischen Aktion anstelle der Token in das Ergebnis übernommen wird. So kann man hier also statt einer Liste von Token mittels einer semantischen Aktion gleich eine Liste von Tag-Objekten erhalten. Die Software findet sich mit dem neuen Release auf bitbucket.org. Doku und Beispiele (auf Englisch) finden sich auf meiner snippets-Webseite. Wenn ich Zeit finde werde ich noch ein paar mehr Beispiele implementieren um die Fähigkeiten von yeanpypa umfassender zu demonstrieren. Freitag, 11. Dezember 2009Jabber-Probleme hinter DSL-RouterInteressante Erfahrung gerade: seit einem Neustart meines Jabber-Servers funktioniert der Kontakt dorthin nicht mehr aus meinem privaten Netz. Ein wenig Sucherei später stellt sich heraus, dass mein DSL-Router (bzw. der darauf laufende DNSMasq) DNS-Queries vom Typ SRV sperrt. Dazu muss man wissen, dass Jabberclients aus dem Domainpart der Jabber-ID mittels eines DNS-Queries ermitteln, auf welchem Server man sich einloggen muss. Sie fragen einfach nach _xmpp-client._tcp.domain.part mit RR-Type SRV und verbinden sich zu dem in der Antwort stehendem Server. Klappt das nicht lösen sie den Domainpart normal auf und verbinden sich dort hin. Nun hatte ich bisher nach einigen Umbauarbeiten immer noch eine Umleitung laufen, die ich aber im Zuge eines Systemupdates mal entfernt habe. Damit klappt das nicht mehr, dass man sich einfach auf die IP aus dem A-Record des Domainparts verbinden kann und den Jabberserver erreicht. In der Welt draußen kein Problem, gibt es doch einen passenden SRV-Record, der verrät, wie's geht. Dummerweise war mein DNSMasq hier mit der Option filterwin2k konfiguriert, was ihn dazu veranlasst (unter anderem) SRV-Records wegzufiltern. Nimmt man die raus funktioniert alles. Wieder was gelernt... Mittwoch, 18. November 2009Drei Stunden war der Laptop krank... (und außerdem russische Propaganda)... jetzt läuft er wieder, Gott sei Dank! Frei nach Wilhelm Busch mach ich grad drei Kreuze. Glücklicherweise habe ich mir mal irgendwann ein Thinkpad gegönnt. Ebenso glücklicherweise war bei IBM jemand mal der Meinung, dass man in eine Tastatur Ablaufkanäle einbauen müsse, falls mal Flüssigkeiten in die Tastatur kommen. Tja... ich bin heute offenbar nicht sooo geschickt und hab es geschafft, ein Glas Cola über meiner Tastatur zu entleeren. Während der größte Teil durch die dafür vorgesehenen Kanäle abgelaufen ist, musste ein relativ kleiner Teil gewaltsam aus dem größtenteils zerlegten Gerät entfernt werden. Nach einer gründlichen Dusche für die Tastatur (die funktioniert plötzlich wieder einwandfrei ohne zu knirschen und so...) scheint soweit wieder alles in Ordnung. Hoffen wir mal das beste... And now for something completely different: Panzerkreuzer Potemkin, ein Meisterwerk russische Propaganda. Gab's heute im Hochschulkino. Und weil das ganze ja ein Stummfilm ist und man heute audio-visuelle Berieselung gewohnt ist, haben sich die Jungs und Mädels vom HFC mit dem Kammerorchester der TU Ilmenau und der Jazzband nuzz zusammengetan und das ganze mit klassischer Musik unterlegt. Sehr interessante Erfahrung. Ich bin ja sonst nicht so für die Klassik, aber so ein komplettes Orchester hat schon was... Samstag, 14. November 2009(K)Ubuntu in eine schon existierende LVM-Struktur installierenIch wollte aus verschiedenen Gründen meiner Linux-Installation mal einen kompletten Neustart gönnen und Kubuntu Karmic Koala frisch aufsetzen. Dabei wollte ich allerdings vorzugsweise darauf verzichten mein aktuell 83 GB schweres Home-Directory komplett aus dem Backup wieder einspielen zu müssen. Gedacht, ... fast getan. Backup wurde natürlich vorher gemacht (ich bin ja nicht wahnsinnig. Jedenfalls nicht wesentlich mehr, als üblich. Außerdem hatte jemand in der näheren Umgebung letztens erst den Fall, dass sämtliche Daten zwar noch da, aber dank Festplattenverschlüsselung mit kaputtem Keystore nicht mehr zugreifbar waren. Das wollte ich mir natürlich ersparen. Erstmal dazu, wie meine Platte grob aussieht: /dev/sda | +---sda1 (/boot) +---sda2 (dm-crypt-Volume) | +---ec_root (/) +---ec_swap (swap) +---ec_home (/home) Soweit, so unpraktisch. Speziell /home sollte unbedingt erhalten bleiben. Erster Anlauf: ganz naiv den Installer gestartet und geschaut, was er so erkennt. Klappt natürlich nicht. Der sieht sda2 und interessiert sich kein bischen für die Innereien. Ok, zweiter Anlauf: Situation herstellen, die dem Installer erlaubt die Innereien zu erkennen: cryptsetup luksOpen /dev/sda2 sda2_crypt lvm vgchange -a y Das erste öffnet das verschlüsselte Volume, das zweite aktiviert die darin enthaltene Volume Group und alle logischen Volumes innerhalb dieser. Das ganze macht man am besten in einer zweiten Konsole, während der Installer gerade auf Nutzereingaben wartet (bspw. wenn er sich grad aufregt, dass er kein Netz findet). Danach kann man die Installation gemütlich weiterlaufen lassen und der Installer wird beruhigt die Volumes erkennen, so dass man in der manuellen Partitionierung (alles andere wäre Unsinn) alles entsprechend wieder zuweisen kann, wie es sein soll. Mir ist hier noch ne Kleinigkeit unangenehm aufgefallen: sda2 wird aus irgendeinem Grund als Swap eingestuft. Aus Sicherheitsgründen habe ich das komplett rausgenommen (also auch nicht als Crypto-Volume definiert), was zur Folge hatte, dass hinterher etwas Handarbeit angesagt war. Wenn die Installation durchgelaufen ist (auch das kann ein Problem sein, wenn das CD-Laufwerk auf einmal I/O-Error wie Kekse verteilt...), dann muss man noch einige kleinere Anpassungen machen um das System bootfähig zu machen. Was ist das Problem? Dadurch, dass das Crypto-Volume von Hand geöffnet wurde und der Installer so nichts davon weiß, fehlt der entsprechende Eintrag in der /etc/crypttab des frisch installierten Systems. Das wiederum führt dazu, dass das initrd nichts über die Verschlüsselung weiß und nicht nach dem Passwort fragt, was wiederum den Bootprozess einfach stillstehen lässt. Blöd. Eine Lösung muss her... Im Prinzip isses einfach: man macht das System von Hand bootfähig. Man mountet noch im laufenden Installersystem /dev und /proc mittels -o bind nach /target/dev und /target/proc (/target ist der Punkt, wo der Installer die Platte einhängt. Wenn nicht: einfach selbst machen), wechselt mittels chroot /target ins installierte System, passt die /etc/crypttab entsprechend an (sprich: man trägt in meinem Fall /dev/sda2 passend ein. Eventuell muss man die /etc/fstab auch noch anfassen, wenn man schonmal da ist.), ruft update-grub und update-initramfs auf, wechselt wieder raus, macht alle Mounts rückgängig und rebootet. Wenn man großes Glück hat, geht's danach. Wenn nicht, dann ist Fehlersuche angesagt. Für diese Sucherei hab ich heute dann doch etwas gebraucht. Vor allem immer unter der Prämisse: bloß nüscht kaputtmachen, sonst musst du das doofe Backup zurückspielen. Mittlerweile läuft alles, nur eine Warnung beim Systemstart bzgl. des Einbindens von /home irritiert mich noch. Hat zwar keine Auswirkungen, aber das will ich auch noch rauskriegen. Später... Donnerstag, 15. Oktober 2009State-Machine-Bibliothek für JavaLetzte Woche waren meine Holde und ich ja im Urlaub und wie das so ist kommt man da ja meist zu den Sachen, für die man sonst nie Zeit hat. Da ich schon seit längerer Zeit mal TDD ausprobieren wollte, war die Zeit also günstig. Herausgekommen ist ein kleines Spielzeug namens StateMachine (kreativere Namensvorschläge werden in den Kommentaren gern entgegengenommen): eine kleine Bibliothek für State Machines in Java. Brauch ich demnächst wahrscheinlich sowieso für verschiedene Dinge, so dass die Zeit nicht vergeudet war. Fazit der testgetriebenen Entwicklung? Anfangs etwas gewöhnungsbedürftig, weil man den klassischen Entwicklungsprozess (Entwickeln-Testen) quasi rumdreht. Für so Sachen wie die Entwicklung von Bibliotheken ist das allerdings ganz interessant, weil man relativ früh merkt, wenn die Schnittstellen murksig zu benutzen sind. Durch das "auf den grünen Test" hin programmieren hat man auch klar abgesteckte Aufgaben für jeden Entwicklungsschritt. Ich werd das also bei der Library (und auch sonst wo sich's lohnt) durchaus weiter ausprobieren. Ach ja: bitbucket.org ist richtig angenehm zu benutzen. So angenehm, dass ich zu faul war, den Kram selbst aufzusetzen. Mercurial ist eh geil. Sag ich ja meiner Frau immer, aber die hört ja nicht... Sonntag, 16. August 2009PostgreSQL weigert sich zu startenKleine Nettigkeit über die ich gerade gestolpert bin. Mein PostgreSQL 8.3 weigert sich zu starten. Er meldet: 2009-08-16 16:12:55 UTC WARNING: could not create listen socket for "localhost" 2009-08-16 16:12:55 UTC FATAL: could not create any TCP/IP sockets Die erste Zeile hat mich dann richtig raten lassen: wenn man mittels debootstrap ein Debian aufgesetzt hat, dann fehlt üblicherweise die /etc/hosts. Deswegen kann er localhost nicht auflösen und weigert sich, zu starten. Ergo: echo "127.0.0.1 localhost" >> /etc/hosts und schon sollte er wollen. Bei der Gelegenheit kann man auch gleich noch die IP des Servers auf den internen Namen mappen (bspw. echo "1.2.3.4 servername" >> /etc/hosts. Wenn man eh schonmal dran ist... Donnerstag, 13. August 2009Sound in Java unter Linux (speziell: JOSM)Man kann ja mittels OSMTracker während des Trackens Audioaufzeichnungen anfertigen um sich gewisse Sachen zu markieren (sehr praktisch zum Beispiel bei der Erfassung von Hausnummern). In JOSM geöffnet werden die Aufzeichnungen als kleine Icons in der Karte angezeigt und können via Klick abgespielt werden. JOSM ist ja ein Java-Programm und will als solches in einer JVM laufen. Nun habe ich standardmäßig Suns JVM installiert (unter Kubuntu: sun-java6-jre). Die hat aus irgendwelchen Gründen Probleme mit der Audioausgabe (Meldung: "Audio device unavailable"). Längeres suchen und probieren brachte mich darauf, die OpenSource-Variante der VM zu installieren (wieder unter Kubuntu: openjdk-6-jre). Die kann Audio. Theoretisch. Praktisch besteht das Problem, dass sie den PulseAudio-Server mit installiert und damit die Audioausgabe endgültig kaputtspielt. Keine Ahnung, was genau das Problem ist. Der Effekt ist folgender: sobald die JVM (oder das Flash-Plugin im Browser. Die scheinen die gleiche Infrastruktur zu nutzen) eine Audio-Ausgabe machen will, startet im Hintergrund der PulseAudio-Server. Danach geht gar kein Sound mehr. Liest man ein wenig im Netz rum, dann hat dieses Programm den Ruf nur Probleme zu verursachen. Die übliche Empfehlung: deinstallieren. Hab ich gemacht. Hilft. Plötzlich geht sowohl in der JVM, als auch im Flash der Sound völlig problemlos. Wenn ich jetzt noch ne Ahnung hätte, wozu das Audioverhinderungsprogramm PulseAudio genau da ist... Sonntag, 9. August 2009Zugriff auf die Dateien eines Windows Mobile Gerätes unter KubuntuMit vereinten Kräften gerade rausgefunden: um auf die Dateien eines Windows-Mobile-Gerätes von Ubuntu (in dem Fall Karmic, sollte aber auch mit Jaunty gehen) aus zugreifen zu können ist das Paket synce-kio-rapip-kde4 notwendig. Dieses enthält den notwendigen KIO-Slave, der einem erlaubt auf das WM6-Gerät zuzugreifen. Dummerweise ist dieses Paket nicht in den Standardquellen vorhanden (weder bei Jaunty, noch beim kommenden Karmic). Man kann sich behelfen, indem man folgendes in der /etc/apt/sources.list nachträgt: deb http://ppa.launchpad.net/synce/ubuntu jaunty main Danach kann man das Paket installieren und durch die Eingabe von rapip:/ in die Adresszeile des Dolphin auf die Dateien des WM6-Gerätes zugreifen. Ja, auch unter Karmic muss man jaunty in der Zeile stehen haben. Für Karmic gibt es (noch?) kein eigenes Repository. Macht aber nix: die Version von Jaunty lässt sich problemlos installieren (zumindest im Moment. Jetzt bloss kein Update!). So, jetzt aufgezeichnete GPS-Tracks von heute ziehen und wieder ein wenig was an OSM tun.
(Seite 1 von 8, insgesamt 115 Einträge)
» nächste Seite
|